2 * Copyright (c) Erik Lindahl, David van der Spoel 2003
4 * This file is generated automatically at compile time
5 * by the program mknb in the Gromacs distribution.
7 * Options used when generation this file:
11 * Software invsqrt: no
20 #ifdef GMX_THREAD_SHM_FDECOMP
21 #include<thread_mpi.h>
23 #define ALMOST_ZERO 1e-30
24 #define ALMOST_ONE 1-(1e-30)
27 #include "nb_kernel321_adress.h"
32 * Gromacs nonbonded kernel nb_kernel321_adress_cg
33 * Coulomb interaction: Tabulated
34 * VdW interaction: Buckingham
35 * water optimization: SPC/TIP3P - other atoms
36 * Calculate forces: yes
38 void nb_kernel321_adress_cg(
72 int nri,ntype,nthreads;
73 real facel,krf,crf,tabscale,gbtabscale;
74 int n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid;
75 int nn0,nn1,nouter,ninner;
87 real Y,F,Geps,Heps2,Fp,VV;
91 real ix1,iy1,iz1,fix1,fiy1,fiz1;
92 real ix2,iy2,iz2,fix2,fiy2,fiz2;
93 real ix3,iy3,iz3,fix3,fiy3,fiz3;
94 real jx1,jy1,jz1,fjx1,fjy1,fjz1;
95 real dx11,dy11,dz11,rsq11,rinv11;
96 real dx21,dy21,dz21,rsq21,rinv21;
97 real dx31,dy31,dz31,rsq31,rinv31;
100 real weight_cg1, weight_cg2, weight_product;
105 nthreads = *p_nthreads;
109 tabscale = *p_tabscale;
111 qO = facel*charge[ii];
112 qH = facel*charge[ii+1];
113 nti = 3*ntype*type[ii];
120 #ifdef GMX_THREAD_SHM_FDECOMP
121 tMPI_Thread_mutex_lock((tMPI_Thread_mutex_t *)mtx);
123 nn1 = nn0+(nri-nn0)/(2*nthreads)+10;
125 tMPI_Thread_mutex_unlock((tMPI_Thread_mutex_t *)mtx);
132 for(n=nn0; (n<nn1); n++)
136 shY = shiftvec[is3+1];
137 shZ = shiftvec[is3+2];
142 ix1 = shX + pos[ii3+0];
143 iy1 = shY + pos[ii3+1];
144 iz1 = shZ + pos[ii3+2];
145 ix2 = shX + pos[ii3+3];
146 iy2 = shY + pos[ii3+4];
147 iz2 = shZ + pos[ii3+5];
148 ix3 = shX + pos[ii3+6];
149 iy3 = shY + pos[ii3+7];
150 iz3 = shZ + pos[ii3+8];
164 for(k=nj0; (k<nj1); k++)
167 weight_cg2 = wf[jnr];
168 weight_product = weight_cg1*weight_cg2;
169 if (weight_product < ALMOST_ZERO) {
172 else if (weight_product >= ALMOST_ONE)
174 /* force is zero, skip this molecule */
179 hybscal = 1.0 - weight_product;
188 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
192 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
196 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
197 rinv11 = 1.0/sqrt(rsq11);
198 rinv21 = 1.0/sqrt(rsq21);
199 rinv31 = 1.0/sqrt(rsq31);
202 tj = nti+3*type[jnr];
204 cexp1 = vdwparam[tj+1];
205 cexp2 = vdwparam[tj+2];
206 rinvsq = rinv11*rinv11;
215 Geps = eps*VFtab[nnn+2];
216 Heps2 = eps2*VFtab[nnn+3];
219 FF = Fp+Geps+2.0*Heps2;
222 vctot = vctot + vcoul;
223 rinvsix = rinvsq*rinvsq*rinvsq;
225 br = cexp2*rsq11*rinv11;
226 Vvdwexp = cexp1*exp(-br);
227 Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6;
228 fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq-((fijC)*tabscale)*rinv11;
236 fjx1 = faction[j3+0] - tx;
237 fjy1 = faction[j3+1] - ty;
238 fjz1 = faction[j3+2] - tz;
248 Geps = eps*VFtab[nnn+2];
249 Heps2 = eps2*VFtab[nnn+3];
252 FF = Fp+Geps+2.0*Heps2;
255 vctot = vctot + vcoul;
256 fscal = -((fijC)*tabscale)*rinv21;
275 Geps = eps*VFtab[nnn+2];
276 Heps2 = eps2*VFtab[nnn+3];
279 FF = Fp+Geps+2.0*Heps2;
282 vctot = vctot + vcoul;
283 fscal = -((fijC)*tabscale)*rinv31;
291 faction[j3+0] = fjx1 - tx;
292 faction[j3+1] = fjy1 - ty;
293 faction[j3+2] = fjz1 - tz;
296 faction[ii3+0] = faction[ii3+0] + fix1;
297 faction[ii3+1] = faction[ii3+1] + fiy1;
298 faction[ii3+2] = faction[ii3+2] + fiz1;
299 faction[ii3+3] = faction[ii3+3] + fix2;
300 faction[ii3+4] = faction[ii3+4] + fiy2;
301 faction[ii3+5] = faction[ii3+5] + fiz2;
302 faction[ii3+6] = faction[ii3+6] + fix3;
303 faction[ii3+7] = faction[ii3+7] + fiy3;
304 faction[ii3+8] = faction[ii3+8] + fiz3;
305 fshift[is3] = fshift[is3]+fix1+fix2+fix3;
306 fshift[is3+1] = fshift[is3+1]+fiy1+fiy2+fiy3;
307 fshift[is3+2] = fshift[is3+2]+fiz1+fiz2+fiz3;
309 Vc[ggid] = Vc[ggid] + vctot;
310 Vvdw[ggid] = Vvdw[ggid] + Vvdwtot;
311 ninner = ninner + nj1 - nj0;
314 nouter = nouter + nn1 - nn0;
327 * Gromacs nonbonded kernel nb_kernel321_adress_ex
328 * Coulomb interaction: Tabulated
329 * VdW interaction: Buckingham
330 * water optimization: SPC/TIP3P - other atoms
331 * Calculate forces: yes
333 void nb_kernel321_adress_ex(
367 int nri,ntype,nthreads;
368 real facel,krf,crf,tabscale,gbtabscale;
369 int n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid;
370 int nn0,nn1,nouter,ninner;
382 real Y,F,Geps,Heps2,Fp,VV;
386 real ix1,iy1,iz1,fix1,fiy1,fiz1;
387 real ix2,iy2,iz2,fix2,fiy2,fiz2;
388 real ix3,iy3,iz3,fix3,fiy3,fiz3;
389 real jx1,jy1,jz1,fjx1,fjy1,fjz1;
390 real dx11,dy11,dz11,rsq11,rinv11;
391 real dx21,dy21,dz21,rsq21,rinv21;
392 real dx31,dy31,dz31,rsq31,rinv31;
395 real weight_cg1, weight_cg2, weight_product;
400 nthreads = *p_nthreads;
404 tabscale = *p_tabscale;
406 qO = facel*charge[ii];
407 qH = facel*charge[ii+1];
408 nti = 3*ntype*type[ii];
415 #ifdef GMX_THREAD_SHM_FDECOMP
416 tMPI_Thread_mutex_lock((tMPI_Thread_mutex_t *)mtx);
418 nn1 = nn0+(nri-nn0)/(2*nthreads)+10;
420 tMPI_Thread_mutex_unlock((tMPI_Thread_mutex_t *)mtx);
427 for(n=nn0; (n<nn1); n++)
431 shY = shiftvec[is3+1];
432 shZ = shiftvec[is3+2];
437 ix1 = shX + pos[ii3+0];
438 iy1 = shY + pos[ii3+1];
439 iz1 = shZ + pos[ii3+2];
440 ix2 = shX + pos[ii3+3];
441 iy2 = shY + pos[ii3+4];
442 iz2 = shZ + pos[ii3+5];
443 ix3 = shX + pos[ii3+6];
444 iy3 = shY + pos[ii3+7];
445 iz3 = shZ + pos[ii3+8];
459 for(k=nj0; (k<nj1); k++)
462 weight_cg2 = wf[jnr];
463 weight_product = weight_cg1*weight_cg2;
464 if (weight_product < ALMOST_ZERO) {
465 /* force is zero, skip this molecule */
468 else if (weight_product >= ALMOST_ONE)
474 hybscal = weight_product;
483 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
487 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
491 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
492 rinv11 = 1.0/sqrt(rsq11);
493 rinv21 = 1.0/sqrt(rsq21);
494 rinv31 = 1.0/sqrt(rsq31);
497 tj = nti+3*type[jnr];
499 cexp1 = vdwparam[tj+1];
500 cexp2 = vdwparam[tj+2];
501 rinvsq = rinv11*rinv11;
510 Geps = eps*VFtab[nnn+2];
511 Heps2 = eps2*VFtab[nnn+3];
514 FF = Fp+Geps+2.0*Heps2;
517 vctot = vctot + vcoul;
518 rinvsix = rinvsq*rinvsq*rinvsq;
520 br = cexp2*rsq11*rinv11;
521 Vvdwexp = cexp1*exp(-br);
522 Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6;
523 fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq-((fijC)*tabscale)*rinv11;
525 if(force_cap>0 && (fabs(fscal)> force_cap)){
526 fscal=force_cap*fscal/fabs(fscal);
534 fjx1 = faction[j3+0] - tx;
535 fjy1 = faction[j3+1] - ty;
536 fjz1 = faction[j3+2] - tz;
546 Geps = eps*VFtab[nnn+2];
547 Heps2 = eps2*VFtab[nnn+3];
550 FF = Fp+Geps+2.0*Heps2;
553 vctot = vctot + vcoul;
554 fscal = -((fijC)*tabscale)*rinv21;
556 if(force_cap>0 && (fabs(fscal)> force_cap)){
557 fscal=force_cap*fscal/fabs(fscal);
576 Geps = eps*VFtab[nnn+2];
577 Heps2 = eps2*VFtab[nnn+3];
580 FF = Fp+Geps+2.0*Heps2;
583 vctot = vctot + vcoul;
584 fscal = -((fijC)*tabscale)*rinv31;
586 if(force_cap>0 && (fabs(fscal)> force_cap)){
587 fscal=force_cap*fscal/fabs(fscal);
595 faction[j3+0] = fjx1 - tx;
596 faction[j3+1] = fjy1 - ty;
597 faction[j3+2] = fjz1 - tz;
600 faction[ii3+0] = faction[ii3+0] + fix1;
601 faction[ii3+1] = faction[ii3+1] + fiy1;
602 faction[ii3+2] = faction[ii3+2] + fiz1;
603 faction[ii3+3] = faction[ii3+3] + fix2;
604 faction[ii3+4] = faction[ii3+4] + fiy2;
605 faction[ii3+5] = faction[ii3+5] + fiz2;
606 faction[ii3+6] = faction[ii3+6] + fix3;
607 faction[ii3+7] = faction[ii3+7] + fiy3;
608 faction[ii3+8] = faction[ii3+8] + fiz3;
609 fshift[is3] = fshift[is3]+fix1+fix2+fix3;
610 fshift[is3+1] = fshift[is3+1]+fiy1+fiy2+fiy3;
611 fshift[is3+2] = fshift[is3+2]+fiz1+fiz2+fiz3;
613 Vc[ggid] = Vc[ggid] + vctot;
614 Vvdw[ggid] = Vvdw[ggid] + Vvdwtot;
615 ninner = ninner + nj1 - nj0;
618 nouter = nouter + nn1 - nn0;