81 auto force_factor = 0.;
83#ifdef ESPRESSO_LENNARD_JONES
91#ifdef ESPRESSO_LENNARD_JONES_GENERIC
95#ifdef ESPRESSO_SMOOTH_STEP
99#ifdef ESPRESSO_HERTZIAN
103#ifdef ESPRESSO_GAUSSIAN
107#ifdef ESPRESSO_BMHTF_NACL
111#ifdef ESPRESSO_BUCKINGHAM
119#ifdef ESPRESSO_SOFT_SPHERE
131#ifdef ESPRESSO_LJCOS2
135#ifdef ESPRESSO_TABULATED
138 return force_factor * d;
149#ifdef ESPRESSO_GAY_BERNE
158#ifdef ESPRESSO_ROTATION
181 if (
auto const *iap = std::get_if<FeneBond>(&iaparams)) {
182 return iap->force(dx);
184 if (
auto const *iap = std::get_if<HarmonicBond>(&iaparams)) {
185 return iap->force(dx);
187 if (
auto const *iap = std::get_if<QuarticBond>(&iaparams)) {
188 return iap->force(dx);
190#ifdef ESPRESSO_ELECTROSTATICS
191 if (
auto const *iap = std::get_if<BondedCoulomb>(&iaparams)) {
192 return iap->force(q1q2, dx);
194 if (
auto const *iap = std::get_if<BondedCoulombSR>(&iaparams)) {
195 return iap->force(dx, *kernel);
198#ifdef ESPRESSO_BOND_CONSTRAINT
199 if (std::get_if<RigidBond>(&iaparams)) {
203#ifdef ESPRESSO_TABULATED
204 if (
auto const *iap = std::get_if<TabulatedDistanceBond>(&iaparams)) {
205 return iap->force(dx);
208 if (std::get_if<VirtualBond>(&iaparams)) {
216 std::tuple<Utils::Vector3d, Utils::Vector3d, Utils::Vector3d>>
220 if (
auto const *iap = std::get_if<AngleHarmonicBond>(&iaparams)) {
221 return iap->forces(vec1, vec2);
223 if (
auto const *iap = std::get_if<AngleCosineBond>(&iaparams)) {
224 return iap->forces(vec1, vec2);
226 if (
auto const *iap = std::get_if<AngleCossquareBond>(&iaparams)) {
227 return iap->forces(vec1, vec2);
229#ifdef ESPRESSO_TABULATED
230 if (
auto const *iap = std::get_if<TabulatedAngleBond>(&iaparams)) {
231 return iap->forces(vec1, vec2);
234 if (
auto const *iap = std::get_if<IBMTriel>(&iaparams)) {
235 return iap->calc_forces(vec1, vec2);
249 if (
auto const *iap = std::get_if<OifLocalForcesBond>(&iaparams)) {
255 return iap->calc_forces(fp2, fp1, fp3, fp4, vel1, vel3);
257 if (
auto const *iap = std::get_if<IBMTribend>(&iaparams)) {
258 return iap->calc_forces(box_geo, pos1, pos2, pos3, pos4);
264 if (
auto const *iap = std::get_if<DihedralBond>(&iaparams)) {
265 return iap->forces(v12, v23, v34);
267#ifdef ESPRESSO_TABULATED
268 if (
auto const *iap = std::get_if<TabulatedDihedralBond>(&iaparams)) {
269 return iap->forces(v12, v23, v34);
Vector implementation and trait types for boost qvm interoperability.
#define ESPRESSO_ATTR_ALWAYS_INLINE
Routines to calculate the Born-Meyer-Huggins-Tosi-Fumi potential between particle pairs.
double BMHTF_pair_force_factor(IA_parameters const &ia_params, double dist)
Calculate BMHTF force factor.
Data structures for bonded interactions.
std::variant< NoneBond, FeneBond, HarmonicBond, QuarticBond, BondedCoulomb, BondedCoulombSR, AngleHarmonicBond, AngleCosineBond, AngleCossquareBond, DihedralBond, TabulatedDistanceBond, TabulatedAngleBond, TabulatedDihedralBond, ThermalizedBond, RigidBond, IBMTriel, IBMVolCons, IBMTribend, OifGlobalForcesBond, OifLocalForcesBond, VirtualBond > Bonded_IA_Parameters
Variant in which to store the parameters of an individual bonded interaction.
Routines to calculate the Buckingham potential between particle pairs.
double buck_pair_force_factor(IA_parameters const &ia_params, double dist)
Calculate Buckingham force factor.
auto unfolded_position(Utils::Vector3d const &pos, Utils::Vector3i const &image_box) const
Unfold particle coordinates to image box.
ESPRESSO_ATTR_ALWAYS_INLINE Utils::Vector3< T > get_mi_vector(Utils::Vector3< T > const &a, Utils::Vector3< T > const &b) const
Get the minimum-image vector between two coordinates.
Routines to calculate the Gaussian potential between particle pairs.
double gaussian_pair_force_factor(IA_parameters const &ia_params, double dist)
Calculate Gaussian force factor.
__device__ void vector_product(float const *a, float const *b, float *out)
Routines to use DPD as thermostat or pair force .
This file contains the errorhandling code for severe errors, like a broken bond or illegal parameter ...
ESPRESSO_ATTR_ALWAYS_INLINE std::optional< Utils::Vector3d > calc_bond_pair_force(Bonded_IA_Parameters const &iaparams, Utils::Vector3d const &dx, double const q1q2, Coulomb::ShortRangeForceKernel::kernel_type const *kernel)
Compute the bonded interaction force between particle pairs.
ESPRESSO_ATTR_ALWAYS_INLINE std::optional< std::tuple< Utils::Vector3d, Utils::Vector3d, Utils::Vector3d, Utils::Vector3d > > calc_bonded_four_body_force(Bonded_IA_Parameters const &iaparams, BoxGeometry const &box_geo, Utils::Vector3d const &pos1, Utils::Vector3d const &pos2, Utils::Vector3d const &pos3, Utils::Vector3d const &pos4, Utils::Vector3d const &vel1, Utils::Vector3d const &vel3, Utils::Vector3i const &image1)
ParticleForce calc_opposing_force(ParticleForce const &pf, Utils::Vector3d const &d)
ParticleForce calc_non_central_force(Particle const &p1, Particle const &p2, IA_parameters const &ia_params, Utils::Vector3d const &d, double const dist)
ESPRESSO_ATTR_ALWAYS_INLINE Utils::Vector3d calc_central_radial_force(IA_parameters const &ia_params, Utils::Vector3d const &d, double const dist)
ESPRESSO_ATTR_ALWAYS_INLINE std::optional< std::tuple< Utils::Vector3d, Utils::Vector3d, Utils::Vector3d > > calc_bonded_three_body_force(Bonded_IA_Parameters const &iaparams, Utils::Vector3d const &vec1, Utils::Vector3d const &vec2)
Routines to calculate the Gay-Berne potential between particle pairs.
ParticleForce gb_pair_force(Utils::Vector3d const &ui, Utils::Vector3d const &uj, IA_parameters const &ia_params, Utils::Vector3d const &d, double dist)
Calculate Gay-Berne force and torques.
Routines to calculate the hat potential between particle pairs.
double hat_pair_force_factor(IA_parameters const &ia_params, double dist)
Calculate hat force factor.
Routines to calculate the Hertzian potential between particle pairs.
double hertzian_pair_force_factor(IA_parameters const &ia_params, double dist)
Calculate Hertzian force factor.
Routines to calculate the Lennard-Jones potential between particle pairs.
double lj_pair_force_factor(IA_parameters const &ia_params, double dist)
Calculate Lennard-Jones force factor.
Routines to calculate the Lennard-Jones with cosine tail potential between particle pairs.
double ljcos2_pair_force_factor(IA_parameters const &ia_params, double dist)
Calculate Lennard-Jones cosine squared force factor.
Routines to calculate the Lennard-Jones+cosine potential between particle pairs.
double ljcos_pair_force_factor(IA_parameters const &ia_params, double dist)
Calculate Lennard-Jones cosine force factor.
Routines to calculate the generalized Lennard-Jones potential between particle pairs.
double ljgen_pair_force_factor(IA_parameters const &ia_params, double dist)
Calculate Lennard-Jones force factor.
Routines to calculate the Morse potential between particle pairs.
double morse_pair_force_factor(IA_parameters const &ia_params, double dist)
Calculate Morse force factor.
Various procedures concerning interactions between particles.
Routines to calculate the energy and/or force for particle pairs via interpolation of lookup tables.
double tabulated_pair_force_factor(IA_parameters const &ia_params, double dist)
Calculate a non-bonded pair force factor by linear interpolation from a table.
Routines to calculate the OIF global forces for a particle triple (triangle from mesh).
Routines to calculate the OIF local forces for a particle quadruple (two neighboring triangles with c...
Routines to calculate the smooth step potential between particle pairs.
double SmSt_pair_force_factor(IA_parameters const &ia_params, double dist)
Calculate smooth step force factor.
Routines to calculate the soft-sphere potential between particle pairs.
double soft_pair_force_factor(IA_parameters const &ia_params, double dist)
Calculate soft-sphere force factor.
Exception indicating that a bond type was unknown.
Solver::ShortRangeForceKernel kernel_type
Parameters for non-bonded interactions.
Force information on a particle.
Utils::Vector3d torque
torque.
Struct holding all information for one particle.
auto const & quat() const
Routines to calculate the Thole damping potential between particle pairs.
Routines to calculate the Weeks-Chandler-Andersen potential between particle pairs.
double wca_pair_force_factor(IA_parameters const &ia_params, double dist)
Calculate WCA force factor.