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_kernel331_adress.h"
32 * Gromacs nonbonded kernel nb_kernel331_adress_cg
33 * Coulomb interaction: Tabulated
34 * VdW interaction: Tabulated
35 * water optimization: SPC/TIP3P - other atoms
36 * Calculate forces: yes
38 void nb_kernel331_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;
86 real Y,F,Geps,Heps2,Fp,VV;
90 real ix1,iy1,iz1,fix1,fiy1,fiz1;
91 real ix2,iy2,iz2,fix2,fiy2,fiz2;
92 real ix3,iy3,iz3,fix3,fiy3,fiz3;
93 real jx1,jy1,jz1,fjx1,fjy1,fjz1;
94 real dx11,dy11,dz11,rsq11,rinv11;
95 real dx21,dy21,dz21,rsq21,rinv21;
96 real dx31,dy31,dz31,rsq31,rinv31;
99 real weight_cg1, weight_cg2, weight_product;
104 nthreads = *p_nthreads;
108 tabscale = *p_tabscale;
110 qO = facel*charge[ii];
111 qH = facel*charge[ii+1];
112 nti = 2*ntype*type[ii];
119 #ifdef GMX_THREAD_SHM_FDECOMP
120 tMPI_Thread_mutex_lock((tMPI_Thread_mutex_t *)mtx);
122 nn1 = nn0+(nri-nn0)/(2*nthreads)+10;
124 tMPI_Thread_mutex_unlock((tMPI_Thread_mutex_t *)mtx);
131 for(n=nn0; (n<nn1); n++)
135 shY = shiftvec[is3+1];
136 shZ = shiftvec[is3+2];
141 ix1 = shX + pos[ii3+0];
142 iy1 = shY + pos[ii3+1];
143 iz1 = shZ + pos[ii3+2];
144 ix2 = shX + pos[ii3+3];
145 iy2 = shY + pos[ii3+4];
146 iz2 = shZ + pos[ii3+5];
147 ix3 = shX + pos[ii3+6];
148 iy3 = shY + pos[ii3+7];
149 iz3 = shZ + pos[ii3+8];
163 for(k=nj0; (k<nj1); k++)
166 weight_cg2 = wf[jnr];
167 weight_product = weight_cg1*weight_cg2;
168 if (weight_product < ALMOST_ZERO) {
171 else if (weight_product >= ALMOST_ONE)
173 /* force is zero, skip this molecule */
178 hybscal = 1.0 - weight_product;
187 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
191 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
195 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
196 rinv11 = 1.0/sqrt(rsq11);
197 rinv21 = 1.0/sqrt(rsq21);
198 rinv31 = 1.0/sqrt(rsq31);
201 tj = nti+2*type[jnr];
203 c12 = vdwparam[tj+1];
212 Geps = eps*VFtab[nnn+2];
213 Heps2 = eps2*VFtab[nnn+3];
216 FF = Fp+Geps+2.0*Heps2;
219 vctot = vctot + vcoul;
223 Geps = eps*VFtab[nnn+2];
224 Heps2 = eps2*VFtab[nnn+3];
227 FF = Fp+Geps+2.0*Heps2;
233 Geps = eps*VFtab[nnn+2];
234 Heps2 = eps2*VFtab[nnn+3];
237 FF = Fp+Geps+2.0*Heps2;
240 Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12;
241 fscal = -((fijC+fijD+fijR)*tabscale)*rinv11;
249 fjx1 = faction[j3+0] - tx;
250 fjy1 = faction[j3+1] - ty;
251 fjz1 = faction[j3+2] - tz;
261 Geps = eps*VFtab[nnn+2];
262 Heps2 = eps2*VFtab[nnn+3];
265 FF = Fp+Geps+2.0*Heps2;
268 vctot = vctot + vcoul;
269 fscal = -((fijC)*tabscale)*rinv21;
288 Geps = eps*VFtab[nnn+2];
289 Heps2 = eps2*VFtab[nnn+3];
292 FF = Fp+Geps+2.0*Heps2;
295 vctot = vctot + vcoul;
296 fscal = -((fijC)*tabscale)*rinv31;
304 faction[j3+0] = fjx1 - tx;
305 faction[j3+1] = fjy1 - ty;
306 faction[j3+2] = fjz1 - tz;
309 faction[ii3+0] = faction[ii3+0] + fix1;
310 faction[ii3+1] = faction[ii3+1] + fiy1;
311 faction[ii3+2] = faction[ii3+2] + fiz1;
312 faction[ii3+3] = faction[ii3+3] + fix2;
313 faction[ii3+4] = faction[ii3+4] + fiy2;
314 faction[ii3+5] = faction[ii3+5] + fiz2;
315 faction[ii3+6] = faction[ii3+6] + fix3;
316 faction[ii3+7] = faction[ii3+7] + fiy3;
317 faction[ii3+8] = faction[ii3+8] + fiz3;
318 fshift[is3] = fshift[is3]+fix1+fix2+fix3;
319 fshift[is3+1] = fshift[is3+1]+fiy1+fiy2+fiy3;
320 fshift[is3+2] = fshift[is3+2]+fiz1+fiz2+fiz3;
322 Vc[ggid] = Vc[ggid] + vctot;
323 Vvdw[ggid] = Vvdw[ggid] + Vvdwtot;
324 ninner = ninner + nj1 - nj0;
327 nouter = nouter + nn1 - nn0;
340 * Gromacs nonbonded kernel nb_kernel331_adress_ex
341 * Coulomb interaction: Tabulated
342 * VdW interaction: Tabulated
343 * water optimization: SPC/TIP3P - other atoms
344 * Calculate forces: yes
346 void nb_kernel331_adress_ex(
380 int nri,ntype,nthreads;
381 real facel,krf,crf,tabscale,gbtabscale;
382 int n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid;
383 int nn0,nn1,nouter,ninner;
394 real Y,F,Geps,Heps2,Fp,VV;
398 real ix1,iy1,iz1,fix1,fiy1,fiz1;
399 real ix2,iy2,iz2,fix2,fiy2,fiz2;
400 real ix3,iy3,iz3,fix3,fiy3,fiz3;
401 real jx1,jy1,jz1,fjx1,fjy1,fjz1;
402 real dx11,dy11,dz11,rsq11,rinv11;
403 real dx21,dy21,dz21,rsq21,rinv21;
404 real dx31,dy31,dz31,rsq31,rinv31;
407 real weight_cg1, weight_cg2, weight_product;
412 nthreads = *p_nthreads;
416 tabscale = *p_tabscale;
418 qO = facel*charge[ii];
419 qH = facel*charge[ii+1];
420 nti = 2*ntype*type[ii];
427 #ifdef GMX_THREAD_SHM_FDECOMP
428 tMPI_Thread_mutex_lock((tMPI_Thread_mutex_t *)mtx);
430 nn1 = nn0+(nri-nn0)/(2*nthreads)+10;
432 tMPI_Thread_mutex_unlock((tMPI_Thread_mutex_t *)mtx);
439 for(n=nn0; (n<nn1); n++)
443 shY = shiftvec[is3+1];
444 shZ = shiftvec[is3+2];
449 ix1 = shX + pos[ii3+0];
450 iy1 = shY + pos[ii3+1];
451 iz1 = shZ + pos[ii3+2];
452 ix2 = shX + pos[ii3+3];
453 iy2 = shY + pos[ii3+4];
454 iz2 = shZ + pos[ii3+5];
455 ix3 = shX + pos[ii3+6];
456 iy3 = shY + pos[ii3+7];
457 iz3 = shZ + pos[ii3+8];
471 for(k=nj0; (k<nj1); k++)
474 weight_cg2 = wf[jnr];
475 weight_product = weight_cg1*weight_cg2;
476 if (weight_product < ALMOST_ZERO) {
477 /* force is zero, skip this molecule */
480 else if (weight_product >= ALMOST_ONE)
486 hybscal = weight_product;
495 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
499 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
503 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
504 rinv11 = 1.0/sqrt(rsq11);
505 rinv21 = 1.0/sqrt(rsq21);
506 rinv31 = 1.0/sqrt(rsq31);
509 tj = nti+2*type[jnr];
511 c12 = vdwparam[tj+1];
520 Geps = eps*VFtab[nnn+2];
521 Heps2 = eps2*VFtab[nnn+3];
524 FF = Fp+Geps+2.0*Heps2;
527 vctot = vctot + vcoul;
531 Geps = eps*VFtab[nnn+2];
532 Heps2 = eps2*VFtab[nnn+3];
535 FF = Fp+Geps+2.0*Heps2;
541 Geps = eps*VFtab[nnn+2];
542 Heps2 = eps2*VFtab[nnn+3];
545 FF = Fp+Geps+2.0*Heps2;
548 Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12;
549 fscal = -((fijC+fijD+fijR)*tabscale)*rinv11;
551 if(force_cap>0 && (fabs(fscal)> force_cap)){
552 fscal=force_cap*fscal/fabs(fscal);
560 fjx1 = faction[j3+0] - tx;
561 fjy1 = faction[j3+1] - ty;
562 fjz1 = faction[j3+2] - tz;
572 Geps = eps*VFtab[nnn+2];
573 Heps2 = eps2*VFtab[nnn+3];
576 FF = Fp+Geps+2.0*Heps2;
579 vctot = vctot + vcoul;
580 fscal = -((fijC)*tabscale)*rinv21;
582 if(force_cap>0 && (fabs(fscal)> force_cap)){
583 fscal=force_cap*fscal/fabs(fscal);
602 Geps = eps*VFtab[nnn+2];
603 Heps2 = eps2*VFtab[nnn+3];
606 FF = Fp+Geps+2.0*Heps2;
609 vctot = vctot + vcoul;
610 fscal = -((fijC)*tabscale)*rinv31;
612 if(force_cap>0 && (fabs(fscal)> force_cap)){
613 fscal=force_cap*fscal/fabs(fscal);
621 faction[j3+0] = fjx1 - tx;
622 faction[j3+1] = fjy1 - ty;
623 faction[j3+2] = fjz1 - tz;
626 faction[ii3+0] = faction[ii3+0] + fix1;
627 faction[ii3+1] = faction[ii3+1] + fiy1;
628 faction[ii3+2] = faction[ii3+2] + fiz1;
629 faction[ii3+3] = faction[ii3+3] + fix2;
630 faction[ii3+4] = faction[ii3+4] + fiy2;
631 faction[ii3+5] = faction[ii3+5] + fiz2;
632 faction[ii3+6] = faction[ii3+6] + fix3;
633 faction[ii3+7] = faction[ii3+7] + fiy3;
634 faction[ii3+8] = faction[ii3+8] + fiz3;
635 fshift[is3] = fshift[is3]+fix1+fix2+fix3;
636 fshift[is3+1] = fshift[is3+1]+fiy1+fiy2+fiy3;
637 fshift[is3+2] = fshift[is3+2]+fiz1+fiz2+fiz3;
639 Vc[ggid] = Vc[ggid] + vctot;
640 Vvdw[ggid] = Vvdw[ggid] + Vvdwtot;
641 ninner = ninner + nj1 - nj0;
644 nouter = nouter + nn1 - nn0;