STORMM Source Documentation
Loading...
Searching...
No Matches
valence_workunit.h
1// -*-c++-*-
2#ifndef STORMM_VALENCE_WORKUNIT_H
3#define STORMM_VALENCE_WORKUNIT_H
4
5#include <string>
6#include <vector>
7#include "copyright.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"
16
17namespace stormm {
18namespace synthesis {
19
20using card::GpuDetails;
21using card::Hybrid;
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;
32
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;
39
42constexpr int minimum_valence_work_unit_atoms = eighth_valence_work_unit_atoms;
43
48constexpr int max_atom_search_stacks = 8;
49
52constexpr int max_constraint_group_size = 16;
53
61public:
62
68 ValenceDelegator(const AtomGraph *ag_in, const RestraintApparatus *ra_in = nullptr);
69
73 int getAtomAssignmentCount(int atom_index) const;
74
76 int getFirstUnassignedAtom() const;
77
82 std::vector<int> getBondAffectors(const std::vector<int> &atom_indices) const;
83
89 std::vector<int> getAngleAffectors(const std::vector<int> &atom_indices) const;
90
96 std::vector<int> getDihedralAffectors(const std::vector<int> &atom_indices) const;
97
103 std::vector<int> getUreyBradleyAffectors(const std::vector<int> &atom_indices) const;
104
110 std::vector<int> getCharmmImproperAffectors(const std::vector<int> &atom_indices) const;
111
117 std::vector<int> getCmapAffectors(const std::vector<int> &atom_indices) const;
118
124 std::vector<int> getInferred14Affectors(const std::vector<int> &atom_indices) const;
125
131 std::vector<int> getPositionalRestraintAffectors(const std::vector<int> &atom_indices) const;
132
138 std::vector<int> getDistanceRestraintAffectors(const std::vector<int> &atom_indices) const;
139
145 std::vector<int> getAngleRestraintAffectors(const std::vector<int> &atom_indices) const;
146
152 std::vector<int> getDihedralRestraintAffectors(const std::vector<int> &atom_indices) const;
153
159 std::vector<int> getVirtualSiteAffectors(const std::vector<int> &atom_indices) const;
160
166 std::vector<int> getSettleGroupAffectors(const std::vector<int> &atom_indices) const;
167
173 std::vector<int> getConstraintGroupAffectors(const std::vector<int> &atom_indices) const;
174
184 std::vector<int> findMovementPartners(int atom_idx,
185 const std::vector<int> &caller_stack = {}) const;
186
198 std::vector<int> findForcePartners(int atom_idx,
199 const std::vector<int> &caller_stack = {}) const;
200
207 std::vector<int> getUpdateDependencies(const int atom_index) const;
208
213 int getUpdateWorkUnit(int atom_index) const;
214
219 int getBondAccumulatorWorkUnit(const int bond_index) const;
220
225 int getAngleAccumulatorWorkUnit(const int angl_index) const;
226
231 int getDihedralAccumulatorWorkUnit(const int dihe_index) const;
232
237 int getUreyBradleyAccumulatorWorkUnit(const int ubrd_index) const;
238
243 int getCharmmImproperAccumulatorWorkUnit(const int cimp_index) const;
244
249 int getCmapAccumulatorWorkUnit(const int cmap_index) const;
250
255 int getInferred14AccumulatorWorkUnit(const int infr14_index) const;
256
261 int getPositionalRestraintAccumulatorWorkUnit(const int rposn_index) const;
262
267 int getDistanceRestraintAccumulatorWorkUnit(const int rbond_index) const;
268
273 int getAngleRestraintAccumulatorWorkUnit(const int rangl_index) const;
274
279 int getDihedralRestraintAccumulatorWorkUnit(const int rdihe_index) const;
280
282 const AtomGraph* getTopologyPointer() const;
283
286
291 bool checkPresence(int atom_index, int vwu_index) const;
292
297 void markAtomAddition(int vwu_index, int atom_index);
298
305 bool setUpdateWorkUnit(int atom_index, int vwu_index);
306
313 bool setBondAccumulatorWorkUnit(int bond_index, int vwu_index);
314
321 bool setAngleAccumulatorWorkUnit(int angl_index, int vwu_index);
322
329 bool setDihedralAccumulatorWorkUnit(int dihe_index, int vwu_index);
330
337 bool setUreyBradleyAccumulatorWorkUnit(int ubrd_index, int vwu_index);
338
345 bool setCharmmImproperAccumulatorWorkUnit(int cimp_index, int vwu_index);
346
353 bool setCmapAccumulatorWorkUnit(int cmap_index, int vwu_index);
354
361 bool setInferred14AccumulatorWorkUnit(int infr14_index, int vwu_index);
362
369 bool setPositionalRestraintAccumulatorWorkUnit(int rposn_index, int vwu_index);
370
377 bool setDistanceRestraintAccumulatorWorkUnit(int rbond_index, int vwu_index);
378
385 bool setAngleRestraintAccumulatorWorkUnit(int rangl_index, int vwu_index);
386
393 bool setDihedralRestraintAccumulatorWorkUnit(int rdihe_index, int vwu_index);
394
395private:
396 int atom_count;
398 int first_unassigned_atom;
399 int max_presence_allocation;
401
402 // The following lists are quick to construct and contain a double-, triple-, or even a
403 // quintuple-counting of all information in the topology's own "atom assignment" arrays for the
404 // same valence terms. Is there a better way?
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;
424
425 // The virtual site affector arrays will be pre-allcoated to hold virtual sites with up to four
426 // frame atoms apiece.
427 std::vector<int> vste_affector_list;
429 std::vector<int> vste_affector_bounds;
430
431 // SHAKE and RATTLE groups likewise must have all atoms present in a work group in order to
432 // evaluate bond constraints.
433 std::vector<int> cnst_affector_list;
438 std::vector<int> cnst_affector_bounds;
439
440 // SETTLE groups are special constraint groups for a fast rigid water implementation, kept
441 // distinct because of the different treatment they get in the dynamics loop.
442 std::vector<int> sett_affector_list;
445 std::vector<int> sett_affector_bounds;
446
447 // Positional restraints apply to a single atom, but multiple restraints could still, in theory,
448 // restrain a single atom to a ring or other confined region of space. A bounds array is still
449 // necessary. Other restraints affect multiple atoms and map like their valence term analogs.
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;
458
459 // Individual atoms must leave a record of their whereabouts in the valence work units for rapid
460 // retrieval of their locations
461 std::vector<int> work_unit_assignment_count;
463 std::vector<int> work_unit_presence;
468 std::vector<int> assigned_update_work_units;
471
472 // Simple energy terms must leave a record of the work units that will be responsible for
473 // accumulating their values in the total reported energy. Multiple work units may evaluate
474 // each energy term, but only one must contribute.
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;
493
494
496 const AtomGraph *ag_pointer;
497 const RestraintApparatus *ra_pointer;
498
506 void resizePresenceArrays(int n_units);
507
514 void allocate();
515
523 void fillAffectorArrays(const ValenceKit<double> &vk, const VirtualSiteKit<double> &vsk,
524 const ConstraintKit<double> &cnk,
526};
527
538public:
539
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);
565
567 int getImportedAtomCount() const;
568
570 int getMovedAtomCount() const;
571
573 int getUpdatedAtomCount() const;
574
576 int getListIndex() const;
577
579 int getMinAtomIndex() const;
580
582 int getMaxAtomIndex() const;
583
585 int getMaxAtoms() const;
586
591 std::vector<int> getAtomImportList(int atom_offset = 0) const;
592
600 int getImportedAtomIndex(int slot, int atom_offset = 0) const;
601
606 std::vector<uint2> getAtomManipulationMasks() const;
607
612
615 std::vector<int> getTaskCounts() const;
616
623 void storeCompositeBondInstructions(const std::vector<int> &bond_param_map = {},
624 const std::vector<int> &ubrd_param_map = {});
625
631 void storeAngleInstructions(const std::vector<int> &parameter_map = {});
632
641 void storeCompositeDihedralInstructions(const std::vector<int> &dihe_param_map = {},
642 const std::vector<int> &dihe14_param_map = {},
643 const std::vector<int> &cimp_param_map = {});
644
651 void storeCmapInstructions(const std::vector<int> &parameter_map = {});
652
659 void storeInferred14Instructions(const std::vector<int> &parameter_map = {});
660
668 void storePositionalRestraintInstructions(const std::vector<int> &kr_param_map = {},
669 const std::vector<int> &xyz_param_map = {});
670
676 void storeDistanceRestraintInstructions(const std::vector<int> &kr_param_map = {});
677
683 void storeAngleRestraintInstructions(const std::vector<int> &kr_param_map = {});
684
690 void storeDihedralRestraintInstructions(const std::vector<int> &kr_param_map = {});
691
698 void storeVirtualSiteInstructions(const std::vector<int> &parameter_map = {});
699
706 void storeSettleGroupInstructions(const std::vector<int> &parameter_map = {});
707
718 void storeConstraintGroupInstructions(const std::vector<int> &parameter_map = {},
719 const std::vector<int> &group_param_bounds = {});
720
722 const std::vector<uint2>& getCompositeBondInstructions() const;
723
725 const std::vector<uint2>& getAngleInstructions() const;
726
728 const std::vector<uint3>& getCompositeDihedralInstructions() const;
729
731 const std::vector<uint2>& getCmapInstructions() const;
732
734 const std::vector<uint>& getInferred14Instructions() const;
735
737 const std::vector<uint2>& getPositionalRestraintInstructions() const;
738
740 const std::vector<uint2>& getDistanceRestraintInstructions() const;
741
743 const std::vector<uint2>& getAngleRestraintInstructions() const;
744
746 const std::vector<uint2>& getDihedralRestraintInstructions() const;
747
749 const std::vector<uint2>& getVirtualSiteInstructions() const;
750
752 const std::vector<uint2>& getSettleGroupInstructions() const;
753
755 const std::vector<uint2>& getConstraintGroupInstructions() const;
756
760 uint2 getCompositeBondInstruction(int index) const;
761
765 uint2 getAngleInstruction(int index) const;
766
770 uint3 getCompositeDihedralInstruction(int index) const;
771
775 uint2 getCmapInstruction(int index) const;
776
780 uint getInferred14Instruction(int index) const;
781
786
790 uint2 getDistanceRestraintInstruction(int index) const;
791
795 uint2 getAngleRestraintInstruction(int index) const;
796
800 uint2 getDihedralRestraintInstruction(int index) const;
801
805 uint2 getVirtualSiteInstruction(int index) const;
806
810 uint2 getSettleGroupInstruction(int index) const;
811
815 uint2 getConstraintGroupInstruction(int index) const;
816
821 const std::vector<uint>& getAccumulationFlags(VwuTask vtask) const;
822
825 const std::vector<uint>& getAtomUpdateFlags() const;
826
833 const std::vector<int>& getSimpleTaskList(VwuTask vtask) const;
834
839 const std::vector<int>& getCompositeBondTaskList() const;
840
846 const std::vector<int2>& getCompositeDihedralTaskList() const;
847
849 ValenceDelegator* getDelegatorPointer();
850
852 const AtomGraph* getTopologyPointer() const;
853
856
861 void setListIndex(int list_index_in);
862
869 void setAtomLimit(int new_limit);
870
875 void addNewAtomImport(int atom_index);
876
879 void addNewAtomUpdate(const int atom_index);
880
884 void makeAtomMoveList();
885
889 void sortAtomSets();
890
893 void makeAtomUpdateMask();
894
898 void logActivities();
899
900private:
901 int imported_atom_count;
902 int moved_atom_count;
903 int updated_atom_count;
904 int bond_term_count;
905 int angl_term_count;
906 int dihe_term_count;
907 int ubrd_term_count;
908 int cbnd_term_count;
910 int cimp_term_count;
911 int cdhe_term_count;
914 int cmap_term_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;
923 int vste_count;
924 int list_index;
926 int min_atom_index;
927 int max_atom_index;
928 int atom_limit;
929
933 std::vector<int> atom_import_list;
934
937 std::vector<int> atom_move_list;
938
943 std::vector<int> atom_update_list;
944
953 std::vector<uint> atom_update_mask;
954
955 // Valence terms for the work unit, typical force field elements
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;
973
974 // List of local indices for atoms participating in each task (energy term, virtual site,
975 // or constraint group) for which the work unit is responsible
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;
998
1000 std::vector<int> cbnd_term_list;
1001
1003 std::vector<bool> cbnd_is_ubrd;
1005 std::vector<int> cbnd_i_atoms;
1006 std::vector<int> cbnd_jk_atoms;
1007
1010 std::vector<int2> cdhe_term_list;
1011
1012 // Arrays to support the composite dihedrals
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;
1019
1020
1021 // Restraint terms for this work unit
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;
1041
1042 // Bit string directives on whether to contribute energies to the work unit's reported total
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;
1056
1057 // Constraint groups for this work unit
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;
1076
1077 // Virtual sites in this work unit
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;
1092
1093 // Internal arrays of instructions for each energy term, constraint, or virtual site task,
1094 // stored for fast retrieval.
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;
1107
1108 // Pointers to important objects
1109 ValenceDelegator *vdel_pointer;
1110 const AtomGraph *ag_pointer;
1111 const RestraintApparatus *ra_pointer;
1112};
1113
1133int2 calculateValenceWorkUnitSize(const int* atom_counts, int system_count);
1134
1135int2 calculateValenceWorkUnitSize(const std::vector<int> &atom_counts);
1136
1137int2 calculateValenceWorkUnitSize(const Hybrid<int> &atom_counts);
1138
1139int2 calculateValenceWorkUnitSize(const int* atom_counts, int system_count, int sm_count,
1140 ValenceKernelSize *kwidth);
1141
1142int2 calculateValenceWorkUnitSize(const std::vector<int> &atom_counts, int sm_count,
1143 ValenceKernelSize *kwidth);
1144
1145int2 calculateValenceWorkUnitSize(const Hybrid<int> &atom_counts, int sm_count,
1146 ValenceKernelSize *kwidth);
1147
1148int2 calculateValenceWorkUnitSize(const std::vector<AtomGraph*> &ag_list,
1149 const std::vector<int> &topology_replicas, const int sm_count,
1150 ValenceKernelSize *kwidth);
1152
1166std::vector<ValenceWorkUnit>
1167buildValenceWorkUnits(const AtomGraph *ag, const RestraintApparatus *ra,
1168 int2 max_atoms_per_vwu = { maximum_valence_work_unit_atoms,
1169 maximum_valence_work_unit_atoms });
1170
1171std::vector<ValenceWorkUnit>
1172buildValenceWorkUnits(ValenceDelegator *vdel,
1173 int2 max_atoms_per_vwu = { maximum_valence_work_unit_atoms,
1174 maximum_valence_work_unit_atoms });
1176
1177} // namespace topology
1178} // namespace stormm
1179
1180#endif
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 > &parameter_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 > &parameter_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 > &parameter_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 > &parameter_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 > &parameter_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 > &parameter_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