18 #ifdef MEM_OPT_VERSION    19   NAMD_die(
"Should not be called in OneFourNbTholeElem::getMoleculePointers in memory optimized version!");
    22   *byatom = mol->oneFourNbTholesByAtom;
    23   *structarray = mol->oneFourNbTholes;
    57 #if defined (NAMD_CUDA) || defined(NAMD_HIP)    65     NAMD_die(
"Alchemical calculation for 1-4 atom pairs with nonbonded "    66              "Thole parameters is not supported.");
    68   for (
int ituple=0; ituple<ntuple; ++ituple) {
   102     const BigReal auaa = aa / raa_invlen;
   103     const BigReal auad = aa / rad_invlen;
   104     const BigReal auda = aa / rda_invlen;
   105     const BigReal audd = aa / rdd_invlen;
   108     const BigReal expauaa = exp(-auaa);
   109     const BigReal expauad = exp(-auad);
   110     const BigReal expauda = exp(-auda);
   111     const BigReal expaudd = exp(-audd);
   114     BigReal polyauaa = 1 + 0.5*auaa;
   115     BigReal polyauad = 1 + 0.5*auad;
   116     BigReal polyauda = 1 + 0.5*auda;
   117     BigReal polyaudd = 1 + 0.5*audd;
   122       ethole += qqaa * raa_invlen * (-polyauaa * expauaa);
   123       ethole += qqad * rad_invlen * (-polyauad * expauad);
   124       ethole += qqda * rda_invlen * (-polyauda * expauda);
   125       ethole += qqdd * rdd_invlen * (-polyaudd * expaudd);
   128     polyauaa = 1 + auaa*polyauaa;
   129     polyauad = 1 + auad*polyauad;
   130     polyauda = 1 + auda*polyauda;
   131     polyaudd = 1 + audd*polyaudd;
   133     const BigReal raa_invlen3 = raa_invlen * raa_invlen * raa_invlen;
   134     const BigReal rad_invlen3 = rad_invlen * rad_invlen * rad_invlen;
   135     const BigReal rda_invlen3 = rda_invlen * rda_invlen * rda_invlen;
   136     const BigReal rdd_invlen3 = rdd_invlen * rdd_invlen * rdd_invlen;
   138     const BigReal dfaa = qqaa * raa_invlen3 * (polyauaa*expauaa);
   139     const BigReal dfad = qqad * rad_invlen3 * (polyauad*expauad);
   140     const BigReal dfda = qqda * rda_invlen3 * (polyauda*expauda);
   141     const BigReal dfdd = qqdd * rdd_invlen3 * (polyaudd*expaudd);
   143     const Vector faa = -dfaa * raa;
   144     const Vector fad = -dfad * rad;
   145     const Vector fda = -dfda * rda;
   146     const Vector fdd = -dfdd * rdd;
   158       reduction[virialIndex_XX] += faa.
x * raa.x + fad.x * rad.x
   159         + fda.x * rda.x + fdd.x * rdd.x;
   160       reduction[virialIndex_XY] += faa.x * raa.y + fad.x * rad.y
   161         + fda.x * rda.y + fdd.x * rdd.y;
   162       reduction[virialIndex_XZ] += faa.x * raa.z + fad.x * rad.z
   163         + fda.x * rda.z + fdd.x * rdd.z;
   164       reduction[virialIndex_YX] += faa.y * raa.x + fad.y * rad.x
   165         + fda.y * rda.x + fdd.y * rdd.x;
   166       reduction[virialIndex_YY] += faa.y * raa.y + fad.y * rad.y
   167         + fda.y * rda.y + fdd.y * rdd.y;
   168       reduction[virialIndex_YZ] += faa.y * raa.z + fad.y * rad.z
   169         + fda.y * rda.z + fdd.y * rdd.z;
   170       reduction[virialIndex_ZX] += faa.z * raa.x + fad.z * rad.x
   171         + fda.z * rda.x + fdd.z * rdd.x;
   172       reduction[virialIndex_ZY] += faa.z * raa.y + fad.z * rad.y
   173         + fda.z * rda.y + fdd.z * rdd.y;
   174       reduction[virialIndex_ZZ] += faa.z * raa.z + fad.z * rad.z
   175         + fda.z * rda.z + fdd.z * rdd.z;
   178     if (pressureProfileData) {
   197           pai, paj, pn, faa.x * raa.x, faa.y * raa.y, faa.z * raa.z,
   198           pressureProfileData);
   200           pai, pdj, pn, fad.x * rad.x, fad.y * rad.y, fad.z * rad.z,
   201           pressureProfileData);
   203           pdi, paj, pn, fda.x * rda.x, fda.y * rda.y, fda.z * rda.z,
   204           pressureProfileData);
   206           pdi, pdj, pn, fdd.x * rdd.x, fdd.y * rdd.y, fdd.z * rdd.z,
   207           pressureProfileData);
   218   ADD_TENSOR(reduction,REDUCTION_VIRIAL_NORMAL,data,virialIndex);
   230   NAMD_die(
"Can't use OneFourNbThole with memory optimized version of NAMD.");
 
static void getParameterPointers(Parameters *, const OneFourNbTholeValue **)
 
static BigReal dielectric_1
 
#define ADD_TENSOR(R, RL, D, DL)
 
void pp_reduction(int nslabs, int n1, int n2, int atype1, int atype2, int numtypes, BigReal vxx, BigReal vyy, BigReal vzz, BigReal *reduction)
 
SimParameters * simParameters
 
static BigReal pressureProfileThickness
 
void swap(Array< T > &s, Array< T > &t)
 
Molecule stores the structural information for the system. 
 
const OneFourNbTholeValue * value
 
void pp_clamp(int &n, int nslabs)
 
static void getMoleculePointers(Molecule *, int *, int32 ***, OneFourNbThole **)
 
void NAMD_die(const char *err_msg)
 
int operator<(const OneFourNbTholeElem &a) const
 
static int pressureProfileAtomTypes
 
static int pressureProfileSlabs
 
int operator==(const OneFourNbTholeElem &a) const
 
NAMD_HOST_DEVICE BigReal rlength(void) const
 
static void computeForce(OneFourNbTholeElem *, int, BigReal *, BigReal *)
 
static void submitReductionData(BigReal *, SubmitReduction *)
 
NAMD_HOST_DEVICE Vector delta(const Position &pos1, const Position &pos2) const
 
static BigReal pressureProfileMin