STORMM Source Documentation
Loading...
Searching...
No Matches
forcefield_element.h
1// -*-c++-*-
2#ifndef STORMM_FORCEFIELD_ELEMENT_H
3#define STORMM_FORCEFIELD_ELEMENT_H
4
5#include <vector>
6#include "copyright.h"
7#include "Constants/behavior.h"
8#include "DataTypes/stormm_vector_types.h"
9#include "Topology/atomgraph.h"
10#include "Topology/atomgraph_enumerators.h"
11#include "forcefield_enumerators.h"
12
13namespace stormm {
14namespace modeling {
15
16using constants::ExceptionResponse;
17using topology::AtomGraph;
18using topology::TorsionKind;
19using topology::VirtualSiteKind;
20
25public:
26
50 ForceFieldElement(ParameterKind kind_in = ParameterKind::NONE);
51
52 ForceFieldElement(ParameterKind kind_in, char4 atom_i_in);
53
54 ForceFieldElement(ParameterKind kind_in, char4 atom_i_in, char4 atom_j_in);
55
56 ForceFieldElement(ParameterKind kind_in, char4 atom_i_in, char4 atom_j_in, char4 atom_k_in);
57
58 ForceFieldElement(ParameterKind kind_in, char4 atom_i_in, char4 atom_j_in, char4 atom_k_in,
59 char4 atom_l_in, TorsionKind tkind_in = TorsionKind::PROPER);
60
61 ForceFieldElement(ParameterKind kind_in, VirtualSiteKind frame_type_in, char4 atom_i_in,
62 char4 atom_j_in, char4 atom_k_in, char4 residue_i_in, char4 residue_j_in,
63 char4 residue_k_in);
64
65 ForceFieldElement(ParameterKind kind_in, VirtualSiteKind frame_type_in, char4 atom_i_in,
66 char4 atom_j_in, char4 atom_k_in, char4 atom_l_in, char4 residue_i_in,
67 char4 residue_j_in, char4 residue_k_in, char4 residue_l_in);
68
69 ForceFieldElement(ParameterKind kind_in, VirtualSiteKind frame_type_in, char4 atom_i_in,
70 char4 atom_j_in, char4 atom_k_in, char4 atom_l_in, char4 atom_m_in,
71 char4 residue_i_in, char4 residue_j_in, char4 residue_k_in, char4 residue_l_in,
72 char4 residue_m_in);
73
74 ForceFieldElement(ParameterKind kind_in, char4 atom_i_in, char4 atom_j_in, char4 atom_k_in,
75 char4 atom_l_in, char4 atom_m_in, char4 residue_i_in, char4 residue_j_in,
76 char4 residue_k_in, char4 residue_l_in, char4 residue_m_in,
77 const std::vector<double> &surface_in, const std::vector<int2> &locations_in);
79
81 ParameterKind getKind() const;
82
84 char4 getNameOfAtom(char atom_rank = 'I') const;
85
87 char4 getTypeOfAtom(char atom_rank = 'I') const;
88
90 char4 getNameOfResidue(char atom_rank = 'I') const;
91
93 double getCharge() const;
94
96 double getSigma() const;
97
99 double getEpsilon() const;
100
103 double getRho() const;
104
106 double getStiffnessConstant() const;
107
109 double getEquilibriumConstant() const;
110
112 double getAmplitude() const;
113
115 double getPhaseAngle() const;
116
118 double getPeriodicity() const;
119
121 double getElectrostaticScaling() const;
122
124 double getVanDerWaalsScaling() const;
125
128 TorsionKind getTorsionKind() const;
129
131 std::vector<double> getSurfaceValues() const;
132
134 std::vector<int2> getSurfaceIndices() const;
135
137 VirtualSiteKind getVirtualSiteFrameType() const;
138
140 bool testSigmaModification() const;
141
143 bool testEpsilonModification() const;
144
146 bool testRhoModification() const;
147
149 bool testStiffnessModification() const;
150
152 bool testEquilibriumModification() const;
153
155 bool testAmplitudeModification() const;
156
158 bool testPhaseAngleModification() const;
159
161 bool testPeriodicityModification() const;
162
164 void setStiffness(double stiffness_in);
165
167 void setEquilibrium(double equilbrium_in);
168
170 void setPhaseAngle(double phase_angle_in);
171
173 void setAmplitude(double amplitude_in);
174
176 void setPeriodicity(double periodicity_in);
177
179 void setChargeScaling(double scaling_in);
180
182 void setVanDerWaalsScaling(double scaling_in);
183
185 void setCharge(double charge_in);
186
188 void setSigma(double sigma_in);
189
191 void setEpsilon(double epsilon_in);
192
194 void setRho(double rho_in);
195
200 void apply(AtomGraph *ag, ExceptionResponse policy = ExceptionResponse::SILENT) const;
201
202private:
203 ParameterKind kind;
204 char4 atom_name_i;
206 char4 atom_name_j;
208 char4 atom_name_k;
210 char4 atom_name_l;
212 char4 atom_name_m;
214 char4 residue_name_i;
216 char4 residue_name_j;
218 char4 residue_name_k;
220 char4 residue_name_l;
222 char4 residue_name_m;
224
225 // General-purpose real-values numbers for keeping this parameter's details. The information in
226 // any of these parameters is optional in the namelist, but it may be necessary to specify at
227 // least one in order to alter anything about a parameter. Each of these properties begins with
228 // its "activation" set to false, and the flag must be set, post-construction, in order to show
229 // that one of the properties was specified by the user.
230 double property_a;
232 double property_b;
234 double property_c;
236 bool activate_a;
237 bool activate_b;
238 bool activate_c;
239
240
241 // Miscellaneous properties
242 TorsionKind torsion_kind;
243 std::vector<double> surface;
244 std::vector<int2> locations;
245 VirtualSiteKind frame_type;
247};
248
249} // namespace modeling
250} // namespace stormm
251
252#endif
bool testEpsilonModification() const
Test whether the epsilon value of a van-der Waals parameter is being modified.
Definition forcefield_element.cpp:960
void setEquilibrium(double equilbrium_in)
Set the equilibrium property of one of the valence terms.
Definition forcefield_element.cpp:1141
double getCharge() const
Get the charge of an atom with a given atom name and residue nam.
Definition forcefield_element.cpp:604
double getElectrostaticScaling() const
Get the electrostatic scaling factor for an attenuated 1:4 non-bonded interaction.
Definition forcefield_element.cpp:806
bool testStiffnessModification() const
Test whether the stiffness constant of a valence parameter is being modified.
Definition forcefield_element.cpp:1004
double getStiffnessConstant() const
Get the stiffness constant of a bond, angle, Urey-Bradley, or CHARMM improper term.
Definition forcefield_element.cpp:692
double getPhaseAngle() const
Get the phase angle of a cosine-based dihedral or CHARMM improper dihedral term.
Definition forcefield_element.cpp:762
void setEpsilon(double epsilon_in)
Set the epsilon parameter of an atom.
Definition forcefield_element.cpp:1328
ParameterKind getKind() const
Get the force field parameter kind.
Definition forcefield_element.cpp:336
void setSigma(double sigma_in)
Set the sigma parameter of an atom.
Definition forcefield_element.cpp:1305
VirtualSiteKind getVirtualSiteFrameType() const
Get the virtual site frame type.
Definition forcefield_element.cpp:916
std::vector< int2 > getSurfaceIndices() const
Get the locations of point edits on a CMAP term's energy surface.
Definition forcefield_element.cpp:894
void setPhaseAngle(double phase_angle_in)
Set the phase angle property of one of the valence terms.
Definition forcefield_element.cpp:1167
double getVanDerWaalsScaling() const
Get the van-der Waals scaling factor for an attenuated 1:4 non-bonded interaction.
Definition forcefield_element.cpp:828
char4 getNameOfAtom(char atom_rank='I') const
Get the atom name of the I atom in the term.
Definition forcefield_element.cpp:341
char4 getNameOfResidue(char atom_rank='I') const
Get the resiude name of atom I in the term.
Definition forcefield_element.cpp:518
void setChargeScaling(double scaling_in)
Set the electrostatic scaling factor for an attenuated 1:4 interaction.
Definition forcefield_element.cpp:1236
bool testPeriodicityModification() const
Test whether the periodicity of a dihedral parameter is being modified.
Definition forcefield_element.cpp:1096
double getSigma() const
Get the Lennard-Jones sigma parameter of an atom.
Definition forcefield_element.cpp:626
TorsionKind getTorsionKind() const
Get the torsion kind, indicating whether these four atoms describe a proper or improper torsion inter...
Definition forcefield_element.cpp:850
double getRho() const
Get the Lennard-Jones rho parameter of an atom (the third parameter, for 12-6-4 potentials)
Definition forcefield_element.cpp:670
void setRho(double rho_in)
Set the rho parameter of an atom.
Definition forcefield_element.cpp:1351
bool testRhoModification() const
Test whether the rho value of a van-der Waals parameter is being modified.
Definition forcefield_element.cpp:982
void setStiffness(double stiffness_in)
Set the stiffness property of one of the valence terms.
Definition forcefield_element.cpp:1118
double getEquilibriumConstant() const
Get the equilibrium constant of a bond, angle, or Urey-Bradley term.
Definition forcefield_element.cpp:718
void setCharge(double charge_in)
Set the charge parameter of an atom.
Definition forcefield_element.cpp:1282
bool testPhaseAngleModification() const
Test whether the phase angle of a dihedral or improper dihedral is being modified.
Definition forcefield_element.cpp:1074
bool testEquilibriumModification() const
Test whether the equilibrium constant of a valence parameter is being modified.
Definition forcefield_element.cpp:1030
bool testSigmaModification() const
Test whether the sigma value of a van-der Waals parameter is being modified.
Definition forcefield_element.cpp:938
double getPeriodicity() const
Get the periodicity of a cosine-based dihedral term.
Definition forcefield_element.cpp:784
void setAmplitude(double amplitude_in)
Set the amplitude of a cosine-based dihedral term.
Definition forcefield_element.cpp:1190
void setPeriodicity(double periodicity_in)
Set the periodicity of a cosine-based dihedral term.
Definition forcefield_element.cpp:1213
double getEpsilon() const
Get the Lennard-Jones epsilon parameter of an atom.
Definition forcefield_element.cpp:648
ForceFieldElement(ParameterKind kind_in=ParameterKind::NONE)
A variety of constructors can load one or more atoms and their properties.
Definition forcefield_element.cpp:13
void setVanDerWaalsScaling(double scaling_in)
Set the van-der Waals scaling factor for an attenuated 1:4 interaction.
Definition forcefield_element.cpp:1259
double getAmplitude() const
Get the amplitude of a cosine-based dihedral term.
Definition forcefield_element.cpp:740
bool testAmplitudeModification() const
Test whether the amplitude of a dihedral parameter is being modified.
Definition forcefield_element.cpp:1052
char4 getTypeOfAtom(char atom_rank='I') const
Get the atom type of atom I in the term.
Definition forcefield_element.cpp:427
void apply(AtomGraph *ag, ExceptionResponse policy=ExceptionResponse::SILENT) const
Apply these force field parameters to any terms found in a specific topology.
Definition forcefield_element.cpp:1374
std::vector< double > getSurfaceValues() const
Get the surface value edits associated with a CMAP term.
Definition forcefield_element.cpp:872
A struct to hold information relating to an Amber topology. This struct's member functions are limite...
Definition atomgraph.h:50
Definition stormm_vector_types.h:141