45#define M_PI 3.14159265358979323846
49 double *A,
int n_cart_A,
int *cart_list_A,
double alpha_A,
double *B,
50 int n_cart_B,
int *cart_list_B,
double alpha_B,
double *C,
51 double (*potential)(
double r,
void *params),
void *potential_params,
56 double alpha_B,
double *rpp_origin,
double rpp_alpha,
double *rpp_matrix);
82 double *charge_origin,
int charge,
85 double *coulomb_matrix) {
91 double *buf = calloc(size_A * size_B,
sizeof(
double));
93 memset(coulomb_matrix, 0, size_A * size_B *
sizeof(
double));
97 double coef_A_i = shell_A->
coeffs[
i];
100 double coef_B_j = shell_B->
coeffs[j];
102 if (fabs(coef_A_i * coef_B_j) < 1e-13) {
110 shell_A, shell_A->
alpha[
i], shell_B, shell_B->
alpha[j],
111 charge_origin, 0.0, buf);
113 for (
int k = 0; k < size_A * size_B; k++) {
114 buf[k] *= (-1) * charge;
129 double (*electrostatic_potential_fun)(double,
void *) = NULL;
135 params[1] = model_params[0];
138 params[1] = model_params[0];
141 params[1] = model_params[0];
142 params[2] = model_params[1];
145 params[1] = model_params[0];
146 params[2] = model_params[1];
147 params[3] = model_params[2];
157 charge_origin, electrostatic_potential_fun, params, buf);
159 printf(
"LIBGRPP: unknown finite nuclear charge distribution model!\n");
163 libgrpp_daxpy(size_A * size_B, coef_A_i * coef_B_j, buf, coulomb_matrix);
177 double *charge_origin,
179 double *coulomb_matrix) {
194 double *charge_origin,
195 int charge,
double r_rms,
196 double *coulomb_matrix) {
203 params, coulomb_matrix);
215 int charge,
double r_rms,
double *coulomb_matrix) {
234 int charge,
double fermi_param_c,
double fermi_param_a,
235 double *coulomb_matrix) {
238 params[1] = fermi_param_c;
239 params[2] = fermi_param_a;
256 int charge,
double param_c,
double param_a,
double param_k,
257 double *coulomb_matrix) {
266 params, coulomb_matrix);
276 double Z = ((
double *)params)[0];
282 double Z = ((
double *)params)[0];
283 double R_rms = ((
double *)params)[1];
289 double Z = ((
double *)params)[0];
290 double R_rms = ((
double *)params)[1];
296 double Z = ((
double *)params)[0];
297 double c = ((
double *)params)[1];
298 double a = ((
double *)params)[2];
304 double Z = ((
double *)params)[0];
305 double c = ((
double *)params)[1];
306 double a = ((
double *)params)[2];
307 double k = ((
double *)params)[3];
static void const int const int i
int libgrpp_is_initialized()
void libgrpp_nuclear_attraction_integrals_fermi_bubble_model(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *charge_origin, int charge, double param_c, double param_a, double param_k, double *coulomb_matrix)
void libgrpp_nuclear_attraction_integrals_point_charge(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *charge_origin, int charge, double *coulomb_matrix)
static double wrapper_coulomb_potential_point(double r, void *params)
void libgrpp_nuclear_attraction_integrals_gaussian_model(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *charge_origin, int charge, double r_rms, double *coulomb_matrix)
void libgrpp_evaluate_radially_local_potential_integral_primitive_gaussians(double *A, int n_cart_A, int *cart_list_A, double alpha_A, double *B, int n_cart_B, int *cart_list_B, double alpha_B, double *C, double(*potential)(double r, void *params), void *potential_params, double *matrix)
void libgrpp_nuclear_attraction_integrals(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *charge_origin, int charge, int nuclear_model, double *model_params, double *coulomb_matrix)
static double wrapper_coulomb_potential_fermi_bubble(double r, void *params)
static double wrapper_coulomb_potential_gaussian(double r, void *params)
void libgrpp_evaluate_rpp_type1_mmd_n1_primitive_shell_pair(libgrpp_shell_t *shell_A, double alpha_A, libgrpp_shell_t *shell_B, double alpha_B, double *rpp_origin, double rpp_alpha, double *rpp_matrix)
void libgrpp_nuclear_attraction_integrals_fermi_model(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *charge_origin, int charge, double fermi_param_c, double fermi_param_a, double *coulomb_matrix)
static double wrapper_coulomb_potential_ball(double r, void *params)
void libgrpp_nuclear_attraction_integrals_charged_ball(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *charge_origin, int charge, double r_rms, double *coulomb_matrix)
static double wrapper_coulomb_potential_fermi(double r, void *params)
double libgrpp_coulomb_potential_ball(double r, double Z, double R_rms)
double libgrpp_coulomb_potential_gaussian(double r, double Z, double R_rms)
double libgrpp_coulomb_potential_point(double r, double Z)
double libgrpp_coulomb_potential_fermi_bubble(double r, double Z, double c, double a, double k)
double libgrpp_coulomb_potential_fermi(double r, double Z, double c, double a)
int libgrpp_get_shell_size(libgrpp_shell_t *shell)
void libgrpp_daxpy(int n, double a, double *x, double *y)
@ LIBGRPP_NUCLEAR_MODEL_POINT_CHARGE
@ LIBGRPP_NUCLEAR_MODEL_CHARGED_BALL
@ LIBGRPP_NUCLEAR_MODEL_FERMI
@ LIBGRPP_NUCLEAR_MODEL_FERMI_BUBBLE
@ LIBGRPP_NUCLEAR_MODEL_POINT_CHARGE_NUMERICAL
@ LIBGRPP_NUCLEAR_MODEL_GAUSSIAN