21 #include <smart_ptr.h> 24 #include <integral_decl.h> 26 #ifndef _libint2_src_bin_libint_policyspec_h_ 27 #define _libint2_src_bin_libint_policyspec_h_ 54 StdLibintTDPolicy<CGShell>::init_subobj(
const StdLibintTDPolicy<CGShell>::obj_stype& cgshell,
55 std::vector<StdLibintTDPolicy<CGShell>::subobj_stype>& cgfs);
59 StdLibintTDPolicy<CGShell>::dealloc_subobj(std::vector<StdLibintTDPolicy<CGShell>::subobj_stype>& subobj);
66 template <CartesianAxis Axis>
76 static void init_subobj(
const obj_stype& cgshell, std::vector<subobj_stype>& cgfs)
78 if (cgshell.is_unit()) {
83 for(
unsigned int q=0; q<=am; ++q) {
85 cgf.deriv() = cgshell.deriv();
86 if (cgshell.contracted()) cgf.contract();
91 static void dealloc_subobj(vector<subobj_stype>& subobj)
106 template <
class Oper,
class BFS,
class BraSetType,
class KetSetType,
class AuxQuanta>
111 static const unsigned int np = Oper::Properties::np;
117 static void init_subobj(
const SafePtr<obj_type>& obj, std::vector< SafePtr<subobj_type> >& subobj) {
119 std::vector< SubIterator* > siters_inord;
120 typedef std::vector< std::vector< SubIterator* > > bra_siters_type;
121 typedef std::vector< std::vector< SubIterator* > > ket_siters_type;
122 bra_siters_type bra_siters;
123 ket_siters_type ket_siters;
124 bra_siters.resize(np);
125 ket_siters.resize(np);
129 siters_inord.push_back(&oper_siter);
132 siters_inord.push_back(&aux_siter);
134 for(
unsigned int p=0; p<np; p++) {
135 const unsigned int nbra = obj->bra().num_members(p);
136 bra_siters[p].resize(nbra);
137 for(
unsigned int i=0; i<nbra; i++) {
138 SubIterator* iter = obj->bra().member_subiter(p,i);
139 siters_inord.push_back(iter);
140 bra_siters[p][i] = iter;
143 const unsigned int nket = obj->ket().num_members(p);
144 ket_siters[p].resize(nket);
145 for(
unsigned int i=0; i<nket; i++) {
146 SubIterator* iter = obj->ket().member_subiter(p,i);
147 siters_inord.push_back(iter);
148 ket_siters[p][i] = iter;
152 const unsigned int niters = siters_inord.size();
153 for(
unsigned int it=0; it<niters; it++)
154 siters_inord[it]->init();
157 bool can_iterate =
true;
158 while (can_iterate) {
160 typename Oper::iter_type oper(oper_siter.elem());
161 typename AuxQuanta::iter_type aux(aux_siter.elem());
164 typename BraSetType::iter_type bra;
165 for(
unsigned int p=0; p<np; p++) {
166 const unsigned int nbra = bra_siters[p].size();
167 for(
unsigned int i=0; i<nbra; i++)
168 bra.set_member(bra_siters[p][i]->pelem(), p, i);
172 typename KetSetType::iter_type ket;
173 for(
unsigned int p=0; p<np; p++) {
174 const unsigned int nket = ket_siters[p].size();
175 for(
unsigned int i=0; i<nket; i++)
176 ket.set_member(ket_siters[p][i]->pelem(), p, i);
180 SafePtr<subobj_type> curr_subobj_sptr = subobj_type::Instance(bra,ket,aux,oper);
181 subobj.push_back(curr_subobj_sptr);
184 for(
int it=niters-1; it>=0; it--) {
203 typedef bra_siters_type::iterator bra_iter;
204 typedef ket_siters_type::iterator ket_iter;
205 typedef bra_siters_type::value_type::iterator bra_elem_iter;
206 typedef bra_siters_type::value_type::iterator ket_elem_iter;
208 const bra_iter bi_end = bra_siters.end();
209 for(bra_iter bi=bra_siters.begin(); bi != bi_end; ++bi) {
210 const bra_elem_iter bij_end = bi->end();
211 for(bra_elem_iter bij=bi->begin(); bij != bij_end; ++bij) {
217 const ket_iter ki_end = ket_siters.end();
218 for(ket_iter ki=ket_siters.begin(); ki != ki_end; ++ki) {
219 const ket_elem_iter kij_end = ki->end();
220 for(ket_elem_iter kij=ki->begin(); kij != kij_end; ++kij) {
230 static void dealloc_subobj(std::vector< SafePtr<subobj_type> >& subobj) {
234 #if LIBINT_SUPPORT_ONEBODYINTS 235 template <
typename BFS,
typename Oper,
typename AuxQuanta>
246 static void init_subobj(
const SafePtr<obj_type>& obj, std::vector< SafePtr<subobj_type> >& subobj) {
249 parent_siter gis_siter(obj);
250 for(gis_siter.
init(); gis_siter; ++gis_siter) {
251 const SafePtr<typename obj_type::parent_type::iter_type> curr_gis_ptr = gis_siter.
elem();
252 const SafePtr<subobj_type> curr_subobj =
253 subobj_type::Instance(curr_gis_ptr->bra(), curr_gis_ptr->ket(), *curr_gis_ptr->aux().get(), *curr_gis_ptr->oper().get());
254 subobj.push_back(curr_subobj);
259 static void dealloc_subobj(std::vector< SafePtr< subobj_type > >& subobj) {
262 #endif // LIBINT_SUPPORT_ONEBODYINTS 264 template <
typename BFS,
typename Oper,
typename AuxQuanta>
275 static void init_subobj(
const SafePtr<obj_type>& obj, std::vector< SafePtr<subobj_type> >& subobj) {
278 parent_siter gis_siter(obj);
279 for(gis_siter.
init(); gis_siter; ++gis_siter) {
280 const SafePtr<typename obj_type::parent_type::iter_type> curr_gis_ptr = gis_siter.
elem();
281 const SafePtr<subobj_type> curr_subobj =
282 subobj_type::Instance(curr_gis_ptr->bra(), curr_gis_ptr->ket(), *curr_gis_ptr->aux().get(), *curr_gis_ptr->oper().get());
283 subobj.push_back(curr_subobj);
288 static void dealloc_subobj(std::vector< SafePtr< subobj_type > >& subobj) {
300 typedef typename obj_type::iter_type subobj_type;
307 static void init_subobj(
const SafePtr<obj_type>& obj, std::vector< SafePtr<subobj_type> >& subobj) {
310 parent_siter gis_siter(obj);
311 for(gis_siter.
init(); gis_siter; ++gis_siter) {
312 const SafePtr<typename TwoPRep_11_11<BFS>::parent_type::iter_type> curr_gis_ptr = gis_siter.
elem();
313 const SafePtr<subobj_type> curr_subobj =
314 subobj_type::Instance(curr_gis_ptr->bra(), curr_gis_ptr->ket(), *curr_gis_ptr->aux().get());
315 subobj.push_back(curr_subobj);
328 template <
class BFS,
int K>
332 typedef typename obj_type::iter_type subobj_type;
339 static void init_subobj(
const SafePtr<obj_type>& obj, std::vector< SafePtr<subobj_type> >& subobj) {
342 parent_siter gis_siter(obj);
343 for(gis_siter.
init(); gis_siter; ++gis_siter) {
344 const SafePtr<typename obj_type::parent_type::iter_type> curr_gis_ptr = gis_siter.
elem();
345 const SafePtr<subobj_type> curr_subobj =
346 subobj_type::Instance(curr_gis_ptr->bra(), curr_gis_ptr->ket(), *curr_gis_ptr->aux().get());
347 subobj.push_back(curr_subobj);
360 template <
class BFS,
int K>
364 typedef typename obj_type::iter_type subobj_type;
371 static void init_subobj(
const SafePtr<obj_type>& obj, std::vector< SafePtr<subobj_type> >& subobj) {
374 parent_siter gis_siter(obj);
375 for(gis_siter.
init(); gis_siter; ++gis_siter) {
376 const SafePtr<typename obj_type::parent_type::iter_type> curr_gis_ptr = gis_siter.
elem();
377 const SafePtr<subobj_type> curr_subobj =
378 subobj_type::Instance(curr_gis_ptr->bra(), curr_gis_ptr->ket(), *curr_gis_ptr->aux().get());
379 subobj.push_back(curr_subobj);
403 static void init_subobj(
const SafePtr<obj_type>& obj, std::vector< SafePtr<subobj_type> >& subobj) {
406 parent_siter gis_siter(obj);
407 for(gis_siter.
init(); gis_siter; ++gis_siter) {
408 const SafePtr<typename obj_type::parent_type::iter_type> curr_gis_ptr = gis_siter.
elem();
409 const SafePtr<subobj_type> curr_subobj =
410 subobj_type::Instance(curr_gis_ptr->bra(), curr_gis_ptr->ket(), *curr_gis_ptr->aux().get());
411 subobj.push_back(curr_subobj);
434 static void init_subobj(
const SafePtr<obj_type>& obj, std::vector< SafePtr<subobj_type> >& subobj) {
437 parent_siter gis_siter(obj);
438 for(gis_siter.
init(); gis_siter; ++gis_siter) {
439 const SafePtr<typename obj_type::parent_type::iter_type> curr_gis_ptr = gis_siter.
elem();
440 const SafePtr<subobj_type> curr_subobj =
441 subobj_type::Instance(curr_gis_ptr->bra(), curr_gis_ptr->ket(), *curr_gis_ptr->aux().get());
442 subobj.push_back(curr_subobj);
465 static void init_subobj(
const SafePtr<obj_type>& obj, std::vector< SafePtr<subobj_type> >& subobj) {
468 parent_siter gis_siter(obj);
469 for(gis_siter.
init(); gis_siter; ++gis_siter) {
470 const SafePtr<typename obj_type::parent_type::iter_type> curr_gis_ptr = gis_siter.
elem();
471 const SafePtr<subobj_type> curr_subobj =
472 subobj_type::Instance(curr_gis_ptr->bra(), curr_gis_ptr->ket(), *curr_gis_ptr->aux().get());
473 subobj.push_back(curr_subobj);
static void init_subobj(const obj_stype &cgshell, std::vector< subobj_stype > &cgfs)
This function allocates subobj of obj (e.g. basis functions contained in a shell) ...
Definition: policy_spec.h:76
TypeTraits< obj_type >::StorageType obj_stype
how these objects are stored
Definition: policy_spec.h:303
StorageTraits< T >::StorageType StorageType
By default, use SafePtr to manage these objects.
Definition: traits.h:83
TypeTraits< obj_type >::StorageType obj_stype
how these objects are stored
Definition: policy_spec.h:461
Cartesian components of 3D CGF = 1D CGF.
Definition: bfset.h:425
TypeTraits< obj_type >::StorageType obj_stype
how these objects are stored
Definition: policy_spec.h:367
const iref & elem() const
Returns current element.
Definition: iter.h:164
R1dotR1G12_11_11 – integral over R1dotR1_G12 operator with one bfs for each particle in bra and ket...
Definition: integral_decl.h:39
Defaults definitions for various parameters assumed by Libint.
Definition: algebra.cc:23
GenIntegralSet is a set of integrals over functions derived from BFS.
Definition: integral.h:89
a "shell" of 1D CGFs with quantum number L is a set of 1D CGFs with quantum numbers 0 ...
Definition: bfset.h:614
TypeTraits< obj_type >::StorageType obj_stype
how these objects are stored
Definition: policy_spec.h:430
Generic integral over a two-body operator with one bfs for each particle in bra and ket...
Definition: integral_11_11.h:32
TypeTraits< subobj_type >::StorageType subobj_stype
how these subobjects are stored
Definition: policy_spec.h:337
void init()
Initializes the iterator.
Definition: iter.h:187
Definition: integral_decl.h:38
SubIteratorBase<T> provides a base class for a sub-iterator class for T.
Definition: iter.h:72
TypeTraits< subobj_type >::StorageType subobj_stype
how these subobjects are stored
Definition: policy_spec.h:115
virtual void init()=0
Initializes the iterator.
TypeTraits< obj_type >::StorageType obj_stype
how these objects are stored
Definition: policy_spec.h:113
TypeTraits< obj_type >::StorageType obj_stype
how these objects are stored
Definition: policy_spec.h:242
TypeTraits< subobj_type >::StorageType subobj_stype
how these subobjects are stored
Definition: policy_spec.h:463
TypeTraits< obj_type >::StorageType obj_stype
how these objects are stored
Definition: policy_spec.h:335
TypeTraits< subobj_type >::StorageType subobj_stype
how these subobjects are stored
Definition: policy_spec.h:244
Definition: integral_decl.h:35
Oper is OperSet characterized by properties Props.
Definition: oper.h:82
Generic integral over a one-body operator with one bfs for each particle in bra and ket...
Definition: integral_1_1.h:32
TypeTraits< subobj_type >::StorageType subobj_stype
how these subobjects are stored
Definition: policy_spec.h:432
TypeTraits< subobj_type >::StorageType subobj_stype
how these subobjects are stored
Definition: policy_spec.h:73
Definition: integral_decl.h:41
Iterator provides a base class for all object iterator classes.
Definition: iter.h:44
TypeTraits< subobj_type >::StorageType subobj_stype
how these subobjects are stored
Definition: policy_spec.h:369
TypeTraits< subobj_type >::StorageType subobj_stype
how these subobjects are stored
Definition: policy_spec.h:273
TypeTraits< subobj_type >::StorageType subobj_stype
how these subobjects are stored
Definition: policy_spec.h:305
R2dotR2G12_11_11 – integral over R2dotR2_G12 operator with one bfs for each particle in bra and ket...
Definition: integral_decl.h:40
TypeTraits< obj_type >::StorageType obj_stype
how these objects are stored
Definition: policy_spec.h:399
TypeTraits< subobj_type >::StorageType subobj_stype
how these subobjects are stored
Definition: policy_spec.h:401
TypeTraits< obj_type >::StorageType obj_stype
how these objects are stored
Definition: policy_spec.h:271
Definition: integral_decl.h:37
TypeTraits< obj_type >::StorageType obj_stype
how these objects are stored
Definition: policy_spec.h:71