@@ -129,23 +129,27 @@ class SlaterTypeAtomicShell {
129129 }
130130
131131 // / Helper to evaluate electron density gradient
132- double evaluate_tau (const double *dorbs, const int_container &occs) {
132+ double evaluate_tau (double r, const double *orbs, const double *dorbs,
133+ const int_container &occs) {
133134 double tau = 0.0 ;
134135 for (size_t iorb = 0 ; iorb < occs.size (); iorb++) {
135- tau += occs[iorb] * dorbs[iorb] * dorbs[iorb];
136+ tau += occs[iorb] * (dorbs[iorb] * dorbs[iorb] +
137+ angular_momentum_ * (angular_momentum_ + 1 ) *
138+ orbs[iorb] * orbs[iorb] / (r * r));
136139 }
137140 tau *= 0.5 ;
138141 return tau;
139142 }
140143
141144 // / Helper to evaluate electron density laplacian
142- double evaluate_density_laplacian (const double *orbs , const double *dorbs ,
143- const double *lorbs,
145+ double evaluate_density_laplacian (double r , const double *orbs ,
146+ const double *dorbs, const double * lorbs,
144147 const int_container &occs) {
145148 double lapl = 0.0 ;
146149 for (size_t iorb = 0 ; iorb < occs.size (); iorb++) {
147150 lapl += 2.0 * occs[iorb] *
148- (dorbs[iorb] * dorbs[iorb] + orbs[iorb] * lorbs[iorb]);
151+ (dorbs[iorb] * dorbs[iorb] + orbs[iorb] * lorbs[iorb] +
152+ 2.0 / r * orbs[iorb] * dorbs[iorb]);
149153 }
150154 return lapl;
151155 }
@@ -173,27 +177,28 @@ class SlaterTypeAtomicShell {
173177 }
174178
175179 // / Evaluates alpha electron density from computed orbitals
176- double evaluate_alpha_tau (const double *dorbs) {
177- return evaluate_tau (dorbs, alpha_occupations_);
180+ double evaluate_alpha_tau (double r, const double *orbs, const double *dorbs) {
181+ return evaluate_tau (r, orbs, dorbs, alpha_occupations_);
178182 }
179183
180184 // / Evaluates beta electron density from computed orbitals
181- double evaluate_beta_tau (const double *dorbs) {
182- return evaluate_tau (dorbs, beta_occupations_);
185+ double evaluate_beta_tau (double r, const double *orbs, const double *dorbs) {
186+ return evaluate_tau (r, orbs, dorbs, beta_occupations_);
183187 }
184188
185189 // / Evaluates alpha electron density from computed orbitals
186- double evaluate_alpha_density_laplacian (const double *orbs,
190+ double evaluate_alpha_density_laplacian (double r, const double *orbs,
187191 const double *dorbs,
188192 const double *lorbs) {
189- return evaluate_density_laplacian (orbs, dorbs, lorbs, alpha_occupations_);
193+ return evaluate_density_laplacian (r, orbs, dorbs, lorbs,
194+ alpha_occupations_);
190195 }
191196
192197 // / Evaluates beta electron density from computed orbitals
193- double evaluate_beta_density_laplacian (const double *orbs,
198+ double evaluate_beta_density_laplacian (double r, const double *orbs,
194199 const double *dorbs,
195200 const double *lorbs) {
196- return evaluate_density_laplacian (orbs, dorbs, lorbs, beta_occupations_);
201+ return evaluate_density_laplacian (r, orbs, dorbs, lorbs, beta_occupations_);
197202 }
198203
199204 // / Return angular momentum
@@ -333,19 +338,23 @@ class SlaterEvaluator {
333338 double evaluate_alpha_tau (double r) {
334339 double tau = 0.0 ;
335340 for (auto shell : atom_.shells ()) {
341+ shell.evaluate_basis_functions (r, bf_.data ());
336342 shell.evaluate_basis_function_gradients (r, df_.data ());
343+ shell.evaluate_orbitals (bf_.data (), orbs_.data ());
337344 shell.evaluate_orbitals (df_.data (), dorbs_.data ());
338- tau += shell.evaluate_alpha_tau (dorbs_.data ());
345+ tau += shell.evaluate_alpha_tau (r, orbs_. data (), dorbs_.data ());
339346 }
340347 return tau;
341348 }
342349 // / Evaluate kinetic energy density
343350 double evaluate_beta_tau (double r) {
344351 double tau = 0.0 ;
345352 for (auto shell : atom_.shells ()) {
353+ shell.evaluate_basis_functions (r, bf_.data ());
346354 shell.evaluate_basis_function_gradients (r, df_.data ());
355+ shell.evaluate_orbitals (bf_.data (), orbs_.data ());
347356 shell.evaluate_orbitals (df_.data (), dorbs_.data ());
348- tau += shell.evaluate_beta_tau (dorbs_.data ());
357+ tau += shell.evaluate_beta_tau (r, orbs_. data (), dorbs_.data ());
349358 }
350359 return tau;
351360 }
@@ -360,7 +369,7 @@ class SlaterEvaluator {
360369 shell.evaluate_orbitals (df_.data (), dorbs_.data ());
361370 shell.evaluate_orbitals (lf_.data (), lorbs_.data ());
362371 lapl += shell.evaluate_alpha_density_laplacian (
363- orbs_.data (), dorbs_.data (), lorbs_.data ());
372+ r, orbs_.data (), dorbs_.data (), lorbs_.data ());
364373 }
365374 return lapl;
366375 }
@@ -374,8 +383,8 @@ class SlaterEvaluator {
374383 shell.evaluate_orbitals (bf_.data (), orbs_.data ());
375384 shell.evaluate_orbitals (df_.data (), dorbs_.data ());
376385 shell.evaluate_orbitals (lf_.data (), lorbs_.data ());
377- lapl += shell.evaluate_beta_density_laplacian (orbs_. data (), dorbs_. data (),
378- lorbs_.data ());
386+ lapl += shell.evaluate_beta_density_laplacian (
387+ r, orbs_. data (), dorbs_. data (), lorbs_.data ());
379388 }
380389 return lapl;
381390 }
0 commit comments