STORMM Source Documentation
Loading...
Searching...
No Matches
generalized_born.h
1// -*-c++-*-
2#ifndef STORMM_GENERALIZED_BORN_H
3#define STORMM_GENERALIZED_BORN_H
4
5#include "copyright.h"
6#include "Accelerator/hybrid.h"
7
8namespace stormm {
9namespace generalized_born_defaults {
10
11using card::Hybrid;
12using card::HybridTargetLevel;
13
16constexpr double gb_radii_scale_lf = 16277216.0;
17constexpr float gb_radii_scale_f = (float)gb_radii_scale_lf;
18constexpr double inverse_gb_radii_scale_lf = 1.0 / gb_radii_scale_lf;
19constexpr float inverse_gb_radii_scale_f = (float)1.0 / gb_radii_scale_f;
21
23constexpr double default_salt_kappa_dependence = 0.10806;
24
27constexpr double gb_taylor_a_lf = 0.33333333333333333333;
28constexpr double gb_taylor_b_lf = 0.4;
29constexpr double gb_taylor_c_lf = 0.42857142857142857143;
30constexpr double gb_taylor_d_lf = 0.44444444444444444444;
31constexpr double gb_taylor_dd_lf = 0.45454545454545454545;
32constexpr double gb_taylor_e_lf = 1.33333333333333333333;
33constexpr double gb_taylor_f_lf = 2.4;
34constexpr double gb_taylor_g_lf = 3.42857142857142857143;
35constexpr double gb_taylor_h_lf = 4.44444444444444444444;
36constexpr double gb_taylor_hh_lf = 5.45454545454545454545;
38
41constexpr float gb_taylor_a_f = gb_taylor_a_lf;
42constexpr float gb_taylor_b_f = gb_taylor_b_lf;
43constexpr float gb_taylor_c_f = gb_taylor_c_lf;
44constexpr float gb_taylor_d_f = gb_taylor_d_lf;
45constexpr float gb_taylor_dd_f = gb_taylor_dd_lf;
46constexpr float gb_taylor_e_f = gb_taylor_e_lf;
47constexpr float gb_taylor_f_f = gb_taylor_f_lf;
48constexpr float gb_taylor_g_f = gb_taylor_g_lf;
49constexpr float gb_taylor_h_f = gb_taylor_h_lf;
50constexpr float gb_taylor_hh_f = gb_taylor_hh_lf;
52
56constexpr double gb_obc_i_alpha = 0.8;
57constexpr double gb_obc_i_beta = 0.0;
58constexpr double gb_obc_i_gamma = 2.909125;
60
64constexpr double gb_obc_ii_alpha = 1.0;
65constexpr double gb_obc_ii_beta = 0.8;
66constexpr double gb_obc_ii_gamma = 4.85;
68
73constexpr double gb_neck_i_alpha = 1.09511284;
74constexpr double gb_neck_i_beta = 1.90792938;
75constexpr double gb_neck_i_gamma = 2.50798245;
76constexpr double gb_neck_i_screen_h = 1.09085413633;
77constexpr double gb_neck_i_screen_c = 0.484353823306;
78constexpr double gb_neck_i_screen_n = 0.700147318409;
79constexpr double gb_neck_i_screen_o = 1.06557401132;
80constexpr double gb_neck_i_screen_s = 0.602256336067;
81constexpr double gb_neck_i_screen_default = 0.5;
83
87constexpr double gb_neck_ii_screen_h = 1.425952;
88constexpr double gb_neck_ii_screen_c = 1.058554;
89constexpr double gb_neck_ii_screen_n = 0.733599;
90constexpr double gb_neck_ii_screen_o = 1.061039;
91constexpr double gb_neck_ii_screen_s = -0.703469;
92constexpr double gb_neck_ii_screen_p = 0.500000;
93constexpr double gb_neck_ii_alpha_h = 0.788440;
94constexpr double gb_neck_ii_beta_h = 0.798699;
95constexpr double gb_neck_ii_gamma_h = 0.437334;
96constexpr double gb_neck_ii_alpha_c = 0.733756;
97constexpr double gb_neck_ii_beta_c = 0.506378;
98constexpr double gb_neck_ii_gamma_c = 0.205844;
99constexpr double gb_neck_ii_alpha_n = 0.503364;
100constexpr double gb_neck_ii_beta_n = 0.316828;
101constexpr double gb_neck_ii_gamma_n = 0.192915;
102constexpr double gb_neck_ii_alpha_os = 0.867814;
103constexpr double gb_neck_ii_beta_os = 0.876635;
104constexpr double gb_neck_ii_gamma_os = 0.387882;
105constexpr double gb_neck_ii_alpha_p = 1.000000;
106constexpr double gb_neck_ii_beta_p = 0.800000;
107constexpr double gb_neck_ii_gamma_p = 4.850000;
109
112constexpr double default_gb_radii_offset = 0.09;
113constexpr double default_neck_ii_gb_radii_offset = 0.195141;
115
119constexpr double default_gb_neck_cut = 6.800000;
120constexpr double default_gb_kscale = 0.730000;
121constexpr double default_gb_neck_scale = 0.361825;
122constexpr double default_gb_neck_ii_scale = 0.826836;
123constexpr float default_gb_neck_cut_f = default_gb_neck_cut;
124constexpr float default_gb_kscale_f = default_gb_kscale;
125constexpr float default_gb_neck_scale_f = default_gb_neck_scale;
126constexpr float default_gb_neck_ii_scale_f = default_gb_neck_ii_scale;
128
130template <typename T> struct NeckGeneralizedBornKit {
131
133 explicit NeckGeneralizedBornKit(int table_size, T neck_cut_in, T kscale_in,
134 const T* max_separation_in, const T* max_value_in);
135
136 const int table_size;
137 const T neck_cut;
138 const T kscale;
144 const T* max_separation;
145 const T* max_value;
146};
147
152public:
153
164 NeckGeneralizedBornTable(int table_size_in, double neck_cut_in, double kscale_in,
165 const std::vector<double> &max_sep_in,
166 const std::vector<double> &max_val_in);
168
170 int size() const;
171
178 double getMaxSeparation(int i_type, int j_type) const;
179
186 double getMaxValue(int i_type, int j_type) const;
187
192 dpData(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
193
198 spData(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
199
203
204private:
205 int table_size;
206 double neck_cut;
207 double kscale;
208 Hybrid<double> neck_max_separation;
210 Hybrid<double> neck_max_value;
212 Hybrid<float> sp_neck_max_separation;
213 Hybrid<float> sp_neck_max_value;
214};
215
216} // namespace generalized_born_defaults
217} // namespace stormm
218
219#include "generalized_born.tpp"
220
221#endif
An evolution of GpuBuffer in pmemd.cuda, the Composite array has elements that are accessible from ei...
Definition hybrid.h:202
int size() const
Get the table size.
Definition generalized_born.cpp:196
const NeckGeneralizedBornKit< float > spData(HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get a collection of single-precision pointers for this object.
Definition generalized_born.cpp:220
const NeckGeneralizedBornTable * getSelfPointer() const
Get a const pointer to the object itself, useful if a pointer is needed after passing he object by co...
Definition generalized_born.cpp:227
double getMaxValue(int i_type, int j_type) const
Get the maximum value of the neck factor for a pair of Generalized Born atom types....
Definition generalized_born.cpp:206
double getMaxSeparation(int i_type, int j_type) const
Get the maximum separation of neck placement for a pair of Generalized Born atom types....
Definition generalized_born.cpp:201
const NeckGeneralizedBornKit< double > dpData(HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get a collection of double-precision pointers for this object.
Definition generalized_born.cpp:212
NeckGeneralizedBornTable()
Definition generalized_born.cpp:8
Abstract for the NeckGeneralizedBornTable object, in single- or double-precision.
Definition generalized_born.h:130
const T * max_separation
Maximum separations of spheres resulting in neck corrections.
Definition generalized_born.h:144
const T kscale
Definition generalized_born.h:138
const T neck_cut
The Generalized Born neck cutoff (see above for the default)
Definition generalized_born.h:137
NeckGeneralizedBornKit(int table_size, T neck_cut_in, T kscale_in, const T *max_separation_in, const T *max_value_in)
Constructor takes a simple list of the relevant constants and pointers.
const int table_size
Size of each table (they are both assumed to be square)
Definition generalized_born.h:136
const T * max_value
Maximum values of the neck correction in each case.
Definition generalized_born.h:145