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];
71 BigReal diffa = r2list[k] - r2_table[table_i];
73 #define table_four_i (table_four + 16*table_i) 75 #if ( FAST( 1 + ) TABENERGY( 1 + ) 0 ) // FAST or TABENERGY 79 #define lj_pars (lj_row+lj_index) 83 register const int tabtype = -1 - (
lj_pars->A < 0 ?
lj_pars->A : 0 );
86 #if ( SHORT( FAST( 1+ ) ) 0 ) 93 #define fullf_j (fullf_1+j) 99 #pragma disjoint (*table_four, *fullf_1) 100 #pragma disjoint (*p_1, *fullf_1) 101 #pragma disjoint (*r2_table, *fullf_1) 102 #pragma disjoint (*r2list, *fullf_1) 103 #if ( SHORT( FAST( 1+ ) ) 0 ) 104 #pragma disjoint (*f_1 , *fullf_1) 105 #pragma disjoint (*fullf_1, *f_1) 106 #endif //Short + fast 109 #if ( SHORT( FAST( 1+ ) ) 0 ) 110 #pragma disjoint (*table_four, *f_1) 111 #pragma disjoint (*p_1, *f_1) 112 #pragma disjoint (*r2_table, *f_1) 113 #pragma disjoint (*r2list, *f_1) 114 #pragma disjoint (*lj_row, *f_1) 115 #endif //Short + Fast 122 #endif //ARCH_POWERPC 172 const BigReal r2 = r2list[k] - r2_delta;
180 switchdist2, cutoff2, switchfactor, vdwForceSwitching, myVdwLambda,
181 myVdwLambda2, alchWCAOn, myRepLambda, myRepLambda2, &alch_vdw_energy,
182 &alch_vdw_force, &alch_vdw_energy_2);)
185 switchdist2, cutoff2, switchfactor, vdwForceSwitching, myVdwLambda,
186 myVdwLambda2, alchWCAOn, myRepLambda, myRepLambda2, &alch_vdw_energy,
187 &alch_vdw_force, &alch_vdw_energy_2);)
189 ENERGY(alch_vdw_energy = -myVdwLambda * (( ( diffa * vdw_d * (1/6.)+ vdw_c * (1/4.)) * diffa + vdw_b *(1/2.)) * diffa + vdw_a);)
190 alch_vdw_energy_2 = -myVdwLambda2 * (( ( diffa * vdw_d * (1/6.)+ vdw_c * (1/4.)) * diffa + vdw_b *(1/2.)) * diffa + vdw_a);
191 alch_vdw_force = myVdwLambda * ((diffa * vdw_d + vdw_c) * diffa + vdw_b);)
193 ENERGY(alch_vdw_energy = -myVdwLambda * (( ( diffa * vdw_d * (1/6.)+ vdw_c * (1/4.)) * diffa + vdw_b *(1/2.)) * diffa + vdw_a);)
194 alch_vdw_energy_2 = -myVdwLambda2 * (( ( diffa * vdw_d * (1/6.)+ vdw_c * (1/4.)) * diffa + vdw_b *(1/2.)) * diffa + vdw_a);
195 alch_vdw_force = myVdwLambda * ((diffa * vdw_d + vdw_c) * diffa + vdw_b);)
198 switchfactor, vdwForceSwitching, myVdwLambda, alchVdwShiftCoeff,
199 alchWCAOn, myRepLambda, &alch_vdw_energy, &alch_vdw_force,
205 #if (NOT_ALCHPAIR(1+) 0) 206 #if (TABENERGY(1+) 0) 212 register int eneraddress;
213 eneraddress = 2 * ((npertype * tabtype) + ((
int)
namdnearbyint(r1 / table_spacing)));
217 vdw_b = table_ener[eneraddress + 1] / r1;
218 vdw_a = (-1/2.) * diffa * vdw_b;
223 FEP( vdwEnergy_s += d_lambda_pair *
vdw_val; )
230 ( ( diffa * vdw_d * (1/6.)+ vdw_c * (1/4.)) * diffa + vdw_b *(1/2.)) * diffa + vdw_a;
237 #if (TABENERGY (1+) 0) 244 ENERGY(vdwEnergy += alch_vdw_energy;)
245 FEP(vdwEnergy_s += alch_vdw_energy_2;)
246 TI(ALCH1(vdwEnergy_ti_1 += alch_vdw_dUdl;) ALCH2(vdwEnergy_ti_2 += alch_vdw_dUdl;))
254 vdw_dir = ( diffa * vdw_d + vdw_c ) * diffa + vdw_b;
256 reduction[pairVDWForceIndex_X] += force_sign * vdw_dir *
p_ij_x;
257 reduction[pairVDWForceIndex_Y] += force_sign * vdw_dir *
p_ij_y;
258 reduction[pairVDWForceIndex_Z] += force_sign * vdw_dir *
p_ij_z;
270 BigReal modfckqq = (1.0-modf_mod) * kqq;
280 ( ( diffa * fast_d * (1/6.)+ fast_c * (1/4.)) * diffa + fast_b *(1/2.)) * diffa + fast_a;
283 FEP(electEnergy_s -= fast_val;)
288 FEP(electEnergy_s -= myElecLambda2 * fast_val;)
291 ( ( diffa * fast_d * (1/6.)+ fast_c * (1/4.)) * diffa + fast_b *(1/2.)) * diffa + fast_a;)
292 ALCH1(electEnergy_ti_1 -= fast_val;) ALCH2(electEnergy_ti_2 -= fast_val;)
298 ( diffa * fast_d + fast_c ) * diffa + fast_b;
300 reduction[pairElectForceIndex_X] += force_sign * fast_dir *
p_ij_x;
301 reduction[pairElectForceIndex_Y] += force_sign * fast_dir *
p_ij_y;
302 reduction[pairElectForceIndex_Z] += force_sign * fast_dir *
p_ij_z;
314 #ifndef CODE_REDUNDANT 315 #define CODE_REDUNDANT 0 333 NAMD_die(
"Failsafe. This line should never be reached\n");
338 groLJEnergy += groLJe;
339 groGaussEnergy += groGausse;
349 goForce = mol->get_go_force2(
p_ij_x,
p_ij_y,
p_ij_z, pExt_i.id, pExt_j->
id,&goNative,&goNonnative);
353 const BigReal rgo = sqrt(r2go);
356 goForce = mol->get_go_force(rgo, pExt_i.id, pExt_j->
id, &goNative, &goNonnative);
358 goForce = mol->get_go_force_new(rgo, pExt_i.id, pExt_j->
id, &goNative, &goNonnative);
360 NAMD_die(
"I SHOULDN'T BE HERE. DYING MELODRAMATICALLY.\n");
369 goEnergyNative += goNative;
370 goEnergyNonnative += goNonnative;
374 reduction[pairVDWForceIndex_X] += force_sign * goForce *
p_ij_x;
375 reduction[pairVDWForceIndex_Y] += force_sign * goForce *
p_ij_y;
376 reduction[pairVDWForceIndex_Z] += force_sign * goForce *
p_ij_z;
383 #endif // ) // End of GO macro 386 #endif //) // End of Normal MACRO 389 #if ( NOT_ALCHPAIR(1+) 0) 397 (diffa * fast_d + fast_c) * diffa + fast_b;
399 BigReal force_r =
LAM(lambda_pair *) fast_dir;
401 force_r *= myElecLambda;
402 force_r += alch_vdw_force;
420 int n2 = (
int)floor((p_j_z-pressureProfileMin)*invThickness);
422 int p_j_partition =
p_j->partition;
425 p_i_partition, p_j_partition, pressureProfileAtomTypes,
427 pressureProfileReduction);
435 #define slow_i (slow_table + 4*table_i)
437 #ifdef ARCH_POWERPC //Alignment and aliasing constraints 438 __alignx (32, slow_table);
439 #if ( SHORT( FAST( 1+ ) ) 0 ) 440 #pragma disjoint (*slow_table, *f_1) 442 #pragma disjoint (*slow_table, *fullf_1) 443 #endif //ARCH_POWERPC 448 #if ( FULL (MODIFIED( SHORT ( 1+ ) ) ) 0 ) 450 #define slow_i (slow_table + 4*table_i) 452 #ifdef ARCH_POWERPC //Alignment and aliasing constraints 453 __alignx (32, slow_table);
454 #if ( SHORT( FAST( 1+ ) ) 0 ) 455 #pragma disjoint (*slow_table, *f_1) 457 #pragma disjoint (*slow_table, *fullf_1) 458 #endif //ARCH_POWERPC 470 slow_b += 2.*slow_i[2];
471 slow_c += 4.*slow_i[1];
472 slow_d += 6.*slow_i[0];
483 slow_a += modf_mod * slow_i[3];
484 slow_b += 2.*modf_mod * slow_i[2];
485 slow_c += 4.*modf_mod * slow_i[1];
486 slow_d += 6.*modf_mod * slow_i[0];
502 ( ( diffa * slow_d *(1/6.)+ slow_c * (1/4.)) * diffa + slow_b *(1/2.)) * diffa + slow_a;
505 fullElectEnergy -=
LAM(lambda_pair *) slow_val;
506 FEP(fullElectEnergy_s -= slow_val;)
511 ENERGY(fullElectEnergy -= myElecLambda * slow_val;)
512 FEP(fullElectEnergy_s -= myElecLambda2 * slow_val;)
515 ( ( diffa * slow_d *(1/6.)+ slow_c * (1/4.)) * diffa + slow_b *(1/2.)) * diffa + slow_a;)
516 ALCH1(fullElectEnergy_ti_1 -= slow_val;) ALCH2(fullElectEnergy_ti_2 -= slow_val;)
522 ( diffa * slow_d + slow_c ) * diffa + slow_b;
523 reduction[pairElectForceIndex_X] += force_sign * slow_dir *
p_ij_x;
524 reduction[pairElectForceIndex_Y] += force_sign * slow_dir *
p_ij_y;
525 reduction[pairElectForceIndex_Z] += force_sign * slow_dir *
p_ij_z;
540 register BigReal slow_dir = (diffa * slow_d + slow_c) * diffa + slow_b;
541 BigReal fullforce_r = slow_dir
LAM(* lambda_pair);
543 fullforce_r *= myElecLambda;
545 fullforce_r += alch_vdw_force;
562 int n2 = (
int)floor((p_j_z-pressureProfileMin)*invThickness);
564 int p_j_partition =
p_j->partition;
567 p_i_partition, p_j_partition, pressureProfileAtomTypes,
569 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 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