STORMM Source Documentation
Loading...
Searching...
No Matches
stormm::energy::PPITable Class Reference

A tabulated non-bonded potential, with or without exclusions, to be used in the context of particle-particle, particle-mesh calculations. The key is to create two tables, one for the non-excluded form of the interaction and the other for the excluded form. The entries for each table will then be concatenated, such that all non-excluded interactions are contiguous and then all exclude interactions are contiguous. The offset for accessing an excluded interaction based on an index calculated from a particle-particle distance is stored alongside the tabulated splines in the abstract. More...

#include <ppitable.h>

Public Member Functions

NonbondedTheme getTheme () const
 Get the non-bonded potential described by an object of this class.
 
double getCutoff () const
 Get the cutoff on particle-particle interactions.
 
double getMaximumRange () const
 Get the maximum range of the spline.
 
double getIndexingOffset () const
 Get the indexing argument offset, consistent across all tables.
 
double getDirectSumTolerance () const
 Get the direct sum tolerance.
 
int getBitStride () const
 Get the number of bits of the mantissa used for table indexing.
 
double getEwaldCoefficient () const
 Get the Ewald coefficient used to perform the switching between short- and long-ranged potentials.
 
double getGaussianWidth () const
 Get the Gaussian RMS sigma parameter (one half the inverse of the Ewald coefficient) used to perform the switching between short- and long-ranged potentials.
 
int getTableIndex (double arg, PrecisionModel prec=PrecisionModel::SINGLE) const
 Get the spline index that would be accessed in order to evaluate a given argument.
 
int getTableIndexByRealArg (double arg, PrecisionModel prec=PrecisionModel::SINGLE) const
 Get the spline index that would be accessed in order to evaluate a given argument.
 
double evaluate (double arg, LogSplineForm kind, PrecisionModel prec=PrecisionModel::SINGLE, bool use_elemental_tables=false) const
 Evaluate the spline table at a given inter-particle distance expressed in the manner used for the class object's table indexing. For example, if the object indexes its tables by the squared value of the displacement, enter 49.0 A^2 in order to get the force, energy, or excluded form thereof for two particles separated by a distance of 7.0 A.
 
double evaluateByRealArg (double arg, LogSplineForm kind, PrecisionModel prec=PrecisionModel::SINGLE, bool use_elemental_tables=false) const
 Evaluate the spline table at a given inter-particle distance expressed as the absolute value of the displacement between two particles. Descriptions of input parameters otherwise follow from evaluate(), above.
 
const PPIKit< double, double4dpData (HybridTargetLevel tier=HybridTargetLevel::HOST) const
 Get the double-precision abstract for use of the splines in a C programming style.
 
const PPIKit< float, float4spData (HybridTargetLevel tier=HybridTargetLevel::HOST) const
 Get the single-precision abstract for use of the splines in a C programming style.
 
const PPIeKit< double > dpeData (HybridTargetLevel tier=HybridTargetLevel::HOST) const
 Get the double-precision abstract for use of the splines in a C programming style, with all spline tuples broken into their individual components. This abstract may be more suitable for kernels where register pressure constrains performance.
 
const PPIeKit< float > speData (HybridTargetLevel tier=HybridTargetLevel::HOST) const
 Get the single-precision abstract for use of the splines in a C programming style, with all spline tuples broken into their individual components. This abstract may be more suitable for kernels where register pressure constrains performance.
 
 PPITable (NonbondedTheme theme_in=NonbondedTheme::ELECTROSTATIC, BasisFunctions basis_set_in=BasisFunctions::POLYNOMIAL, TableIndexing indexing_method_in=TableIndexing::SQUARED_ARG, double cutoff_in=default_pme_cutoff, double argument_offset_in=0.0, double dsum_tol_in=default_dsum_tol, int mantissa_bits_in=5, double coulomb_in=amber_ancient_bioq, double min_range_in=0.015625)
 The constuctor can accept all of the arguments that might be useful for making a LosScaleSpline, or a LogScaleSpline itself. Tables for both the otential and the derivative will be computed.
 
template<typename T4>
 PPITable (const LogScaleSpline< T4 > &spl_a, const LogScaleSpline< T4 > &spl_b, const LogScaleSpline< T4 > &spl_c, const LogScaleSpline< T4 > &spl_d, double cutoff_in=default_pme_cutoff)
 
