if constexpr (softcoreType == KernelSoftcoreType::Gapsys)
{
- ewaldQuadraticPotential(qq[i],
- facel,
- rC,
- rCutoffCoul,
- LFC[i],
- DLF[i],
- gapsysScaleLinpointCoulEff,
- sh_ewald,
- &fScalC[i],
- &vCoul[i],
- &dvdlCoul,
- computeElecInteraction);
+ ewaldQuadraticPotential<computeForces>(qq[i],
+ facel,
+ rC,
+ rCutoffCoul,
+ LFC[i],
+ DLF[i],
+ gapsysScaleLinpointCoulEff,
+ sh_ewald,
+ &fScalC[i],
+ &vCoul[i],
+ &dvdlCoul,
+ computeElecInteraction);
}
}
else
if constexpr (softcoreType == KernelSoftcoreType::Gapsys)
{
- reactionFieldQuadraticPotential(qq[i],
- facel,
- rC,
- rCutoffCoul,
- LFC[i],
- DLF[i],
- gapsysScaleLinpointCoulEff,
- krf,
- crf,
- &fScalC[i],
- &vCoul[i],
- &dvdlCoul,
- computeElecInteraction);
+ reactionFieldQuadraticPotential<computeForces>(
+ qq[i],
+ facel,
+ rC,
+ rCutoffCoul,
+ LFC[i],
+ DLF[i],
+ gapsysScaleLinpointCoulEff,
+ krf,
+ crf,
+ &fScalC[i],
+ &vCoul[i],
+ &dvdlCoul,
+ computeElecInteraction);
}
}
if constexpr (softcoreType == KernelSoftcoreType::Gapsys)
{
- lennardJonesQuadraticPotential(c6[i],
- c12[i],
- r,
- rSq,
- LFV[i],
- DLF[i],
- gapsysSigma6VdWEff[i],
- gapsysScaleLinpointVdWEff,
- repulsionShift,
- dispersionShift,
- &fScalV[i],
- &vVdw[i],
- &dvdlVdw,
- computeVdwInteraction);
+ lennardJonesQuadraticPotential<computeForces>(c6[i],
+ c12[i],
+ r,
+ rSq,
+ LFV[i],
+ DLF[i],
+ gapsysSigma6VdWEff[i],
+ gapsysScaleLinpointVdWEff,
+ repulsionShift,
+ dispersionShift,
+ &fScalV[i],
+ &vVdw[i],
+ &dvdlVdw,
+ computeVdwInteraction);
}
if constexpr (vdwInteractionTypeIsEwald)
}
/* reaction-field linearized electrostatics */
-template<class RealType, class BoolType>
+template<bool computeForces, class RealType, class BoolType>
static inline void reactionFieldQuadraticPotential(const RealType qq,
const real facel,
const RealType r,
potentialQuad = potentialQuad + qq * (krf * r * r - potentialShift);
// update
- *force = gmx::blend(*force, forceQuad, computeValues);
+ if constexpr (computeForces)
+ {
+ *force = gmx::blend(*force, forceQuad, computeValues);
+ }
*potential = gmx::blend(*potential, potentialQuad, computeValues);
*dvdl = *dvdl + gmx::selectByMask(dvdlQuad, computeValues && withinCutoff);
}
}
/* ewald linearized electrostatics */
-template<class RealType, class BoolType>
+template<bool computeForces, class RealType, class BoolType>
static inline void ewaldQuadraticPotential(const RealType qq,
const real facel,
const RealType r,
potentialQuad = potentialQuad - qq * potentialShift;
// update
- *force = gmx::blend(*force, forceQuad, computeValues);
+ if constexpr (computeForces)
+ {
+ *force = gmx::blend(*force, forceQuad, computeValues);
+ }
*potential = gmx::blend(*potential, potentialQuad, computeValues);
*dvdl = *dvdl + gmx::selectByMask(dvdlQuad, computeValues && withinCutoff);
}
}
/* cutoff LJ with quadratic appximation of lj-potential */
-template<class RealType, class BoolType>
+template<bool computeForces, class RealType, class BoolType>
static inline void lennardJonesQuadraticPotential(const RealType c6,
const RealType c12,
const RealType r,
potentialQuad = potentialQuad
+ gmx::selectByMask(((c12s * repulsionShift) - (c6s * dispersionShift)),
computeValues);
- *force = gmx::blend(*force, forceQuad, computeValues);
+ if constexpr (computeForces)
+ {
+ *force = gmx::blend(*force, forceQuad, computeValues);
+ }
*potential = gmx::blend(*potential, potentialQuad, computeValues);
*dvdl = *dvdl + gmx::selectByMask(dvdlQuad, computeValues);
}