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_kernel121_adress.h"
32 * Gromacs nonbonded kernel nb_kernel121_adress_cg
33 * Coulomb interaction: Normal Coulomb
34 * VdW interaction: Buckingham
35 * water optimization: SPC/TIP3P - other atoms
36 * Calculate forces: yes
38 void nb_kernel121_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 ix1,iy1,iz1,fix1,fiy1,fiz1;
87 real ix2,iy2,iz2,fix2,fiy2,fiz2;
88 real ix3,iy3,iz3,fix3,fiy3,fiz3;
89 real jx1,jy1,jz1,fjx1,fjy1,fjz1;
90 real dx11,dy11,dz11,rsq11,rinv11;
91 real dx21,dy21,dz21,rsq21,rinv21;
92 real dx31,dy31,dz31,rsq31,rinv31;
95 real weight_cg1, weight_cg2, weight_product;
100 nthreads = *p_nthreads;
104 tabscale = *p_tabscale;
106 qO = facel*charge[ii];
107 qH = facel*charge[ii+1];
108 nti = 3*ntype*type[ii];
115 #ifdef GMX_THREAD_SHM_FDECOMP
116 tMPI_Thread_mutex_lock((tMPI_Thread_mutex_t *)mtx);
118 nn1 = nn0+(nri-nn0)/(2*nthreads)+10;
120 tMPI_Thread_mutex_unlock((tMPI_Thread_mutex_t *)mtx);
127 for(n=nn0; (n<nn1); n++)
131 shY = shiftvec[is3+1];
132 shZ = shiftvec[is3+2];
137 ix1 = shX + pos[ii3+0];
138 iy1 = shY + pos[ii3+1];
139 iz1 = shZ + pos[ii3+2];
140 ix2 = shX + pos[ii3+3];
141 iy2 = shY + pos[ii3+4];
142 iz2 = shZ + pos[ii3+5];
143 ix3 = shX + pos[ii3+6];
144 iy3 = shY + pos[ii3+7];
145 iz3 = shZ + pos[ii3+8];
159 for(k=nj0; (k<nj1); k++)
162 weight_cg2 = wf[jnr];
163 weight_product = weight_cg1*weight_cg2;
164 if (weight_product < ALMOST_ZERO) {
167 else if (weight_product >= ALMOST_ONE)
169 /* force is zero, skip this molecule */
174 hybscal = 1.0 - weight_product;
183 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
187 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
191 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
192 rinv11 = 1.0/sqrt(rsq11);
193 rinv21 = 1.0/sqrt(rsq21);
194 rinv31 = 1.0/sqrt(rsq31);
197 tj = nti+3*type[jnr];
199 cexp1 = vdwparam[tj+1];
200 cexp2 = vdwparam[tj+2];
201 rinvsq = rinv11*rinv11;
204 rinvsix = rinvsq*rinvsq*rinvsq;
206 br = cexp2*rsq11*rinv11;
207 Vvdwexp = cexp1*exp(-br);
208 Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6;
209 fscal = (vcoul+br*Vvdwexp-6.0*Vvdw6)*rinvsq;
217 fjx1 = faction[j3+0] - tx;
218 fjy1 = faction[j3+1] - ty;
219 fjz1 = faction[j3+2] - tz;
221 rinvsq = rinv21*rinv21;
224 fscal = (vcoul)*rinvsq;
235 rinvsq = rinv31*rinv31;
238 fscal = (vcoul)*rinvsq;
246 faction[j3+0] = fjx1 - tx;
247 faction[j3+1] = fjy1 - ty;
248 faction[j3+2] = fjz1 - tz;
251 faction[ii3+0] = faction[ii3+0] + fix1;
252 faction[ii3+1] = faction[ii3+1] + fiy1;
253 faction[ii3+2] = faction[ii3+2] + fiz1;
254 faction[ii3+3] = faction[ii3+3] + fix2;
255 faction[ii3+4] = faction[ii3+4] + fiy2;
256 faction[ii3+5] = faction[ii3+5] + fiz2;
257 faction[ii3+6] = faction[ii3+6] + fix3;
258 faction[ii3+7] = faction[ii3+7] + fiy3;
259 faction[ii3+8] = faction[ii3+8] + fiz3;
260 fshift[is3] = fshift[is3]+fix1+fix2+fix3;
261 fshift[is3+1] = fshift[is3+1]+fiy1+fiy2+fiy3;
262 fshift[is3+2] = fshift[is3+2]+fiz1+fiz2+fiz3;
264 Vc[ggid] = Vc[ggid] + vctot;
265 Vvdw[ggid] = Vvdw[ggid] + Vvdwtot;
266 ninner = ninner + nj1 - nj0;
269 nouter = nouter + nn1 - nn0;
282 * Gromacs nonbonded kernel nb_kernel121_adress_ex
283 * Coulomb interaction: Normal Coulomb
284 * VdW interaction: Buckingham
285 * water optimization: SPC/TIP3P - other atoms
286 * Calculate forces: yes
288 void nb_kernel121_adress_ex(
322 int nri,ntype,nthreads;
323 real facel,krf,crf,tabscale,gbtabscale;
324 int n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid;
325 int nn0,nn1,nouter,ninner;
336 real ix1,iy1,iz1,fix1,fiy1,fiz1;
337 real ix2,iy2,iz2,fix2,fiy2,fiz2;
338 real ix3,iy3,iz3,fix3,fiy3,fiz3;
339 real jx1,jy1,jz1,fjx1,fjy1,fjz1;
340 real dx11,dy11,dz11,rsq11,rinv11;
341 real dx21,dy21,dz21,rsq21,rinv21;
342 real dx31,dy31,dz31,rsq31,rinv31;
345 real weight_cg1, weight_cg2, weight_product;
350 nthreads = *p_nthreads;
354 tabscale = *p_tabscale;
356 qO = facel*charge[ii];
357 qH = facel*charge[ii+1];
358 nti = 3*ntype*type[ii];
365 #ifdef GMX_THREAD_SHM_FDECOMP
366 tMPI_Thread_mutex_lock((tMPI_Thread_mutex_t *)mtx);
368 nn1 = nn0+(nri-nn0)/(2*nthreads)+10;
370 tMPI_Thread_mutex_unlock((tMPI_Thread_mutex_t *)mtx);
377 for(n=nn0; (n<nn1); n++)
381 shY = shiftvec[is3+1];
382 shZ = shiftvec[is3+2];
387 ix1 = shX + pos[ii3+0];
388 iy1 = shY + pos[ii3+1];
389 iz1 = shZ + pos[ii3+2];
390 ix2 = shX + pos[ii3+3];
391 iy2 = shY + pos[ii3+4];
392 iz2 = shZ + pos[ii3+5];
393 ix3 = shX + pos[ii3+6];
394 iy3 = shY + pos[ii3+7];
395 iz3 = shZ + pos[ii3+8];
409 for(k=nj0; (k<nj1); k++)
412 weight_cg2 = wf[jnr];
413 weight_product = weight_cg1*weight_cg2;
414 if (weight_product < ALMOST_ZERO) {
415 /* force is zero, skip this molecule */
418 else if (weight_product >= ALMOST_ONE)
424 hybscal = weight_product;
433 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
437 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
441 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
442 rinv11 = 1.0/sqrt(rsq11);
443 rinv21 = 1.0/sqrt(rsq21);
444 rinv31 = 1.0/sqrt(rsq31);
447 tj = nti+3*type[jnr];
449 cexp1 = vdwparam[tj+1];
450 cexp2 = vdwparam[tj+2];
451 rinvsq = rinv11*rinv11;
454 rinvsix = rinvsq*rinvsq*rinvsq;
456 br = cexp2*rsq11*rinv11;
457 Vvdwexp = cexp1*exp(-br);
458 Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6;
459 fscal = (vcoul+br*Vvdwexp-6.0*Vvdw6)*rinvsq;
461 if(force_cap>0 && (fabs(fscal)> force_cap)){
462 fscal=force_cap*fscal/fabs(fscal);
470 fjx1 = faction[j3+0] - tx;
471 fjy1 = faction[j3+1] - ty;
472 fjz1 = faction[j3+2] - tz;
474 rinvsq = rinv21*rinv21;
477 fscal = (vcoul)*rinvsq;
479 if(force_cap>0 && (fabs(fscal)> force_cap)){
480 fscal=force_cap*fscal/fabs(fscal);
491 rinvsq = rinv31*rinv31;
494 fscal = (vcoul)*rinvsq;
496 if(force_cap>0 && (fabs(fscal)> force_cap)){
497 fscal=force_cap*fscal/fabs(fscal);
505 faction[j3+0] = fjx1 - tx;
506 faction[j3+1] = fjy1 - ty;
507 faction[j3+2] = fjz1 - tz;
510 faction[ii3+0] = faction[ii3+0] + fix1;
511 faction[ii3+1] = faction[ii3+1] + fiy1;
512 faction[ii3+2] = faction[ii3+2] + fiz1;
513 faction[ii3+3] = faction[ii3+3] + fix2;
514 faction[ii3+4] = faction[ii3+4] + fiy2;
515 faction[ii3+5] = faction[ii3+5] + fiz2;
516 faction[ii3+6] = faction[ii3+6] + fix3;
517 faction[ii3+7] = faction[ii3+7] + fiy3;
518 faction[ii3+8] = faction[ii3+8] + fiz3;
519 fshift[is3] = fshift[is3]+fix1+fix2+fix3;
520 fshift[is3+1] = fshift[is3+1]+fiy1+fiy2+fiy3;
521 fshift[is3+2] = fshift[is3+2]+fiz1+fiz2+fiz3;
523 Vc[ggid] = Vc[ggid] + vctot;
524 Vvdw[ggid] = Vvdw[ggid] + Vvdwtot;
525 ninner = ninner + nj1 - nj0;
528 nouter = nouter + nn1 - nn0;