@@ -253,11 +253,21 @@ OrbitalVector FockBuilder::buildHelmholtzArgumentZORA(OrbitalVector &Phi, Orbita
253
253
RankZeroOperator &kappa_m1 = *this ->kappa_inv ;
254
254
RankZeroOperator &V_zora = this ->zora_base ;
255
255
256
- std::shared_ptr<mrcpp::BSOperator<3 >> dd = std::make_shared<mrcpp::BSOperator<3 >>(*MRA, true );
257
- NablaOperator nabla (dd, true );
256
+ std::shared_ptr<mrcpp::BSOperator<3 >> dd = std::make_shared<mrcpp::BSOperator<3 >>(*MRA, 1 );
257
+ std::shared_ptr<mrcpp::BSOperator<3 >> dd2 = std::make_shared<mrcpp::BSOperator<3 >>(*MRA, 2 );
258
+
259
+ NablaOperator nabla (dd, false ); // gradient operator
260
+ NablaOperator nabla2 (dd2, false ); // containts second derivatives
258
261
nabla.setup (prec);
262
+ nabla2.setup (prec);
263
+
264
+ RankOneOperator nabla_kappa = nabla (kappa);
265
+ RankZeroOperator operOne = 0.5 * (nabla_kappa[0 ] * nabla[0 ] + nabla_kappa[1 ] * nabla[1 ] + nabla_kappa[2 ] * nabla[2 ]
266
+ + kappa * nabla2[0 ] + kappa * nabla2[1 ] + kappa * nabla2[2 ]);
267
+ // + nabla2[0] + nabla2[1] + nabla2[2]);
259
268
260
- RankZeroOperator operOne = 0.5 * tensor::dot (nabla (kappa), p);
269
+ // this works much better than the above. Also, removing the laplacian terms on line 266 appears to be equivalent to the line below but why?
270
+ // RankZeroOperator operOne = 0.5 * (nabla_kappa[0](nabla[0]) + nabla_kappa[1](nabla[1]) + nabla_kappa[2](nabla[2]));
261
271
RankZeroOperator operThree = kappa * V_zora + V_zora;
262
272
operOne.setup (prec);
263
273
operThree.setup (prec);
@@ -309,6 +319,7 @@ OrbitalVector FockBuilder::buildHelmholtzArgumentZORA(OrbitalVector &Phi, Orbita
309
319
}
310
320
mrcpp::print::time (2 , " Applying kappa inverse" , t_kappa);
311
321
nabla.clear ();
322
+ nabla2.clear ();
312
323
return out;
313
324
}
314
325
0 commit comments