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_kernel101_adress.h"
32 * Gromacs nonbonded kernel nb_kernel101_adress_cg
33 * Coulomb interaction: Normal Coulomb
34 * VdW interaction: Not calculated
35 * water optimization: SPC/TIP3P - other atoms
36 * Calculate forces: yes
38 void nb_kernel101_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;
81 real ix1,iy1,iz1,fix1,fiy1,fiz1;
82 real ix2,iy2,iz2,fix2,fiy2,fiz2;
83 real ix3,iy3,iz3,fix3,fiy3,fiz3;
84 real jx1,jy1,jz1,fjx1,fjy1,fjz1;
85 real dx11,dy11,dz11,rsq11,rinv11;
86 real dx21,dy21,dz21,rsq21,rinv21;
87 real dx31,dy31,dz31,rsq31,rinv31;
89 real weight_cg1, weight_cg2, weight_product;
94 nthreads = *p_nthreads;
98 tabscale = *p_tabscale;
100 qO = facel*charge[ii];
101 qH = facel*charge[ii+1];
108 #ifdef GMX_THREAD_SHM_FDECOMP
109 tMPI_Thread_mutex_lock((tMPI_Thread_mutex_t *)mtx);
111 nn1 = nn0+(nri-nn0)/(2*nthreads)+10;
113 tMPI_Thread_mutex_unlock((tMPI_Thread_mutex_t *)mtx);
120 for(n=nn0; (n<nn1); n++)
124 shY = shiftvec[is3+1];
125 shZ = shiftvec[is3+2];
130 ix1 = shX + pos[ii3+0];
131 iy1 = shY + pos[ii3+1];
132 iz1 = shZ + pos[ii3+2];
133 ix2 = shX + pos[ii3+3];
134 iy2 = shY + pos[ii3+4];
135 iz2 = shZ + pos[ii3+5];
136 ix3 = shX + pos[ii3+6];
137 iy3 = shY + pos[ii3+7];
138 iz3 = shZ + pos[ii3+8];
151 for(k=nj0; (k<nj1); k++)
154 weight_cg2 = wf[jnr];
155 weight_product = weight_cg1*weight_cg2;
156 if (weight_product < ALMOST_ZERO) {
159 else if (weight_product >= ALMOST_ONE)
161 /* force is zero, skip this molecule */
166 hybscal = 1.0 - weight_product;
175 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
179 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
183 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
184 rinv11 = 1.0/sqrt(rsq11);
185 rinv21 = 1.0/sqrt(rsq21);
186 rinv31 = 1.0/sqrt(rsq31);
189 rinvsq = rinv11*rinv11;
192 fscal = (vcoul)*rinvsq;
200 fjx1 = faction[j3+0] - tx;
201 fjy1 = faction[j3+1] - ty;
202 fjz1 = faction[j3+2] - tz;
204 rinvsq = rinv21*rinv21;
207 fscal = (vcoul)*rinvsq;
218 rinvsq = rinv31*rinv31;
221 fscal = (vcoul)*rinvsq;
229 faction[j3+0] = fjx1 - tx;
230 faction[j3+1] = fjy1 - ty;
231 faction[j3+2] = fjz1 - tz;
234 faction[ii3+0] = faction[ii3+0] + fix1;
235 faction[ii3+1] = faction[ii3+1] + fiy1;
236 faction[ii3+2] = faction[ii3+2] + fiz1;
237 faction[ii3+3] = faction[ii3+3] + fix2;
238 faction[ii3+4] = faction[ii3+4] + fiy2;
239 faction[ii3+5] = faction[ii3+5] + fiz2;
240 faction[ii3+6] = faction[ii3+6] + fix3;
241 faction[ii3+7] = faction[ii3+7] + fiy3;
242 faction[ii3+8] = faction[ii3+8] + fiz3;
243 fshift[is3] = fshift[is3]+fix1+fix2+fix3;
244 fshift[is3+1] = fshift[is3+1]+fiy1+fiy2+fiy3;
245 fshift[is3+2] = fshift[is3+2]+fiz1+fiz2+fiz3;
247 Vc[ggid] = Vc[ggid] + vctot;
248 ninner = ninner + nj1 - nj0;
251 nouter = nouter + nn1 - nn0;
264 * Gromacs nonbonded kernel nb_kernel101_adress_ex
265 * Coulomb interaction: Normal Coulomb
266 * VdW interaction: Not calculated
267 * water optimization: SPC/TIP3P - other atoms
268 * Calculate forces: yes
270 void nb_kernel101_adress_ex(
304 int nri,ntype,nthreads;
305 real facel,krf,crf,tabscale,gbtabscale;
306 int n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid;
307 int nn0,nn1,nouter,ninner;
313 real ix1,iy1,iz1,fix1,fiy1,fiz1;
314 real ix2,iy2,iz2,fix2,fiy2,fiz2;
315 real ix3,iy3,iz3,fix3,fiy3,fiz3;
316 real jx1,jy1,jz1,fjx1,fjy1,fjz1;
317 real dx11,dy11,dz11,rsq11,rinv11;
318 real dx21,dy21,dz21,rsq21,rinv21;
319 real dx31,dy31,dz31,rsq31,rinv31;
321 real weight_cg1, weight_cg2, weight_product;
326 nthreads = *p_nthreads;
330 tabscale = *p_tabscale;
332 qO = facel*charge[ii];
333 qH = facel*charge[ii+1];
340 #ifdef GMX_THREAD_SHM_FDECOMP
341 tMPI_Thread_mutex_lock((tMPI_Thread_mutex_t *)mtx);
343 nn1 = nn0+(nri-nn0)/(2*nthreads)+10;
345 tMPI_Thread_mutex_unlock((tMPI_Thread_mutex_t *)mtx);
352 for(n=nn0; (n<nn1); n++)
356 shY = shiftvec[is3+1];
357 shZ = shiftvec[is3+2];
362 ix1 = shX + pos[ii3+0];
363 iy1 = shY + pos[ii3+1];
364 iz1 = shZ + pos[ii3+2];
365 ix2 = shX + pos[ii3+3];
366 iy2 = shY + pos[ii3+4];
367 iz2 = shZ + pos[ii3+5];
368 ix3 = shX + pos[ii3+6];
369 iy3 = shY + pos[ii3+7];
370 iz3 = shZ + pos[ii3+8];
383 for(k=nj0; (k<nj1); k++)
386 weight_cg2 = wf[jnr];
387 weight_product = weight_cg1*weight_cg2;
388 if (weight_product < ALMOST_ZERO) {
389 /* force is zero, skip this molecule */
392 else if (weight_product >= ALMOST_ONE)
398 hybscal = weight_product;
407 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
411 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
415 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
416 rinv11 = 1.0/sqrt(rsq11);
417 rinv21 = 1.0/sqrt(rsq21);
418 rinv31 = 1.0/sqrt(rsq31);
421 rinvsq = rinv11*rinv11;
424 fscal = (vcoul)*rinvsq;
432 fjx1 = faction[j3+0] - tx;
433 fjy1 = faction[j3+1] - ty;
434 fjz1 = faction[j3+2] - tz;
436 rinvsq = rinv21*rinv21;
439 fscal = (vcoul)*rinvsq;
450 rinvsq = rinv31*rinv31;
453 fscal = (vcoul)*rinvsq;
461 faction[j3+0] = fjx1 - tx;
462 faction[j3+1] = fjy1 - ty;
463 faction[j3+2] = fjz1 - tz;
466 faction[ii3+0] = faction[ii3+0] + fix1;
467 faction[ii3+1] = faction[ii3+1] + fiy1;
468 faction[ii3+2] = faction[ii3+2] + fiz1;
469 faction[ii3+3] = faction[ii3+3] + fix2;
470 faction[ii3+4] = faction[ii3+4] + fiy2;
471 faction[ii3+5] = faction[ii3+5] + fiz2;
472 faction[ii3+6] = faction[ii3+6] + fix3;
473 faction[ii3+7] = faction[ii3+7] + fiy3;
474 faction[ii3+8] = faction[ii3+8] + fiz3;
475 fshift[is3] = fshift[is3]+fix1+fix2+fix3;
476 fshift[is3+1] = fshift[is3+1]+fiy1+fiy2+fiy3;
477 fshift[is3+2] = fshift[is3+2]+fiz1+fiz2+fiz3;
479 Vc[ggid] = Vc[ggid] + vctot;
480 ninner = ninner + nj1 - nj0;
483 nouter = nouter + nn1 - nn0;