(git:ed6f26b)
Loading...
Searching...
No Matches
grpp_fortran.c
Go to the documentation of this file.
1/*----------------------------------------------------------------------------*/
2/* CP2K: A general program to perform molecular dynamics simulations */
3/* Copyright 2000-2025 CP2K developers group <https://cp2k.org> */
4/* */
5/* SPDX-License-Identifier: MIT */
6/*----------------------------------------------------------------------------*/
7
8/*
9 * libgrpp - a library for the evaluation of integrals over
10 * generalized relativistic pseudopotentials.
11 *
12 * Copyright (C) 2021-2023 Alexander Oleynichenko
13 */
14
15/*
16 * Wrappers for the LIBGRPP subroutines to be used from Fortran projects.
17 *
18 * C99 Fortran
19 * --------------------
20 * int32_t integer(4)
21 * double real(8)
22 */
23
24#include <math.h>
25#include <stdint.h>
26#include <stdio.h>
27#include <stdlib.h>
28
29#include "grpp_factorial.h"
30#include "libgrpp.h"
31
32/*
33 * Fine-tuning of the LIBGRPP internal parameters.
34 */
35
37
38void libgrpp_set_radial_tolerance_(const double *tolerance) {
40}
41
45
46void libgrpp_set_modified_bessel_tolerance_(const double *tolerance) {
48}
49
50void libgrpp_set_cartesian_order_(const int32_t *order) {
52}
53
54/*
55 * initialization and finalization
56 */
58
60
61/*
62 * Type 1 RPP integrals (local term)
63 */
64
66 // contracted Gaussian A
67 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
68 double *alpha_A,
69 // contracted Gaussian B
70 double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B,
71 double *alpha_B,
72 // pseudopotential
73 double *rpp_origin, int32_t *rpp_num_primitives, int32_t *rpp_powers,
74 double *rpp_coeffs, double *rpp_alpha,
75 // answer
76 double *matrix) {
77 int *pot_powers_int = (int *)calloc(*rpp_num_primitives, sizeof(int));
78
79 for (int i = 0; i < *rpp_num_primitives; i++) {
80 pot_powers_int[i] = rpp_powers[i];
81 }
82
84 0, 0, *rpp_num_primitives, pot_powers_int, rpp_coeffs, rpp_alpha);
85 libgrpp_shell_t *shell_A =
86 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
87 libgrpp_shell_t *shell_B =
88 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
89
90 libgrpp_type1_integrals(shell_A, shell_B, rpp_origin, pot, matrix);
91
92 libgrpp_delete_shell(shell_A);
93 libgrpp_delete_shell(shell_B);
95 free(pot_powers_int);
96}
97
98/*
99 * Type 2 RPP integrals (semilocal terms with projectors)
100 */
101
103 // contracted Gaussian A
104 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
105 double *alpha_A, double *origin_B,
106 // contracted Gaussian B
107 int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B,
108 // pseudopotential
109 double *pot_origin, int32_t *pot_L, int32_t *pot_num_primitives,
110 int32_t *pot_powers, double *pot_coeffs, double *pot_alpha,
111 // answer
112 double *matrix) {
113 int *pot_powers_int = (int *)calloc(*pot_num_primitives, sizeof(int));
114
115 for (int i = 0; i < *pot_num_primitives; i++) {
116 pot_powers_int[i] = pot_powers[i];
117 }
118
120 *pot_L, 0, *pot_num_primitives, pot_powers_int, pot_coeffs, pot_alpha);
121 libgrpp_shell_t *shell_A =
122 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
123 libgrpp_shell_t *shell_B =
124 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
125
126 libgrpp_type2_integrals(shell_A, shell_B, pot_origin, pot, matrix);
127
128 libgrpp_delete_shell(shell_A);
129 libgrpp_delete_shell(shell_B);
131 free(pot_powers_int);
132}
133
134/*
135 * Effective spin-orbit operator ("Type 3") RPP integrals (semilocal terms with
136 * projectors)
137 */
138
140 // contracted Gaussian A
141 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
142 double *alpha_A,
143 // contracted Gaussian B
144 double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B,
145 double *alpha_B,
146 // pseudopotential
147 double *pot_origin, int32_t *pot_L, int32_t *pot_num_primitives,
148 int32_t *pot_powers, double *pot_coeffs, double *pot_alpha,
149 // answer
150 double *so_x_matrix, double *so_y_matrix, double *so_z_matrix) {
151 int *pot_powers_int = (int *)calloc(*pot_num_primitives, sizeof(int));
152
153 for (int i = 0; i < *pot_num_primitives; i++) {
154 pot_powers_int[i] = pot_powers[i];
155 }
156
157 /*
158 * construct RPP structure
159 */
161 *pot_L, 0, *pot_num_primitives, pot_powers_int, pot_coeffs, pot_alpha);
162
163 /*
164 * construct shells
165 */
166 libgrpp_shell_t *shell_A =
167 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
168 libgrpp_shell_t *shell_B =
169 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
170
171 libgrpp_spin_orbit_integrals(shell_A, shell_B, pot_origin, pot, so_x_matrix,
172 so_y_matrix, so_z_matrix);
173
174 libgrpp_delete_shell(shell_A);
175 libgrpp_delete_shell(shell_B);
177 free(pot_powers_int);
178}
179
180/**
181 * Outercore RPP integrals (non-local terms with projectors onto outercore
182 * spinors)
183 *
184 * Part 1: integration of the first non-local term:
185 * U*|nlj><nlj| + |nlj><nlj|*U
186 */
188 // contracted Gaussian A
189 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
190 double *alpha_A, double *origin_B,
191 // contracted Gaussian B
192 int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B,
193 // pseudopotential for the outercore shell LJ
194 double *pot_origin, int32_t *pot_L, int32_t *pot_J,
195 int32_t *pot_num_primitives, int32_t *pot_powers, double *pot_coeffs,
196 double *pot_alpha,
197 // expansion of the outercore shell LJ
198 int32_t *oc_shell_num_primitives, double *oc_shell_coeffs,
199 double *oc_shell_alpha,
200 // answer
201 double *arep_matrix, double *so_x_matrix, double *so_y_matrix,
202 double *so_z_matrix) {
204 libgrpp_shell_t * shell_A, libgrpp_shell_t * shell_B, double *C,
205 libgrpp_potential_t *oc_potential, libgrpp_shell_t *oc_shell,
206 double *arep_matrix, double *so_x_matrix, double *so_y_matrix,
207 double *so_z_matrix);
208
209 /*
210 * array conversion: Fortran -> C
211 */
212 int *pot_powers_int = (int *)calloc(*pot_num_primitives, sizeof(int));
213 for (int i = 0; i < *pot_num_primitives; i++) {
214 pot_powers_int[i] = pot_powers[i];
215 }
216
217 /*
218 * construct shells
219 */
220 libgrpp_shell_t *shell_A =
221 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
222 libgrpp_shell_t *shell_B =
223 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
224
225 /*
226 * construct pseudopotential for the given L,J numbers
227 */
228 libgrpp_potential_t *oc_potential =
229 libgrpp_new_potential(*pot_L, *pot_J, *pot_num_primitives, pot_powers_int,
230 pot_coeffs, pot_alpha);
231
232 /*
233 * construct outercore shell associated with the pseudopotential
234 */
235 libgrpp_shell_t *oc_shell =
236 libgrpp_new_shell(pot_origin, *pot_L, *oc_shell_num_primitives,
237 oc_shell_coeffs, oc_shell_alpha);
238
239 /*
240 * evaluate RPP integrals
241 */
243 shell_A, shell_B, pot_origin, oc_potential, oc_shell, arep_matrix,
244 so_x_matrix, so_y_matrix, so_z_matrix);
245
246 /*
247 * clean-up
248 */
249 libgrpp_delete_shell(shell_A);
250 libgrpp_delete_shell(shell_B);
251 libgrpp_delete_potential(oc_potential);
252 libgrpp_delete_shell(oc_shell);
253 free(pot_powers_int);
254}
255
256/**
257 * Outercore RPP integrals (non-local terms with projectors onto outercore
258 * spinors)
259 *
260 * Part 2: integration of the second non-local term:
261 * |nlj><nlj| U |n'lj><n'lj|
262 */
264 // contracted Gaussian A
265 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
266 double *alpha_A,
267 // contracted Gaussian B
268 double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B,
269 double *alpha_B,
270 // origin of the RPP
271 double *pot_origin,
272 // outercore shell 1:
273 int32_t *oc_shell_1_L, int32_t *oc_shell_1_J, int32_t *pot1_num_primitives,
274 int32_t *pot1_powers, double *pot1_coeffs, double *pot1_alpha,
275 int32_t *oc_shell_1_num_primitives, double *oc_shell_1_coeffs,
276 double *oc_shell_1_alpha,
277 // outercore shell 2:
278 int32_t *oc_shell_2_L, int32_t *oc_shell_2_J, int32_t *pot2_num_primitives,
279 int32_t *pot2_powers, double *pot2_coeffs, double *pot2_alpha,
280 int32_t *oc_shell_2_num_primitives, double *oc_shell_2_coeffs,
281 double *oc_shell_2_alpha,
282 // answer:
283 double *arep_matrix, double *so_x_matrix, double *so_y_matrix,
284 double *so_z_matrix) {
286 libgrpp_shell_t * shell_A, libgrpp_shell_t * shell_B, double *C,
287 libgrpp_potential_t *oc_potential_1, libgrpp_shell_t *oc_shell_1,
288 libgrpp_potential_t *oc_potential_2, libgrpp_shell_t *oc_shell_2,
289 double *arep_matrix, double *so_x_matrix, double *so_y_matrix,
290 double *so_z_matrix);
291
292 /*
293 * array conversion: Fortran -> C
294 */
295 int *pot1_powers_int = (int *)calloc(*pot1_num_primitives, sizeof(int));
296 int *pot2_powers_int = (int *)calloc(*pot2_num_primitives, sizeof(int));
297
298 for (int i = 0; i < *pot1_num_primitives; i++) {
299 pot1_powers_int[i] = pot1_powers[i];
300 }
301 for (int i = 0; i < *pot2_num_primitives; i++) {
302 pot2_powers_int[i] = pot2_powers[i];
303 }
304
305 /*
306 * construct shells
307 */
308 libgrpp_shell_t *shell_A =
309 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
310 libgrpp_shell_t *shell_B =
311 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
312
313 /*
314 * the first outercore pseudopotential U_{n,L,J} and the corresponding
315 * outercore shell
316 */
317 libgrpp_potential_t *oc_potential_1 =
318 libgrpp_new_potential(*oc_shell_1_L, *oc_shell_1_J, *pot1_num_primitives,
319 pot1_powers_int, pot1_coeffs, pot1_alpha);
320 libgrpp_shell_t *oc_shell_1 =
321 libgrpp_new_shell(pot_origin, *oc_shell_1_L, *oc_shell_1_num_primitives,
322 oc_shell_1_coeffs, oc_shell_1_alpha);
323
324 /*
325 * the second outercore pseudopotential U_{n',L',J'} and the corresponding
326 * outercore shell
327 */
328 libgrpp_potential_t *oc_potential_2 =
329 libgrpp_new_potential(*oc_shell_2_L, *oc_shell_2_J, *pot2_num_primitives,
330 pot2_powers_int, pot2_coeffs, pot2_alpha);
331 libgrpp_shell_t *oc_shell_2 =
332 libgrpp_new_shell(pot_origin, *oc_shell_2_L, *oc_shell_2_num_primitives,
333 oc_shell_2_coeffs, oc_shell_2_alpha);
334
335 /*
336 * evaluate integrals
337 */
339 shell_A, shell_B, pot_origin, oc_potential_1, oc_shell_1, oc_potential_2,
340 oc_shell_2, arep_matrix, so_x_matrix, so_y_matrix, so_z_matrix);
341
342 /*
343 * clean-up
344 */
345 libgrpp_delete_shell(shell_A);
346 libgrpp_delete_shell(shell_B);
347 libgrpp_delete_potential(oc_potential_1);
348 libgrpp_delete_potential(oc_potential_2);
349 libgrpp_delete_shell(oc_shell_1);
350 libgrpp_delete_shell(oc_shell_2);
351 free(pot1_powers_int);
352 free(pot2_powers_int);
353}
354
355/**
356 * Analytic calculation of gradients of LOCAL potential integrals for a given
357 * shell pair with respect to the point 'point_3d'.
358 */
360 // contracted Gaussian A
361 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
362 double *alpha_A,
363 // contracted Gaussian B
364 double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B,
365 double *alpha_B,
366 // pseudopotential
367 double *rpp_origin, int32_t *rpp_num_primitives, int32_t *rpp_powers,
368 double *rpp_coeffs, double *rpp_alpha,
369 // differentiation wrt the 3d point (x,y,z)
370 double *point_3d,
371 // answer: matrices d<Int>/dx, d<Int>/dy, d<Int>/dZ
372 double *grad_arep_x, double *grad_arep_y, double *grad_arep_z) {
373 int *pot_powers_int = (int *)calloc(*rpp_num_primitives, sizeof(int));
374 double *grad_array[3];
375 grad_array[0] = grad_arep_x;
376 grad_array[1] = grad_arep_y;
377 grad_array[2] = grad_arep_z;
378
379 for (int i = 0; i < *rpp_num_primitives; i++) {
380 pot_powers_int[i] = rpp_powers[i];
381 }
382
384 0, 0, *rpp_num_primitives, pot_powers_int, rpp_coeffs, rpp_alpha);
385 libgrpp_shell_t *shell_A =
386 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
387 libgrpp_shell_t *shell_B =
388 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
389
390 libgrpp_type1_integrals_gradient(shell_A, shell_B, rpp_origin, pot, point_3d,
391 grad_array);
392
393 libgrpp_delete_shell(shell_A);
394 libgrpp_delete_shell(shell_B);
396 free(pot_powers_int);
397}
398
399/**
400 * Analytic calculation of gradients of SEMI-LOCAL potential integrals for a
401 * given shell pair with respect to the point 'point_3d'.
402 */
404 // contracted Gaussian A
405 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
406 double *alpha_A, double *origin_B,
407 // contracted Gaussian B
408 int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B,
409 // pseudopotential
410 double *pot_origin, int32_t *pot_L, int32_t *pot_num_primitives,
411 int32_t *pot_powers, double *pot_coeffs, double *pot_alpha,
412 // differentiation wrt the 3d point (x,y,z)
413 double *point_3d,
414 // answer: matrices d<Int>/dx, d<Int>/dy, d<Int>/dZ
415 double *grad_arep_x, double *grad_arep_y, double *grad_arep_z) {
416 int *pot_powers_int = (int *)calloc(*pot_num_primitives, sizeof(int));
417 for (int i = 0; i < *pot_num_primitives; i++) {
418 pot_powers_int[i] = pot_powers[i];
419 }
420
421 double *grad_array[3];
422 grad_array[0] = grad_arep_x;
423 grad_array[1] = grad_arep_y;
424 grad_array[2] = grad_arep_z;
425
427 *pot_L, 0, *pot_num_primitives, pot_powers_int, pot_coeffs, pot_alpha);
428 libgrpp_shell_t *shell_A =
429 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
430 libgrpp_shell_t *shell_B =
431 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
432
433 libgrpp_type2_integrals_gradient(shell_A, shell_B, pot_origin, pot, point_3d,
434 grad_array);
435
436 libgrpp_delete_shell(shell_A);
437 libgrpp_delete_shell(shell_B);
439 free(pot_powers_int);
440}
441
442/**
443 * Analytic calculation of gradients of integrals over the effective spin-orbit
444 * operator (potential) for a given shell pair (with respect to the point
445 * 'point_3d').
446 */
448 // contracted Gaussian A
449 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
450 double *alpha_A,
451 // contracted Gaussian B
452 double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B,
453 double *alpha_B,
454 // pseudopotential
455 double *pot_origin, int32_t *pot_L, int32_t *pot_num_primitives,
456 int32_t *pot_powers, double *pot_coeffs, double *pot_alpha,
457 // differentiation wrt the 3d point (x,y,z)
458 double *point_3d,
459 // answer: 9 matrices
460 // d<SO-x>/dx, d<SO-x>/dy, d<SO-x>/dZ
461 double *grad_sox_x, double *grad_sox_y, double *grad_sox_z,
462 // d<SO-y>/dx, d<SO-y>/dy, d<SO-y>/dZ
463 double *grad_soy_x, double *grad_soy_y, double *grad_soy_z,
464 // d<SO-z>/dx, d<SO-z>/dy, d<SO-z>/dZ
465 double *grad_soz_x, double *grad_soz_y, double *grad_soz_z) {
466 int *pot_powers_int = (int *)calloc(*pot_num_primitives, sizeof(int));
467
468 double *grad_array_SO_x[3];
469 grad_array_SO_x[0] = grad_sox_x;
470 grad_array_SO_x[1] = grad_sox_y;
471 grad_array_SO_x[2] = grad_sox_z;
472
473 double *grad_array_SO_y[3];
474 grad_array_SO_y[0] = grad_soy_x;
475 grad_array_SO_y[1] = grad_soy_y;
476 grad_array_SO_y[2] = grad_soy_z;
477
478 double *grad_array_SO_z[3];
479 grad_array_SO_z[0] = grad_soz_x;
480 grad_array_SO_z[1] = grad_soz_y;
481 grad_array_SO_z[2] = grad_soz_z;
482
483 for (int i = 0; i < *pot_num_primitives; i++) {
484 pot_powers_int[i] = pot_powers[i];
485 }
486
487 /*
488 * construct RPP structure
489 */
491 *pot_L, 0, *pot_num_primitives, pot_powers_int, pot_coeffs, pot_alpha);
492
493 /*
494 * construct shells
495 */
496 libgrpp_shell_t *shell_A =
497 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
498 libgrpp_shell_t *shell_B =
499 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
500
501 libgrpp_spin_orbit_integrals_gradient(shell_A, shell_B, pot_origin, pot,
502 point_3d, grad_array_SO_x,
503 grad_array_SO_y, grad_array_SO_z);
504
505 libgrpp_delete_shell(shell_A);
506 libgrpp_delete_shell(shell_B);
508 free(pot_powers_int);
509}
510
511/**
512 * Overlap integrals between two contracted Gaussians with given cartesian parts
513 * x^n y^l z^m (auxiliary function)
514 */
515
517 // contracted Gaussian A
518 double *origin_A, int32_t *n_A, int32_t *l_A, int32_t *m_A,
519 int32_t *num_primitives_A, double *coeffs_A, double *alpha_A,
520 // contracted Gaussian B
521 double *origin_B, int32_t *n_B, int32_t *l_B, int32_t *m_B,
522 int32_t *num_primitives_B, double *coeffs_B, double *alpha_B,
523 // answer
524 double *overlap_integral) {
526 libgrpp_shell_t * shell_B,
527 double *overlap_matrix);
528
530 origin_A, *n_A + *l_A + *m_A, *num_primitives_A, coeffs_A, alpha_A);
532 origin_B, *n_B + *l_B + *m_B, *num_primitives_B, coeffs_B, alpha_B);
533
534 shell_A->cart_size = 1;
535 shell_A->cart_list[0] = *n_A;
536 shell_A->cart_list[1] = *l_A;
537 shell_A->cart_list[2] = *m_A;
538
539 shell_B->cart_size = 1;
540 shell_B->cart_list[0] = *n_B;
541 shell_B->cart_list[1] = *l_B;
542 shell_B->cart_list[2] = *m_B;
543
544 libgrpp_overlap_integrals(shell_A, shell_B, overlap_integral);
545
546 libgrpp_delete_shell(shell_A);
547 libgrpp_delete_shell(shell_B);
548}
549
550/*
551 * calculates normalization factor for the given contracted Gaussians
552 * (auxiliary function)
553 */
554void radial_gto_norm_factor_(int32_t *L, int32_t *num_primitives,
555 double *coeffs, double *alpha, double *norm) {
556 *norm = 0.0;
557 double S = 0.0;
558 double origin[] = {0, 0, 0};
559 int zero = 0;
560
561 evaluate_overlap_integral_contracted_(origin, L, &zero, &zero, num_primitives,
562 coeffs, alpha, origin, L, &zero, &zero,
563 num_primitives, coeffs, alpha, &S);
564
565 *norm = sqrt(libgrpp_double_factorial(2 * (*L) - 1)) / sqrt(S);
566}
567
568/*
569 * overlap integrals (for the shell pair)
570 */
571
573 // contracted Gaussian A
574 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
575 double *alpha_A,
576 // contracted Gaussian B
577 double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B,
578 double *alpha_B,
579 // answer
580 double *matrix) {
581 libgrpp_shell_t *shell_A =
582 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
583 libgrpp_shell_t *shell_B =
584 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
585
586 libgrpp_overlap_integrals(shell_A, shell_B, matrix);
587
588 libgrpp_delete_shell(shell_A);
589 libgrpp_delete_shell(shell_B);
590}
591
592/*
593 * kinetic-energy integrals (for the shell pair)
594 */
595
597 // contracted Gaussian A
598 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
599 double *alpha_A,
600 // contracted Gaussian B
601 double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B,
602 double *alpha_B,
603 // answer
604 double *matrix) {
605 libgrpp_shell_t *shell_A =
606 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
607 libgrpp_shell_t *shell_B =
608 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
609
610 libgrpp_kinetic_energy_integrals(shell_A, shell_B, matrix);
611
612 libgrpp_delete_shell(shell_A);
613 libgrpp_delete_shell(shell_B);
614}
615
616/*
617 * momentum operator integrals (for the shell pair)
618 */
619
621 // contracted Gaussian A
622 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
623 double *alpha_A,
624 // contracted Gaussian B
625 double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B,
626 double *alpha_B,
627 // answer
628 double *matrix_x, double *matrix_y, double *matrix_z) {
629 libgrpp_shell_t *shell_A =
630 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
631 libgrpp_shell_t *shell_B =
632 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
633
634 libgrpp_momentum_integrals(shell_A, shell_B, matrix_x, matrix_y, matrix_z);
635
636 libgrpp_delete_shell(shell_A);
637 libgrpp_delete_shell(shell_B);
638}
639
640/*
641 * nuclear attraction integrals
642 */
643
645 // contracted Gaussian A
646 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
647 double *alpha_A,
648 // contracted Gaussian B
649 double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B,
650 double *alpha_B,
651 // potential definition
652 double *charge_origin, int32_t *charge, int32_t *nuclear_model,
653 double *model_params,
654 // answer
655 double *matrix) {
656 libgrpp_shell_t *shell_A =
657 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
658 libgrpp_shell_t *shell_B =
659 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
660
661 libgrpp_nuclear_attraction_integrals(shell_A, shell_B, charge_origin, *charge,
662 *nuclear_model, model_params, matrix);
663
664 libgrpp_delete_shell(shell_A);
665 libgrpp_delete_shell(shell_B);
666}
667
669 // contracted Gaussian A
670 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
671 double *alpha_A,
672 // contracted Gaussian B
673 double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B,
674 double *alpha_B,
675 // potential definition
676 double *charge_origin, int32_t *charge,
677 // answer
678 double *matrix) {
679 libgrpp_shell_t *shell_A =
680 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
681 libgrpp_shell_t *shell_B =
682 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
683
685 shell_A, shell_B, charge_origin, *charge, matrix);
686
687 libgrpp_delete_shell(shell_A);
688 libgrpp_delete_shell(shell_B);
689}
690
692 // contracted Gaussian A
693 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
694 double *alpha_A,
695 // contracted Gaussian B
696 double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B,
697 double *alpha_B,
698 // potential definition
699 double *charge_origin, int32_t *charge, double *r_rms,
700 // answer
701 double *matrix) {
702 libgrpp_shell_t *shell_A =
703 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
704 libgrpp_shell_t *shell_B =
705 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
706
708 shell_A, shell_B, charge_origin, *charge, *r_rms, matrix);
709
710 libgrpp_delete_shell(shell_A);
711 libgrpp_delete_shell(shell_B);
712}
713
715 // contracted Gaussian A
716 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
717 double *alpha_A,
718 // contracted Gaussian B
719 double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B,
720 double *alpha_B,
721 // potential definition
722 double *charge_origin, int32_t *charge, double *r_rms,
723 // answer
724 double *matrix) {
725 libgrpp_shell_t *shell_A =
726 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
727 libgrpp_shell_t *shell_B =
728 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
729
731 shell_A, shell_B, charge_origin, *charge, *r_rms, matrix);
732
733 libgrpp_delete_shell(shell_A);
734 libgrpp_delete_shell(shell_B);
735}
736
738 // contracted Gaussian A
739 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
740 double *alpha_A,
741 // contracted Gaussian B
742 double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B,
743 double *alpha_B,
744 // potential definition
745 double *charge_origin, int32_t *charge, double *fermi_param_c,
746 double *fermi_param_a,
747 // answer
748 double *matrix) {
749 libgrpp_shell_t *shell_A =
750 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
751 libgrpp_shell_t *shell_B =
752 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
753
755 shell_A, shell_B, charge_origin, *charge, *fermi_param_c, *fermi_param_a,
756 matrix);
757
758 libgrpp_delete_shell(shell_A);
759 libgrpp_delete_shell(shell_B);
760}
761
763 // contracted Gaussian A
764 double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A,
765 double *alpha_A,
766 // contracted Gaussian B
767 double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B,
768 double *alpha_B,
769 // potential definition
770 double *charge_origin, int32_t *charge, double *fermi_param_c,
771 double *fermi_param_a, double *param_k,
772 // answer
773 double *matrix) {
774 libgrpp_shell_t *shell_A =
775 libgrpp_new_shell(origin_A, *L_A, *num_primitives_A, coeffs_A, alpha_A);
776 libgrpp_shell_t *shell_B =
777 libgrpp_new_shell(origin_B, *L_B, *num_primitives_B, coeffs_B, alpha_B);
778
780 shell_A, shell_B, charge_origin, *charge, *fermi_param_c, *fermi_param_a,
781 *param_k, matrix);
782
783 libgrpp_delete_shell(shell_A);
784 libgrpp_delete_shell(shell_B);
785}
786
787/*
788 * Fortran interface to the nuclear models
789 */
790
795
800
801void libgrpp_estimate_fermi_model_parameters_(double *R_rms, double *c,
802 double *a, int32_t *err_code) {
803 *err_code = (int32_t)libgrpp_estimate_fermi_model_parameters(*R_rms, c, a);
804}
805
806void libgrpp_charge_density_ball_(double *r, double *Z, double *R_rms,
807 double *rho) {
808 *rho = libgrpp_charge_density_ball(*r, *Z, *R_rms);
809}
810
811void libgrpp_charge_density_gaussian_(double *r, double *Z, double *R_rms,
812 double *rho) {
813 *rho = libgrpp_charge_density_gaussian(*r, *Z, *R_rms);
814}
815
816void libgrpp_charge_density_fermi_(double *r, double *Z, double *c, double *a,
817 double *rho) {
818 *rho = libgrpp_charge_density_fermi(*r, *Z, *c, *a);
819}
820
821void libgrpp_charge_density_fermi_bubble_(double *r, double *Z, double *c,
822 double *a, double *k, double *rho) {
823 *rho = libgrpp_charge_density_fermi_bubble(*r, *Z, *c, *a, *k);
824}
825
826void libgrpp_coulomb_potential_point_(double *r, double *Z, double *potential) {
827 *potential = libgrpp_coulomb_potential_point(*r, *Z);
828}
829
830void libgrpp_coulomb_potential_ball_(double *r, double *Z, double *R_rms,
831 double *potential) {
832 *potential = libgrpp_coulomb_potential_ball(*r, *Z, *R_rms);
833}
834
835void libgrpp_coulomb_potential_gaussian_(double *r, double *Z, double *R_rms,
836 double *potential) {
837 *potential = libgrpp_coulomb_potential_gaussian(*r, *Z, *R_rms);
838}
839
840void libgrpp_coulomb_potential_fermi_(double *r, double *Z, double *c,
841 double *a, double *potential) {
842 *potential = libgrpp_coulomb_potential_fermi(*r, *Z, *c, *a);
843}
844
845void libgrpp_coulomb_potential_fermi_bubble_(double *r, double *Z, double *c,
846 double *a, double *k,
847 double *potential) {
848 *potential = libgrpp_coulomb_potential_fermi_bubble(*r, *Z, *c, *a, *k);
849}
850
851void libgrpp_rms_radius_fermi_(int32_t *Z, double *c, double *a,
852 double *r_rms) {
853 *r_rms = libgrpp_rms_radius_fermi(*Z, *c, *a);
854}
855
856void libgrpp_rms_radius_fermi_bubble_(int32_t *Z, double *c, double *a,
857 double *k, double *r_rms) {
858 *r_rms = libgrpp_rms_radius_fermi_bubble(*Z, *c, *a, *k);
859}
static void const int const int i
double libgrpp_double_factorial(int n)
void libgrpp_nuclear_attraction_integrals_fermi_model_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *charge_origin, int32_t *charge, double *fermi_param_c, double *fermi_param_a, double *matrix)
void libgrpp_nuclear_attraction_integrals_fermi_bubble_model_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *charge_origin, int32_t *charge, double *fermi_param_c, double *fermi_param_a, double *param_k, double *matrix)
void libgrpp_type1_integrals_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *rpp_origin, int32_t *rpp_num_primitives, int32_t *rpp_powers, double *rpp_coeffs, double *rpp_alpha, double *matrix)
void libgrpp_init_()
void libgrpp_spin_orbit_integrals_gradient_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *pot_origin, int32_t *pot_L, int32_t *pot_num_primitives, int32_t *pot_powers, double *pot_coeffs, double *pot_alpha, double *point_3d, double *grad_sox_x, double *grad_sox_y, double *grad_sox_z, double *grad_soy_x, double *grad_soy_y, double *grad_soy_z, double *grad_soz_x, double *grad_soz_y, double *grad_soz_z)
void libgrpp_type1_integrals_gradient_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *rpp_origin, int32_t *rpp_num_primitives, int32_t *rpp_powers, double *rpp_coeffs, double *rpp_alpha, double *point_3d, double *grad_arep_x, double *grad_arep_y, double *grad_arep_z)
void libgrpp_set_radial_tolerance_(const double *tolerance)
void libgrpp_type2_integrals_gradient_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *pot_origin, int32_t *pot_L, int32_t *pot_num_primitives, int32_t *pot_powers, double *pot_coeffs, double *pot_alpha, double *point_3d, double *grad_arep_x, double *grad_arep_y, double *grad_arep_z)
void libgrpp_finalize_()
void libgrpp_charge_density_fermi_bubble_(double *r, double *Z, double *c, double *a, double *k, double *rho)
void libgrpp_nuclear_attraction_integrals_point_charge_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *charge_origin, int32_t *charge, double *matrix)
void libgrpp_charge_density_fermi_(double *r, double *Z, double *c, double *a, double *rho)
void libgrpp_nuclear_attraction_integrals_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *charge_origin, int32_t *charge, int32_t *nuclear_model, double *model_params, double *matrix)
void libgrpp_type2_integrals_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *pot_origin, int32_t *pot_L, int32_t *pot_num_primitives, int32_t *pot_powers, double *pot_coeffs, double *pot_alpha, double *matrix)
void libgrpp_set_default_parameters_()
void libgrpp_estimate_nuclear_rms_radius_johnson_1985_(int32_t *A, double *R_rms)
void radial_gto_norm_factor_(int32_t *L, int32_t *num_primitives, double *coeffs, double *alpha, double *norm)
void libgrpp_outercore_potential_integrals_part_2_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *pot_origin, int32_t *oc_shell_1_L, int32_t *oc_shell_1_J, int32_t *pot1_num_primitives, int32_t *pot1_powers, double *pot1_coeffs, double *pot1_alpha, int32_t *oc_shell_1_num_primitives, double *oc_shell_1_coeffs, double *oc_shell_1_alpha, int32_t *oc_shell_2_L, int32_t *oc_shell_2_J, int32_t *pot2_num_primitives, int32_t *pot2_powers, double *pot2_coeffs, double *pot2_alpha, int32_t *oc_shell_2_num_primitives, double *oc_shell_2_coeffs, double *oc_shell_2_alpha, double *arep_matrix, double *so_x_matrix, double *so_y_matrix, double *so_z_matrix)
void libgrpp_overlap_integrals_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *matrix)
void libgrpp_rms_radius_fermi_(int32_t *Z, double *c, double *a, double *r_rms)
void libgrpp_set_cartesian_order_(const int32_t *order)
void libgrpp_coulomb_potential_fermi_bubble_(double *r, double *Z, double *c, double *a, double *k, double *potential)
void libgrpp_nuclear_attraction_integrals_charged_ball_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *charge_origin, int32_t *charge, double *r_rms, double *matrix)
void libgrpp_estimate_nuclear_rms_radius_golovko_2008_(int32_t *A, double *R_rms)
void libgrpp_estimate_fermi_model_parameters_(double *R_rms, double *c, double *a, int32_t *err_code)
void libgrpp_momentum_integrals_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *matrix_x, double *matrix_y, double *matrix_z)
void libgrpp_set_angular_screening_tolerance_(const double *tolerance)
void libgrpp_coulomb_potential_fermi_(double *r, double *Z, double *c, double *a, double *potential)
void libgrpp_rms_radius_fermi_bubble_(int32_t *Z, double *c, double *a, double *k, double *r_rms)
void libgrpp_set_modified_bessel_tolerance_(const double *tolerance)
void libgrpp_nuclear_attraction_integrals_gaussian_model_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *charge_origin, int32_t *charge, double *r_rms, double *matrix)
void libgrpp_kinetic_energy_integrals_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *matrix)
void libgrpp_coulomb_potential_gaussian_(double *r, double *Z, double *R_rms, double *potential)
void evaluate_overlap_integral_contracted_(double *origin_A, int32_t *n_A, int32_t *l_A, int32_t *m_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *n_B, int32_t *l_B, int32_t *m_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *overlap_integral)
void libgrpp_coulomb_potential_ball_(double *r, double *Z, double *R_rms, double *potential)
void libgrpp_coulomb_potential_point_(double *r, double *Z, double *potential)
void libgrpp_spin_orbit_integrals_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *pot_origin, int32_t *pot_L, int32_t *pot_num_primitives, int32_t *pot_powers, double *pot_coeffs, double *pot_alpha, double *so_x_matrix, double *so_y_matrix, double *so_z_matrix)
void libgrpp_charge_density_gaussian_(double *r, double *Z, double *R_rms, double *rho)
void libgrpp_charge_density_ball_(double *r, double *Z, double *R_rms, double *rho)
void libgrpp_outercore_potential_integrals_part_1_(double *origin_A, int32_t *L_A, int32_t *num_primitives_A, double *coeffs_A, double *alpha_A, double *origin_B, int32_t *L_B, int32_t *num_primitives_B, double *coeffs_B, double *alpha_B, double *pot_origin, int32_t *pot_L, int32_t *pot_J, int32_t *pot_num_primitives, int32_t *pot_powers, double *pot_coeffs, double *pot_alpha, int32_t *oc_shell_num_primitives, double *oc_shell_coeffs, double *oc_shell_alpha, double *arep_matrix, double *so_x_matrix, double *so_y_matrix, double *so_z_matrix)
void libgrpp_init()
void libgrpp_finalize()
void libgrpp_type2_integrals_gradient(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *grpp_origin, libgrpp_potential_t *potential, double *point_3d, double **grad_arep)
void libgrpp_spin_orbit_integrals_gradient(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *grpp_origin, libgrpp_potential_t *potential, double *point_3d, double **grad_so_x, double **grad_so_y, double **grad_so_z)
void libgrpp_type1_integrals_gradient(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *grpp_origin, libgrpp_potential_t *potential, double *point_3d, double **grad_arep)
void libgrpp_kinetic_energy_integrals(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *kinetic_matrix)
void libgrpp_momentum_integrals(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *momentum_x_matrix, double *momentum_y_matrix, double *momentum_z_matrix)
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)
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_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)
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)
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)
double libgrpp_coulomb_potential_ball(double r, double Z, double R_rms)
double libgrpp_charge_density_fermi_bubble(double r, double Z, double c, double a, double k)
int libgrpp_estimate_fermi_model_parameters(double R_rms, double *c, double *a)
double libgrpp_coulomb_potential_gaussian(double r, double Z, double R_rms)
double libgrpp_rms_radius_fermi_bubble(int Z, double c, double a, double k)
double libgrpp_estimate_nuclear_rms_radius_golovko_2008(int A)
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_estimate_nuclear_rms_radius_johnson_1985(int A)
double libgrpp_charge_density_fermi(double r, double Z, double c, double a)
double libgrpp_coulomb_potential_fermi(double r, double Z, double c, double a)
double libgrpp_rms_radius_fermi(int Z, double c, double a)
double libgrpp_charge_density_gaussian(double r, double Z, double R_rms)
double libgrpp_charge_density_ball(double r, double Z, double R_rms)
void libgrpp_outercore_potential_integrals_part_1(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *C, libgrpp_potential_t *oc_potential, libgrpp_shell_t *oc_shell, double *arep_matrix, double *so_x_matrix, double *so_y_matrix, double *so_z_matrix)
void libgrpp_outercore_potential_integrals_part_2(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *C, libgrpp_potential_t *oc_potential_1, libgrpp_shell_t *oc_shell_1, libgrpp_potential_t *oc_potential_2, libgrpp_shell_t *oc_shell_2, double *arep_matrix, double *so_x_matrix, double *so_y_matrix, double *so_z_matrix)
void libgrpp_overlap_integrals(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *overlap_matrix)
void libgrpp_set_angular_screening_tolerance(double tolerance)
void libgrpp_set_radial_tolerance(double tolerance)
void libgrpp_set_cartesian_order(int order)
void libgrpp_set_default_parameters()
void libgrpp_set_modified_bessel_tolerance(double tolerance)
void libgrpp_delete_potential(libgrpp_potential_t *potential)
libgrpp_potential_t * libgrpp_new_potential(int L, int J, int num_primitives, int *powers, double *coeffs, double *alpha)
libgrpp_shell_t * libgrpp_new_shell(double *origin, int L, int num_primitives, double *coeffs, double *alpha)
Definition grpp_shell.c:32
void libgrpp_delete_shell(libgrpp_shell_t *shell)
Definition grpp_shell.c:103
void libgrpp_spin_orbit_integrals(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *rpp_origin, libgrpp_potential_t *potential, double *so_x_matrix, double *so_y_matrix, double *so_z_matrix)
void libgrpp_type1_integrals(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *rpp_origin, libgrpp_potential_t *potential, double *matrix)
void libgrpp_type2_integrals(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *rpp_origin, libgrpp_potential_t *potential, double *matrix)