STORMM Source Documentation
Loading...
Searching...
No Matches
implicit_solvent_workspace.h
1// -*-c++-*-
2#ifndef STORMM_IMPLICIT_SOLVENT_WORKSPACE_H
3#define STORMM_IMPLICIT_SOLVENT_WORKSPACE_H
4
5#include <cmath>
6#include "copyright.h"
7#include "Accelerator/gpu_details.h"
8#include "Accelerator/hybrid.h"
9#include "Constants/behavior.h"
10#include "Trajectory/trajectory_enumerators.h"
11
12namespace stormm {
13namespace synthesis {
14
15using card::GpuDetails;
16using card::Hybrid;
17using card::HybridTargetLevel;
18using constants::PrecisionModel;
19using trajectory::CoordinateCycle;
20
23template <typename T> struct ISWorkspaceKit {
24
26 ISWorkspaceKit(int fp_bits_in, llint* psi_in, int* psi_overflow_in, llint* sum_deijda_in,
27 int* sum_deijda_overflow_in, llint* alt_psi_in, int* alt_psi_overflow_in,
28 llint* alt_sum_deijda_in, int* alt_sum_deijda_overflow_in);
29
35 ISWorkspaceKit(const ISWorkspaceKit &original) = default;
36 ISWorkspaceKit(ISWorkspaceKit &&original) = default;
38
39 const int fp_bits;
40 const T fp_scale;
42 const T inv_fp_scale;
44 llint* psi;
48 int* psi_ovrf;
50 llint* sum_deijda;
54
55 // The following are alternative arrays made available so that one of the GB kernels can
56 // initialize them for use in the following calculation, saving a kernel call in the GB cycle.
57 llint* alt_psi;
61};
62
66public:
67
83 ImplicitSolventWorkspace(const Hybrid<int> &atom_starts, const Hybrid<int> &atom_counts,
84 int bit_count);
85
86 ImplicitSolventWorkspace(const Hybrid<int> &atom_starts, const Hybrid<int> &atom_counts,
87 PrecisionModel prec);
89
101
104 int getFixedPrecisionBits() const;
105
107 CoordinateCycle getCyclePosition() const;
108
118 ISWorkspaceKit<double> dpData(CoordinateCycle orientation,
119 HybridTargetLevel tier = HybridTargetLevel::HOST);
120
121 ISWorkspaceKit<double> dpData(HybridTargetLevel tier = HybridTargetLevel::HOST);
123
127 ISWorkspaceKit<float> spData(CoordinateCycle orientation,
128 HybridTargetLevel tier = HybridTargetLevel::HOST);
129
130 ISWorkspaceKit<float> spData(HybridTargetLevel tier = HybridTargetLevel::HOST);
132
133#ifdef STORMM_USE_HPC
136 void upload();
137
140 void download();
141#endif
142
144 void updateCyclePosition();
145
151 void initialize(HybridTargetLevel tier = HybridTargetLevel::HOST,
152 CoordinateCycle orientation = CoordinateCycle::WHITE,
153 const GpuDetails &gpu = null_gpu);
154
155#ifdef STORMM_USE_HPC
159 void launchInitialization(const GpuDetails &gpu,
160 CoordinateCycle orientation = CoordinateCycle::WHITE);
161#endif
162
163private:
164 int fp_bits;
165 int padded_atom_count;
170 CoordinateCycle cycle_position;
173 Hybrid<llint> psi;
176 Hybrid<int> psi_overflow;
177 Hybrid<llint> sum_deijda;
180 Hybrid<int> sum_deijda_overflow;
181 Hybrid<llint> alt_psi;
183 Hybrid<int> alt_psi_overflow;
184 Hybrid<llint> alt_sum_deijda;
185 Hybrid<int> alt_sum_deijda_overflow;
186 Hybrid<llint> llint_data;
189 Hybrid<int> int_data;
191
194 void rebasePointers();
195};
196
197} // namespace synthesis
198} // namespace stormm
199
200#include "implicit_solvent_workspace.tpp"
201
202#endif
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
ImplicitSolventWorkspace(const Hybrid< int > &atom_starts, const Hybrid< int > &atom_counts, int bit_count)
The object contains arrays to store Born radii and derivatives to very high precision.
Definition implicit_solvent_workspace.cpp:13
CoordinateCycle getCyclePosition() const
Get the object's current coordinate cycle position.
Definition implicit_solvent_workspace.cpp:157
ISWorkspaceKit< double > dpData(CoordinateCycle orientation, HybridTargetLevel tier=HybridTargetLevel::HOST)
Get the double-precision abstract, containing pointers to data on the host or device.
Definition implicit_solvent_workspace.cpp:162
ImplicitSolventWorkspace(const Hybrid< int > &atom_starts, const Hybrid< int > &atom_counts, int bit_count)
The object contains arrays to store Born radii and derivatives to very high precision.
Definition implicit_solvent_workspace.cpp:13
void initialize(HybridTargetLevel tier=HybridTargetLevel::HOST, CoordinateCycle orientation=CoordinateCycle::WHITE, const GpuDetails &gpu=null_gpu)
Set the Generalized Born radii and radii derivative accumulators to zero.
Definition implicit_solvent_workspace.cpp:234
ISWorkspaceKit< float > spData(CoordinateCycle orientation, HybridTargetLevel tier=HybridTargetLevel::HOST)
Get the single-precision abstract, containing pointers to data on the host or device....
Definition implicit_solvent_workspace.cpp:185
int getFixedPrecisionBits() const
Get the precision in which Born radii and sums of the per-atom energy derivatives are stored.
Definition implicit_solvent_workspace.cpp:152
void updateCyclePosition()
Increment the object's cycle counter.
Definition implicit_solvent_workspace.cpp:222
ISWorkspaceKit(int fp_bits_in, llint *psi_in, int *psi_overflow_in, llint *sum_deijda_in, int *sum_deijda_overflow_in, llint *alt_psi_in, int *alt_psi_overflow_in, llint *alt_sum_deijda_in, int *alt_sum_deijda_overflow_in)
The constructor takes a straight list of arguments.
A simple abstract for the implicit solvent workspace. There are not readers and writers as the only u...
Definition implicit_solvent_workspace.h:23
int * alt_psi_ovrf
Alternate array for psi overflow accumulators.
Definition implicit_solvent_workspace.h:58
ISWorkspaceKit(const ISWorkspaceKit &original)=default
The copy and move constructors are defaulted, assignment operators implicitly deleted due to const me...
const T fp_scale
Definition implicit_solvent_workspace.h:40
ISWorkspaceKit(int fp_bits_in, llint *psi_in, int *psi_overflow_in, llint *sum_deijda_in, int *sum_deijda_overflow_in, llint *alt_psi_in, int *alt_psi_overflow_in, llint *alt_sum_deijda_in, int *alt_sum_deijda_overflow_in)
The constructor takes a straight list of arguments.
llint * alt_sum_deijda
Alternate GB radii derivative accumulators.
Definition implicit_solvent_workspace.h:59
llint * sum_deijda
Definition implicit_solvent_workspace.h:50
int * alt_sum_deijda_ovrf
Alternate GB radii derivative overflow accumulators.
Definition implicit_solvent_workspace.h:60
const T inv_fp_scale
Definition implicit_solvent_workspace.h:42
llint * alt_psi
Alternate array for psi accumulators.
Definition implicit_solvent_workspace.h:57
llint * psi
Definition implicit_solvent_workspace.h:44
const int fp_bits
Fixed-precision bits after the decimal.
Definition implicit_solvent_workspace.h:39
int * sum_deijda_ovrf
Definition implicit_solvent_workspace.h:52
int * psi_ovrf
Definition implicit_solvent_workspace.h:48