Skip to content

Commit c775a66

Browse files
committed
Forgot that tau and laplacian get additional terms due to curvilinear coordinate system
1 parent d1289ef commit c775a66

File tree

1 file changed

+27
-18
lines changed

1 file changed

+27
-18
lines changed

include/integratorxx/atomic_densities/SlaterAtomicShell.hpp

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)