23 BigReal U, F, dU, switchmul, switchmul2;
50 const BigReal Rmin2 = (B <= 0.0 ? 0.0 : powf(2.0*A/B, 1.f/3));
51 if (myRepLambda < 1.0) {
55 const BigReal WCAshift = Rmin2*(1 - myRepLambda)*(1 - myRepLambda);
56 if (r2 <= Rmin2 - WCAshift) {
57 const BigReal epsilon = B*B/(4.0*A);
59 *alch_vdw_energy = U + epsilon;
61 *alch_vdw_dUdl = Rmin2*(1 - myRepLambda)*F;
63 *alch_vdw_energy = 0.0;
64 *alch_vdw_force = 0.0;
68 if (vdwForceSwitching) {
72 const BigReal epsilon = B*B/(4.0*A);
75 *alch_vdw_energy = U + (1 - myVdwLambda)*epsilon + myVdwLambda*dU;
77 *alch_vdw_dUdl = dU - epsilon;
78 }
else if (r2 <= switchdist2) {
82 *alch_vdw_energy = myVdwLambda*(U + dU);
83 *alch_vdw_force = myVdwLambda*F;
84 *alch_vdw_dUdl = U + dU;
88 *alch_vdw_energy = myVdwLambda*U;
89 *alch_vdw_force = myVdwLambda*F;
96 const BigReal epsilon = B*B/(4.0*A);
98 *alch_vdw_energy = U + (1 - myVdwLambda)*epsilon;
100 *alch_vdw_dUdl = -epsilon;
103 vdw_switch(r2, switchdist2, cutoff2, switchfactor, &switchmul, \
106 *alch_vdw_energy = myVdwLambda*switchmul*U;
107 *alch_vdw_force = myVdwLambda*(switchmul*F + switchmul2*U);
108 *alch_vdw_dUdl = switchmul*U;
113 if (vdwForceSwitching) {
115 if (r2 <= switchdist2) {
119 *alch_vdw_energy = myVdwLambda*(U + dU);
120 *alch_vdw_force = myVdwLambda*F;
121 *alch_vdw_dUdl = U + 0.5*myVdwLambda*alchVdwShiftCoeff*F + dU;
124 switchdist2 + myVdwShift, cutoff2, &U, &F);
125 *alch_vdw_energy = myVdwLambda*U;
126 *alch_vdw_force = myVdwLambda*F;
127 *alch_vdw_dUdl = U + 0.5*myVdwLambda*alchVdwShiftCoeff*F;
131 vdw_switch(r2, switchdist2, cutoff2, switchfactor, &switchmul, \
134 *alch_vdw_energy = myVdwLambda*switchmul*U;
135 *alch_vdw_force = myVdwLambda*(switchmul*F + switchmul2*U);
136 *alch_vdw_dUdl = switchmul*(U + 0.5*myVdwLambda*alchVdwShiftCoeff*F);
146 #define NBTYPE NBPAIR 159 #define NBTYPE NBSELF 174 #define NBTYPE NBPAIR 187 #define NBTYPE NBSELF void vdw_forceandenergy(const BigReal A, const BigReal B, const BigReal r2, BigReal *U, BigReal *F)
void vdw_switch(const BigReal r2, const BigReal switchdist2, const BigReal cutoff2, const BigReal switchfactor, BigReal *switchmul, BigReal *switchmul2)
void vdw_fswitch_forceandenergy(const BigReal A, const BigReal B, const BigReal r2, const BigReal switchdist2, const BigReal cutoff2, BigReal *U, BigReal *F)
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)
void vdw_fswitch_shift(const BigReal A, const BigReal B, const BigReal switchdist2, const BigReal cutoff2, BigReal *dU)