2#ifndef STORMM_RESTRAINT_APPARATUS_H
3#define STORMM_RESTRAINT_APPARATUS_H
6#include "Accelerator/hybrid.h"
7#include "Topology/atomgraph.h"
8#include "bounded_restraint.h"
14using card::HybridTargetLevel;
15using topology::AtomGraph;
18enum class RestraintStage {
27template <
typename T,
typename T2,
typename T4>
31 explicit RestraintKit(
int total_rst_in,
int nposn_in,
int nbond_in,
int nangl_in,
32 int ndihe_in,
bool time_dependence_in,
const int* rposn_atoms_in,
33 const int* rbond_i_atoms_in,
const int* rbond_j_atoms_in,
34 const int* rangl_i_atoms_in,
const int* rangl_j_atoms_in,
35 const int* rangl_k_atoms_in,
const int* rdihe_i_atoms_in,
36 const int* rdihe_j_atoms_in,
const int* rdihe_k_atoms_in,
37 const int* rdihe_l_atoms_in,
const int* rposn_init_step_in,
38 const int* rposn_finl_step_in,
const int* rbond_init_step_in,
39 const int* rbond_finl_step_in,
const int* rangl_init_step_in,
40 const int* rangl_finl_step_in,
const int* rdihe_init_step_in,
41 const int* rdihe_finl_step_in,
const T2* rposn_init_keq_in,
42 const T2* rposn_finl_keq_in,
const T2* rposn_init_xy_in,
43 const T2* rposn_finl_xy_in,
const T* rposn_init_z_in,
44 const T* rposn_finl_z_in,
const T2* rbond_init_keq_in,
45 const T2* rbond_finl_keq_in,
const T2* rangl_init_keq_in,
46 const T2* rangl_finl_keq_in,
const T2* rdihe_init_keq_in,
47 const T2* rdihe_finl_keq_in,
const T4* rposn_init_r_in,
48 const T4* rposn_finl_r_in,
const T4* rbond_init_r_in,
49 const T4* rbond_finl_r_in,
const T4* rangl_init_r_in,
50 const T4* rangl_finl_r_in,
const T4* rdihe_init_r_in,
51 const T4* rdihe_finl_r_in,
const AtomGraph *ag_pointer_in);
175 dpData(HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
181 spData(HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
186 HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
192 HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
197 HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
215 void addRestraints(
const std::vector<BoundedRestraint> &new_rest);
216 void addRestraint(
const BoundedRestraint &new_rest);
222 int total_restraint_count;
227 bool time_based_restraints;
371 void checkTopologyPointers(
const std::vector<BoundedRestraint> &rbasis);
385 void populateInternalArrays(
const std::vector<BoundedRestraint> &rbasis);
403 bool assessTimeDependence(
int* init_steps,
int* final_steps,
int nrest);
404 void assessTimeDependence();
412std::vector<RestraintApparatus>
413createBlankRestraintApparatus(
const std::vector<AtomGraph*> ags);
418#include "restraint_apparatus.tpp"
An evolution of GpuBuffer in pmemd.cuda, the Composite array has elements that are accessible from ei...
Definition hybrid.h:202
RestraintApparatus(const AtomGraph *ag_in=nullptr)
The constructor takes a vector of individual restraints.
Definition restraint_apparatus.cpp:15
int getDistanceRestraintCount() const
Get the number of distance restraints.
Definition restraint_apparatus.cpp:458
RestraintKit< double, double2, double4 > dpData(HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get a double-precision abstract of this apparatus.
Definition restraint_apparatus.cpp:484
RestraintKit< float, float2, float4 > spData(HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get a single-precision abstract of this apparatus.
Definition restraint_apparatus.cpp:512
RestraintApparatus & operator=(const RestraintApparatus &other)
Copy assignment operator.
Definition restraint_apparatus.cpp:203
std::vector< BoundedRestraint > getRestraintList() const
Produce a vector of all the restraints in this apparatus, essentially the inverse of the constructor.
Definition restraint_apparatus.cpp:638
int getPositionalRestraintCount() const
Get the number of positional restraints.
Definition restraint_apparatus.cpp:453
int getAngleRestraintCount() const
Get the number of angle restraints.
Definition restraint_apparatus.cpp:463
const double4 * getDisplacementPointer(int order, RestraintStage stage, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get a double-precision pointer into one of the displacement r(1,2,3,4) parameter arrays,...
Definition restraint_apparatus.cpp:605
const RestraintApparatus * getSelfPointer() const
Get a const pointer to the object itself, in case the object has been passed by const reference.
Definition restraint_apparatus.cpp:695
const double2 * getHarmonicStiffnessPointer(int order, RestraintStage stage, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get a double-precision pointer into one of the restraint k(2,3) parameter arrays, specified by the or...
Definition restraint_apparatus.cpp:573
void addRestraints(const std::vector< BoundedRestraint > &new_rest)
Add restraints to the apparatus.
Definition restraint_apparatus.cpp:700
int getDihedralRestraintCount() const
Get the number of dihedral restraints.
Definition restraint_apparatus.cpp:468
const AtomGraph * getTopologyPointer() const
Get a pointer to the topology that this restraint collection supplements.
Definition restraint_apparatus.cpp:478
RestraintApparatus(const AtomGraph *ag_in=nullptr)
The constructor takes a vector of individual restraints.
Definition restraint_apparatus.cpp:15
bool getTimeDependence() const
Get an indication of whether this apparatus uses time-dependent restraints.
Definition restraint_apparatus.cpp:473
int getTotalRestraintCount() const
Get the total number of restraints in this apparatus.
Definition restraint_apparatus.cpp:448
const int * getApplicationStepPointer(int order, RestraintStage stage, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get an integer pointer into one of the restraint initial or final application step parameter arrays,...
Definition restraint_apparatus.cpp:539
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:112
Definition stormm_vector_types.h:123
RestraintKit(int total_rst_in, int nposn_in, int nbond_in, int nangl_in, int ndihe_in, bool time_dependence_in, const int *rposn_atoms_in, const int *rbond_i_atoms_in, const int *rbond_j_atoms_in, const int *rangl_i_atoms_in, const int *rangl_j_atoms_in, const int *rangl_k_atoms_in, const int *rdihe_i_atoms_in, const int *rdihe_j_atoms_in, const int *rdihe_k_atoms_in, const int *rdihe_l_atoms_in, const int *rposn_init_step_in, const int *rposn_finl_step_in, const int *rbond_init_step_in, const int *rbond_finl_step_in, const int *rangl_init_step_in, const int *rangl_finl_step_in, const int *rdihe_init_step_in, const int *rdihe_finl_step_in, const T2 *rposn_init_keq_in, const T2 *rposn_finl_keq_in, const T2 *rposn_init_xy_in, const T2 *rposn_finl_xy_in, const T *rposn_init_z_in, const T *rposn_finl_z_in, const T2 *rbond_init_keq_in, const T2 *rbond_finl_keq_in, const T2 *rangl_init_keq_in, const T2 *rangl_finl_keq_in, const T2 *rdihe_init_keq_in, const T2 *rdihe_finl_keq_in, const T4 *rposn_init_r_in, const T4 *rposn_finl_r_in, const T4 *rbond_init_r_in, const T4 *rbond_finl_r_in, const T4 *rangl_init_r_in, const T4 *rangl_finl_r_in, const T4 *rdihe_init_r_in, const T4 *rdihe_finl_r_in, const AtomGraph *ag_pointer_in)
The constructor requires a tedious list of arguments.
Double-precision reader abstract for the RestraintApparatus class. Restraints are very detailed thing...
Definition restraint_apparatus.h:28
const int * rdihe_j_atoms
Atoms which are under four-point dihedral restraints (ii)
Definition restraint_apparatus.h:73
const int * rangl_j_atoms
Atoms which are under three-point angle restraints (ii)
Definition restraint_apparatus.h:70
const int * rangl_finl_step
Final steps for applying three-point angle restraints.
Definition restraint_apparatus.h:81
const T2 * rposn_finl_xy
Final X and Y coordinates for positional restraint targets.
Definition restraint_apparatus.h:87
const bool time_dependence
Whether there is a time dependent nature to the restraints.
Definition restraint_apparatus.h:65
const T4 * rangl_init_r
Initial displacement parameters for angle restraints.
Definition restraint_apparatus.h:100
const T2 * rangl_finl_keq
Final harmonic parameters for angle restraints.
Definition restraint_apparatus.h:93
const T4 * rdihe_init_r
Initial displacement parameters for dihedral restraints.
Definition restraint_apparatus.h:102
const T2 * rdihe_finl_keq
Final harmonic parameters for dihedral restraints.
Definition restraint_apparatus.h:95
RestraintKit(const RestraintKit &original)=default
Take the default copy and move constructors. The assignment operators will get implicitly deleted as ...
const T2 * rposn_init_keq
Initial harmonic parameters for positional restraints.
Definition restraint_apparatus.h:84
const int * rangl_init_step
Initial steps for applying three-point angle restraints.
Definition restraint_apparatus.h:80
const int * rdihe_k_atoms
Atoms which are under four-point dihedral restraints (iii)
Definition restraint_apparatus.h:74
const int nangl
Number of three-point restraints.
Definition restraint_apparatus.h:63
const int * rposn_init_step
Initial steps for applying positional restraints.
Definition restraint_apparatus.h:76
const T2 * rbond_finl_keq
Final harmonic parameters for distance restraints.
Definition restraint_apparatus.h:91
const int * rdihe_finl_step
Final steps for applying dihedral restraints.
Definition restraint_apparatus.h:83
const int * rposn_finl_step
Final steps for applying positional restraints.
Definition restraint_apparatus.h:77
const T * rposn_init_z
Initial Z coordinates for positional restraint targets.
Definition restraint_apparatus.h:88
const T4 * rdihe_finl_r
Final displacement parameters for dihedral restraints.
Definition restraint_apparatus.h:103
const int nposn
Number of positional restraints.
Definition restraint_apparatus.h:61
const int * rbond_j_atoms
Atoms which are under distance restraints (ii)
Definition restraint_apparatus.h:68
const T2 * rposn_init_xy
Initial X and Y coordinates for positional restraint targets.
Definition restraint_apparatus.h:86
const int nbond
Number of distance restraints.
Definition restraint_apparatus.h:62
const AtomGraph * ag_pointer
Pointer to the topology to which this apparatus applies.
Definition restraint_apparatus.h:104
const int * rposn_atoms
Atoms which are under positional restraints.
Definition restraint_apparatus.h:66
const T2 * rdihe_init_keq
Initial harmonic parameters for dihedral restraints.
Definition restraint_apparatus.h:94
const T4 * rbond_init_r
Initial displacement parameters for distance restraints.
Definition restraint_apparatus.h:98
const int * rangl_i_atoms
Atoms which are under three-point angle restraints (i)
Definition restraint_apparatus.h:69
const int * rdihe_l_atoms
Atoms which are under four-point dihedral restraints (iv)
Definition restraint_apparatus.h:75
const T2 * rposn_finl_keq
Final harmonic parameters for positional restraints.
Definition restraint_apparatus.h:85
const int ndihe
Number of four-point dihedral restraints.
Definition restraint_apparatus.h:64
const int total_rst
Total number of restraints in the apparatus.
Definition restraint_apparatus.h:60
const int * rangl_k_atoms
Atoms which are under three-point angle restraints (iii)
Definition restraint_apparatus.h:71
const int * rdihe_init_step
Initial steps for applying dihedral restraints.
Definition restraint_apparatus.h:82
const int * rbond_init_step
Initial steps for applying distance restraints.
Definition restraint_apparatus.h:78
const T4 * rangl_finl_r
Final displacement parameters for angle restraints.
Definition restraint_apparatus.h:101
const T * rposn_finl_z
Final Z coordinates for positional restraint targets.
Definition restraint_apparatus.h:89
const T4 * rbond_finl_r
Final displacement parameters for distance restraints.
Definition restraint_apparatus.h:99
const T2 * rangl_init_keq
Initial harmonic parameters for angle restraints.
Definition restraint_apparatus.h:92
RestraintKit(int total_rst_in, int nposn_in, int nbond_in, int nangl_in, int ndihe_in, bool time_dependence_in, const int *rposn_atoms_in, const int *rbond_i_atoms_in, const int *rbond_j_atoms_in, const int *rangl_i_atoms_in, const int *rangl_j_atoms_in, const int *rangl_k_atoms_in, const int *rdihe_i_atoms_in, const int *rdihe_j_atoms_in, const int *rdihe_k_atoms_in, const int *rdihe_l_atoms_in, const int *rposn_init_step_in, const int *rposn_finl_step_in, const int *rbond_init_step_in, const int *rbond_finl_step_in, const int *rangl_init_step_in, const int *rangl_finl_step_in, const int *rdihe_init_step_in, const int *rdihe_finl_step_in, const T2 *rposn_init_keq_in, const T2 *rposn_finl_keq_in, const T2 *rposn_init_xy_in, const T2 *rposn_finl_xy_in, const T *rposn_init_z_in, const T *rposn_finl_z_in, const T2 *rbond_init_keq_in, const T2 *rbond_finl_keq_in, const T2 *rangl_init_keq_in, const T2 *rangl_finl_keq_in, const T2 *rdihe_init_keq_in, const T2 *rdihe_finl_keq_in, const T4 *rposn_init_r_in, const T4 *rposn_finl_r_in, const T4 *rbond_init_r_in, const T4 *rbond_finl_r_in, const T4 *rangl_init_r_in, const T4 *rangl_finl_r_in, const T4 *rdihe_init_r_in, const T4 *rdihe_finl_r_in, const AtomGraph *ag_pointer_in)
The constructor requires a tedious list of arguments.
const T4 * rposn_finl_r
Final displacement parameters for positional restraints.
Definition restraint_apparatus.h:97
const int * rbond_i_atoms
Atoms which are under distance restraints (i)
Definition restraint_apparatus.h:67
const int * rbond_finl_step
Final steps for applying distance restraints.
Definition restraint_apparatus.h:79
const T4 * rposn_init_r
Initial displacement parameters for positional restraints.
Definition restraint_apparatus.h:96
const int * rdihe_i_atoms
Atoms which are under four-point dihedral restraints (i)
Definition restraint_apparatus.h:72
const T2 * rbond_init_keq
Initial harmonic parameters for distance restraints.
Definition restraint_apparatus.h:90