6
#include<libint/libint.h>
12
/*------------------------------------------------------------------------------------
13
This functions processes the computed integrals quartet:
14
1) Normalizes cartesian components to unity;
15
2) Transforms integrals from cartesian to pure angular momentum basis (if needed);
16
------------------------------------------------------------------------------------*/
17
double *norm_quartet(double *data, double *puream_data, int am[4], int puream)
22
const double *ptr_i, *ptr_j, *ptr_k, *ptr_l;
23
double norm_i, norm_ij, norm_ijk;
24
#pragma disjoint (*tmp_ptr,norm_i)
25
#pragma disjoint (*tmp_ptr,norm_ij)
26
#pragma disjoint (*tmp_ptr,norm_ijk)
29
/*--- numbers of integrals in each shell ---*/
35
/*------------------------------------------------------------------------------------
36
Normalize contracted integrals - right here each cartesian component in the shell
37
has the same normalization coefficient so that only components with radial parts of
38
x^l, y^l, and z^l are normalized to unity. After this block of code all basis
39
functions are normalized to unity. Needed this so that integrals in terms of
40
puream i-functions were computed properly.
42
N.B.: possibly, LIBINT should be rewritten so that all intermediates are computed in
43
terms of normalized functions?!
44
------------------------------------------------------------------------------------*/
45
ptr_i = GTOs.bf_norm[am[0]];
46
ptr_j = GTOs.bf_norm[am[1]];
47
ptr_k = GTOs.bf_norm[am[2]];
48
ptr_l = GTOs.bf_norm[am[3]];
51
for(ii=0; ii<ni; ii++) {
53
for(jj=0; jj<nj; jj++) {
54
norm_ij = norm_i*ptr_j[jj];
55
for(kk=0; kk<nk; kk++) {
56
norm_ijk = norm_ij*ptr_k[kk];
57
for(ll=0; ll<nl; ll++) {
58
*(tmp_ptr++) *= norm_ijk*ptr_l[ll];
65
/*--------------------------------------------------
66
Cartesian to pure angular momentum transformation
67
--------------------------------------------------*/
72
transform_i(data,puream_data,GTOs.cart2pureang[am[0]],am[0],nj,nk,nl);
75
puream_data = tmp_ptr;
79
transform_j(data,puream_data,GTOs.cart2pureang[am[1]],am[1],ni,nk,nl);
82
puream_data = tmp_ptr;
86
transform_k(data,puream_data,GTOs.cart2pureang[am[2]],am[2],ni,nj,nl);
89
puream_data = tmp_ptr;
93
transform_l(data,puream_data,GTOs.cart2pureang[am[3]],am[3],ni,nj,nk);
96
puream_data = tmp_ptr;
98
#elif USE_MM && !SPARSE_C2P
99
/*--- N.B. am[0] >= am[1] ---*/
101
data = transform_ijkl(data,puream_data,GTOs.cc2pp[am[0]][am[1]],
102
GTOs.cc2pp[am[2]][am[3]],1,am[0],am[1],am[2],am[3]);
104
data = transform_ijkl(data,puream_data,NULL,GTOs.cc2pp[am[2]][am[3]],0,
105
am[0],am[1],am[2],am[3]);
106
#elif USE_MM && SPARSE_C2P
107
/*--- N.B. am[0] >= am[1] ---*/
109
data = transform_ijkl_sparse(data,puream_data,
110
GTOs.pp2cc_sparse[am[0]][am[1]],
111
GTOs.cc2pp_sparse[am[2]][am[3]],
112
GTOs.pp2cc_rowlength[am[0]][am[1]],
113
GTOs.cc2pp_rowlength[am[2]][am[3]],
114
1,am[0],am[1],am[2],am[3]);
116
data = transform_ijkl_sparse(data,puream_data,NULL,
117
GTOs.cc2pp_sparse[am[2]][am[3]],
118
NULL,GTOs.cc2pp_rowlength[am[2]][am[3]],
119
0,am[0],am[1],am[2],am[3]);