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_kernel221_adress.h"
32 * Gromacs nonbonded kernel nb_kernel221_adress_cg
33 * Coulomb interaction: Reaction field
34 * VdW interaction: Buckingham
35 * water optimization: SPC/TIP3P - other atoms
36 * Calculate forces: yes
38 void nb_kernel221_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 ix1,iy1,iz1,fix1,fiy1,fiz1;
88 real ix2,iy2,iz2,fix2,fiy2,fiz2;
89 real ix3,iy3,iz3,fix3,fiy3,fiz3;
90 real jx1,jy1,jz1,fjx1,fjy1,fjz1;
91 real dx11,dy11,dz11,rsq11,rinv11;
92 real dx21,dy21,dz21,rsq21,rinv21;
93 real dx31,dy31,dz31,rsq31,rinv31;
96 real weight_cg1, weight_cg2, weight_product;
101 nthreads = *p_nthreads;
105 tabscale = *p_tabscale;
107 qO = facel*charge[ii];
108 qH = facel*charge[ii+1];
109 nti = 3*ntype*type[ii];
116 #ifdef GMX_THREAD_SHM_FDECOMP
117 tMPI_Thread_mutex_lock((tMPI_Thread_mutex_t *)mtx);
119 nn1 = nn0+(nri-nn0)/(2*nthreads)+10;
121 tMPI_Thread_mutex_unlock((tMPI_Thread_mutex_t *)mtx);
128 for(n=nn0; (n<nn1); n++)
132 shY = shiftvec[is3+1];
133 shZ = shiftvec[is3+2];
138 ix1 = shX + pos[ii3+0];
139 iy1 = shY + pos[ii3+1];
140 iz1 = shZ + pos[ii3+2];
141 ix2 = shX + pos[ii3+3];
142 iy2 = shY + pos[ii3+4];
143 iz2 = shZ + pos[ii3+5];
144 ix3 = shX + pos[ii3+6];
145 iy3 = shY + pos[ii3+7];
146 iz3 = shZ + pos[ii3+8];
160 for(k=nj0; (k<nj1); k++)
163 weight_cg2 = wf[jnr];
164 weight_product = weight_cg1*weight_cg2;
165 if (weight_product < ALMOST_ZERO) {
168 else if (weight_product >= ALMOST_ONE)
170 /* force is zero, skip this molecule */
175 hybscal = 1.0 - weight_product;
184 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
188 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
192 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
193 rinv11 = 1.0/sqrt(rsq11);
194 rinv21 = 1.0/sqrt(rsq21);
195 rinv31 = 1.0/sqrt(rsq31);
198 tj = nti+3*type[jnr];
200 cexp1 = vdwparam[tj+1];
201 cexp2 = vdwparam[tj+2];
202 rinvsq = rinv11*rinv11;
204 vcoul = qq*(rinv11+krsq-crf);
206 rinvsix = rinvsq*rinvsq*rinvsq;
208 br = cexp2*rsq11*rinv11;
209 Vvdwexp = cexp1*exp(-br);
210 Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6;
211 fscal = (qq*(rinv11-2.0*krsq)+br*Vvdwexp-6.0*Vvdw6)*rinvsq;
219 fjx1 = faction[j3+0] - tx;
220 fjy1 = faction[j3+1] - ty;
221 fjz1 = faction[j3+2] - tz;
223 rinvsq = rinv21*rinv21;
225 vcoul = qq*(rinv21+krsq-crf);
227 fscal = (qq*(rinv21-2.0*krsq))*rinvsq;
238 rinvsq = rinv31*rinv31;
240 vcoul = qq*(rinv31+krsq-crf);
242 fscal = (qq*(rinv31-2.0*krsq))*rinvsq;
250 faction[j3+0] = fjx1 - tx;
251 faction[j3+1] = fjy1 - ty;
252 faction[j3+2] = fjz1 - tz;
255 faction[ii3+0] = faction[ii3+0] + fix1;
256 faction[ii3+1] = faction[ii3+1] + fiy1;
257 faction[ii3+2] = faction[ii3+2] + fiz1;
258 faction[ii3+3] = faction[ii3+3] + fix2;
259 faction[ii3+4] = faction[ii3+4] + fiy2;
260 faction[ii3+5] = faction[ii3+5] + fiz2;
261 faction[ii3+6] = faction[ii3+6] + fix3;
262 faction[ii3+7] = faction[ii3+7] + fiy3;
263 faction[ii3+8] = faction[ii3+8] + fiz3;
264 fshift[is3] = fshift[is3]+fix1+fix2+fix3;
265 fshift[is3+1] = fshift[is3+1]+fiy1+fiy2+fiy3;
266 fshift[is3+2] = fshift[is3+2]+fiz1+fiz2+fiz3;
268 Vc[ggid] = Vc[ggid] + vctot;
269 Vvdw[ggid] = Vvdw[ggid] + Vvdwtot;
270 ninner = ninner + nj1 - nj0;
273 nouter = nouter + nn1 - nn0;
286 * Gromacs nonbonded kernel nb_kernel221_adress_ex
287 * Coulomb interaction: Reaction field
288 * VdW interaction: Buckingham
289 * water optimization: SPC/TIP3P - other atoms
290 * Calculate forces: yes
292 void nb_kernel221_adress_ex(
326 int nri,ntype,nthreads;
327 real facel,krf,crf,tabscale,gbtabscale;
328 int n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid;
329 int nn0,nn1,nouter,ninner;
341 real ix1,iy1,iz1,fix1,fiy1,fiz1;
342 real ix2,iy2,iz2,fix2,fiy2,fiz2;
343 real ix3,iy3,iz3,fix3,fiy3,fiz3;
344 real jx1,jy1,jz1,fjx1,fjy1,fjz1;
345 real dx11,dy11,dz11,rsq11,rinv11;
346 real dx21,dy21,dz21,rsq21,rinv21;
347 real dx31,dy31,dz31,rsq31,rinv31;
350 real weight_cg1, weight_cg2, weight_product;
355 nthreads = *p_nthreads;
359 tabscale = *p_tabscale;
361 qO = facel*charge[ii];
362 qH = facel*charge[ii+1];
363 nti = 3*ntype*type[ii];
370 #ifdef GMX_THREAD_SHM_FDECOMP
371 tMPI_Thread_mutex_lock((tMPI_Thread_mutex_t *)mtx);
373 nn1 = nn0+(nri-nn0)/(2*nthreads)+10;
375 tMPI_Thread_mutex_unlock((tMPI_Thread_mutex_t *)mtx);
382 for(n=nn0; (n<nn1); n++)
386 shY = shiftvec[is3+1];
387 shZ = shiftvec[is3+2];
392 ix1 = shX + pos[ii3+0];
393 iy1 = shY + pos[ii3+1];
394 iz1 = shZ + pos[ii3+2];
395 ix2 = shX + pos[ii3+3];
396 iy2 = shY + pos[ii3+4];
397 iz2 = shZ + pos[ii3+5];
398 ix3 = shX + pos[ii3+6];
399 iy3 = shY + pos[ii3+7];
400 iz3 = shZ + pos[ii3+8];
414 for(k=nj0; (k<nj1); k++)
417 weight_cg2 = wf[jnr];
418 weight_product = weight_cg1*weight_cg2;
419 if (weight_product < ALMOST_ZERO) {
420 /* force is zero, skip this molecule */
423 else if (weight_product >= ALMOST_ONE)
429 hybscal = weight_product;
438 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
442 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
446 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
447 rinv11 = 1.0/sqrt(rsq11);
448 rinv21 = 1.0/sqrt(rsq21);
449 rinv31 = 1.0/sqrt(rsq31);
452 tj = nti+3*type[jnr];
454 cexp1 = vdwparam[tj+1];
455 cexp2 = vdwparam[tj+2];
456 rinvsq = rinv11*rinv11;
458 vcoul = qq*(rinv11+krsq-crf);
460 rinvsix = rinvsq*rinvsq*rinvsq;
462 br = cexp2*rsq11*rinv11;
463 Vvdwexp = cexp1*exp(-br);
464 Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6;
465 fscal = (qq*(rinv11-2.0*krsq)+br*Vvdwexp-6.0*Vvdw6)*rinvsq;
467 if(force_cap>0 && (fabs(fscal)> force_cap)){
468 fscal=force_cap*fscal/fabs(fscal);
476 fjx1 = faction[j3+0] - tx;
477 fjy1 = faction[j3+1] - ty;
478 fjz1 = faction[j3+2] - tz;
480 rinvsq = rinv21*rinv21;
482 vcoul = qq*(rinv21+krsq-crf);
484 fscal = (qq*(rinv21-2.0*krsq))*rinvsq;
486 if(force_cap>0 && (fabs(fscal)> force_cap)){
487 fscal=force_cap*fscal/fabs(fscal);
498 rinvsq = rinv31*rinv31;
500 vcoul = qq*(rinv31+krsq-crf);
502 fscal = (qq*(rinv31-2.0*krsq))*rinvsq;
504 if(force_cap>0 && (fabs(fscal)> force_cap)){
505 fscal=force_cap*fscal/fabs(fscal);
513 faction[j3+0] = fjx1 - tx;
514 faction[j3+1] = fjy1 - ty;
515 faction[j3+2] = fjz1 - tz;
518 faction[ii3+0] = faction[ii3+0] + fix1;
519 faction[ii3+1] = faction[ii3+1] + fiy1;
520 faction[ii3+2] = faction[ii3+2] + fiz1;
521 faction[ii3+3] = faction[ii3+3] + fix2;
522 faction[ii3+4] = faction[ii3+4] + fiy2;
523 faction[ii3+5] = faction[ii3+5] + fiz2;
524 faction[ii3+6] = faction[ii3+6] + fix3;
525 faction[ii3+7] = faction[ii3+7] + fiy3;
526 faction[ii3+8] = faction[ii3+8] + fiz3;
527 fshift[is3] = fshift[is3]+fix1+fix2+fix3;
528 fshift[is3+1] = fshift[is3+1]+fiy1+fiy2+fiy3;
529 fshift[is3+2] = fshift[is3+2]+fiz1+fiz2+fiz3;
531 Vc[ggid] = Vc[ggid] + vctot;
532 Vvdw[ggid] = Vvdw[ggid] + Vvdwtot;
533 ninner = ninner + nj1 - nj0;
536 nouter = nouter + nn1 - nn0;