A functor to handle lennard-jones interactions between two particles (molecules). More...
#include <LJFunctor.h>
Public Member Functions | |
LJFunctor ()=delete | |
Deleted default constructor. | |
LJFunctor (double cutoff) | |
Constructor for Functor with mixing disabled. | |
LJFunctor (double cutoff, ParticlePropertiesLibrary< double, size_t > &particlePropertiesLibrary) | |
Constructor for Functor with mixing active. | |
std::string | getName () final |
Returns name of functor. | |
bool | isRelevantForTuning () final |
Specifies whether the functor should be considered for the auto-tuning process. | |
bool | allowsNewton3 () final |
Specifies whether the functor is capable of Newton3-like functors. | |
bool | allowsNonNewton3 () final |
Specifies whether the functor is capable of non-Newton3-like functors. | |
void | AoSFunctor (Particle_T &i, Particle_T &j, bool newton3) final |
PairwiseFunctor for arrays of structures (AoS). | |
void | SoAFunctorSingle (autopas::SoAView< SoAArraysType > soa, bool newton3) final |
PairwiseFunctor for structure of arrays (SoA) | |
void | SoAFunctorPair (autopas::SoAView< SoAArraysType > soa1, autopas::SoAView< SoAArraysType > soa2, const bool newton3) final |
PairwiseFunctor for structure of arrays (SoA) | |
void | SoAFunctorVerlet (autopas::SoAView< SoAArraysType > soa, const size_t indexFirst, const std::vector< size_t, autopas::AlignedAllocator< size_t > > &neighborList, bool newton3) final |
PairwiseFunctor for structure of arrays (SoA) for neighbor lists. | |
void | setParticleProperties (SoAFloatPrecision epsilon24, SoAFloatPrecision sigmaSquared) |
Sets the particle properties constants for this functor. | |
void | initTraversal () final |
Reset the global values. | |
void | endTraversal (bool newton3) final |
Accumulates global values, e.g. | |
double | getPotentialEnergy () |
Get the potential Energy. | |
double | getVirial () |
Get the virial. | |
size_t | getNumFLOPs () const override |
Gets the number of useful FLOPs. | |
double | getHitRate () const override |
Get the hit rate. | |
![]() | |
PairwiseFunctor (double cutoff) | |
Constructor. | |
virtual void | AoSFunctor (Particle_T &i, Particle_T &j, bool newton3) |
PairwiseFunctor for arrays of structures (AoS). | |
virtual void | SoAFunctorSingle (SoAView< SoAArraysType > soa, bool newton3) |
PairwiseFunctor for structure of arrays (SoA) | |
virtual void | SoAFunctorVerlet (SoAView< SoAArraysType > soa, const size_t indexFirst, const std::vector< size_t, AlignedAllocator< size_t > > &neighborList, bool newton3) |
PairwiseFunctor for structure of arrays (SoA) for neighbor lists. | |
virtual void | SoAFunctorPair (SoAView< SoAArraysType > soa1, SoAView< SoAArraysType > soa2, bool newton3) |
PairwiseFunctor for structure of arrays (SoA) | |
![]() | |
Functor (double cutoff) | |
Constructor. | |
virtual void | initTraversal () |
This function is called at the start of each traversal. | |
virtual void | endTraversal (bool newton3) |
This function is called at the end of each traversal. | |
template<class ParticleCell > | |
void | SoALoader (ParticleCell &cell, SoA< SoAArraysType > &soa, size_t offset, bool skipSoAResize) |
Copies the AoS data of the given cell in the given soa. | |
template<typename ParticleCell > | |
void | SoAExtractor (ParticleCell &cell, SoA< SoAArraysType > &soa, size_t offset) |
Copies the data stored in the soa back into the cell. | |
virtual bool | allowsNewton3 ()=0 |
Specifies whether the functor is capable of Newton3-like functors. | |
virtual bool | allowsNonNewton3 ()=0 |
Specifies whether the functor is capable of non-Newton3-like functors. | |
virtual bool | isRelevantForTuning ()=0 |
Specifies whether the functor should be considered for the auto-tuning process. | |
virtual std::string | getName ()=0 |
Returns name of functor. | |
double | getCutoff () const |
Getter for the functor's cutoff. | |
virtual size_t | getNumFLOPs () const |
Get the number of FLOPs. | |
virtual double | getHitRate () const |
Get the hit rate. | |
Static Public Member Functions | |
static constexpr auto | getNeededAttr () |
Get attributes needed for computation. | |
static constexpr auto | getNeededAttr (std::false_type) |
Get attributes needed for computation without N3 optimization. | |
static constexpr auto | getComputedAttr () |
Get attributes computed by this functor. | |
static constexpr bool | getMixing () |
![]() | |
static constexpr std::array< typename Particle_T::AttributeNames, 0 > | getNeededAttr () |
Get attributes needed for computation. | |
static constexpr std::array< typename Particle_T::AttributeNames, 0 > | getNeededAttr (std::false_type) |
Get attributes needed for computation without N3 optimization. | |
static constexpr std::array< typename Particle_T::AttributeNames, 0 > | getComputedAttr () |
Get attributes computed by this functor. | |
Additional Inherited Members | |
![]() | |
using | SoAArraysType = typename Particle_T::SoAArraysType |
Structure of the SoAs defined by the particle. | |
![]() | |
using | SoAArraysType = typename Particle_T::SoAArraysType |
Structure of the SoAs defined by the particle. | |
using | Functor_T = CRTP_T |
Make the Implementation type template publicly available. | |
A functor to handle lennard-jones interactions between two particles (molecules).
This functor assumes that duplicated calculations are always happening, which is characteristic for a Full-Shell scheme.
Particle_T | The type of particle. |
applyShift | Switch for the lj potential to be truncated shifted. |
useMixing | Switch for the functor to be used with multiple particle types. If set to false, _epsilon and _sigma need to be set and the constructor with PPL can be omitted. |
useNewton3 | Switch for the functor to support newton3 on, off or both. See FunctorN3Modes for possible values. |
calculateGlobals | Defines whether the global values are to be calculated (energy, virial). |
countFLOPs | counts FLOPs and hitrate |
relevantForTuning | Whether or not the auto-tuner should consider this functor. |
|
inlineexplicit |
Constructor for Functor with mixing disabled.
When using this functor it is necessary to call setParticleProperties() to set internal constants because it does not use a particle properties library.
cutoff |
|
inlineexplicit |
Constructor for Functor with mixing active.
This functor takes a ParticlePropertiesLibrary to look up (mixed) properties like sigma, epsilon and shift.
cutoff | |
particlePropertiesLibrary |
|
inlinefinalvirtual |
Specifies whether the functor is capable of Newton3-like functors.
If the functor provides an interface to soa or aos functions that utilize Newton's third law of motion (actio = reactio) to reduce the computational complexity this function should return true. If this is not the case this function should return false.
Implements autopas::Functor< Particle_T, CRTP_T >.
|
inlinefinalvirtual |
Specifies whether the functor is capable of non-Newton3-like functors.
If the functor provides an interface to soa or aos functions that do not utilize Newton's third law of motion (actio = reactio) this function should return true. If this is not the case this function should return false.
Implements autopas::Functor< Particle_T, CRTP_T >.
|
inlinefinalvirtual |
PairwiseFunctor for arrays of structures (AoS).
This functor should calculate the forces or any other pair-wise interaction between two particles. This should include a cutoff check if needed!
i | Particle i |
j | Particle j |
newton3 | defines whether or whether not to use newton 3 |
Reimplemented from autopas::PairwiseFunctor< Particle_T, CRTP_T >.
|
inlinefinalvirtual |
Accumulates global values, e.g.
potential energy and virial.
newton3 |
Reimplemented from autopas::Functor< Particle_T, CRTP_T >.
|
inlinestaticconstexpr |
Get attributes computed by this functor.
|
inlineoverridevirtual |
Get the hit rate.
Implementation required if FLOPLogger used.
If derived class provides no implementation, the FLOPLogger interprets the default NaN output as invalid and leaves "Not Implemented" in the log.
Reimplemented from autopas::Functor< Particle_T, CRTP_T >.
|
inlinestaticconstexpr |
|
inlinefinalvirtual |
Returns name of functor.
Intended for use with the iteration logger, to differentiate between calls to computeInteractions using different functors in the logs.
Implements autopas::Functor< Particle_T, CRTP_T >.
|
inlinestaticconstexpr |
Get attributes needed for computation.
|
inlinestaticconstexpr |
Get attributes needed for computation without N3 optimization.
|
inlineoverridevirtual |
Gets the number of useful FLOPs.
For the distance squared calculation, this is:
For the force kernel, this is:
For the globals calculation, this is:
Caveats:
This function is supposed to return useful FLOPs, e.g. without counting masked vector instructions. You could also argue that, strictly speaking, we redundantly calculate forces and globals twice in the newton3 case on a owned/halo boundary. This function does not treat such "redundant" calculations as useless. Similarly, this function does not treat halo-halo interactions as redundant useless calculations.
Reimplemented from autopas::Functor< Particle_T, CRTP_T >.
|
inline |
Get the potential Energy.
|
inline |
Get the virial.
|
inlinefinalvirtual |
Reset the global values.
Will set the global values to zero to prepare for the next iteration.
Reimplemented from autopas::Functor< Particle_T, CRTP_T >.
|
inlinefinalvirtual |
Specifies whether the functor should be considered for the auto-tuning process.
Implements autopas::Functor< Particle_T, CRTP_T >.
|
inline |
Sets the particle properties constants for this functor.
This is only necessary if no particlePropertiesLibrary is used.
epsilon24 | |
sigmaSquared |
|
inlinefinalvirtual |
PairwiseFunctor for structure of arrays (SoA)
This functor should calculate the forces or any other pair-wise interaction between all particles of soa1 and soa2. This should include a cutoff check if needed!
soa1 | First structure of arrays. |
soa2 | Second structure of arrays. |
newton3 | defines whether or whether not to use newton 3 |
Reimplemented from autopas::PairwiseFunctor< Particle_T, CRTP_T >.
|
inlinefinalvirtual |
PairwiseFunctor for structure of arrays (SoA)
This functor should calculate the forces or any other pair-wise interaction between all particles in an soa. This should include a cutoff check if needed!
soa | Structure of arrays |
newton3 | defines whether or whether not to use newton 3 This functor will always use a newton3 like traversal of the soa. |
Reimplemented from autopas::PairwiseFunctor< Particle_T, CRTP_T >.
|
inlinefinalvirtual |
PairwiseFunctor for structure of arrays (SoA) for neighbor lists.
This functor should calculate the forces or any other pair-wise interaction between the particle in the SoA with index indexFirst and all particles with indices in the neighborList. This should include a cutoff check if needed!
soa | Structure of arrays |
indexFirst | The index of the first particle for each interaction |
neighborList | The list of neighbors |
newton3 | defines whether or whether not to use newton 3 |
Reimplemented from autopas::PairwiseFunctor< Particle_T, CRTP_T >.