30 #ifdef MEM_OPT_VERSION    31   NAMD_die(
"Should not be called in ExclElem::getMoleculePointers in memory optimized version!");
    34   *byatom = mol->exclusionsByAtom;
    35   *structarray = mol->exclusions;
    85   BigReal lambdaUp, lambdaDown, lambda2Up, lambda2Down, switchfactor;
    86   BigReal vdwLambdaUp, vdwLambdaDown, elecLambdaUp, elecLambdaDown;
    87   BigReal elecLambda2Up, elecLambda2Down, vdwLambda2Up, vdwLambda2Down;
    88   BigReal vdwShiftUp, vdwShift2Up, vdwShiftDown, vdwShift2Down;
    89   BigReal myVdwLambda, myVdwLambda2, myElecLambda, myElecLambda2, myVdwShift, myVdwShift2;      
    91   int pswitch, ref, alch, dec, up, down;
    96     BigReal lambdaDown  = 1 - lambdaUp;
    97     BigReal lambda2Down = 1 - lambda2Up; 
    98     switchfactor      = 1./((cutoff2 - switchOn2)*
    99         (cutoff2 - switchOn2)*(cutoff2 - switchOn2));
   100     vdwLambdaUp       = 
simParams->getVdwLambda(lambdaUp);
   101     vdwLambdaDown     = 
simParams->getVdwLambda(lambdaDown);
   102     elecLambdaUp      = 
simParams->getElecLambda(lambdaUp);
   103     elecLambdaDown    = 
simParams->getElecLambda(lambdaDown);
   104     elecLambda2Up     = 
simParams->getElecLambda(lambda2Up);
   105     elecLambda2Down   = 
simParams->getElecLambda(lambda2Down);
   106     vdwLambda2Up      = 
simParams->getVdwLambda(lambda2Up);
   107     vdwLambda2Down    = 
simParams->getVdwLambda(lambda2Down);
   108     vdwShiftUp        = 
simParams->alchVdwShiftCoeff*(1 - vdwLambdaUp);
   109     vdwShiftDown      = 
simParams->alchVdwShiftCoeff*(1 - vdwLambdaDown);
   110     vdwShift2Up       = 
simParams->alchVdwShiftCoeff*(1 - vdwLambda2Up);
   111     vdwShift2Down     = 
