31#define M_PI 3.14159265358979323846
44 int lambda,
int n,
double CA_2,
double CB_2,
double alpha_A,
double alpha_B,
45 double k,
double eta,
double *screened_value);
51 int lambda1,
int lambda2,
int n,
double CA_2,
double CB_2,
double alpha_A,
52 double alpha_B,
double k1,
double k2,
double eta,
double *screened_value);
55 int lambda2,
double p,
56 double k1,
double k2);
68 double alpha_A,
double alpha_B,
double k,
71 double *screened_value) {
72 *screened_value = 0.0;
82 double eta = potential->
alpha[iprim];
83 int ni = n + potential->
powers[iprim];
84 double coef = potential->
coeffs[iprim];
88 lambda, ni, CA_2, CB_2, alpha_A, alpha_B, k, eta, &val_i);
89 if (err_code == EXIT_FAILURE) {
93 *screened_value += prefactor * coef * val_i;
104 int lambda,
int n,
double CA_2,
double CB_2,
double alpha_A,
double alpha_B,
105 double k,
double eta,
double *screened_value) {
106 double p = alpha_A + alpha_B + eta;
107 double CA = sqrt(CA_2);
108 double CB = sqrt(CB_2);
113 const double tol = 1e-2;
114 double r0 = (alpha_A * CA + alpha_B * CB) / p;
115 double r0_prev = 0.0;
121 *screened_value = 0.0;
127 }
while (fabs(r0 - r0_prev) > tol);
133 sqrt(
M_PI / p) * pow(r0, n) *
135 exp(-p * r0 * r0 - alpha_A * CA_2 - alpha_B * CB_2 + k * r0) * 0.5 *
136 (1 + erf(sqrt(p) * r0));
145 double numerator, denominator;
153 if (denominator == 0.0) {
154 return (2 * n + 1) / x;
156 return numerator / denominator;
164 double p,
double k) {
167 double a = n + K_ratio * k_r;
172 return sqrt(a / (2.0 * p));
183 double *screened_value) {
184 *screened_value = 0.0;
186 double CA = sqrt(CA_2);
187 double CB = sqrt(CB_2);
193 double alpha_A = bra->
alpha[
i];
194 double coef_i = bra->
coeffs[
i];
195 double k1 = 2 * alpha_A * CA;
201 double alpha_B = ket->
alpha[j];
202 double coef_j = ket->
coeffs[j];
203 double k2 = 2 * alpha_B * CB;
209 double eta = potential->
alpha[k];
210 int ni = n + potential->
powers[k];
211 double coef_k = potential->
coeffs[k];
213 double val_ijk = 0.0;
215 lambda1, lambda2, ni, CA_2, CB_2, alpha_A, alpha_B, k1, k2, eta,
217 if (err_code == EXIT_FAILURE) {
221 *screened_value += coef_i * coef_j * coef_k * val_ijk;
249 int lambda1,
int lambda2,
int n,
double CA_2,
double CB_2,
double alpha_A,
250 double alpha_B,
double k1,
double k2,
double eta,
double *screened_value) {
251 *screened_value = 0.0;
260 double p = alpha_A + alpha_B + eta;
261 double CA = sqrt(CA_2);
262 double CB = sqrt(CB_2);
271 if (lambda1 == 0 && lambda2 == 0) {
273 *screened_value = exp(-alpha_A * CA * CA - alpha_B * CB * CB) *
282 const double tol = 1e-2;
283 double r0 = (alpha_A * CA + alpha_B * CB) / p;
284 double r0_prev = 0.0;
290 *screened_value = 0.0;
296 }
while (fabs(r0 - r0_prev) > tol);
301 *screened_value = sqrt(
M_PI / p) * pow(r0, n) *
304 exp(-eta * r0 * r0 - alpha_A * (r0 - CA) * (r0 - CA) -
305 alpha_B * (r0 - CB) * (r0 - CB)) *
306 0.5 * (1 + erf(sqrt(p) * r0));
315 int lambda2,
double p,
316 double k1,
double k2) {
317 double k1_r = k1 * r;
320 double k2_r = k2 * r;
323 double a = K1_ratio * k1_r + K2_ratio * k2_r + n;
332 return sqrt(a / (2.0 * p));
static void const int const int i
double libgrpp_factorial(int n)
double libgrpp_double_factorial(int n)
double libgrpp_gaussian_integral(int n, double a)
int libgrpp_screening_radial_type2(int lambda1, int lambda2, int n, double CA_2, double CB_2, libgrpp_shell_t *bra, libgrpp_shell_t *ket, libgrpp_potential_t *potential, double *screened_value)
static int screening_radial_type1_integral_primitive(int lambda, int n, double CA_2, double CB_2, double alpha_A, double alpha_B, double k, double eta, double *screened_value)
int libgrpp_screening_radial_type1(int lambda, int n, double CA_2, double CB_2, double alpha_A, double alpha_B, double k, double prefactor, libgrpp_potential_t *potential, double *screened_value)
static double screening_type2_equation_for_maximum(double r, int n, int lambda1, int lambda2, double p, double k1, double k2)
static double modified_bessel_scaled_ratio(int n, double x)
static double screening_type1_equation_for_maximum(double r, int n, int lambda, double p, double k)
static int screening_radial_type2_integral_primitive(int lambda1, int lambda2, int n, double CA_2, double CB_2, double alpha_A, double alpha_B, double k1, double k2, double eta, double *screened_value)
double libgrpp_modified_bessel_scaled(int n, double x)
#define LIBGRPP_ZERO_THRESH