15 myLambda = ALCH1(lambdaUp) ALCH2(lambdaDown) ALCH3(lambdaUp) ALCH4(lambdaDown);
16 FEP(myLambda2 = ALCH1(lambda2Up) ALCH2(lambda2Down) ALCH3(lambda2Up) ALCH4(lambda2Down);)
17 myElecLambda = ALCH1(elecLambdaUp) ALCH2(elecLambdaDown) ALCH3(elecLambdaUp) ALCH4(elecLambdaDown);
18 FEP(myElecLambda2 = ALCH1(elecLambda2Up) ALCH2(elecLambda2Down) ALCH3(elecLambda2Up) ALCH4(elecLambda2Down);)
19 myVdwLambda = ALCH1(vdwLambdaUp) ALCH2(vdwLambdaDown) ALCH3(vdwLambdaUp) ALCH4(vdwLambdaDown);
20 FEP(myVdwLambda2 = ALCH1(vdwLambda2Up) ALCH2(vdwLambda2Down) ALCH3(vdwLambda2Up) ALCH4(vdwLambda2Down);)
21 ALCH1(myRepLambda = repLambdaUp) ALCH2(myRepLambda = repLambdaDown);
22 FEP(ALCH1(myRepLambda2 = repLambda2Up) ALCH2(myRepLambda2 = repLambda2Down);)
23 ALCH1(myVdwShift = vdwShiftUp) ALCH2(myVdwShift = vdwShiftDown);
24 FEP(ALCH1(myVdwShift2 = vdwShift2Up) ALCH2(myVdwShift2 = vdwShift2Down);)
28 __alignx(64, table_four);
31 #pragma ibm independent_loop 35 #ifndef __INTEL_LLVM_COMPILER 42 #if ( FULL( EXCLUDED( SHORT( 1+ ) ) ) 0 ) 49 #pragma omp simd SHORT(FAST(reduction(+:f_i_x,f_i_y,f_i_z)) ENERGY(FAST(reduction(+:vdwEnergy) SHORT(reduction(+:electEnergy))))) \ 50 FULL(reduction(+:fullf_i_x,fullf_i_y,fullf_i_z) ENERGY(reduction(+:fullElectEnergy))) 53 #pragma loop_count avg=100 55 #pragma loop_count avg=4 58 for (k=0; k<npairi; ++k) {
60 const int numtypes =
simParams->tableNumTypes;
61 const float table_spacing =
simParams->tableSpacing;
65 int table_i = (r2iilist[2*k] >> 14) + r2_delta_expc;
66 const
int j = pairlisti[k];
70 #define pExt_j_m (pExt_1+j) 72 BigReal diffa = r2list[k] - r2_table[table_i];
74 #define table_four_i (table_four + 16*table_i) 76 #if ( FAST( 1 + ) TABENERGY( 1 + ) 0 ) // FAST or TABENERGY 81 #define lj_pars (lj_row+lj_index) 85 register const int tabtype = -1 - (
lj_pars->A < 0 ?
lj_pars->A : 0 );
88 #if ( SHORT( FAST( 1+ ) ) 0 ) 95 #define fullf_j (fullf_1+j) 101 #pragma disjoint (*table_four, *fullf_1) 102 #pragma disjoint (*p_1, *fullf_1) 103 #pragma disjoint (*r2_table, *fullf_1) 104 #pragma disjoint (*r2list, *fullf_1) 105 #if ( SHORT( FAST( 1+ ) ) 0 ) 106 #pragma disjoint (*f_1 , *fullf_1) 107 #pragma disjoint (*fullf_1, *f_1) 108 #endif //Short + fast 111 #if ( SHORT( FAST( 1+ ) ) 0 ) 112 #pragma disjoint (*table_four, *f_1) 113 #pragma disjoint (*p_1, *f_1) 114 #pragma disjoint (*r2_table, *f_1) 115 #pragma disjoint (*r2list, *f_1) 116 #pragma disjoint (*lj_row, *f_1) 117 #endif //Short + Fast 124 #endif //ARCH_POWERPC 156 if (r2 >= rcut2) continue;
158 const
BigReal r6inv = r2inv * r2inv * r2inv;
159 const
BigReal r12inv = r6inv * r6inv;
161 const
BigReal aR2 = r2 * alphaLJ * alphaLJ;
163 const
BigReal screen_dr = (1 - (1 + aR2 + aR4/2 + aR4*aR2/6)*exp(-aR2));
165 const
BigReal screen_r = (1 - (1 + aR2 + aR4/2)*exp(-aR2));
193 const BigReal r2 = r2list[k] - r2_delta;
201 switchdist2, cutoff2, switchfactor, vdwForceSwitching, myVdwLambda,
202 myVdwLambda2, alchWCAOn, myRepLambda, myRepLambda2, &alch_vdw_energy,
203 &alch_vdw_force, &alch_vdw_energy_2);)
206 switchdist2, cutoff2, switchfactor, vdwForceSwitching, myVdwLambda,
207 myVdwLambda2, alchWCAOn, myRepLambda, myRepLambda2, &alch_vdw_energy,
208 &alch_vdw_force, &alch_vdw_energy_2);)
210 ENERGY(alch_vdw_energy = -myVdwLambda * (( ( diffa * vdw_d * (1/6.)+ vdw_c * (1/4.)) * diffa + vdw_b *(1/2.)) * diffa + vdw_a);)
211 alch_vdw_energy_2 = -myVdwLambda2 * (( ( diffa * vdw_d * (1/6.)+ vdw_c * (1/4.)) * diffa + vdw_b *(1/2.)) * diffa + vdw_a);
212 alch_vdw_force = myVdwLambda * ((diffa * vdw_d + vdw_c) * diffa + vdw_b);)
214 ENERGY(alch_vdw_energy = -myVdwLambda * (( ( diffa * vdw_d * (1/6.)+ vdw_c * (1/4.)) * diffa + vdw_b *(1/2.)) * diffa + vdw_a);)
215 alch_vdw_energy_2 = -myVdwLambda2 * (( ( diffa * vdw_d * (1/6.)+ vdw_c * (1/4.)) * diffa + vdw_b *(1/2.)) * diffa + vdw_a);
216 alch_vdw_force = myVdwLambda * ((diffa * vdw_d + vdw_c) * diffa + vdw_b);)
219 switchfactor, vdwForceSwitching, myVdwLambda, alchVdwShiftCoeff,
220 alchWCAOn, myRepLambda, &alch_vdw_energy, &alch_vdw_force,
226 #if (NOT_ALCHPAIR(1+) 0) 227 #if (TABENERGY(1+) 0) 233 register int eneraddress;
234 eneraddress = 2 * ((npertype * tabtype) + ((
int)
namdnearbyint(r1 / table_spacing)));
238 vdw_b = table_ener[eneraddress + 1] / r1;
239 vdw_a = (-1/2.) * diffa * vdw_b;
244 FEP( vdwEnergy_s += d_lambda_pair *
vdw_val; )
253 ( ( diffa * vdw_d * (1/6.)+ vdw_c * (1/4.)) * diffa + vdw_b *(1/2.)) * diffa + vdw_a;
256 vdw_val += A * r12inv - B * r6inv;
259 const BigReal potentialShift = (A*rcut12inv - B*rcut6inv);
269 #if (TABENERGY (1+) 0) 276 ENERGY(vdwEnergy += alch_vdw_energy;)
277 FEP(vdwEnergy_s += alch_vdw_energy_2;)
278 TI(ALCH1(vdwEnergy_ti_1 += alch_vdw_dUdl;) ALCH2(vdwEnergy_ti_2 += alch_vdw_dUdl;))
286 vdw_dir = ( diffa * vdw_d + vdw_c ) * diffa + vdw_b;
288 reduction[pairVDWForceIndex_X] += force_sign * vdw_dir *
p_ij_x;
289 reduction[pairVDWForceIndex_Y] += force_sign * vdw_dir *
p_ij_y;
290 reduction[pairVDWForceIndex_Z] += force_sign * vdw_dir *
p_ij_z;
302 BigReal modfckqq = (1.0-modf_mod) * kqq;
312 ( ( diffa * fast_d * (1/6.)+ fast_c * (1/4.)) * diffa + fast_b *(1/2.)) * diffa + fast_a;
315 FEP(electEnergy_s -= fast_val;)
320 FEP(electEnergy_s -= myElecLambda2 * fast_val;)
323 ( ( diffa * fast_d * (1/6.)+ fast_c * (1/4.)) * diffa + fast_b *(1/2.)) * diffa + fast_a;)
324 ALCH1(electEnergy_ti_1 -= fast_val;) ALCH2(electEnergy_ti_2 -= fast_val;)
330 ( diffa * fast_d + fast_c ) * diffa + fast_b;
332 reduction[pairElectForceIndex_X] += force_sign * fast_dir *
p_ij_x;
333 reduction[pairElectForceIndex_Y] += force_sign * fast_dir *
p_ij_y;
334 reduction[pairElectForceIndex_Z] += force_sign * fast_dir *
p_ij_z;
346 #ifndef CODE_REDUNDANT 347 #define CODE_REDUNDANT 0 365 NAMD_die(
"Failsafe. This line should never be reached\n");
370 groLJEnergy += groLJe;
371 groGaussEnergy += groGausse;
381 goForce = mol->get_go_force2(
p_ij_x,
p_ij_y,
p_ij_z, pExt_i.id, pExt_j->
id,&goNative,&goNonnative);
385 const BigReal rgo = sqrt(r2go);
388 goForce = mol->get_go_force(rgo, pExt_i.id, pExt_j->
id, &goNative, &goNonnative);
390 goForce = mol->get_go_force_new(rgo, pExt_i.id, pExt_j->
id, &goNative, &goNonnative);
392 NAMD_die(
"I SHOULDN'T BE HERE. DYING MELODRAMATICALLY.\n");
401 goEnergyNative += goNative;
402 goEnergyNonnative += goNonnative;
406 reduction[pairVDWForceIndex_X] += force_sign * goForce *
p_ij_x;
407 reduction[pairVDWForceIndex_Y] += force_sign * goForce *
p_ij_y;
408 reduction[pairVDWForceIndex_Z] += force_sign * goForce *
p_ij_z;
415 #endif // ) // End of GO macro 418 #endif //) // End of Normal MACRO 421 #if ( NOT_ALCHPAIR(1+) 0 ) 431 (diffa * fast_d + fast_c) * diffa + fast_b;
433 fast_dir += (12*A * r12inv - 6*B * r6inv) * r2inv;
435 BigReal force_r =
LAM(lambda_pair *) fast_dir;
437 force_r *= myElecLambda;
438 force_r += alch_vdw_force;
456 int n2 = (
int)floor((p_j_z-pressureProfileMin)*invThickness);
458 int p_j_partition =
p_j->partition;
461 p_i_partition, p_j_partition, pressureProfileAtomTypes,
463 pressureProfileReduction);
471 #define slow_i (slow_table + 4*table_i)
473 #ifdef ARCH_POWERPC //Alignment and aliasing constraints 474 __alignx (32, slow_table);
475 #if ( SHORT( FAST( 1+ ) ) 0 ) 476 #pragma disjoint (*slow_table, *f_1) 478 #pragma disjoint (*slow_table, *fullf_1) 479 #endif //ARCH_POWERPC 484 #if ( FULL (MODIFIED( SHORT ( 1+ ) ) ) 0 ) 486 #define slow_i (slow_table + 4*table_i) 488 #ifdef ARCH_POWERPC //Alignment and aliasing constraints 489 __alignx (32, slow_table);
490 #if ( SHORT( FAST( 1+ ) ) 0 ) 491 #pragma disjoint (*slow_table, *f_1) 493 #pragma disjoint (*slow_table, *fullf_1) 494 #endif //ARCH_POWERPC 506 slow_b += 2.*slow_i[2];
507 slow_c += 4.*slow_i[1];
508 slow_d += 6.*slow_i[0];
519 slow_a += modf_mod * slow_i[3];
520 slow_b += 2.*modf_mod * slow_i[2];
521 slow_c += 4.*modf_mod * slow_i[1];
522 slow_d += 6.*modf_mod * slow_i[0];
538 ( ( diffa * slow_d *(1/6.)+ slow_c * (1/4.)) * diffa + slow_b *(1/2.)) * diffa + slow_a;
541 fullElectEnergy -=
LAM(lambda_pair *) slow_val;
542 FEP(fullElectEnergy_s -= slow_val;)
547 ENERGY(fullElectEnergy -= myElecLambda * slow_val;)
548 FEP(fullElectEnergy_s -= myElecLambda2 * slow_val;)
551 ( ( diffa * slow_d *(1/6.)+ slow_c * (1/4.)) * diffa + slow_b *(1/2.)) * diffa + slow_a;)
552 ALCH1(fullElectEnergy_ti_1 -= slow_val;) ALCH2(fullElectEnergy_ti_2 -= slow_val;)
558 ( diffa * slow_d + slow_c ) * diffa + slow_b;
559 reduction[pairElectForceIndex_X] += force_sign * slow_dir *
p_ij_x;
560 reduction[pairElectForceIndex_Y] += force_sign * slow_dir *
p_ij_y;
561 reduction[pairElectForceIndex_Z] += force_sign * slow_dir *
p_ij_z;
578 register BigReal slow_dir = (diffa * slow_d + slow_c) * diffa + slow_b;
583 slow_dir += (12*A * r12inv - 6*B * r6inv) * r2inv;
585 slow_dir += 6 * c6 * screen_dr * r6inv * r2inv;
587 BigReal slow_disp_val = c6 * screen_r * r6inv;
591 BigReal potentialShift = c6 * screen_rc * rcut6inv;
592 slow_disp_val -= potentialShift;
595 fullVdwEnergy +=
LAM(lambda_pair *) slow_disp_val;
598 BigReal fullforce_r = slow_dir
LAM(* lambda_pair);
600 fullforce_r *= myElecLambda;
602 fullforce_r += alch_vdw_force;
619 int n2 = (
int)floor((p_j_z-pressureProfileMin)*invThickness);
621 int p_j_partition =
p_j->partition;
624 p_i_partition, p_j_partition, pressureProfileAtomTypes,
626 pressureProfileReduction);
void pp_reduction(int nslabs, int n1, int n2, int atype1, int atype2, int numtypes, BigReal vxx, BigReal vyy, BigReal vzz, BigReal *reduction)
register BigReal electEnergy
register const BigReal p_ij_z
void pp_clamp(int &n, int nslabs)
void fep_vdw_forceandenergies(BigReal A, BigReal B, BigReal r2, BigReal myVdwShift, BigReal myVdwShift2, BigReal switchdist2, BigReal cutoff2, BigReal switchfactor, Bool vdwForceSwitching, BigReal myVdwLambda, BigReal myVdwLambda2, Bool alchWCAOn, BigReal myRepLambda, BigReal myRepLambda2, BigReal *alch_vdw_energy, BigReal *alch_vdw_force, BigReal *alch_vdw_energy_2)
void NAMD_die(const char *err_msg)
void ti_vdw_force_energy_dUdl(BigReal A, BigReal B, BigReal r2, BigReal myVdwShift, BigReal switchdist2, BigReal cutoff2, BigReal switchfactor, Bool vdwForceSwitching, BigReal myVdwLambda, BigReal alchVdwShiftCoeff, Bool alchWCAOn, BigReal myRepLambda, BigReal *alch_vdw_energy, BigReal *alch_vdw_force, BigReal *alch_vdw_dUdl)
TABENERGY(register const int tabtype=-1 -(lj_pars->A< 0 ? lj_pars->A :0);) BigReal kqq
register const BigReal p_ij_x
k< npairi;++k) { TABENERGY(const int numtypes=simParams->tableNumTypes;const float table_spacing=simParams->tableSpacing;const int npertype=(int)(namdnearbyint(simParams->tableMaxDist/simParams->tableSpacing)+1);) int table_i=(r2iilist[2 *k] >> 14)+r2_delta_expc;const int j=pairlisti[k];#define p_j #define pExt_j_m BigReal diffa=r2list[k] - r2_table[table_i];#define table_four_i const int lj_index=2 *p_j-> vdwType MODIFIED(+1)
ALCHPAIR(myLambda=ALCH1(lambdaUp) ALCH2(lambdaDown) ALCH3(lambdaUp) ALCH4(lambdaDown);FEP(myLambda2=ALCH1(lambda2Up) ALCH2(lambda2Down) ALCH3(lambda2Up) ALCH4(lambda2Down);) myElecLambda=ALCH1(elecLambdaUp) ALCH2(elecLambdaDown) ALCH3(elecLambdaUp) ALCH4(elecLambdaDown);FEP(myElecLambda2=ALCH1(elecLambda2Up) ALCH2(elecLambda2Down) ALCH3(elecLambda2Up) ALCH4(elecLambda2Down);) myVdwLambda=ALCH1(vdwLambdaUp) ALCH2(vdwLambdaDown) ALCH3(vdwLambdaUp) ALCH4(vdwLambdaDown);FEP(myVdwLambda2=ALCH1(vdwLambda2Up) ALCH2(vdwLambda2Down) ALCH3(vdwLambda2Up) ALCH4(vdwLambda2Down);) ALCH1(myRepLambda=repLambdaUp) ALCH2(myRepLambda=repLambdaDown);FEP(ALCH1(myRepLambda2=repLambda2Up) ALCH2(myRepLambda2=repLambda2Down);) ALCH1(myVdwShift=vdwShiftUp) ALCH2(myVdwShift=vdwShiftDown);FEP(ALCH1(myVdwShift2=vdwShift2Up) ALCH2(myVdwShift2=vdwShift2Down);)) for(k=0
register const BigReal p_ij_y