simParams->alchVdwShiftCoeff*(1 - vdwLambda2Down);
   124   for ( 
int ituple=0; ituple<ntuple; ++ituple ) {
   126     BigReal energyVdw = 0.0,   energyElec = 0.0,   energySlow = 0.0;
   128     BigReal energyVdw_s = 0.0, energyElec_s = 0.0, energySlow_s = 0.0;
   130     const ExclElem &tup = tuples[ituple];
   142     const unsigned char p2 = 
p_j.partition;
   145     BigReal alch_vdw_energy_2 = 0.0;
   153     if ( r2 > cutoff2 ) 
continue;
   155     if ( 
modified && r2 < 1.0 ) r2 = 1.0;  
   163           myVdwLambda  = 1.0;  myElecLambda  = 1.0;
   164           myVdwLambda2 = 1.0;  myElecLambda2 = 1.0;
   167           myVdwLambda  = vdwLambdaUp;  myElecLambda  = elecLambdaUp;  myVdwShift = vdwShiftUp; 
   168           myVdwLambda2 = vdwLambda2Up; myElecLambda2 = elecLambda2Up; myVdwShift2 = vdwShift2Up;
   171           myVdwLambda  = vdwLambdaDown;   myElecLambda  = elecLambdaDown;  myVdwShift  = vdwShiftDown;
   172           myVdwLambda2 = vdwLambda2Down;  myElecLambda2 = elecLambda2Down; myVdwShift2 = vdwShift2Down;
   175           myVdwLambda  = 0.0;  myElecLambda  = 0.0; 
   176           myVdwLambda2 = 0.0;  myElecLambda2 = 0.0;
   181       myVdwLambda  = 1.0;  myElecLambda  = 1.0;
   182       myVdwLambda2 = 1.0;  myElecLambda2 = 1.0;
   185     union { 
double f; 
int64 i; } r2i;
   187     const int r2_delta_expc = 64 * (r2_delta_exp - 1023);
   188     int table_i = (r2i.i >> (32+14)) + r2_delta_expc;  
   192     BigReal diffa = r2 - r2_table[table_i];
   194     BigReal fast_a = 0., fast_b = 0., fast_c = 0., fast_d = 0.;
   195     BigReal slow_a, slow_b, slow_c, slow_d;
   200         ljTable->table_row(p_i.
vdwType) + 2 * 
p_j.vdwType;
   211       const BigReal kqq = (1.0 - scale14) *
   214       fast_a =      kqq * fast_table[4*table_i+0];  
   215       fast_b = 2. * kqq * fast_table[4*table_i+1];
   216       fast_c = 4. * kqq * fast_table[4*table_i+2];
   217       fast_d = 6. * kqq * fast_table[4*table_i+3];
   220         slow_a =      kqq * slow_table[4*table_i+3];  
   221         slow_b = 2. * kqq * slow_table[4*table_i+2];
   222         slow_c = 4. * kqq * slow_table[4*table_i+1];
   223         slow_d = 6. * kqq * slow_table[4*table_i+0];
   227         energyElec  = (( ( diffa * (1./6.)*fast_d + 0.25*fast_c ) * diffa
   228               + 0.5*fast_b ) * diffa + fast_a);
   230           energySlow = (( ( diffa * (1./6.)*slow_d + 0.25*slow_c ) * diffa
   231                 + 0.5*slow_b ) * diffa + slow_a);
   241           energyVdw = (( ( diffa * (1./6.)*vdw_d + 0.25*vdw_c ) * diffa
   242                 + 0.5*vdw_b ) * diffa + vdw_a);
   245       else if(pswitch != 99) {
   248           const BigReal r2_1 = 1./(r2 + myVdwShift);
   249           const BigReal r2_2 = 1./(r2 + myVdwShift2);
   250           const BigReal r6_1 = r2_1*r2_1*r2_1;
   251           const BigReal r6_2 = r2_2*r2_2*r2_2;
   252           const BigReal U1 = A*r6_1*r6_1 - B*r6_1; 
   253           const BigReal U2 = A*r6_2*r6_2 - B*r6_2;
   255           const BigReal switchmul  = (r2 > switchOn2 ?
   256             switchfactor * (cutoff2 - r2) * (cutoff2 - r2) *
   257             (cutoff2 - 3.*switchOn2 + 2.*r2) : 1.);
   259           const BigReal switchmul2 = (r2 > switchOn2 ?
   260             12.*switchfactor * (cutoff2 - r2) * (r2 - switchOn2) : 0.);
   262           alch_vdw_energy   = myVdwLambda*switchmul*U1;
   263           alch_vdw_energy_2 = myVdwLambda2*switchmul*U2;
   264           alch_vdw_force    = myVdwLambda*((switchmul*(12.*U1 + 6.*B*r6_1)*r2_1 +
   271             const BigReal r2_1 = 1./(r2 + myVdwShift);
   272             const BigReal r6_1 = r2_1*r2_1*r2_1;
   274             const BigReal switchmul = (r2 > switchOn2 ? switchfactor*(cutoff2 - r2) \
   276                     *(cutoff2 - 3.*switchOn2 + 2.*r2) : 1.);
   277             const BigReal switchmul2 = (r2 > switchOn2 ?                      \
   278                           12.*switchfactor*(cutoff2 - r2)       \
   279                            *(r2 - switchOn2) : 0.);
   282             const BigReal U = A*r6_1*r6_1 - B*r6_1; 
   283             alch_vdw_energy = myVdwLambda*switchmul*U;
   284             alch_vdw_force = (myVdwLambda*(switchmul*(12.*U + 6.*B*r6_1)*r2_1 \
   286             alch_vdw_dUdl = (switchmul*(U + myVdwLambda*
simParams->alchVdwShiftCoeff \
   287                                    *(6.*U + 3.*B*r6_1)*r2_1));
   307         energySlow = (( ( diffa * (1./6.)*slow_d + 0.25*slow_c ) * diffa
   308               + 0.5*slow_b ) * diffa + slow_a);
   312     register BigReal fast_dir = (diffa * fast_d + fast_c) * diffa + fast_b;
   314     fast_dir = (fast_dir*myElecLambda) + alch_vdw_force*(pswitch == 1 || pswitch == 2);
   315     const Force f12 = fast_dir * r12;
   322     reduction[virialIndex_XX] += f12.
x * r12.x;
   325     reduction[virialIndex_YX] += f12.
y * r12.x;
   326     reduction[virialIndex_YY] += f12.
y * r12.y;
   328     reduction[virialIndex_ZX] += f12.
z * r12.x;
   329     reduction[virialIndex_ZY] += f12.
z * r12.y;
   330     reduction[virialIndex_ZZ] += f12.
z * r12.z;
   333       register BigReal slow_dir = (diffa * slow_d + slow_c) * diffa + slow_b;
   335       slow_dir = (slow_dir * myElecLambda);
   336       const Force slow_f12 = slow_dir * r12;
   342       reduction[slowVirialIndex_XX] += slow_f12.
x * r12.x;
   345       reduction[slowVirialIndex_YX] += slow_f12.
y * r12.x;
   346       reduction[slowVirialIndex_YY] += slow_f12.
y * r12.y;
   348       reduction[slowVirialIndex_ZX] += slow_f12.
z * r12.x;
   349       reduction[slowVirialIndex_ZY] += slow_f12.
z * r12.y;
   350       reduction[slowVirialIndex_ZZ] += slow_f12.
z * r12.z;
   373         else if (pswitch == 2){
   405   data[virialIndex_XY] = data[virialIndex_YX];
   406   data[virialIndex_XZ] = data[virialIndex_ZX];
   407   data[virialIndex_YZ] = data[virialIndex_ZY];
   409   data[slowVirialIndex_XY] = data[slowVirialIndex_YX];
   410   data[slowVirialIndex_XZ] = data[slowVirialIndex_ZX];
   411   data[slowVirialIndex_YZ] = data[slowVirialIndex_ZY];
   413   ADD_TENSOR(reduction,REDUCTION_VIRIAL_NBOND,data,virialIndex);
   414   ADD_TENSOR(reduction,REDUCTION_VIRIAL_SLOW,data,slowVirialIndex);
 
static BigReal * fast_table
 
static int pressureProfileAtomTypes
 
static BigReal dielectric_1
 
#define ADD_TENSOR(R, RL, D, DL)
 
static void submitReductionData(BigReal *, SubmitReduction *)
 
SimParameters * simParameters
 
static void computeForce(ExclElem *, int, BigReal *, BigReal *)
 
static void getParameterPointers(Parameters *, const int **)
 
Molecule stores the structural information for the system. 
 
static BigReal * r2_table
 
static BigReal * table_noshort
 
static int pswitchTable[3 *3]
 
NAMD_HOST_DEVICE BigReal length2(void) const
 
void NAMD_die(const char *err_msg)
 
static int pressureProfileSlabs
 
static BigReal * slow_table
 
static const LJTable * ljTable
 
static BigReal pressureProfileThickness
 
static BigReal pressureProfileMin
 
static void getMoleculePointers(Molecule *, int *, int32 ***, Exclusion **)
 
NAMD_HOST_DEVICE Vector delta(const Position &pos1, const Position &pos2) const