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_kernel201_adress.h"
32 * Gromacs nonbonded kernel nb_kernel201_adress_cg
33 * Coulomb interaction: Reaction field
34 * VdW interaction: Not calculated
35 * water optimization: SPC/TIP3P - other atoms
36 * Calculate forces: yes
38 void nb_kernel201_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 ix1,iy1,iz1,fix1,fiy1,fiz1;
83 real ix2,iy2,iz2,fix2,fiy2,fiz2;
84 real ix3,iy3,iz3,fix3,fiy3,fiz3;
85 real jx1,jy1,jz1,fjx1,fjy1,fjz1;
86 real dx11,dy11,dz11,rsq11,rinv11;
87 real dx21,dy21,dz21,rsq21,rinv21;
88 real dx31,dy31,dz31,rsq31,rinv31;
90 real weight_cg1, weight_cg2, weight_product;
95 nthreads = *p_nthreads;
99 tabscale = *p_tabscale;
101 qO = facel*charge[ii];
102 qH = facel*charge[ii+1];
109 #ifdef GMX_THREAD_SHM_FDECOMP
110 tMPI_Thread_mutex_lock((tMPI_Thread_mutex_t *)mtx);
112 nn1 = nn0+(nri-nn0)/(2*nthreads)+10;
114 tMPI_Thread_mutex_unlock((tMPI_Thread_mutex_t *)mtx);
121 for(n=nn0; (n<nn1); n++)
125 shY = shiftvec[is3+1];
126 shZ = shiftvec[is3+2];
131 ix1 = shX + pos[ii3+0];
132 iy1 = shY + pos[ii3+1];
133 iz1 = shZ + pos[ii3+2];
134 ix2 = shX + pos[ii3+3];
135 iy2 = shY + pos[ii3+4];
136 iz2 = shZ + pos[ii3+5];
137 ix3 = shX + pos[ii3+6];
138 iy3 = shY + pos[ii3+7];
139 iz3 = shZ + pos[ii3+8];
152 for(k=nj0; (k<nj1); k++)
155 weight_cg2 = wf[jnr];
156 weight_product = weight_cg1*weight_cg2;
157 if (weight_product < ALMOST_ZERO) {
160 else if (weight_product >= ALMOST_ONE)
162 /* force is zero, skip this molecule */
167 hybscal = 1.0 - weight_product;
176 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
180 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
184 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
185 rinv11 = 1.0/sqrt(rsq11);
186 rinv21 = 1.0/sqrt(rsq21);
187 rinv31 = 1.0/sqrt(rsq31);
190 rinvsq = rinv11*rinv11;
192 vcoul = qq*(rinv11+krsq-crf);
194 fscal = (qq*(rinv11-2.0*krsq))*rinvsq;
202 fjx1 = faction[j3+0] - tx;
203 fjy1 = faction[j3+1] - ty;
204 fjz1 = faction[j3+2] - tz;
206 rinvsq = rinv21*rinv21;
208 vcoul = qq*(rinv21+krsq-crf);
210 fscal = (qq*(rinv21-2.0*krsq))*rinvsq;
221 rinvsq = rinv31*rinv31;
223 vcoul = qq*(rinv31+krsq-crf);
225 fscal = (qq*(rinv31-2.0*krsq))*rinvsq;
233 faction[j3+0] = fjx1 - tx;
234 faction[j3+1] = fjy1 - ty;
235 faction[j3+2] = fjz1 - tz;
238 faction[ii3+0] = faction[ii3+0] + fix1;
239 faction[ii3+1] = faction[ii3+1] + fiy1;
240 faction[ii3+2] = faction[ii3+2] + fiz1;
241 faction[ii3+3] = faction[ii3+3] + fix2;
242 faction[ii3+4] = faction[ii3+4] + fiy2;
243 faction[ii3+5] = faction[ii3+5] + fiz2;
244 faction[ii3+6] = faction[ii3+6] + fix3;
245 faction[ii3+7] = faction[ii3+7] + fiy3;
246 faction[ii3+8] = faction[ii3+8] + fiz3;
247 fshift[is3] = fshift[is3]+fix1+fix2+fix3;
248 fshift[is3+1] = fshift[is3+1]+fiy1+fiy2+fiy3;
249 fshift[is3+2] = fshift[is3+2]+fiz1+fiz2+fiz3;
251 Vc[ggid] = Vc[ggid] + vctot;
252 ninner = ninner + nj1 - nj0;
255 nouter = nouter + nn1 - nn0;
268 * Gromacs nonbonded kernel nb_kernel201_adress_ex
269 * Coulomb interaction: Reaction field
270 * VdW interaction: Not calculated
271 * water optimization: SPC/TIP3P - other atoms
272 * Calculate forces: yes
274 void nb_kernel201_adress_ex(
308 int nri,ntype,nthreads;
309 real facel,krf,crf,tabscale,gbtabscale;
310 int n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid;
311 int nn0,nn1,nouter,ninner;
318 real ix1,iy1,iz1,fix1,fiy1,fiz1;
319 real ix2,iy2,iz2,fix2,fiy2,fiz2;
320 real ix3,iy3,iz3,fix3,fiy3,fiz3;
321 real jx1,jy1,jz1,fjx1,fjy1,fjz1;
322 real dx11,dy11,dz11,rsq11,rinv11;
323 real dx21,dy21,dz21,rsq21,rinv21;
324 real dx31,dy31,dz31,rsq31,rinv31;
326 real weight_cg1, weight_cg2, weight_product;
331 nthreads = *p_nthreads;
335 tabscale = *p_tabscale;
337 qO = facel*charge[ii];
338 qH = facel*charge[ii+1];
345 #ifdef GMX_THREAD_SHM_FDECOMP
346 tMPI_Thread_mutex_lock((tMPI_Thread_mutex_t *)mtx);
348 nn1 = nn0+(nri-nn0)/(2*nthreads)+10;
350 tMPI_Thread_mutex_unlock((tMPI_Thread_mutex_t *)mtx);
357 for(n=nn0; (n<nn1); n++)
361 shY = shiftvec[is3+1];
362 shZ = shiftvec[is3+2];
367 ix1 = shX + pos[ii3+0];
368 iy1 = shY + pos[ii3+1];
369 iz1 = shZ + pos[ii3+2];
370 ix2 = shX + pos[ii3+3];
371 iy2 = shY + pos[ii3+4];
372 iz2 = shZ + pos[ii3+5];
373 ix3 = shX + pos[ii3+6];
374 iy3 = shY + pos[ii3+7];
375 iz3 = shZ + pos[ii3+8];
388 for(k=nj0; (k<nj1); k++)
391 weight_cg2 = wf[jnr];
392 weight_product = weight_cg1*weight_cg2;
393 if (weight_product < ALMOST_ZERO) {
394 /* force is zero, skip this molecule */
397 else if (weight_product >= ALMOST_ONE)
403 hybscal = weight_product;
412 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
416 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
420 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
421 rinv11 = 1.0/sqrt(rsq11);
422 rinv21 = 1.0/sqrt(rsq21);
423 rinv31 = 1.0/sqrt(rsq31);
426 rinvsq = rinv11*rinv11;
428 vcoul = qq*(rinv11+krsq-crf);
430 fscal = (qq*(rinv11-2.0*krsq))*rinvsq;
438 fjx1 = faction[j3+0] - tx;
439 fjy1 = faction[j3+1] - ty;
440 fjz1 = faction[j3+2] - tz;
442 rinvsq = rinv21*rinv21;
444 vcoul = qq*(rinv21+krsq-crf);
446 fscal = (qq*(rinv21-2.0*krsq))*rinvsq;
457 rinvsq = rinv31*rinv31;
459 vcoul = qq*(rinv31+krsq-crf);
461 fscal = (qq*(rinv31-2.0*krsq))*rinvsq;
469 faction[j3+0] = fjx1 - tx;
470 faction[j3+1] = fjy1 - ty;
471 faction[j3+2] = fjz1 - tz;
474 faction[ii3+0] = faction[ii3+0] + fix1;
475 faction[ii3+1] = faction[ii3+1] + fiy1;
476 faction[ii3+2] = faction[ii3+2] + fiz1;
477 faction[ii3+3] = faction[ii3+3] + fix2;
478 faction[ii3+4] = faction[ii3+4] + fiy2;
479 faction[ii3+5] = faction[ii3+5] + fiz2;
480 faction[ii3+6] = faction[ii3+6] + fix3;
481 faction[ii3+7] = faction[ii3+7] + fiy3;
482 faction[ii3+8] = faction[ii3+8] + fiz3;
483 fshift[is3] = fshift[is3]+fix1+fix2+fix3;
484 fshift[is3+1] = fshift[is3+1]+fiy1+fiy2+fiy3;
485 fshift[is3+2] = fshift[is3+2]+fiz1+fiz2+fiz3;
487 Vc[ggid] = Vc[ggid] + vctot;
488 ninner = ninner + nj1 - nj0;
491 nouter = nouter + nn1 - nn0;