2#ifndef STORMM_VALENCE_WORKUNIT_H
3#define STORMM_VALENCE_WORKUNIT_H
8#include "Accelerator/hybrid.h"
9#include "Accelerator/gpu_details.h"
10#include "Constants/behavior.h"
11#include "Potential/energy_enumerators.h"
12#include "Restraints/restraint_apparatus.h"
13#include "Topology/atomgraph.h"
14#include "Topology/atomgraph_abstracts.h"
15#include "synthesis_enumerators.h"
20using card::GpuDetails;
22using constants::PrecisionModel;
23using energy::EvaluateForce;
24using energy::EvaluateEnergy;
25using energy::ValenceKernelSize;
26using restraints::RestraintApparatus;
27using restraints::RestraintKit;
28using topology::AtomGraph;
29using topology::ConstraintKit;
30using topology::ValenceKit;
31using topology::VirtualSiteKit;
35constexpr int maximum_valence_work_unit_atoms = 512;
36constexpr int half_valence_work_unit_atoms = maximum_valence_work_unit_atoms / 2;
37constexpr int quarter_valence_work_unit_atoms = maximum_valence_work_unit_atoms / 4;
38constexpr int eighth_valence_work_unit_atoms = maximum_valence_work_unit_atoms / 8;
42constexpr int minimum_valence_work_unit_atoms = eighth_valence_work_unit_atoms;
48constexpr int max_atom_search_stacks = 8;
52constexpr int max_constraint_group_size = 16;
82 std::vector<int>
getBondAffectors(
const std::vector<int> &atom_indices)
const;
117 std::vector<int>
getCmapAffectors(
const std::vector<int> &atom_indices)
const;
185 const std::vector<int> &caller_stack = {})
const;
199 const std::vector<int> &caller_stack = {})
const;
398 int first_unassigned_atom;
399 int max_presence_allocation;
405 std::vector<int> bond_affector_list;
406 std::vector<int> bond_affector_bounds;
407 std::vector<int> angl_affector_list;
408 std::vector<int> angl_affector_bounds;
409 std::vector<int> dihe_affector_list;
410 std::vector<int> dihe_affector_bounds;
411 std::vector<int> ubrd_affector_list;
412 std::vector<int> ubrd_affector_bounds;
413 std::vector<int> cimp_affector_list;
414 std::vector<int> cimp_affector_bounds;
415 std::vector<int> cmap_affector_list;
416 std::vector<int> cmap_affector_bounds;
417 std::vector<int> infr_affector_list;
423 std::vector<int> infr_affector_bounds;
427 std::vector<int> vste_affector_list;
429 std::vector<int> vste_affector_bounds;
433 std::vector<int> cnst_affector_list;
438 std::vector<int> cnst_affector_bounds;
442 std::vector<int> sett_affector_list;
445 std::vector<int> sett_affector_bounds;
450 std::vector<int> rposn_affector_list;
451 std::vector<int> rposn_affector_bounds;
452 std::vector<int> rbond_affector_list;
453 std::vector<int> rbond_affector_bounds;
454 std::vector<int> rangl_affector_list;
455 std::vector<int> rangl_affector_bounds;
456 std::vector<int> rdihe_affector_list;
457 std::vector<int> rdihe_affector_bounds;
461 std::vector<int> work_unit_assignment_count;
463 std::vector<int> work_unit_presence;
468 std::vector<int> assigned_update_work_units;
475 std::vector<int> assigned_bond_acc_work_units;
476 std::vector<int> assigned_angl_acc_work_units;
477 std::vector<int> assigned_dihe_acc_work_units;
478 std::vector<int> assigned_ubrd_acc_work_units;
480 std::vector<int> assigned_cimp_acc_work_units;
482 std::vector<int> assigned_cmap_acc_work_units;
483 std::vector<int> assigned_infr14_acc_work_units;
485 std::vector<int> assigned_rposn_acc_work_units;
487 std::vector<int> assigned_rbond_acc_work_units;
489 std::vector<int> assigned_rangl_acc_work_units;
491 std::vector<int> assigned_rdihe_acc_work_units;
506 void resizePresenceArrays(
int n_units);
563 ValenceWorkUnit(ValenceDelegator *vdel_in, std::vector<int> *tvwu_coverage,
int list_index_in,
564 int seed_atom_in,
int max_atoms_in = maximum_valence_work_unit_atoms);
624 const std::vector<int> &ubrd_param_map = {});
642 const std::vector<int> &dihe14_param_map = {},
643 const std::vector<int> &cimp_param_map = {});
669 const std::vector<int> &xyz_param_map = {});
719 const std::vector<int> &group_param_bounds = {});
901 int imported_atom_count;
902 int moved_atom_count;
903 int updated_atom_count;
915 int infr14_term_count;
916 int rposn_term_count;
917 int rbond_term_count;
918 int rangl_term_count;
919 int rdihe_term_count;
920 int cnst_group_count;
922 int sett_group_count;
933 std::vector<int> atom_import_list;
937 std::vector<int> atom_move_list;
943 std::vector<int> atom_update_list;
953 std::vector<uint> atom_update_mask;
956 std::vector<int> bond_term_list;
963 std::vector<int> angl_term_list;
965 std::vector<int> dihe_term_list;
967 std::vector<int> ubrd_term_list;
969 std::vector<int> cimp_term_list;
971 std::vector<int> cmap_term_list;
972 std::vector<int> infr14_term_list;
976 std::vector<int> bond_i_atoms;
977 std::vector<int> bond_j_atoms;
978 std::vector<int> angl_i_atoms;
979 std::vector<int> angl_j_atoms;
980 std::vector<int> angl_k_atoms;
981 std::vector<int> dihe_i_atoms;
982 std::vector<int> dihe_j_atoms;
983 std::vector<int> dihe_k_atoms;
984 std::vector<int> dihe_l_atoms;
985 std::vector<int> ubrd_i_atoms;
986 std::vector<int> ubrd_k_atoms;
987 std::vector<int> cimp_i_atoms;
988 std::vector<int> cimp_j_atoms;
989 std::vector<int> cimp_k_atoms;
990 std::vector<int> cimp_l_atoms;
991 std::vector<int> cmap_i_atoms;
992 std::vector<int> cmap_j_atoms;
993 std::vector<int> cmap_k_atoms;
994 std::vector<int> cmap_l_atoms;
995 std::vector<int> cmap_m_atoms;
996 std::vector<int> infr14_i_atoms;
997 std::vector<int> infr14_l_atoms;
1000 std::vector<int> cbnd_term_list;
1003 std::vector<bool> cbnd_is_ubrd;
1005 std::vector<int> cbnd_i_atoms;
1006 std::vector<int> cbnd_jk_atoms;
1010 std::vector<int2> cdhe_term_list;
1013 std::vector<bool> cdhe_is_cimp;
1015 std::vector<int> cdhe_i_atoms;
1016 std::vector<int> cdhe_j_atoms;
1017 std::vector<int> cdhe_k_atoms;
1018 std::vector<int> cdhe_l_atoms;
1022 std::vector<int> rposn_term_list;
1024 std::vector<int> rbond_term_list;
1026 std::vector<int> rangl_term_list;
1028 std::vector<int> rdihe_term_list;
1030 std::vector<int> rposn_atoms;
1032 std::vector<int> rbond_i_atoms;
1033 std::vector<int> rbond_j_atoms;
1034 std::vector<int> rangl_i_atoms;
1035 std::vector<int> rangl_j_atoms;
1036 std::vector<int> rangl_k_atoms;
1037 std::vector<int> rdihe_i_atoms;
1038 std::vector<int> rdihe_j_atoms;
1039 std::vector<int> rdihe_k_atoms;
1040 std::vector<int> rdihe_l_atoms;
1043 std::vector<uint> acc_bond_energy;
1044 std::vector<uint> acc_angl_energy;
1045 std::vector<uint> acc_dihe_energy;
1046 std::vector<uint> acc_ubrd_energy;
1047 std::vector<uint> acc_cimp_energy;
1048 std::vector<uint> acc_cmap_energy;
1049 std::vector<uint> acc_infr14_energy;
1050 std::vector<uint> acc_rposn_energy;
1051 std::vector<uint> acc_rbond_energy;
1052 std::vector<uint> acc_rangl_energy;
1053 std::vector<uint> acc_rdihe_energy;
1054 std::vector<uint> acc_cbnd_energy;
1055 std::vector<uint> acc_cdhe_energy;
1058 std::vector<int> cnst_group_list;
1063 std::vector<int> sett_group_list;
1066 std::vector<int> cnst_group_atoms;
1069 std::vector<int> cnst_group_bounds;
1070 std::vector<int> sett_ox_atoms;
1072 std::vector<int> sett_h1_atoms;
1074 std::vector<int> sett_h2_atoms;
1078 std::vector<int> virtual_site_list;
1082 std::vector<int> vsite_atoms;
1084 std::vector<int> vsite_frame1_atoms;
1086 std::vector<int> vsite_frame2_atoms;
1088 std::vector<int> vsite_frame3_atoms;
1090 std::vector<int> vsite_frame4_atoms;
1095 std::vector<uint2> cbnd_instructions;
1096 std::vector<uint2> angl_instructions;
1097 std::vector<uint3> cdhe_instructions;
1098 std::vector<uint2> cmap_instructions;
1099 std::vector<uint> infr14_instructions;
1100 std::vector<uint2> rposn_instructions;
1101 std::vector<uint2> rbond_instructions;
1102 std::vector<uint2> rangl_instructions;
1103 std::vector<uint2> rdihe_instructions;
1104 std::vector<uint2> vste_instructions;
1105 std::vector<uint2> sett_instructions;
1106 std::vector<uint2> cnst_instructions;
1109 ValenceDelegator *vdel_pointer;
1133int2 calculateValenceWorkUnitSize(
const int* atom_counts,
int system_count);
1135int2 calculateValenceWorkUnitSize(
const std::vector<int> &atom_counts);
1139int2 calculateValenceWorkUnitSize(
const int* atom_counts,
int system_count,
int sm_count,
1140 ValenceKernelSize *kwidth);
1142int2 calculateValenceWorkUnitSize(
const std::vector<int> &atom_counts,
int sm_count,
1143 ValenceKernelSize *kwidth);
1145int2 calculateValenceWorkUnitSize(
const Hybrid<int> &atom_counts,
int sm_count,
1146 ValenceKernelSize *kwidth);
1148int2 calculateValenceWorkUnitSize(
const std::vector<AtomGraph*> &ag_list,
1149 const std::vector<int> &topology_replicas,
const int sm_count,
1150 ValenceKernelSize *kwidth);
1166std::vector<ValenceWorkUnit>
1168 int2 max_atoms_per_vwu = { maximum_valence_work_unit_atoms,
1169 maximum_valence_work_unit_atoms });
1171std::vector<ValenceWorkUnit>
1172buildValenceWorkUnits(ValenceDelegator *vdel,
1173 int2 max_atoms_per_vwu = { maximum_valence_work_unit_atoms,
1174 maximum_valence_work_unit_atoms });
An evolution of GpuBuffer in pmemd.cuda, the Composite array has elements that are accessible from ei...
Definition hybrid.h:202
ValenceWorkUnit(ValenceDelegator *vdel_in, std::vector< int > *tvwu_coverage, int list_index_in, int seed_atom_in, int max_atoms_in=maximum_valence_work_unit_atoms)
The constructor takes a specific input topology (multiple systems using the same topology in an AtomG...
Definition valence_workunit.cpp:863
A collection of all restraints pertaining to a specific topology for the purposes of one simulation,...
Definition restraint_apparatus.h:109
const RestraintApparatus * getRestraintApparatusPointer() const
Get a pointer to the topology that this delegator was built for.
Definition valence_workunit.cpp:517
bool setAngleRestraintAccumulatorWorkUnit(int rangl_index, int vwu_index)
Mark the work unit that will accumulate the potential due to a three-point angle restraint....
Definition valence_workunit.cpp:655
std::vector< int > getDihedralRestraintAffectors(const std::vector< int > &atom_indices) const
Get a list of four-point dihedral angle restraints affecting a given list of atoms....
Definition valence_workunit.cpp:133
std::vector< int > getUpdateDependencies(const int atom_index) const
Accumulate a list of all atoms which have bearing on the way that a particular atom shall move....
Definition valence_workunit.cpp:436
std::vector< int > getPositionalRestraintAffectors(const std::vector< int > &atom_indices) const
Get a list of positional restraints affecting a given list of atoms. The result is returned (pruned f...
Definition valence_workunit.cpp:115
const AtomGraph * getTopologyPointer() const
Get a pointer to the topology that this delegator was built for.
Definition valence_workunit.cpp:512
int getInferred14AccumulatorWorkUnit(const int infr14_index) const
Get the work unit currently assigned to contribute a particular inferred 1:4 attenuated pair interact...
Definition valence_workunit.cpp:487
bool setPositionalRestraintAccumulatorWorkUnit(int rposn_index, int vwu_index)
Mark the work unit that will accumulate the potential due to a positional restraint....
Definition valence_workunit.cpp:635
std::vector< int > getAngleAffectors(const std::vector< int > &atom_indices) const
Get a list of harmonic angle terms affecting a given list of atoms. The result is returned (pruned fo...
Definition valence_workunit.cpp:80
std::vector< int > getInferred14Affectors(const std::vector< int > &atom_indices) const
Get a list of inferred 1:4 attenuated non-bonded interactions affecting a given list of atoms....
Definition valence_workunit.cpp:109
int getDihedralRestraintAccumulatorWorkUnit(const int rdihe_index) const
Get the work unit currently assigned to contribute a particular four-point dihedral restraint penalty...
Definition valence_workunit.cpp:507
void markAtomAddition(int vwu_index, int atom_index)
Mark the addition of an atom to a specific ValenceWorkUnit.
Definition valence_workunit.cpp:532
bool setDihedralRestraintAccumulatorWorkUnit(int rdihe_index, int vwu_index)
Mark the work unit that will accumulate the potential due to a four-point dihedral restraint....
Definition valence_workunit.cpp:665
int getUreyBradleyAccumulatorWorkUnit(const int ubrd_index) const
Get the work unit currently assigned to contribute a particular Urey-Bradley term's energy into the g...
Definition valence_workunit.cpp:472
int getCharmmImproperAccumulatorWorkUnit(const int cimp_index) const
Get the work unit currently assigned to contribute a particular CHARMM improper dihedral term's energ...
Definition valence_workunit.cpp:477
bool setAngleAccumulatorWorkUnit(int angl_index, int vwu_index)
Mark the work unit that will accumulate the potential due to a specific harmonic angle interaction....
Definition valence_workunit.cpp:578
int getUpdateWorkUnit(int atom_index) const
Get the work unit currently assigned to update an atom's position and velocity. The value of -1 signi...
Definition valence_workunit.cpp:452
int getBondAccumulatorWorkUnit(const int bond_index) const
Get the work unit currently assigned to contribute a particular bond term's energy into the global ac...
Definition valence_workunit.cpp:457
std::vector< int > getDistanceRestraintAffectors(const std::vector< int > &atom_indices) const
Get a list of distance restraints affecting a given list of atoms. The result is returned (pruned for...
Definition valence_workunit.cpp:121
bool setDihedralAccumulatorWorkUnit(int dihe_index, int vwu_index)
Mark the work unit that will accumulate the potential due to a specific cosine-based dihedral interac...
Definition valence_workunit.cpp:587
bool setInferred14AccumulatorWorkUnit(int infr14_index, int vwu_index)
Mark the work unit that will accumulate the potential due to a specific inferred 1:4 non-bonded,...
Definition valence_workunit.cpp:625
bool setCmapAccumulatorWorkUnit(int cmap_index, int vwu_index)
Mark the work unit that will accumulate the potential due to a specific CMAP splined surface interact...
Definition valence_workunit.cpp:616
std::vector< int > getCmapAffectors(const std::vector< int > &atom_indices) const
Get a list of CMAP terms affecting a given list of atoms. The result is returned (pruned for unique i...
Definition valence_workunit.cpp:103
bool setUreyBradleyAccumulatorWorkUnit(int ubrd_index, int vwu_index)
Mark the work unit that will accumulate the potential due to a specific Urey-Bradley interaction....
Definition valence_workunit.cpp:596
bool setCharmmImproperAccumulatorWorkUnit(int cimp_index, int vwu_index)
Mark the work unit that will accumulate the potential due to a specific CHARMM improper dihedral inte...
Definition valence_workunit.cpp:606
ValenceDelegator(const AtomGraph *ag_in, const RestraintApparatus *ra_in=nullptr)
The object is constructed based on a single topology and oversees the construction of an array of val...
Definition valence_workunit.cpp:38
std::vector< int > findMovementPartners(int atom_idx, const std::vector< int > &caller_stack={}) const
Find all partners of a given atom such that the work unit will be able to correctly move the atom....
Definition valence_workunit.cpp:157
bool setUpdateWorkUnit(int atom_index, int vwu_index)
Mark the updates (position, velocity) of a particular atom in the topology as the responsibility of a...
Definition valence_workunit.cpp:554
std::vector< int > getUreyBradleyAffectors(const std::vector< int > &atom_indices) const
Get a list of Urey-Bradley harmonic angles affecting a given list of atoms. The result is returned (p...
Definition valence_workunit.cpp:92
std::vector< int > getVirtualSiteAffectors(const std::vector< int > &atom_indices) const
Get a list of virtual site frames affecting a given list of atoms. The result is returned (pruned for...
Definition valence_workunit.cpp:139
int getCmapAccumulatorWorkUnit(const int cmap_index) const
Get the work unit currently assigned to contribute a particular CMAP term's energy into the global ac...
Definition valence_workunit.cpp:482
bool checkPresence(int atom_index, int vwu_index) const
Check that an atom is present in a particular work unit.
Definition valence_workunit.cpp:522
std::vector< int > getBondAffectors(const std::vector< int > &atom_indices) const
Get a list of bonds affecting a given list of atoms. The result is returned (pruned for unique items)...
Definition valence_workunit.cpp:75
bool setBondAccumulatorWorkUnit(int bond_index, int vwu_index)
Mark the work unit that will accumulate the potential due to a specific bond interaction....
Definition valence_workunit.cpp:569
int getAngleAccumulatorWorkUnit(const int angl_index) const
Get the work unit currently assigned to contribute a particular harmonic angle term's energy into the...
Definition valence_workunit.cpp:462
int getPositionalRestraintAccumulatorWorkUnit(const int rposn_index) const
Get the work unit currently assigned to contribute a particular positional restraint penalty energy i...
Definition valence_workunit.cpp:492
std::vector< int > getCharmmImproperAffectors(const std::vector< int > &atom_indices) const
Get a list of CHARMM improper dihedral terms affecting a given list of atoms. The result is returned ...
Definition valence_workunit.cpp:98
int getFirstUnassignedAtom() const
Get the index of the first unassigned atom in the topology.
Definition valence_workunit.cpp:70
int getDistanceRestraintAccumulatorWorkUnit(const int rbond_index) const
Get the work unit currently assigned to contribute a particular distance restraint penalty energy int...
Definition valence_workunit.cpp:497
int getDihedralAccumulatorWorkUnit(const int dihe_index) const
Get the work unit currently assigned to contribute a particular cosine-based dihedral term's energy i...
Definition valence_workunit.cpp:467
std::vector< int > getAngleRestraintAffectors(const std::vector< int > &atom_indices) const
Get a list of three-point angle restraints affecting a given list of atoms. The result is returned (p...
Definition valence_workunit.cpp:127
std::vector< int > getSettleGroupAffectors(const std::vector< int > &atom_indices) const
Get a list of SETTLE (fast, rigid water) constraint groups affecting a given list of atoms....
Definition valence_workunit.cpp:145
bool setDistanceRestraintAccumulatorWorkUnit(int rbond_index, int vwu_index)
Mark the work unit that will accumulate the potential due to a distance restraint....
Definition valence_workunit.cpp:645
std::vector< int > getConstraintGroupAffectors(const std::vector< int > &atom_indices) const
Get a list of hub-and-spoke constraint groups affecting a given list of atoms. The result is returned...
Definition valence_workunit.cpp:151
int getAtomAssignmentCount(int atom_index) const
Get the number of work units to which a particular atom is (currently) assigned.
Definition valence_workunit.cpp:65
std::vector< int > findForcePartners(int atom_idx, const std::vector< int > &caller_stack={}) const
Find all partners of a given atom such that the work unit will be able to correctly evaluate the forc...
Definition valence_workunit.cpp:260
int getAngleRestraintAccumulatorWorkUnit(const int rangl_index) const
Get the work unit currently assigned to contribute a particular three-point angle restraint penalty e...
Definition valence_workunit.cpp:502
std::vector< int > getDihedralAffectors(const std::vector< int > &atom_indices) const
Get a list of cosine-based dihedrals affecting a given list of atoms. The result is returned (pruned ...
Definition valence_workunit.cpp:86
uint2 getDihedralRestraintInstruction(int index) const
Get a specific four-point dihedral restraint instruction.
Definition valence_workunit.cpp:1690
void makeAtomUpdateMask()
Create a bit mask spanning the atom imports, marking all of those that the work unit is responsible f...
Definition valence_workunit.cpp:1947
const std::vector< int > & getSimpleTaskList(VwuTask vtask) const
Get the topological indices of each task assigned to this work unit. Assignment of an energy / force-...
Definition valence_workunit.cpp:1755
const std::vector< uint2 > & getAngleRestraintInstructions() const
Get the stored vector of three-point angle restraint instructions.
Definition valence_workunit.cpp:1625
const std::vector< uint2 > & getCmapInstructions() const
Get the stored vector of CMAP instructions.
Definition valence_workunit.cpp:1605
int getImportedAtomIndex(int slot, int atom_offset=0) const
Get a specific imported atom.
Definition valence_workunit.cpp:1069
uint2 getDistanceRestraintInstruction(int index) const
Get a specific distance restraint instruction.
Definition valence_workunit.cpp:1680
void storeSettleGroupInstructions(const std::vector< int > ¶meter_map={})
Store a vector of the SETTLE constraint group instructions for this work unit. This function accepts ...
Definition valence_workunit.cpp:1513
int getMovedAtomCount() const
Get the number of atoms currently set to be moved by this work unit.
Definition valence_workunit.cpp:1024
void storeCmapInstructions(const std::vector< int > ¶meter_map={})
Store a vector of the CMAP instructions. This function accepts a parameter interpretation table in or...
Definition valence_workunit.cpp:1340
uint2 getPositionalRestraintInstruction(int index) const
Get a specific positional restraint instruction.
Definition valence_workunit.cpp:1675
void sortAtomSets()
Sort the atom lists (import, movement, and update) of this work unit into ascending order....
Definition valence_workunit.cpp:1884
void storeCompositeBondInstructions(const std::vector< int > &bond_param_map={}, const std::vector< int > &ubrd_param_map={})
Compute and store a vector of the bond instructions. This function accepts parameter interpretation t...
Definition valence_workunit.cpp:1149
void storeInferred14Instructions(const std::vector< int > ¶meter_map={})
Store a vector of the inferred 1:4 attenuated pair interaction instructions. This function accepts a ...
Definition valence_workunit.cpp:1359
const std::vector< uint > & getAtomUpdateFlags() const
Get the bitstrings indicating which of the imported (cached) atoms this work unit is responsible for ...
Definition valence_workunit.cpp:1750
void setListIndex(int list_index_in)
Set the list index of this work unit, in the event that the list of work units for a particular topol...
Definition valence_workunit.cpp:1821
void logActivities()
Log all activities of this work unit: valence terms, restraints, virtual sites, and constraints....
Definition valence_workunit.cpp:1963
std::vector< int > getAtomImportList(int atom_offset=0) const
Get the list of imported atoms.
Definition valence_workunit.cpp:1054
const std::vector< uint2 > & getAngleInstructions() const
Get the stored vector of angle instructions.
Definition valence_workunit.cpp:1595
int getPaddedConstraintInstructionCount() const
Get the padded size of the largest constraint group. The padding extends the size of each constraint ...
Definition valence_workunit.cpp:1100
const std::vector< uint > & getAccumulationFlags(VwuTask vtask) const
Get the bitstrings indicating which energetic interactions each work unit is responsible for accumula...
Definition valence_workunit.cpp:1710
const std::vector< uint2 > & getCompositeBondInstructions() const
Get the stored vector of composite bond instructions.
Definition valence_workunit.cpp:1590
const RestraintApparatus * getRestraintApparatusPointer() const
Get a pointer to the restraint collection for which this work unit applies.
Definition valence_workunit.cpp:1816
ValenceDelegator * getDelegatorPointer()
Get the pointer to the ValenceDelegator managing the creation of this object.
Definition valence_workunit.cpp:1806
void storeAngleRestraintInstructions(const std::vector< int > &kr_param_map={})
Store a vector of the three-point angle restraint instructions for this work unit....
Definition valence_workunit.cpp:1434
const std::vector< int > & getCompositeBondTaskList() const
Get the composite bond tasks assigned to this work unit. This will return a vector of concatenated bo...
Definition valence_workunit.cpp:1796
void setAtomLimit(int new_limit)
Set the atom limit for a valence work unit. This can be useful in situations where it is desirable to...
Definition valence_workunit.cpp:1826
int getUpdatedAtomCount() const
Get the number of atoms currently set to be updated by this work unit.
Definition valence_workunit.cpp:1029
const std::vector< uint2 > & getPositionalRestraintInstructions() const
Get the stored vector of positional restraint instructions.
Definition valence_workunit.cpp:1615
int getMaxAtomIndex() const
Get the maximum topological atom index of any used by this work unit.
Definition valence_workunit.cpp:1044
uint2 getAngleInstruction(int index) const
Get a specific angle instruction.
Definition valence_workunit.cpp:1655
void storePositionalRestraintInstructions(const std::vector< int > &kr_param_map={}, const std::vector< int > &xyz_param_map={})
Store a vector of the positional restraint instructions for this work unit. This function accepts par...
Definition valence_workunit.cpp:1376
int getImportedAtomCount() const
Get the number of atoms currently imported into this work unit.
Definition valence_workunit.cpp:1019
const std::vector< uint > & getInferred14Instructions() const
Get the stored vector of CMAP instructions.
Definition valence_workunit.cpp:1610
const AtomGraph * getTopologyPointer() const
Get a pointer to the topology for which this work unit applies.
Definition valence_workunit.cpp:1811
std::vector< int > getTaskCounts() const
Get a vector describing the number of each type of item this work unit can be tasked to perform.
Definition valence_workunit.cpp:1124
uint2 getCompositeBondInstruction(int index) const
Get a specific composite bond instruction.
Definition valence_workunit.cpp:1650
ValenceWorkUnit(ValenceDelegator *vdel_in, std::vector< int > *tvwu_coverage, int list_index_in, int seed_atom_in, int max_atoms_in=maximum_valence_work_unit_atoms)
The constructor takes a specific input topology (multiple systems using the same topology in an AtomG...
Definition valence_workunit.cpp:863
uint getInferred14Instruction(int index) const
Get a specific CMAP instruction.
Definition valence_workunit.cpp:1670
void storeDistanceRestraintInstructions(const std::vector< int > &kr_param_map={})
Store a vector of the distance restraint instructions for this work unit. This function accepts a par...
Definition valence_workunit.cpp:1414
std::vector< uint2 > getAtomManipulationMasks() const
Get bitmasks of moving atoms and atoms that this work unit is assigned to update. Bits signify 1 for ...
Definition valence_workunit.cpp:1074
void storeAngleInstructions(const std::vector< int > ¶meter_map={})
Store a vector of the harmonic angle instructions. This function accepts a parameter interpretation t...
Definition valence_workunit.cpp:1186
void addNewAtomUpdate(const int atom_index)
Add a new atom to the list of updates that a work unit shall perform. The atom must already be part o...
Definition valence_workunit.cpp:1854
void addNewAtomImport(int atom_index)
Add a new atom to a work unit. This will update the associated ValenceDelegator and all assignments t...
Definition valence_workunit.cpp:1838
void storeCompositeDihedralInstructions(const std::vector< int > &dihe_param_map={}, const std::vector< int > &dihe14_param_map={}, const std::vector< int > &cimp_param_map={})
Store a vector of the composite (cosine-based) dihedral, associated 1:4 interactions,...
Definition valence_workunit.cpp:1204
const std::vector< uint3 > & getCompositeDihedralInstructions() const
Get the stored vector of composite dihedral instructions.
Definition valence_workunit.cpp:1600
int getMaxAtoms() const
Get the maximum atom count that this work unit can hold.
Definition valence_workunit.cpp:1049
uint2 getSettleGroupInstruction(int index) const
Get a specific SETTLE constraint group instruction.
Definition valence_workunit.cpp:1700
uint2 getVirtualSiteInstruction(int index) const
Get a specific virtual site placement instruction.
Definition valence_workunit.cpp:1695
const std::vector< int2 > & getCompositeDihedralTaskList() const
Get the composite dihedral tasks assigned to this work unit. This will return a vector of tuples cont...
Definition valence_workunit.cpp:1801
const std::vector< uint2 > & getConstraintGroupInstructions() const
Get the stored vector of hub-and-spoke constraint group instructions.
Definition valence_workunit.cpp:1645
const std::vector< uint2 > & getSettleGroupInstructions() const
Get the stored vector of SETTLE constraint group instructions.
Definition valence_workunit.cpp:1640
uint2 getConstraintGroupInstruction(int index) const
Get a specific hub-and-spoke constraint group instruction.
Definition valence_workunit.cpp:1705
void storeVirtualSiteInstructions(const std::vector< int > ¶meter_map={})
Store a vector of the virtual site instructions for this work unit. This function accepts a parameter...
Definition valence_workunit.cpp:1476
uint2 getAngleRestraintInstruction(int index) const
Get a specific three-point angle restraint instruction.
Definition valence_workunit.cpp:1685
const std::vector< uint2 > & getVirtualSiteInstructions() const
Get the stored vector of virtual site placement instructions.
Definition valence_workunit.cpp:1635
const std::vector< uint2 > & getDihedralRestraintInstructions() const
Get the stored vector of four-point dihedral restraint instructions.
Definition valence_workunit.cpp:1630
void storeConstraintGroupInstructions(const std::vector< int > ¶meter_map={}, const std::vector< int > &group_param_bounds={})
Store a vector of the hub-and-spoke constraint group instructions for this work unit....
Definition valence_workunit.cpp:1532
void storeDihedralRestraintInstructions(const std::vector< int > &kr_param_map={})
Store a vector of the four-point dihedral restraint instructions for this work unit....
Definition valence_workunit.cpp:1455
int getListIndex() const
Get the list index of this work unit.
Definition valence_workunit.cpp:1034
int getMinAtomIndex() const
Get the minimum topological atom index of any used by this work unit.
Definition valence_workunit.cpp:1039
uint3 getCompositeDihedralInstruction(int index) const
Get a specific composite dihedral instruction.
Definition valence_workunit.cpp:1660
uint2 getCmapInstruction(int index) const
Get a specific CMAP instruction.
Definition valence_workunit.cpp:1665
const std::vector< uint2 > & getDistanceRestraintInstructions() const
Get the stored vector of distance restraint instructions.
Definition valence_workunit.cpp:1620
void makeAtomMoveList()
Create the move list for atoms in the work unit. Any atom that the work unit is responsible for updat...
Definition valence_workunit.cpp:1871
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:22
Definition stormm_vector_types.h:40
Definition stormm_vector_types.h:45
Double-precision reader abstract for the RestraintApparatus class. Restraints are very detailed thing...
Definition restraint_apparatus.h:28
Information needed to manage constraint groups. This additional abstract is needed due to the way tha...
Definition atomgraph_abstracts.h:466
Information need for bonded calculations. Templating is used to serve either of two levels of precisi...
Definition atomgraph_abstracts.h:88
Information needed for the placement of virtual sites and transmission of forces on these sites to th...
Definition atomgraph_abstracts.h:430