STORMM Source Documentation
Loading...
Searching...
No Matches
mm_controls.h
1// -*-c++-*-
2#ifndef STORMM_MM_CONTROLS_H
3#define STORMM_MM_CONTROLS_H
4
5#include "copyright.h"
6#include "Accelerator/core_kernel_manager.h"
7#include "Accelerator/gpu_details.h"
8#include "Accelerator/hybrid.h"
9#include "Constants/behavior.h"
10#include "Potential/energy_enumerators.h"
11#include "Potential/cellgrid.h"
12#include "Math/reduction_enumerators.h"
13#include "Namelists/nml_dynamics.h"
14#include "Namelists/nml_minimize.h"
15#include "Potential/energy_enumerators.h"
16#include "Synthesis/atomgraph_synthesis.h"
17#include "Topology/atomgraph_enumerators.h"
18
19namespace stormm {
20namespace mm {
21
22using card::GpuDetails;
23using card::CoreKlManager;
24using card::Hybrid;
25using card::HybridTargetLevel;
26using constants::PrecisionModel;
27using energy::CellGrid;
28using energy::ClashResponse;
29using energy::EvaluateEnergy;
30using energy::EvaluateForce;
31using energy::NeighborListKind;
32using energy::QMapMethod;
33using energy::TinyBoxPresence;
34using stmath::ReductionStage;
35using namelist::default_dynamics_time_step;
36using namelist::default_electrostatic_cutoff;
37using namelist::default_minimize_dx0;
38using namelist::default_minimize_maxcyc;
39using namelist::default_minimize_ncyc;
40using namelist::default_rattle_tolerance;
41using namelist::default_nt_warp_multiplicity;
42using namelist::default_van_der_waals_cutoff;
43using namelist::DynamicsControls;
44using namelist::MinimizeControls;
45using synthesis::AtomGraphSynthesis;
46using synthesis::VwuGoal;
47using topology::ImplicitSolventModel;
48
52template <typename T> struct MMControlKit {
53
56 MMControlKit(int step_in, int sd_cycles_in, int max_cycles_in, T initial_step_in,
57 int nt_warp_mult_in, const T elec_cut_in, const T vdw_cut_in, int* vwu_progress_in,
58 int* vupt_progress_in, int* vcns_progress_in, int* pupt_progress_in,
59 int* gcns_progress_in, int* nbwu_progress_in, int* pmewu_progress_in,
60 int* gbrwu_progress_in, int* gbdwu_progress_in, int* gtwu_progress_in,
61 int* scwu_progress_in, int* rdwu_progress_in);
62
65 MMControlKit(const MMControlKit &original) = default;
66 MMControlKit(MMControlKit &&original) = default;
68
69 int step;
70 const int sd_cycles;
71 const int max_cycles;
72 const T initial_step;
73 const int nt_warp_mult;
75 const T elec_cut;
77 const T vdw_cut;
79 const T elec_cut_sq;
80 const T vdw_cut_sq;
93};
94
101public:
102
112 MolecularMechanicsControls(double initial_step_in = default_minimize_dx0,
113 int sd_cycles_in = default_minimize_ncyc,
114 int max_cycles_in = default_minimize_maxcyc,
115 int nt_warp_multiplicity_in = default_nt_warp_multiplicity,
116 double electrostatic_cutoff_in = default_electrostatic_cutoff,
117 double van_der_waals_cutoff_in = default_van_der_waals_cutoff);
118
119 MolecularMechanicsControls(const DynamicsControls &user_input);
120
121 MolecularMechanicsControls(const MinimizeControls &user_input);
123
128
134
139
141 int getStepNumber() const;
142
144 int getSteepestDescentCycles() const;
145
147 int getTotalCycles() const;
148
151
153 double getInitialMinimizationStep() const;
154
156 double getElectrostaticCutoff() const;
157
159 double getVanDerWaalsCutoff() const;
160
166 int getValenceWorkUnitProgress(int counter_index,
167 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
168
174 int getNonbondedWorkUnitProgress(int counter_index,
175 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
176
182 int getPmeWorkUnitProgress(int counter_index,
183 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
184
190 int getReductionWorkUnitProgress(int counter_index, ReductionStage process,
191 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
192
197
199 MMControlKit<double> dpData(HybridTargetLevel tier = HybridTargetLevel::HOST);
200
202 MMControlKit<float> spData(HybridTargetLevel tier = HybridTargetLevel::HOST);
203
233 void primeWorkUnitCounters(const CoreKlManager &launcher, EvaluateForce eval_frc,
234 EvaluateEnergy eval_nrg, ClashResponse softcore, VwuGoal purpose,
235 PrecisionModel valence_prec, PrecisionModel nonbond_prec,
236 QMapMethod qspread_approach, PrecisionModel acc_prec,
237 size_t image_coord_type, int qspread_order,
238 NeighborListKind nbgr_config, TinyBoxPresence has_tiny_box,
239 const AtomGraphSynthesis &poly_ag);
240
241 void primeWorkUnitCounters(const CoreKlManager &launcher, EvaluateForce eval_frc,
242 EvaluateEnergy eval_nrg, const ClashResponse softcore,
243 VwuGoal purpose, PrecisionModel valence_prec,
244 PrecisionModel nonbond_prec, const AtomGraphSynthesis &poly_ag);
245
246 void primeWorkUnitCounters(const CoreKlManager &launcher, EvaluateForce eval_frc,
247 EvaluateEnergy eval_nrg, VwuGoal purpose, PrecisionModel valence_prec,
248 PrecisionModel nonbond_prec, const AtomGraphSynthesis &poly_ag);
249
250 void primeWorkUnitCounters(const CoreKlManager &launcher, EvaluateForce eval_frc,
251 EvaluateEnergy eval_nrg, VwuGoal purpose, PrecisionModel general_prec,
252 const AtomGraphSynthesis &poly_ag);
254
267 template <typename T, typename Tacc, typename Tcalc, typename T4>
269 const CellGrid<T, Tacc, Tcalc, T4> *cg_b, const GpuDetails &gpu);
270
271 template <typename T, typename Tacc, typename Tcalc, typename T4>
273
274 void setNTWarpMultiplicity(int mult_in);
276
278 void incrementStep();
279
280#ifdef STORMM_USE_HPC
283 void upload();
284
286 void download();
287#endif
288
289private:
290 int step_number;
291 int sd_cycles;
292 int max_cycles;
293 double initial_step;
296 int nt_warp_multiplicity;
298 double electrostatic_cutoff;
300 double van_der_waals_cutoff;
302
311 Hybrid<int> vwu_progress;
312
320 Hybrid<int> velocity_update_progress;
321
324 Hybrid<int> velocity_constraint_progress;
325
328 Hybrid<int> position_update_progress;
329
332 Hybrid<int> geometry_constraint_progress;
333
335 Hybrid<int> nbwu_progress;
336
338 Hybrid<int> pmewu_progress;
339
341 Hybrid<int> gbrwu_progress;
342
344 Hybrid<int> gbdwu_progress;
345
347 Hybrid<int> gather_wu_progress;
348
350 Hybrid<int> scatter_wu_progress;
351
355 Hybrid<int> all_reduce_wu_progress;
356
358 Hybrid<int> int_data;
359
362 void rebasePointers();
363};
364
365} // namespace mm
366} // namespace stormm
367
368#include "mm_controls.tpp"
369
370#endif
A class to guide the implementation of GPU kernels, with selected thread counts per block and block c...
Definition core_kernel_manager.h:56
Pertinent aspects of one particular GPU. Condensing the data for each GPU in this manner helps to ens...
Definition gpu_details.h:27
An evolution of GpuBuffer in pmemd.cuda, the Composite array has elements that are accessible from ei...
Definition hybrid.h:202
An object to manage the spatial decomposition of a system of particles. The general strategy is to ar...
Definition cellgrid.h:562
MolecularMechanicsControls(double initial_step_in=default_minimize_dx0, int sd_cycles_in=default_minimize_ncyc, int max_cycles_in=default_minimize_maxcyc, int nt_warp_multiplicity_in=default_nt_warp_multiplicity, double electrostatic_cutoff_in=default_electrostatic_cutoff, double van_der_waals_cutoff_in=default_van_der_waals_cutoff)
The constructor can create an empty object with default parameters for the time step and rattle toler...
Definition mm_controls.cpp:19
void incrementStep()
Increment the step counter, moving the controls to a different progress counter.
Definition mm_controls.cpp:473
int getValenceWorkUnitProgress(int counter_index, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the value of one of the valence work unit progress counters on the host or the HPC device.
Definition mm_controls.cpp:218
MolecularMechanicsControls & operator=(const MolecularMechanicsControls &other)
The copy assignment operator likewise handles assignment of internal POINTER-kind Hybrid objects.
Definition mm_controls.cpp:100
int getStepNumber() const
Get the current step number.
Definition mm_controls.cpp:188
MMControlKit< double > dpData(HybridTargetLevel tier=HybridTargetLevel::HOST)
Obtain a double-precision abstract for this object.
Definition mm_controls.cpp:299
int getTotalCycles() const
Get the total number of minimization steps, or total MD cycles.
Definition mm_controls.cpp:198
int getSteepestDescentCycles() const
Get the number of steepest descent minimization cycles.
Definition mm_controls.cpp:193
double getElectrostaticCutoff() const
Get the cutoff for non-bonded electrostatic interactions in periodic simulations.
Definition mm_controls.cpp:208
MMControlKit< float > spData(HybridTargetLevel tier=HybridTargetLevel::HOST)
Obtain a single-precision abstract for this object.
Definition mm_controls.cpp:312
int getPmeWorkUnitProgress(int counter_index, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the value of one of the Particle-Mesh Ewald work unit progress counters on the host or the HPC de...
Definition mm_controls.cpp:250
int getNTWarpMultiplicity() const
Get the neutral-territory warp multiplicity.
int getReductionWorkUnitProgress(int counter_index, ReductionStage process, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the value of one of the reduction work unit progress counters on the host or the HPC device.
Definition mm_controls.cpp:266
double getInitialMinimizationStep() const
Get the initial step for energy minimization.
Definition mm_controls.cpp:203
MolecularMechanicsControls(double initial_step_in=default_minimize_dx0, int sd_cycles_in=default_minimize_ncyc, int max_cycles_in=default_minimize_maxcyc, int nt_warp_multiplicity_in=default_nt_warp_multiplicity, double electrostatic_cutoff_in=default_electrostatic_cutoff, double van_der_waals_cutoff_in=default_van_der_waals_cutoff)
The constructor can create an empty object with default parameters for the time step and rattle toler...
Definition mm_controls.cpp:19
double getVanDerWaalsCutoff() const
Get the cutoff for non-bonded van-der Waals interactions in periodic simulations.
Definition mm_controls.cpp:213
int getNonbondedWorkUnitProgress(int counter_index, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the value of one of the non-bonded work unit progress counters on the host or the HPC device.
Definition mm_controls.cpp:234
void setNTWarpMultiplicity(const CellGrid< T, Tacc, Tcalc, T4 > *cg_a, const CellGrid< T, Tacc, Tcalc, T4 > *cg_b, const GpuDetails &gpu)
Set the neutral-territory warp multiplicity based on one or two gell grids, for a given GPU.
void primeWorkUnitCounters(const CoreKlManager &launcher, EvaluateForce eval_frc, EvaluateEnergy eval_nrg, ClashResponse softcore, VwuGoal purpose, PrecisionModel valence_prec, PrecisionModel nonbond_prec, QMapMethod qspread_approach, PrecisionModel acc_prec, size_t image_coord_type, int qspread_order, NeighborListKind nbgr_config, TinyBoxPresence has_tiny_box, const AtomGraphSynthesis &poly_ag)
Prime the work unit counters based on a particular GPU configuration.
Definition mm_controls.cpp:325
A collection of one or more AtomGraph objects, with similar components arranged in contiguous arrays ...
Definition atomgraph_synthesis.h:55
MMControlKit(int step_in, int sd_cycles_in, int max_cycles_in, T initial_step_in, int nt_warp_mult_in, const T elec_cut_in, const T vdw_cut_in, int *vwu_progress_in, int *vupt_progress_in, int *vcns_progress_in, int *pupt_progress_in, int *gcns_progress_in, int *nbwu_progress_in, int *pmewu_progress_in, int *gbrwu_progress_in, int *gbdwu_progress_in, int *gtwu_progress_in, int *scwu_progress_in, int *rdwu_progress_in)
The constructor takes a straight list of values and pointers. The step number is left modifiable so t...
The C-style, always writeable abstract for the MolecularMechanicsControls object. To not be able to m...
Definition mm_controls.h:52
const T vdw_cut_sq
Squared cutoff for van-der Waals interactions.
Definition mm_controls.h:80
int * gcns_progress
Progress counters for standalone positional constraint work units.
Definition mm_controls.h:85
int * scwu_progress
Progress counters for scattering work units.
Definition mm_controls.h:91
const T elec_cut_sq
Squared cutoff for electrostatic interactions.
Definition mm_controls.h:79
MMControlKit(int step_in, int sd_cycles_in, int max_cycles_in, T initial_step_in, int nt_warp_mult_in, const T elec_cut_in, const T vdw_cut_in, int *vwu_progress_in, int *vupt_progress_in, int *vcns_progress_in, int *pupt_progress_in, int *gcns_progress_in, int *nbwu_progress_in, int *pmewu_progress_in, int *gbrwu_progress_in, int *gbdwu_progress_in, int *gtwu_progress_in, int *scwu_progress_in, int *rdwu_progress_in)
The constructor takes a straight list of values and pointers. The step number is left modifiable so t...
int * gbdwu_progress
Progress counters for Generalized Born derivative computations.
Definition mm_controls.h:89
int step
The current simulation step.
Definition mm_controls.h:69
int * rdwu_progress
Progress counters for reduction work units.
Definition mm_controls.h:92
int * vwu_progress
Progress counters for valence work units.
Definition mm_controls.h:81
int * vcns_progress
Progress counters for standalone velocity constraint work units.
Definition mm_controls.h:83
const T initial_step
Initial step size to be taken in energy minimization.
Definition mm_controls.h:72
const T vdw_cut
Definition mm_controls.h:77
int * pupt_progress
Progress counters for standalone coordinate update work units.
Definition mm_controls.h:84
int * gtwu_progress
Progress counters for gathering work units.
Definition mm_controls.h:90
int * vupt_progress
Progress counters for standalone velocity update work units.
Definition mm_controls.h:82
int * pmewu_progress
Progress counters for PME long-ranged work units.
Definition mm_controls.h:87
MMControlKit(const MMControlKit &original)=default
The usual copy and move constructors for an abstract apply here.
int * nbwu_progress
Progress counters for non-bonded work units.
Definition mm_controls.h:86
const T elec_cut
Definition mm_controls.h:75
const int max_cycles
The total number of energy minimization cycles or dynamics steps.
Definition mm_controls.h:71
int * gbrwu_progress
Progress counters for Generalized Born radii computations.
Definition mm_controls.h:88
const int sd_cycles
The number of steepest-descent energy minimization cycles.
Definition mm_controls.h:70
const int nt_warp_mult
Definition mm_controls.h:73