template<typename T4>
 PPITable (const LogScaleSpline< T4 > &spl_a, const LogScaleSpline< T4 > &spl_b, const LogScaleSpline< T4 > &spl_c)
 
template<typename T4>
 PPITable (const LogScaleSpline< T4 > &spl_a, const LogScaleSpline< T4 > &spl_b)
 
template<typename T4>
 PPITable (const LogScaleSpline< T4 > &spl_a)
 
 PPITable (const PPITable &original)
 The presence of POINTER-kind Hybrid objects implies pointer repairs that require the copy and move constructors as well as assignment operators to be spelled out.
 
 PPITable (PPITable &&original)
 
PPITableoperator= (const PPITable &original)
 
PPITableoperator= (PPITable &&original)
 

Detailed Description

A tabulated non-bonded potential, with or without exclusions, to be used in the context of particle-particle, particle-mesh calculations. The key is to create two tables, one for the non-excluded form of the interaction and the other for the excluded form. The entries for each table will then be concatenated, such that all non-excluded interactions are contiguous and then all exclude interactions are contiguous. The offset for accessing an excluded interaction based on an index calculated from a particle-particle distance is stored alongside the tabulated splines in the abstract.

Constructor & Destructor Documentation

◆ PPITable()

stormm::energy::PPITable::PPITable ( const PPITable & original)

The presence of POINTER-kind Hybrid objects implies pointer repairs that require the copy and move constructors as well as assignment operators to be spelled out.

Parameters
originalTHe original object to copy or move
otherAnother object placed on the right hand side of the assignment statement

Member Function Documentation

◆ dpData()

const PPIKit< double, double4 > stormm::energy::PPITable::dpData ( HybridTargetLevel tier = HybridTargetLevel::HOST) const

Get the double-precision abstract for use of the splines in a C programming style.

Parameters
tierIndicate whether to obtain pointers for data on the CPU host or GPU device

◆ dpeData()

const PPIeKit< double > stormm::energy::PPITable::dpeData ( HybridTargetLevel tier = HybridTargetLevel::HOST) const

Get the double-precision abstract for use of the splines in a C programming style, with all spline tuples broken into their individual components. This abstract may be more suitable for kernels where register pressure constrains performance.

Parameters
tierIndicate whether to obtain pointers for data on the CPU host or GPU device

◆ evaluate()

double stormm::energy::PPITable::evaluate ( double arg,
LogSplineForm kind,
PrecisionModel prec = PrecisionModel::SINGLE,
bool use_elemental_tables = false ) const

Evaluate the spline table at a given inter-particle distance expressed in the manner used for the class object's table indexing. For example, if the object indexes its tables by the squared value of the displacement, enter 49.0 A^2 in order to get the force, energy, or excluded form thereof for two particles separated by a distance of 7.0 A.

Parameters
argThe value of the spline table indexing argument
kindIndicate whether to evaluate the potential, the force, or an excluded form of either quantity
precThe precision of the table from which to retrieve calculations (also implies a precision model for the spline calculation)
use_elemental_tablesIndicate whether to use elementwise tables, in which each of the spline coefficients are accessed individually, or tuple tables in which they are all accessed at once. The default behavior is to use tuple-baed tables.

◆ getTableIndex()

int stormm::energy::PPITable::getTableIndex ( double arg,
PrecisionModel prec = PrecisionModel::SINGLE ) const

Get the spline index that would be accessed in order to evaluate a given argument.

Parameters
argThe value of the spline table indexing argument

◆ getTableIndexByRealArg()

int stormm::energy::PPITable::getTableIndexByRealArg ( double arg,
PrecisionModel prec = PrecisionModel::SINGLE ) const

Get the spline index that would be accessed in order to evaluate a given argument.

Parameters
argThe value of the spline table indexing argument

◆ spData()

const PPIKit< float, float4 > stormm::energy::PPITable::spData ( HybridTargetLevel tier = HybridTargetLevel::HOST) const

Get the single-precision abstract for use of the splines in a C programming style.

Parameters
tierIndicate whether to obtain pointers for data on the CPU host or GPU device

◆ speData()

const PPIeKit< float > stormm::energy::PPITable::speData ( HybridTargetLevel tier = HybridTargetLevel::HOST) const

Get the single-precision abstract for use of the splines in a C programming style, with all spline tuples broken into their individual components. This abstract may be more suitable for kernels where register pressure constrains performance.

Parameters
tierIndicate whether to obtain pointers for data on the CPU host or GPU device

The documentation for this class was generated from the following files: