}
/* 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);
}