1 /*
2  * Copyright (C) 2013-  Qiming Sun <osirpt.sun@gmail.com>
3  *
4  * Provide the intermediate variable g(nroots,i,j,k,l,[xyz])
5  */
6 
7 #include "config.h"
8 #include "g1e.h"
9 
10 #ifndef HAVE_BC
11 #define HAVE_BC
12 struct _BC {
13         double c00[MXRYSROOTS*3];
14         double c0p[MXRYSROOTS*3];
15         double b01[MXRYSROOTS];
16         double b00[MXRYSROOTS];
17         double b10[MXRYSROOTS];
18 };
19 #endif
20 
21 void CINTg2e_index_xyz(FINT *idx, const CINTEnvVars *envs);
22 
23 void CINTinit_int2e_EnvVars(CINTEnvVars *envs, FINT *ng, FINT *shls,
24                             FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env);
25 void CINTinit_int3c2e_EnvVars(CINTEnvVars *envs, FINT *ng, FINT *shls,
26                               FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env);
27 void CINTinit_int2c2e_EnvVars(CINTEnvVars *envs, FINT *ng, FINT *shls,
28                               FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env);
29 
30 FINT CINTg0_2e(double *g, const CINTEnvVars *envs);
31 void CINTg0_2e_2d(double *g, struct _BC *bc, const CINTEnvVars *envs);
32 void CINTg0_2e_lj2d4d(double *g, struct _BC *bc, const CINTEnvVars *envs);
33 void CINTg0_2e_kj2d4d(double *g, struct _BC *bc, const CINTEnvVars *envs);
34 void CINTg0_2e_il2d4d(double *g, struct _BC *bc, const CINTEnvVars *envs);
35 void CINTg0_2e_ik2d4d(double *g, struct _BC *bc, const CINTEnvVars *envs);
36 
37 void CINTg0_lj2d_4d(double *g, const CINTEnvVars *envs);
38 void CINTg0_kj2d_4d(double *g, const CINTEnvVars *envs);
39 void CINTg0_il2d_4d(double *g, const CINTEnvVars *envs);
40 void CINTg0_ik2d_4d(double *g, const CINTEnvVars *envs);
41 
42 void CINTnabla1i_2e(double *f, const double *g,
43                     const FINT li, const FINT lj, const FINT lk, const FINT ll,
44                     const CINTEnvVars *envs);
45 
46 void CINTnabla1j_2e(double *f, const double *g,
47                     const FINT li, const FINT lj, const FINT lk, const FINT ll,
48                     const CINTEnvVars *envs);
49 
50 void CINTnabla1k_2e(double *f, const double *g,
51                     const FINT li, const FINT lj, const FINT lk, const FINT ll,
52                     const CINTEnvVars *envs);
53 
54 void CINTnabla1l_2e(double *f, const double *g,
55                     const FINT li, const FINT lj, const FINT lk, const FINT ll,
56                     const CINTEnvVars *envs);
57 
58 void CINTx1i_2e(double *f, const double *g, const double *ri,
59                 const FINT li, const FINT lj, const FINT lk, const FINT ll,
60                 const CINTEnvVars *envs);
61 
62 void CINTx1j_2e(double *f, const double *g, const double *rj,
63                 const FINT li, const FINT lj, const FINT lk, const FINT ll,
64                 const CINTEnvVars *envs);
65 
66 void CINTx1k_2e(double *f, const double *g, const double *rk,
67                 const FINT li, const FINT lj, const FINT lk, const FINT ll,
68                 const CINTEnvVars *envs);
69 
70 void CINTx1l_2e(double *f, const double *g, const double *rl,
71                 const FINT li, const FINT lj, const FINT lk, const FINT ll,
72                 const CINTEnvVars *envs);
73 
74 #ifdef WITH_F12
75 void CINTinit_int2e_stg_EnvVars(CINTEnvVars *envs, FINT *ng, FINT *shls,
76                            FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env);
77 void CINTinit_int2e_yp_EnvVars(CINTEnvVars *envs, FINT *ng, FINT *shls,
78                            FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env);
79 #endif
80 
81 #ifdef WITH_GTG
82 void CINTinit_int2e_gtg_EnvVars(CINTEnvVars *envs, FINT *ng, FINT *shls,
83                                 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env);
84 void CINTinit_int3c2e_gtg_EnvVars(CINTEnvVars *envs, FINT *ng, FINT *shls,
85                                   FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env);
86 void CINTinit_int2c2e_gtg_EnvVars(CINTEnvVars *envs, FINT *ng, FINT *shls,
87                                   FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env);
88 #endif
89 
90 
91 #define G2E_D_I(f, g, li, lj, lk, ll)   CINTnabla1i_2e(f, g, li, lj, lk, ll, envs)
92 #define G2E_D_J(f, g, li, lj, lk, ll)   CINTnabla1j_2e(f, g, li, lj, lk, ll, envs)
93 #define G2E_D_K(f, g, li, lj, lk, ll)   CINTnabla1k_2e(f, g, li, lj, lk, ll, envs)
94 #define G2E_D_L(f, g, li, lj, lk, ll)   CINTnabla1l_2e(f, g, li, lj, lk, ll, envs)
95 /* r-R_0, R_0 is (0,0,0) */
96 #define G2E_R0I(f, g, li, lj, lk, ll)   CINTx1i_2e(f, g, envs->ri, li, lj, lk, ll, envs)
97 #define G2E_R0J(f, g, li, lj, lk, ll)   CINTx1j_2e(f, g, envs->rj, li, lj, lk, ll, envs)
98 #define G2E_R0K(f, g, li, lj, lk, ll)   CINTx1k_2e(f, g, envs->rk, li, lj, lk, ll, envs)
99 #define G2E_R0L(f, g, li, lj, lk, ll)   CINTx1l_2e(f, g, envs->rl, li, lj, lk, ll, envs)
100 /* r-R_C, R_C is common origin */
101 #define G2E_RCI(f, g, li, lj, lk, ll)   CINTx1i_2e(f, g, dri, li, lj, lk, ll, envs)
102 #define G2E_RCJ(f, g, li, lj, lk, ll)   CINTx1j_2e(f, g, drj, li, lj, lk, ll, envs)
103 #define G2E_RCK(f, g, li, lj, lk, ll)   CINTx1k_2e(f, g, drk, li, lj, lk, ll, envs)
104 #define G2E_RCL(f, g, li, lj, lk, ll)   CINTx1l_2e(f, g, drl, li, lj, lk, ll, envs)
105 /* origin from center of each basis
106  * x1[ijkl]_2e(f, g, ng, li, lj, lk, ll, 0d0) */
107 #define G2E_R_I(f, g, li, lj, lk, ll)   f = g + envs->g_stride_i
108 #define G2E_R_K(f, g, li, lj, lk, ll)   f = g + envs->g_stride_k
109 #define G2E_R_L(f, g, li, lj, lk, ll)   f = g + envs->g_stride_l
110 #define G2E_R_J(f, g, li, lj, lk, ll)   f = g + envs->g_stride_j
111