@@ -39,23 +39,27 @@ inline void insert_columns(const MAT1& small, MAT2& big, int offset_c)
39
39
}
40
40
} // namespace MatrixOperators
41
41
42
- CompositeSPOSet::CompositeSPOSet (const std::string& my_name) : SPOSet(my_name)
42
+ template <typename T>
43
+ CompositeSPOSet<T>::CompositeSPOSet(const std::string& my_name) : SPOSetT<T>(my_name)
43
44
{
44
- OrbitalSetSize = 0 ;
45
+ SPOSet:: OrbitalSetSize = 0 ;
45
46
component_offsets.reserve (4 );
46
47
}
47
48
48
- CompositeSPOSet::CompositeSPOSet (const CompositeSPOSet& other) : SPOSet(other)
49
+ template <typename T>
50
+ CompositeSPOSet<T>::CompositeSPOSet(const CompositeSPOSet& other) : SPOSet(other)
49
51
{
50
52
for (auto & element : other.components )
51
53
{
52
54
this ->add (element->makeClone ());
53
55
}
54
56
}
55
57
56
- CompositeSPOSet::~CompositeSPOSet () = default ;
58
+ template <typename T>
59
+ CompositeSPOSet<T>::~CompositeSPOSet () = default ;
57
60
58
- void CompositeSPOSet::add (std::unique_ptr<SPOSet> component)
61
+ template <typename T>
62
+ void CompositeSPOSet<T>::add(std::unique_ptr<SPOSet> component)
59
63
{
60
64
if (components.empty ())
61
65
component_offsets.push_back (0 ); // add 0
@@ -67,11 +71,12 @@ void CompositeSPOSet::add(std::unique_ptr<SPOSet> component)
67
71
component_laplacians.emplace_back (norbs);
68
72
component_spin_gradients.emplace_back (norbs);
69
73
70
- OrbitalSetSize += norbs;
71
- component_offsets.push_back (OrbitalSetSize);
74
+ SPOSet:: OrbitalSetSize += norbs;
75
+ component_offsets.push_back (SPOSet:: OrbitalSetSize);
72
76
}
73
77
74
- void CompositeSPOSet::report ()
78
+ template <typename T>
79
+ void CompositeSPOSet<T>::report()
75
80
{
76
81
app_log () << " CompositeSPOSet" << std::endl;
77
82
app_log () << " ncomponents = " << components.size () << std::endl;
@@ -83,9 +88,11 @@ void CompositeSPOSet::report()
83
88
}
84
89
}
85
90
86
- std::unique_ptr<SPOSet> CompositeSPOSet::makeClone () const { return std::make_unique<CompositeSPOSet>(*this ); }
91
+ template <typename T>
92
+ std::unique_ptr<SPOSetT<T>> CompositeSPOSet<T>::makeClone() const { return std::make_unique<CompositeSPOSet>(*this ); }
87
93
88
- void CompositeSPOSet::evaluateValue (const ParticleSet& P, int iat, ValueVector& psi)
94
+ template <typename T>
95
+ void CompositeSPOSet<T>::evaluateValue(const ParticleSet& P, int iat, ValueVector& psi)
89
96
{
90
97
int n = 0 ;
91
98
for (int c = 0 ; c < components.size (); ++c)
@@ -98,7 +105,8 @@ void CompositeSPOSet::evaluateValue(const ParticleSet& P, int iat, ValueVector&
98
105
}
99
106
}
100
107
101
- void CompositeSPOSet::evaluateVGL (const ParticleSet& P, int iat, ValueVector& psi, GradVector& dpsi, ValueVector& d2psi)
108
+ template <typename T>
109
+ void CompositeSPOSet<T>::evaluateVGL(const ParticleSet& P, int iat, ValueVector& psi, GradVector& dpsi, ValueVector& d2psi)
102
110
{
103
111
int n = 0 ;
104
112
for (int c = 0 ; c < components.size (); ++c)
@@ -115,12 +123,13 @@ void CompositeSPOSet::evaluateVGL(const ParticleSet& P, int iat, ValueVector& ps
115
123
}
116
124
}
117
125
118
- void CompositeSPOSet::evaluateVGL_spin (const ParticleSet& P,
119
- int iat,
120
- ValueVector& psi,
121
- GradVector& dpsi,
122
- ValueVector& d2psi,
123
- ValueVector& dspin_psi)
126
+ template <typename T>
127
+ void CompositeSPOSet<T>::evaluateVGL_spin(const ParticleSet& P,
128
+ int iat,
129
+ ValueVector& psi,
130
+ GradVector& dpsi,
131
+ ValueVector& d2psi,
132
+ ValueVector& dspin_psi)
124
133
{
125
134
int n = 0 ;
126
135
for (int c = 0 ; c < components.size (); ++c)
@@ -139,12 +148,13 @@ void CompositeSPOSet::evaluateVGL_spin(const ParticleSet& P,
139
148
}
140
149
}
141
150
142
- void CompositeSPOSet::evaluate_notranspose (const ParticleSet& P,
143
- int first,
144
- int last,
145
- ValueMatrix& logdet,
146
- GradMatrix& dlogdet,
147
- ValueMatrix& d2logdet)
151
+ template <typename T>
152
+ void CompositeSPOSet<T>::evaluate_notranspose(const ParticleSet& P,
153
+ int first,
154
+ int last,
155
+ ValueMatrix& logdet,
156
+ GradMatrix& dlogdet,
157
+ ValueMatrix& d2logdet)
148
158
{
149
159
const int nat = last - first;
150
160
for (int c = 0 ; c < components.size (); ++c)
@@ -161,12 +171,13 @@ void CompositeSPOSet::evaluate_notranspose(const ParticleSet& P,
161
171
}
162
172
}
163
173
164
- void CompositeSPOSet::evaluate_notranspose (const ParticleSet& P,
165
- int first,
166
- int last,
167
- ValueMatrix& logdet,
168
- GradMatrix& dlogdet,
169
- HessMatrix& grad_grad_logdet)
174
+ template <typename T>
175
+ void CompositeSPOSet<T>::evaluate_notranspose(const ParticleSet& P,
176
+ int first,
177
+ int last,
178
+ ValueMatrix& logdet,
179
+ GradMatrix& dlogdet,
180
+ HessMatrix& grad_grad_logdet)
170
181
{
171
182
const int nat = last - first;
172
183
for (int c = 0 ; c < components.size (); ++c)
@@ -183,13 +194,14 @@ void CompositeSPOSet::evaluate_notranspose(const ParticleSet& P,
183
194
}
184
195
}
185
196
186
- void CompositeSPOSet::evaluate_notranspose (const ParticleSet& P,
187
- int first,
188
- int last,
189
- ValueMatrix& logdet,
190
- GradMatrix& dlogdet,
191
- HessMatrix& grad_grad_logdet,
192
- GGGMatrix& grad_grad_grad_logdet)
197
+ template <typename T>
198
+ void CompositeSPOSet<T>::evaluate_notranspose(const ParticleSet& P,
199
+ int first,
200
+ int last,
201
+ ValueMatrix& logdet,
202
+ GradMatrix& dlogdet,
203
+ HessMatrix& grad_grad_logdet,
204
+ GGGMatrix& grad_grad_grad_logdet)
193
205
{
194
206
not_implemented (" evaluate_notranspose(P,first,last,logdet,dlogdet,ddlogdet,dddlogdet)" );
195
207
}
@@ -204,7 +216,7 @@ std::unique_ptr<SPOSet> CompositeSPOSetBuilder::createSPOSetFromXML(xmlNodePtr c
204
216
return nullptr ;
205
217
}
206
218
207
- auto spo_now = std::make_unique<CompositeSPOSet>(getXMLAttributeValue (cur, " name" ));
219
+ auto spo_now = std::make_unique<CompositeSPOSet<ValueType> >(getXMLAttributeValue (cur, " name" ));
208
220
for (int i = 0 ; i < spolist.size (); ++i)
209
221
{
210
222
const SPOSet* spo = sposet_builder_factory_.getSPOSet (spolist[i]);
@@ -219,4 +231,11 @@ std::unique_ptr<SPOSet> CompositeSPOSetBuilder::createSPOSet(xmlNodePtr cur, SPO
219
231
return createSPOSetFromXML (cur);
220
232
}
221
233
234
+ #if !defined(MIXED_PRECISION)
235
+ template class CompositeSPOSet <double >;
236
+ template class CompositeSPOSet <std::complex<double >>;
237
+ #endif
238
+ template class CompositeSPOSet <float >;
239
+ template class CompositeSPOSet <std::complex<float >>;
240
+
222
241
} // namespace qmcplusplus
0 commit comments