2#ifndef STORMM_COMBOGRAPH_LJMODEL_H
3#define STORMM_COMBOGRAPH_LJMODEL_H
8#include "DataTypes/stormm_vector_types.h"
9#include "Parsing/parse.h"
10#include "Potential/energy_enumerators.h"
11#include "Synthesis/atomgraph_synthesis.h"
13#include "atomgraph_abstracts.h"
14#include "atomgraph_analysis.h"
15#include "lennard_jones_analysis.h"
20using energy::getEnumerationName;
21using data_types::operator==;
22using synthesis::AtomGraphSynthesis;
23using topology::AtomGraph;
42 VdwCombiningRule default_rule_in = VdwCombiningRule::LORENTZ_BERTHELOT,
43 const std::vector<PairLJInteraction> &edits = {});
46 VdwCombiningRule default_rule_in = VdwCombiningRule::LORENTZ_BERTHELOT,
47 const std::vector<PairLJInteraction> &edits = {});
50 VdwCombiningRule default_rule_in = VdwCombiningRule::LORENTZ_BERTHELOT,
51 const std::vector<PairLJInteraction> &edits = {});
54 const std::vector<double> &lj_b_in,
55 const std::vector<char4> &lj_type_names = {},
56 VdwCombiningRule default_rule_in = VdwCombiningRule::LORENTZ_BERTHELOT,
57 const std::vector<PairLJInteraction> &edits = {});
60 const std::vector<double> &lj_b_in,
61 const std::vector<char4> &lj_type_names = {},
62 VdwCombiningRule default_rule_in = VdwCombiningRule::LORENTZ_BERTHELOT,
63 const std::vector<PairLJInteraction> &edits = {});
106 std::vector<int> computeConsensusParameters()
const;
123 template <
typename T>
125 const char4* lj_type_names =
nullptr,
126 const std::vector<PairLJInteraction> &edits = {});
128 template <
typename T>
129 void addCombination(
const std::vector<T> &lja_in,
const std::vector<T> &ljb_in,
130 const std::vector<char4> &lj_type_names = {},
131 const std::vector<PairLJInteraction> &edits = {});
134 const std::vector<PairLJInteraction> &edits = {});
137 const std::vector<PairLJInteraction> &edits = {});
155 VdwCombiningRule default_rule;
159 VdwCombiningRule primary_topology_rule;
162 int primary_atom_type_count;
165 std::vector<int> secondary_atom_type_counts;
169 std::vector<VdwCombiningRule> secondary_topology_rules;
172 std::vector<VdwCombiningRule> set_rules;
177 std::vector<std::vector<double>> set_lja;
180 std::vector<std::vector<double>> set_ljb;
184 std::vector<std::vector<PairLJInteraction>> set_edits;
192 std::vector<AtomGraph*> secondary_ag_pointers;
197 void validateSetIndex(
int index)
const;
203#include "combograph_ljmodel.tpp"
ComboGraphLJModel(const AtomGraph *primary_ag_in, const AtomGraph *ag_secondary_in=nullptr, VdwCombiningRule default_rule_in=VdwCombiningRule::LORENTZ_BERTHELOT, const std::vector< PairLJInteraction > &edits={})
The constructor accepts two topologies or two Lennard-Jones parameter sets. Edits to the Lennard-Jone...
Definition combograph_ljmodel.cpp:10
A collection of one or more AtomGraph objects, with similar components arranged in contiguous arrays ...
Definition atomgraph_synthesis.h:55
A struct to hold information relating to an Amber topology. This struct's member functions are limite...
Definition atomgraph.h:50
int2 getMatrixSize(int index) const
Get the number of atom types in the primary topology.
Definition combograph_ljmodel.cpp:122
const std::vector< double > & getBCoefficients(int index) const
Get the matrix of Lennard-Jones B coefficients between the primary topology and another topology....
Definition combograph_ljmodel.cpp:134
int getAtomTypeUnionSize()
Compute the number of unique atom types across all topologies other than the primary....
int getSetCount() const
Get the number of Lennard-Jones parameter matrix sets.
Definition combograph_ljmodel.cpp:101
void addCombination(const T *lja_in, const T *ljb_in, int lj_type_count, const char4 *lj_type_names=nullptr, const std::vector< PairLJInteraction > &edits={})
Add an interaction matrix to the list of combinations.
VdwCombiningRule getPrimaryTopologyRule() const
Get the combining rule effective in the primary topology.
Definition combograph_ljmodel.cpp:111
const std::vector< double > & getACoefficients(int index) const
Get the matrix of Lennard-Jones A coefficients between the primary topology and another topology....
Definition combograph_ljmodel.cpp:128
ComboGraphLJModel(const AtomGraph *primary_ag_in, const AtomGraph *ag_secondary_in=nullptr, VdwCombiningRule default_rule_in=VdwCombiningRule::LORENTZ_BERTHELOT, const std::vector< PairLJInteraction > &edits={})
The constructor accepts two topologies or two Lennard-Jones parameter sets. Edits to the Lennard-Jone...
Definition combograph_ljmodel.cpp:10
VdwCombiningRule getDefaultCombiningRule() const
Get the default combining rule for mixing parameters of different topologies.
Definition combograph_ljmodel.cpp:106
VdwCombiningRule getSecondaryTopologyRule(int index) const
Get the combining rule effective in one of the secondary topologies.
Definition combograph_ljmodel.cpp:116
Definition stormm_vector_types.h:141
Definition stormm_vector_types.h:22