@@ -96,11 +96,12 @@ void FockBuilder::setup(double prec) {
96
96
mrcpp::print::value (3 , " Light speed" , c, " (au)" , 5 );
97
97
mrcpp::print::separator (3 , ' -' );
98
98
auto vz = collectZoraBasePotential ();
99
- this ->kappa = std::make_shared<ZoraOperator>(*vz, c, prec, false );
100
- this ->kappa_inv = std::make_shared<ZoraOperator>(*vz, c, prec, true );
99
+ // chi = kappa - 1. See ZoraOperator.h for more information.
100
+ this ->chi = std::make_shared<ZoraOperator>(*vz, c, prec, false );
101
+ this ->chi_inv = std::make_shared<ZoraOperator>(*vz, c, prec, true );
101
102
this ->zora_base = RankZeroOperator (vz);
102
- this ->kappa ->setup (prec);
103
- this ->kappa_inv ->setup (prec);
103
+ this ->chi ->setup (prec);
104
+ this ->chi_inv ->setup (prec);
104
105
this ->zora_base .setup (prec);
105
106
mrcpp::print::footer (3 , t_zora, 2 );
106
107
};
@@ -120,8 +121,8 @@ void FockBuilder::clear() {
120
121
this ->potential ().clear ();
121
122
this ->perturbation ().clear ();
122
123
if (isZora ()) {
123
- this ->kappa ->clear ();
124
- this ->kappa_inv ->clear ();
124
+ this ->chi ->clear ();
125
+ this ->chi_inv ->clear ();
125
126
this ->zora_base .clear ();
126
127
}
127
128
}
@@ -180,7 +181,7 @@ SCFEnergy FockBuilder::trace(OrbitalVector &Phi, const Nuclei &nucs) {
180
181
181
182
// Kinetic part
182
183
if (isZora ()) {
183
- E_kin = qmoperator::calc_kinetic_trace (momentum (), *this ->kappa , Phi).real ();
184
+ E_kin = qmoperator::calc_kinetic_trace (momentum (), *this ->chi , Phi).real () + qmoperator::calc_kinetic_trace ( momentum (), Phi );
184
185
} else {
185
186
E_kin = qmoperator::calc_kinetic_trace (momentum (), Phi);
186
187
}
@@ -205,7 +206,7 @@ ComplexMatrix FockBuilder::operator()(OrbitalVector &bra, OrbitalVector &ket) {
205
206
206
207
ComplexMatrix T_mat = ComplexMatrix::Zero (bra.size (), ket.size ());
207
208
if (isZora ()) {
208
- T_mat = qmoperator::calc_kinetic_matrix (momentum (), *this ->kappa , bra, ket);
209
+ T_mat = qmoperator::calc_kinetic_matrix (momentum (), *this ->chi , bra, ket) + qmoperator::calc_kinetic_matrix ( momentum () , bra, ket);
209
210
} else {
210
211
T_mat = qmoperator::calc_kinetic_matrix (momentum (), bra, ket);
211
212
}
@@ -247,12 +248,12 @@ OrbitalVector FockBuilder::buildHelmholtzArgumentZORA(OrbitalVector &Phi, Orbita
247
248
double two_cc = 2.0 * c * c;
248
249
MomentumOperator &p = momentum ();
249
250
RankZeroOperator &V = potential ();
250
- RankZeroOperator &kappa = *this ->kappa ;
251
- RankZeroOperator &kappa_m1 = *this ->kappa_inv ;
251
+ RankZeroOperator &chi = *this ->chi ;
252
+ RankZeroOperator &chi_inv = *this ->chi_inv ;
252
253
RankZeroOperator &V_zora = this ->zora_base ;
253
254
254
- RankZeroOperator operOne = 0.5 * tensor::dot (p (kappa ), p);
255
- RankZeroOperator operThree = kappa * V_zora;
255
+ RankZeroOperator operOne = 0.5 * tensor::dot (p (chi ), p);
256
+ RankZeroOperator operThree = chi * V_zora + V_zora;
256
257
operOne.setup (prec);
257
258
operThree.setup (prec);
258
259
@@ -296,7 +297,11 @@ OrbitalVector FockBuilder::buildHelmholtzArgumentZORA(OrbitalVector &Phi, Orbita
296
297
operOne.clear ();
297
298
298
299
Timer t_kappa;
299
- auto out = kappa_m1 (arg);
300
+ mrchem::OrbitalVector out = chi_inv (arg);
301
+ for (int i = 0 ; i < arg.size (); i++) {
302
+ if (not mrcpp::mpi::my_orb (out[i])) continue ;
303
+ out[i].add (1.0 , arg[i]);
304
+ }
300
305
mrcpp::print::time (2 , " Applying kappa inverse" , t_kappa);
301
306
return out;
302
307
}
0 commit comments