STORMM Source Documentation
Loading...
Searching...
No Matches
line_minimization.h
1// -*-c++-*-
2#ifndef STORMM_LINE_MINIMIZATION_H
3#define STORMM_LINE_MINIMIZATION_H
4
5#include "copyright.h"
6#include "Accelerator/hybrid.h"
7
8namespace stormm {
9namespace mm {
10
11using card::Hybrid;
12using card::HybridTargetLevel;
13
16
19 LinMinWriter(const int nsys_in, double* l_move_in, double* s_move_in, double* mfac_a_in,
20 double* mfac_b_in, double* mfac_c_in, double* nrg_a_in, double* nrg_b_in,
21 double* nrg_c_in, double* nrg_d_in);
22
25 LinMinWriter(const LinMinWriter &original) = default;
26 LinMinWriter(LinMinWriter &&original) = default;
28
29 // Member variables
30 const int nsys;
31 double* l_move;
34 double* s_move;
43 double* mfac_a;
44 double* mfac_b;
45 double* mfac_c;
46 double* nrg_a;
47 double* nrg_b;
48 double* nrg_c;
49 double* nrg_d;
50};
51
54
57 LinMinReader(const int nsys_in, const double* l_move_in, const double* s_move_in,
58 const double* mfac_a_in, const double* mfac_b_in, const double* mfac_c_in,
59 const double* nrg_a_in, const double* nrg_b_in, const double* nrg_c_in,
60 const double* nrg_d_in);
61
64 LinMinReader(const LinMinReader &original) = default;
65 LinMinReader(LinMinReader &&original) = default;
67
68 // Member variables
69 const int nsys;
70 const double* l_move;
71 const double* s_move;
72 const double* mfac_a;
73 const double* mfac_b;
74 const double* mfac_c;
75 const double* nrg_a;
76 const double* nrg_b;
77 const double* nrg_c;
78 const double* nrg_d;
79};
80
86public:
87
93 LineMinimization(int system_count_in = 0, double dx0 = 0.0);
94
101 LineMinimization(const LineMinimization &original);
102 LineMinimization& operator=(const LineMinimization &other);
103 LineMinimization(LineMinimization &&original) = default;
104 LineMinimization& operator=(LineMinimization &&other) = default;
106
108 int getSystemCount() const;
109
119 std::vector<double> getMoveLength(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
120 double getMoveLength(int system_index,
121 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
122
138 std::vector<double> getMoveFactor(int move_index,
139 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
140 double getMoveFactor(int move_index, int system_index,
141 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
143
144
156 std::vector<double> getEnergy(int move_index,
157 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
158 double getEnergy(int move_index, int system_index,
159 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
161
170 LinMinReader data(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
171 LinMinWriter data(HybridTargetLevel tier = HybridTargetLevel::HOST);
173
179 void primeMoveLengths(double dx0);
180
181#ifdef STORMM_USE_HPC
185 void upload();
186
189 void download();
190#endif
191
192private:
193 int system_count;
195 Hybrid<double> move_length;
205 Hybrid<double> save_length;
207 Hybrid<double> move_factor_a;
208 Hybrid<double> move_factor_b;
209 Hybrid<double> move_factor_c;
210 Hybrid<double> energy_a;
212 Hybrid<double> energy_b;
213 Hybrid<double> energy_c;
214 Hybrid<double> energy_d;
215 Hybrid<double> storage;
216};
217
218} // namespace mm
219} // namespace stormm
220
221#endif
An evolution of GpuBuffer in pmemd.cuda, the Composite array has elements that are accessible from ei...
Definition hybrid.h:202
std::vector< double > getMoveFactor(int move_index, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the movement multipliers for one or more systems defining a particular move. Collectively,...
Definition line_minimization.cpp:148
void primeMoveLengths(double dx0)
Prime the initial movement lengths for a series of line minimization cycles using a default or user-s...
Definition line_minimization.cpp:340
std::vector< double > getEnergy(int move_index, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the energies for one or more systems after a particular move.
Definition line_minimization.cpp:232
std::vector< double > getMoveLength(HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the current move lengths for one or more systems.
Definition line_minimization.cpp:121
LineMinimization(int system_count_in=0, double dx0=0.0)
The constructor takes only the number of systems as input and allocates for three moves along the com...
Definition line_minimization.cpp:32
int getSystemCount() const
Get the number of systems.
Definition line_minimization.cpp:116
LinMinReader data(HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get a read-only or writeable abstract, as appropriate.
Definition line_minimization.cpp:324
Abstract for the line minimization object incorporating write access.
Definition line_minimization.h:53
const double * nrg_c
Energies obtained for each system after the 2nd move in the cycle.
Definition line_minimization.h:77
const double * nrg_b
Energies obtained for each system after the 1st move in the cycle.
Definition line_minimization.h:76
LinMinReader(const LinMinReader &original)=default
Take the standard copy and move constructors for a struct with const elements.
const double * l_move
Lengths of the moves for each system in the 1st step.
Definition line_minimization.h:70
const double * mfac_a
Move multiplying factors of the 1st move along each system's line.
Definition line_minimization.h:72
const double * mfac_c
Move multiplying factors of the 3rd move along each system's line.
Definition line_minimization.h:74
LinMinReader(const int nsys_in, const double *l_move_in, const double *s_move_in, const double *mfac_a_in, const double *mfac_b_in, const double *mfac_c_in, const double *nrg_a_in, const double *nrg_b_in, const double *nrg_c_in, const double *nrg_d_in)
The constructor works like any other abstract, taking arguments in the order that fills the member va...
Definition line_minimization.cpp:23
const int nsys
The number of systems subject to their own independent line minimizations.
Definition line_minimization.h:69
const double * nrg_d
Energies obtained for each system after the 3rd move in the cycle.
Definition line_minimization.h:78
const double * nrg_a
Energies obtained for each system at the outset of the cycle.
Definition line_minimization.h:75
const double * s_move
Lengths of the moves for each system in the 2nd and 3rd steps.
Definition line_minimization.h:71
const double * mfac_b
Move multiplying factors of the 2nd move along each system's line.
Definition line_minimization.h:73
Abstract for the line minimization object incorporating write access.
Definition line_minimization.h:15
double * nrg_a
Energies obtained for each system at the outset of the cycle.
Definition line_minimization.h:46
double * mfac_a
Move multiplying factors of the 1st move along each system's line.
Definition line_minimization.h:43
const int nsys
The number of systems subject to their own independent line minimizations.
Definition line_minimization.h:30
LinMinWriter(const LinMinWriter &original)=default
Take the standard copy and move constructors for a struct with const elements.
double * mfac_b
Move multiplying factors of the 2nd move along each system's line.
Definition line_minimization.h:44
double * nrg_b
Energies obtained for each system after the 1st move in the cycle.
Definition line_minimization.h:47
double * mfac_c
Move multiplying factors of the 3rd move along each system's line.
Definition line_minimization.h:45
double * nrg_c
Energies obtained for each system after the 2nd move in the cycle.
Definition line_minimization.h:48
double * l_move
Definition line_minimization.h:31
double * nrg_d
Energies obtained for each system after the 3rd move in the cycle.
Definition line_minimization.h:49
double * s_move
Definition line_minimization.h:34
LinMinWriter(const int nsys_in, double *l_move_in, double *s_move_in, double *mfac_a_in, double *mfac_b_in, double *mfac_c_in, double *nrg_a_in, double *nrg_b_in, double *nrg_c_in, double *nrg_d_in)
The constructor works like any other abstract, taking arguments in the order that fills the member va...
Definition line_minimization.cpp:14