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 p,
double k) {
146 double K_ratio = 0.0;
155 double a = n + K_ratio * k * r;
160 return sqrt(a / (2.0 * p));
171 double *screened_value) {
172 *screened_value = 0.0;
174 double CA = sqrt(CA_2);
175 double CB = sqrt(CB_2);
181 double alpha_A = bra->
alpha[
i];
182 double coef_i = bra->
coeffs[
i];
183 double k1 = 2 * alpha_A * CA;
189 double alpha_B = ket->
alpha[j];
190 double coef_j = ket->
coeffs[j];
191 double k2 = 2 * alpha_B * CB;
197 double eta = potential->
alpha[k];
198 int ni = n + potential->
powers[k];
199 double coef_k = potential->
coeffs[k];
201 double val_ijk = 0.0;
203 lambda1, lambda2, ni, CA_2, CB_2, alpha_A, alpha_B, k1, k2, eta,
205 if (err_code == EXIT_FAILURE) {
209 *screened_value += coef_i * coef_j * coef_k * val_ijk;
237 int lambda1,
int lambda2,
int n,
double CA_2,
double CB_2,
double alpha_A,
238 double alpha_B,
double k1,
double k2,
double eta,
double *screened_value) {
239 *screened_value = 0.0;
248 double p = alpha_A + alpha_B + eta;
249 double CA = sqrt(CA_2);
250 double CB = sqrt(CB_2);
259 if (lambda1 == 0 && lambda2 == 0) {
261 *screened_value = exp(-alpha_A * CA * CA - alpha_B * CB * CB) *
270 const double tol = 1e-2;
271 double r0 = (alpha_A * CA + alpha_B * CB) / p;
272 double r0_prev = 0.0;
278 *screened_value = 0.0;
284 }
while (fabs(r0 - r0_prev) > tol);
289 *screened_value = sqrt(
M_PI / p) * pow(r0, n) *
292 exp(-eta * r0 * r0 - alpha_A * (r0 - CA) * (r0 - CA) -
293 alpha_B * (r0 - CB) * (r0 - CB)) *
294 0.5 * (1 + erf(sqrt(p) * r0));
303 int lambda2,
double p,
304 double k1,
double k2) {
305 double K1_ratio = 0.0;
306 double k1_r = k1 * r;
315 double K2_ratio = 0.0;
316 double k2_r = k2 * r;
325 double a = K1_ratio * k1_r + K2_ratio * k2_r + n;
334 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 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