Pteros  2.0
Molecular modeling library for human beings!
pteros::ForceField Class Reference

Force field parameters of the system. More...

#include <force_field.h>

Public Member Functions

 ForceField ()
 Constructor.
 
 ForceField (const ForceField &other)
 Copy constructor.
 
ForceFieldoperator= (ForceField other)
 Assignment operator.
 
void clear ()
 
void setup_kernels ()
 
Eigen::Vector2f pair_energy (int at1, int at2, float r, float q1, float q2, int type1, int type2)
 
float get_cutoff ()
 Returns "natural" cutoff (currenly min of rcoulomb and rvdw)
 

Public Attributes

int natoms
 
std::vector< std::unordered_set< int > > exclusions
 Exclusions. More...
 
Eigen::MatrixXf LJ_C6
 Matrices of normal (not excluded, not 1-4) LJ interactions. More...
 
Eigen::MatrixXf LJ_C12
 
std::vector< Eigen::Vector2f > LJ14_interactions
 The list of distinct types of LJ14 interactions in the format [C6,C12].
 
std::unordered_map< int, int > LJ14_pairs
 The list of LJ14 pairs. More...
 
float fudgeQQ
 Scaling factor of 1-4 Coulomb interactions.
 
float rcoulomb
 
float epsilon_r
 
float epsilon_rf
 
float rcoulomb_switch
 
float rvdw_switch
 
float rvdw
 
std::string coulomb_type
 
std::string coulomb_modifier
 
std::string vdw_type
 
std::string vdw_modifier
 
std::vector< Eigen::Vector2i > bonds
 Bonds.
 
std::vector< Eigen::Vector2i > molecules
 
bool ready
 Is the force field properly set up?
 
float(* coulomb_kernel_ptr )(float, float, float, const ForceField &)
 Pointer to chosen coulomb kernel.
 
float(* LJ_kernel_ptr )(float, float, float, const ForceField &)
 Pointer to chosen VDW kernel.
 
float coulomb_prefactor
 
float k_rf
 
float c_rf
 
Eigen::Vector3f shift_1
 
Eigen::Vector3f shift_6
 
Eigen::Vector3f shift_12
 

Detailed Description

Force field parameters of the system.

MD packages usually separate topology and force filed i.e. interaction parameters and chemical identity and connectivity (bonds, angles, atom types, etc). This doesn't make much sense since atom types are part of particular force field and at the same time part of chemical identity, etc. In Pteros the force field is all information, which is needed to compute interactomic energies and forces in addition to what is stored already in Atom.

Atom already contains the following information: mass, charge, type and type_name. All the rest is stored in this class.

Member Data Documentation

◆ exclusions

std::vector<std::unordered_set<int> > pteros::ForceField::exclusions

Exclusions.

The storage order is: (atom)-->[i1,i2,i3...in] which means that all interactions (atom:i1), (atom:i2) ... (atom:in) are excluded If atom has no exclusions the set is empty

◆ LJ_C6

Eigen::MatrixXf pteros::ForceField::LJ_C6

Matrices of normal (not excluded, not 1-4) LJ interactions.

The size of the matrix == the number of distinct LJ types. The types themselves are integers and are stored in Atom.type Matrices are symmetric.

◆ LJ14_pairs

std::unordered_map<int,int> pteros::ForceField::LJ14_pairs

The list of LJ14 pairs.

The mapping is (a*Natoms+b)->index in LJ14_interactions a<=b! This is important


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