23 BigReal U, F, U_2, dU, dU_2, switchmul, switchmul2;
34 const BigReal Rmin2 = (B <= 0.0 ? 0.0 : powf(2.0*A/B, 1.f/3));
35 if (myRepLambda < 1.0) {
39 const BigReal WCAshift = Rmin2*(1 - myRepLambda)*(1 - myRepLambda);
40 if (r2 <= Rmin2 - WCAshift) {
43 *alch_vdw_energy = U + epsilon;
46 *alch_vdw_energy = 0.0;
47 *alch_vdw_force = 0.0;
50 if (vdwForceSwitching) {
57 *alch_vdw_energy = U + (1 - myVdwLambda)*epsilon + myVdwLambda*dU;
59 }
else if (r2 <= switchdist2) {
63 *alch_vdw_energy = myVdwLambda*(U + dU);
64 *alch_vdw_force = myVdwLambda*F;
68 *alch_vdw_energy = myVdwLambda*U;
69 *alch_vdw_force = myVdwLambda*F;
77 *alch_vdw_energy = U + (1 - myVdwLambda)*epsilon;
81 vdw_switch(r2, switchdist2, cutoff2, switchfactor, &switchmul, \
84 *alch_vdw_energy = myVdwLambda*switchmul*U;
85 *alch_vdw_force = myVdwLambda*(switchmul*F + switchmul2*U);
89 if (myRepLambda2 < 1.0) {
92 const BigReal WCAshift_2 = Rmin2*(1 - myRepLambda2)*(1 - myRepLambda2);
93 if (r2 <= Rmin2 - WCAshift_2) {
96 *alch_vdw_energy_2 = U_2 + epsilon;
98 *alch_vdw_energy_2 = 0.0;
101 if (vdwForceSwitching) {
105 const BigReal epsilon = B*B/(4.0*
A);
108 *alch_vdw_energy_2 = \
109 U_2 + (1 - myVdwLambda2)*epsilon + myVdwLambda2*dU_2;
110 }
else if (r2 <= switchdist2) {
114 *alch_vdw_energy_2 = myVdwLambda2*(U_2 + dU_2);
117 *alch_vdw_energy_2 = myVdwLambda2*U_2;
123 const BigReal epsilon = B*B/(4.0*
A);
125 *alch_vdw_energy_2 = U_2 + (1 - myVdwLambda2)*epsilon;
128 vdw_switch(r2, switchdist2, cutoff2, switchfactor, &switchmul, \
131 *alch_vdw_energy_2 = myVdwLambda2*switchmul*U_2;
136 if (vdwForceSwitching) {
138 if (r2 <= switchdist2) {
144 *alch_vdw_energy = myVdwLambda*(U + dU);
145 *alch_vdw_energy_2 = myVdwLambda2*(U_2 + dU_2);
146 *alch_vdw_force = myVdwLambda*F;
149 switchdist2 + myVdwShift, cutoff2, &U, &F);
152 *alch_vdw_energy = myVdwLambda*U;
153 *alch_vdw_energy_2 = myVdwLambda2*U_2;
154 *alch_vdw_force = myVdwLambda*F;
158 vdw_switch(r2, switchdist2, cutoff2, switchfactor, &switchmul, \
162 *alch_vdw_energy = myVdwLambda*switchmul*U;
163 *alch_vdw_energy_2 = myVdwLambda2*switchmul*U_2;
164 *alch_vdw_force = myVdwLambda*(switchmul*F + switchmul2*U);
172 #define NBTYPE NBPAIR
185 #define NBTYPE NBSELF
void vdw_fswitch_energy(const BigReal A, const BigReal B, const BigReal r2, const BigReal switchdist2, const BigReal cutoff2, BigReal *U)
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 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 vdw_energy(const BigReal A, const BigReal B, const BigReal r2, BigReal *U)
__global__ void const int const TileList *__restrict__ TileExcl *__restrict__ const int *__restrict__ const int const float2 *__restrict__ cudaTextureObject_t const int *__restrict__ const float3 const float3 const float3 const float4 *__restrict__ const float cutoff2
void vdw_fswitch_shift(const BigReal A, const BigReal B, const BigReal switchdist2, const BigReal cutoff2, BigReal *dU)