Pteros
2.0
Molecular modeling library for human beings!
|
Force field parameters of the system. More...
#include <force_field.h>
Public Member Functions | |
ForceField () | |
Constructor. | |
ForceField (const ForceField &other) | |
Copy constructor. | |
ForceField & | operator= (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 |
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.
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
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.
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