static real phi_sr(FILE *log,int nj,rvec x[],real charge[],real rc,real r1,rvec box, real phi[],t_block *excl,rvec f_sr[],bool bOld) { int i,j,k,m,ni,i1,i2; real pp,r2,R,R_1,R_2,rc2; real qi,qj,vsr,eps,fscal; rvec dx; vsr = 0.0; eps = ONE_4PI_EPS0; rc2 = rc*rc; ni=0; for(i=0; (i<nj-1); i++) { qi=charge[i]; for(j=i+1; (j<nj); j++) { i1=excl->index[i]; i2=excl->index[i+1]; for(k=i1; (k<i2); k++) if (excl->a[k] == j) break; if (k == i2) { r2=calc_dx2dx(x[i],x[j],box,dx); if (r2 < rc2) { qj = charge[j]; R_1 = invsqrt(r2); R_2 = R_1*R_1; R = invsqrt(R_2); if (bOld) { fscal = old_f(R,rc,r1)*R_2; pp = old_phi(R,rc,r1); } else { fscal = new_f(R,rc)*R_2; pp = new_phi(R,rc); } phi[i] += eps*qj*pp; phi[j] += eps*qi*pp; vsr += eps*qj*qi*pp; for(m=0; (m<DIM); m++) { f_sr[i][m] += dx[m]*fscal; f_sr[j][m] -= dx[m]*fscal; } ni++; } } } } fprintf(log,"There were %d short range interactions, vsr=%g\n",ni,vsr); return vsr; }
real calc_dx2(rvec xi,rvec xj,rvec box) { rvec dx; return calc_dx2dx(xi,xj,box,dx); }