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_kernel301_adress.h"
32 * Gromacs nonbonded kernel nb_kernel301_adress_cg
33 * Coulomb interaction: Tabulated
34 * VdW interaction: Not calculated
35 * water optimization: SPC/TIP3P - other atoms
36 * Calculate forces: yes
38 void nb_kernel301_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;
82 real Y,F,Geps,Heps2,Fp,VV;
85 real ix1,iy1,iz1,fix1,fiy1,fiz1;
86 real ix2,iy2,iz2,fix2,fiy2,fiz2;
87 real ix3,iy3,iz3,fix3,fiy3,fiz3;
88 real jx1,jy1,jz1,fjx1,fjy1,fjz1;
89 real dx11,dy11,dz11,rsq11,rinv11;
90 real dx21,dy21,dz21,rsq21,rinv21;
91 real dx31,dy31,dz31,rsq31,rinv31;
93 real weight_cg1, weight_cg2, weight_product;
98 nthreads = *p_nthreads;
102 tabscale = *p_tabscale;
104 qO = facel*charge[ii];
105 qH = facel*charge[ii+1];
112 #ifdef GMX_THREAD_SHM_FDECOMP
113 tMPI_Thread_mutex_lock((tMPI_Thread_mutex_t *)mtx);
115 nn1 = nn0+(nri-nn0)/(2*nthreads)+10;
117 tMPI_Thread_mutex_unlock((tMPI_Thread_mutex_t *)mtx);
124 for(n=nn0; (n<nn1); n++)
128 shY = shiftvec[is3+1];
129 shZ = shiftvec[is3+2];
134 ix1 = shX + pos[ii3+0];
135 iy1 = shY + pos[ii3+1];
136 iz1 = shZ + pos[ii3+2];
137 ix2 = shX + pos[ii3+3];
138 iy2 = shY + pos[ii3+4];
139 iz2 = shZ + pos[ii3+5];
140 ix3 = shX + pos[ii3+6];
141 iy3 = shY + pos[ii3+7];
142 iz3 = shZ + pos[ii3+8];
155 for(k=nj0; (k<nj1); k++)
158 weight_cg2 = wf[jnr];
159 weight_product = weight_cg1*weight_cg2;
160 if (weight_product < ALMOST_ZERO) {
163 else if (weight_product >= ALMOST_ONE)
165 /* force is zero, skip this molecule */
170 hybscal = 1.0 - weight_product;
179 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
183 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
187 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
188 rinv11 = 1.0/sqrt(rsq11);
189 rinv21 = 1.0/sqrt(rsq21);
190 rinv31 = 1.0/sqrt(rsq31);
201 Geps = eps*VFtab[nnn+2];
202 Heps2 = eps2*VFtab[nnn+3];
205 FF = Fp+Geps+2.0*Heps2;
208 vctot = vctot + vcoul;
209 fscal = -((fijC)*tabscale)*rinv11;
217 fjx1 = faction[j3+0] - tx;
218 fjy1 = faction[j3+1] - ty;
219 fjz1 = faction[j3+2] - tz;
229 Geps = eps*VFtab[nnn+2];
230 Heps2 = eps2*VFtab[nnn+3];
233 FF = Fp+Geps+2.0*Heps2;
236 vctot = vctot + vcoul;
237 fscal = -((fijC)*tabscale)*rinv21;
256 Geps = eps*VFtab[nnn+2];
257 Heps2 = eps2*VFtab[nnn+3];
260 FF = Fp+Geps+2.0*Heps2;
263 vctot = vctot + vcoul;
264 fscal = -((fijC)*tabscale)*rinv31;
272 faction[j3+0] = fjx1 - tx;
273 faction[j3+1] = fjy1 - ty;
274 faction[j3+2] = fjz1 - tz;
277 faction[ii3+0] = faction[ii3+0] + fix1;
278 faction[ii3+1] = faction[ii3+1] + fiy1;
279 faction[ii3+2] = faction[ii3+2] + fiz1;
280 faction[ii3+3] = faction[ii3+3] + fix2;
281 faction[ii3+4] = faction[ii3+4] + fiy2;
282 faction[ii3+5] = faction[ii3+5] + fiz2;
283 faction[ii3+6] = faction[ii3+6] + fix3;
284 faction[ii3+7] = faction[ii3+7] + fiy3;
285 faction[ii3+8] = faction[ii3+8] + fiz3;
286 fshift[is3] = fshift[is3]+fix1+fix2+fix3;
287 fshift[is3+1] = fshift[is3+1]+fiy1+fiy2+fiy3;
288 fshift[is3+2] = fshift[is3+2]+fiz1+fiz2+fiz3;
290 Vc[ggid] = Vc[ggid] + vctot;
291 ninner = ninner + nj1 - nj0;
294 nouter = nouter + nn1 - nn0;
307 * Gromacs nonbonded kernel nb_kernel301_adress_ex
308 * Coulomb interaction: Tabulated
309 * VdW interaction: Not calculated
310 * water optimization: SPC/TIP3P - other atoms
311 * Calculate forces: yes
313 void nb_kernel301_adress_ex(
347 int nri,ntype,nthreads;
348 real facel,krf,crf,tabscale,gbtabscale;
349 int n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid;
350 int nn0,nn1,nouter,ninner;
357 real Y,F,Geps,Heps2,Fp,VV;
360 real ix1,iy1,iz1,fix1,fiy1,fiz1;
361 real ix2,iy2,iz2,fix2,fiy2,fiz2;
362 real ix3,iy3,iz3,fix3,fiy3,fiz3;
363 real jx1,jy1,jz1,fjx1,fjy1,fjz1;
364 real dx11,dy11,dz11,rsq11,rinv11;
365 real dx21,dy21,dz21,rsq21,rinv21;
366 real dx31,dy31,dz31,rsq31,rinv31;
368 real weight_cg1, weight_cg2, weight_product;
373 nthreads = *p_nthreads;
377 tabscale = *p_tabscale;
379 qO = facel*charge[ii];
380 qH = facel*charge[ii+1];
387 #ifdef GMX_THREAD_SHM_FDECOMP
388 tMPI_Thread_mutex_lock((tMPI_Thread_mutex_t *)mtx);
390 nn1 = nn0+(nri-nn0)/(2*nthreads)+10;
392 tMPI_Thread_mutex_unlock((tMPI_Thread_mutex_t *)mtx);
399 for(n=nn0; (n<nn1); n++)
403 shY = shiftvec[is3+1];
404 shZ = shiftvec[is3+2];
409 ix1 = shX + pos[ii3+0];
410 iy1 = shY + pos[ii3+1];
411 iz1 = shZ + pos[ii3+2];
412 ix2 = shX + pos[ii3+3];
413 iy2 = shY + pos[ii3+4];
414 iz2 = shZ + pos[ii3+5];
415 ix3 = shX + pos[ii3+6];
416 iy3 = shY + pos[ii3+7];
417 iz3 = shZ + pos[ii3+8];
430 for(k=nj0; (k<nj1); k++)
433 weight_cg2 = wf[jnr];
434 weight_product = weight_cg1*weight_cg2;
435 if (weight_product < ALMOST_ZERO) {
436 /* force is zero, skip this molecule */
439 else if (weight_product >= ALMOST_ONE)
445 hybscal = weight_product;
454 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
458 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
462 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
463 rinv11 = 1.0/sqrt(rsq11);
464 rinv21 = 1.0/sqrt(rsq21);
465 rinv31 = 1.0/sqrt(rsq31);
476 Geps = eps*VFtab[nnn+2];
477 Heps2 = eps2*VFtab[nnn+3];
480 FF = Fp+Geps+2.0*Heps2;
483 vctot = vctot + vcoul;
484 fscal = -((fijC)*tabscale)*rinv11;
492 fjx1 = faction[j3+0] - tx;
493 fjy1 = faction[j3+1] - ty;
494 fjz1 = faction[j3+2] - tz;
504 Geps = eps*VFtab[nnn+2];
505 Heps2 = eps2*VFtab[nnn+3];
508 FF = Fp+Geps+2.0*Heps2;
511 vctot = vctot + vcoul;
512 fscal = -((fijC)*tabscale)*rinv21;
531 Geps = eps*VFtab[nnn+2];
532 Heps2 = eps2*VFtab[nnn+3];
535 FF = Fp+Geps+2.0*Heps2;
538 vctot = vctot + vcoul;
539 fscal = -((fijC)*tabscale)*rinv31;
547 faction[j3+0] = fjx1 - tx;
548 faction[j3+1] = fjy1 - ty;
549 faction[j3+2] = fjz1 - tz;
552 faction[ii3+0] = faction[ii3+0] + fix1;
553 faction[ii3+1] = faction[ii3+1] + fiy1;
554 faction[ii3+2] = faction[ii3+2] + fiz1;
555 faction[ii3+3] = faction[ii3+3] + fix2;
556 faction[ii3+4] = faction[ii3+4] + fiy2;
557 faction[ii3+5] = faction[ii3+5] + fiz2;
558 faction[ii3+6] = faction[ii3+6] + fix3;
559 faction[ii3+7] = faction[ii3+7] + fiy3;
560 faction[ii3+8] = faction[ii3+8] + fiz3;
561 fshift[is3] = fshift[is3]+fix1+fix2+fix3;
562 fshift[is3+1] = fshift[is3+1]+fiy1+fiy2+fiy3;
563 fshift[is3+2] = fshift[is3+2]+fiz1+fiz2+fiz3;
565 Vc[ggid] = Vc[ggid] + vctot;
566 ninner = ninner + nj1 - nj0;
569 nouter = nouter + nn1 - nn0;