4
#include "prototypes.h"
6
void compute_grid_dens_3d()
8
int i,j,k,l,ig,jg,ibf,jbf,ib,jb,jlim,kk,ll;
9
int iatom, jatom, iang, jang, i_1stbf, j_1stbf, nbfi, nbfj;
11
int ixm, iym, izm, iind;
14
double ax, ay, az, xa, ya, za, ra2;
15
double ai, norm_pf, ang_pf, exponent;
18
double *bf_values, *values;
21
if (spin_prop) /* If spin_prop is set, compute the spin density... */
23
else /* .. otherwise compute the electron density */
26
/* Initialize some intermediates */
27
grid3d_pts = (double****) malloc(1*sizeof(double***));
28
grid3d_pts[0] = init_box(nix+1,niy+1,niz+1);
29
bf_values = init_array(nbfao);
31
for(ix=0;ix<=nix;ix++) {
32
for(iy=0;iy<=niy;iy++) {
33
x = grid_origin[0] + grid_step_x[0]*ix + grid_step_y[0]*iy;
34
y = grid_origin[1] + grid_step_x[1]*ix + grid_step_y[1]*iy;
35
z = grid_origin[2] + grid_step_x[2]*ix + grid_step_y[2]*iy;
37
for(iz=0;iz<=niz;iz++) {
39
for(i=0;i<nshell;i++) {
48
i_1stbf = sloc[i] - 1;
49
nbfi = (iang+2)*(iang+1)/2;
51
igmax = igmin + snumg[i] - 1;
56
ra2 = xa*xa + ya*ya + za*za;
58
/*--- Compute exponentional factor - loop over primitives ---*/
60
for(ig=igmin;ig<=igmax;ig++) {
62
exponent += contr[ig]*exp(-ai*ra2);
65
/*--- Loop over basis functions in the shell ---*/
66
values = &(bf_values[i_1stbf]);
67
for(ibf=0;ibf<nbfi;ibf++,values++) {
68
norm_pf = norm_bf[iang][ibf];
69
lx = xpow_bf[iang][ibf];
70
ly = ypow_bf[iang][ibf];
71
lz = zpow_bf[iang][ibf];
86
tmp *= (xa*xa)*(xa*xa);
106
tmp *= (ya*ya)*(ya*ya);
126
tmp *= (za*za)*(za*za);
133
*values = norm_pf * ang_pf * exponent;
135
} /*--- end of shell loop ---*/
139
tmp += bf_values[i] * Density[ioff[i]+j] * bf_values[j] * (i!=j ? 2.0 : 1.0);
140
grid3d_pts[0][ix][iy][iz] = tmp;