9 namespace twocenterljf {
22 const std::map<std::string, model_types_2CLJF>
modelmap = { {
"2CLJF_Mecke",
MECKE},{
"2CLJF_Lisal",
LISAL} };
28 const std::map<model_types_2CLJF, std::valarray<double>>
p_alpha = {
29 {
MECKE, {1.0, 0.5296092, -0.4531784, 0.4421075}},
30 {
LISAL, {1.0, 0.5296092, -0.4531784, 0.4421075}}
37 const std::map<model_types_2CLJF, std::valarray<double>>
p_eta_rho = {
38 {
MECKE, {0.5256,3.2088804,-3.1499114,0.43049357}},
39 {
LISAL, {0.5256,3.2088804,-3.1499114,0.43049357}}
46 const std::map<model_types_2CLJF, std::valarray<double>>
p_rho = {
47 {
MECKE, {0.3128,1.11519758,3.48878614,6.10644999}},
48 {
LISAL, {0.31258137,1.2240569,3.7974509,6.5490937}}
56 const std::map<model_types_2CLJF, std::valarray<double>>
p_t = {
57 {
MECKE, {34.0122223,17.2324198,0.52922987,12.7653979}},
58 {
LISAL, {34.037352,17.733741,0.53237307,12.860239}}
66 const std::map<model_types_2CLJF, std::valarray<double>>
c = {
67 {
MECKE, {-0.25359778252E+00,0.94270769752E-02,0.10937076431E-03,-0.45230360227E-05,-0.98945319827E+00,0.77816220730E+01,-0.19338901724E+02,0.16188444167E+02,-0.47837698146E+01,-0.37128104806E-05,0.11481369341E+01,-0.13600256513E+01,-0.34629572236E-05,-0.48388274860E+00,0.92061274747E+00,-0.38763633820E+00,-0.20652959726E+01,0.53102723110E+01,-0.45202666343E+01,0.12858167202E+01,0.31043103969E-03,0.76115392332E-05,-0.15141679018E+01,0.26132719232E+01,-0.88015285297E+00,-0.48730358072E-02,-0.14612399648E-01,-0.19908427778E-03,-0.29960728655E+00,0.25016932001E+00,0.16495699794E-01,0.35210453535E+00,-0.43243419699E+00,-0.31194438133E-01}},
68 {
LISAL, {-0.64211055047e-1,0.17682583145e-2,-0.62963373291e0,-0.35320115512e0,0.11339264270e2,-0.33311941616e2,0.37022843830e2,-0.18683743554e2,0.34566448842e1,-0.11216048862e-5,0.69315597535e0,-0.95242644353e0,0.13303429920e-1,-0.17518819492e-4,0.30942693727e-5,0.44671277084e-1,-0.84065404026e0,0.12662354443e1,-0.43706789738e0,0.34751432401e-5,-0.52988956334e-6,0.37399304905e-1,-0.32905342462e0,0.63121341882e-1,-0.20913100716e-2,-0.26852824281e-1,0.70733527178e-1,0.58291227149e-1,-0.76337837062e-1,-0.37502524667e-1,0.19201247728e-2,-0.76922623587e-1,0.12939011597e0,-0.37539710780e-1}}
75 const std::map<model_types_2CLJF, std::valarray<double>>
m = {
76 {
MECKE, {-1.5,-1.5,-1.5,-1.5,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-0.5,-0.5,-0.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-2.0,-2.0,-2.0,-2.0,0.0,0.0,-4.0,-4.0,-4.0,-3.0,-3.0,-3.0}},
77 {
LISAL, {-1.50,-1.50,-1.00,-1.00,-1.00,-1.00,-1.00,-1.00,-1.00,-1.00,-0.50,-0.50,-0.50,-0.50,-0.50,0.00,0.00,0.00,0.00,0.00,0.00,-3.00,-2.00,-2.00,-2.00,-1.00,0.00,-4.00,-4.00,-4.00,-4.00,0.00,0.00,0.00}}
84 const std::map<model_types_2CLJF, std::valarray<double>>
n = {
85 {
MECKE, {1.0,3.0,7.0,9.0,1.0,2.0,2.0,2.0,2.0,9.0,1.0,1.0,9.0,1.0,1.0,1.0,3.0,3.0,3.0,3.0,5.0,8.0,2.0,2.0,2.0,5.0,5.0,9.0,2.0,2.0,4.0,1.0,1.0,4}},
86 {
LISAL, {2.0,5.0,1.0,1.0,2.0,2.0,2.0,2.0,2.0,10.0,1.0,1.0,3.0,9.0,10.0,1.0,2.0,2.0,2.0,9.0,10.0,1.0,1.0,3.0,6.0,3.0,3.0,1.0,1.0,2.0,6.0,1.0,1.0,1.0}}
93 const std::map<model_types_2CLJF, std::valarray<double>>
o = {
94 {
MECKE, {0,-1,-2,-3,0,-3,-2,-1,0,-3,-3,-2,-3,-3,-1,0,1,2,3,4,4,-1,-2,-1,0,-1,3,2,-3,-2,-1,-3,-1,4}},
95 {
LISAL, {-3,-2,0,1,-3,-2,-1,0,1,-3,-3,-2,-1,-3,-2,0,-3,-2,-1,0,2,-2,0,0,1,2,-1,-3,0,-3,-2,-3,1,3}}
102 const std::map<model_types_2CLJF, std::valarray<double>>
p = {
103 {
MECKE, {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1}},
104 {
LISAL, {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1}}
111 const std::map<model_types_2CLJF, std::valarray<double>>
q = {
112 {
MECKE, {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,2.0,2.0,2.0,2.0,2.0,2}},
113 {
LISAL, {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,2.0,2.0,2.0,2.0,2.0,2.0,2}}
121 const std::map<model_types_2CLJF, std::valarray<double>>
cd = {
122 {
MECKE, {-0.423652173318e-01,0.204459397242e-01,0.664266837321e-01,-0.324168341478e-01,-0.741263275720e-02,-0.160855507113e-01,0.435623305093e-02,-0.105933370736e-03,-0.132000046519e-05,0.838157718194e-05,0.109144074057e-01,0.257960188278e-01,-0.544140085185e-03,0.349568484468e-02,-0.421407562467e-01,-0.745992658113e-02,0.146102252152e-03,0.566611094911e-03,-0.378643890614e-02,-0.365824539450e-01,0.169287932475e-01, 0.663866480778e-02,0.294409406715e-01,-0.112110434947e-01,-0.182144939032e-05,0.758594753989e-07,-0.216942306418e-04,-0.274025042954e-05}},
123 {
LISAL, {-0.423652173318e-01,0.204459397242e-01,0.664266837321e-01,-0.324168341478e-01,-0.741263275720e-02,-0.160855507113e-01,0.435623305093e-02,-0.105933370736e-03,-0.132000046519e-05,0.838157718194e-05,0.109144074057e-01,0.257960188278e-01,-0.544140085185e-03,0.349568484468e-02,-0.421407562467e-01,-0.745992658113e-02,0.146102252152e-03,0.566611094911e-03,-0.378643890614e-02,-0.365824539450e-01,0.169287932475e-01, 0.663866480778e-02,0.294409406715e-01,-0.112110434947e-01,-0.182144939032e-05,0.758594753989e-07,-0.216942306418e-04,-0.274025042954e-05 }}
130 const std::map < model_types_2CLJF, std::valarray<double>>
nd = {
131 {
MECKE, {-5.0,-8.0,-4.0,-3.0,-10.0,-7.0,-10.0,-11.0,-15.0,-10.0,-2.0,-2.0,-1.0,-5.0,-3.0,-1.0,1.0,-9.0,-7.0,-2.0,-1.0,-5.0,-2.0,-1.0,-8.0,-5.0,1.0,-4.0}},
132 {
LISAL, {-5.0,-8.0,-4.0,-3.0,-10.0,-7.0,-10.0,-11.0,-15.0,-10.0,-2.0,-2.0,-1.0,-5.0,-3.0,-1.0,1.0,-9.0,-7.0,-2.0,-1.0,-5.0,-2.0,-1.0,-8.0,-5.0,1.0,-4.0}}
139 const std::map < model_types_2CLJF, std::valarray<double>>
md = {
140 {
MECKE, {2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,3.0,2.0,3.0,6.0,2.0,3.0,3.0,6.0,2.0,2.0,2.0,2.0,3.0,3.0,3.0,10.0,16.0,4.0,9.0}},
141 {
LISAL, {2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,3.0,2.0,3.0,6.0,2.0,3.0,3.0,6.0,2.0,2.0,2.0,2.0,3.0,3.0,3.0,10.0,16.0,4.0,9.0 }}
148 const std::map < model_types_2CLJF, std::valarray<double>>
kd = {
149 {
MECKE, {5.0,6.0,7.0,7.0,9.0,9.0,11.0,15.0,18.0,18.0,5.0,5.0,5.0,6.0,6.0,6.0,6.0,7.0,7.0,7.0,7.0,7.0,7.0,7.0,7.0,7.0,8.0,10.0}},
150 {
LISAL, {5.0,6.0,7.0,7.0,9.0,9.0,11.0,15.0,18.0,18.0,5.0,5.0,5.0,6.0,6.0,6.0,6.0,7.0,7.0,7.0,7.0,7.0,7.0,7.0,7.0,7.0,8.0,10.0}}
157 const std::map < model_types_2CLJF, std::valarray<double>>
od = {
158 {
MECKE, {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }},
159 {
LISAL, {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }}
167 const std::map<model_types_2CLJF, std::valarray<double>>
cq = {
168 {
MECKE, {-0.41215428089610E-2, 0.35578044173610E-2,-0.88809379838910E-3, 0.97379155960910E-4,-0.60423371932610E-7,-0.30447863314610E-4,-0.37893019633710E-3,-0.27538826735210E-1, 0.11830188842010E-1,-0.28345123056210E-2,-0.56770387482810E-4, 0.31470857321210E-2, 0.96378605256910E-3,-0.12759100242410E-2, 0.36374646323810E-3, 0.30106794309610E-4, 0.29177823112810E-6}},
169 {
LISAL, {-0.41215428089610E-2, 0.35578044173610E-2,-0.88809379838910E-3, 0.97379155960910E-4,-0.60423371932610E-7,-0.30447863314610E-4,-0.37893019633710E-3,-0.27538826735210E-1, 0.11830188842010E-1,-0.28345123056210E-2,-0.56770387482810E-4, 0.31470857321210E-2, 0.96378605256910E-3,-0.12759100242410E-2, 0.36374646323810E-3, 0.30106794309610E-4, 0.29177823112810E-6}}
176 const std::map < model_types_2CLJF, std::valarray<double>>
nq = {
177 {
MECKE, {-8.0,-6.0,-4.0,-10.0,-20.0,-8.0,-3.0,-3.0,-2.0,0.0,-5.0,-1.0,-3.0,-1.0,0.0,0.0,-10.0}},
178 {
LISAL, {-8.0,-6.0,-4.0,-10.0,-20.0,-8.0,-3.0,-3.0,-2.0,0.0,-5.0,-1.0,-3.0,-1.0,0.0,0.0,-10.0}}
185 const std::map < model_types_2CLJF, std::valarray<double>>
mq = {
186 {
MECKE, {2.0,2.0,2.0,2.0,2.0,2.0,8.0,2.0,2.0,2.0,8.0,2.0,5.0,5.0,5.0,8.0,7.0}},
187 {
LISAL, {2.0,2.0,2.0,2.0,2.0,2.0,8.0,2.0,2.0,2.0,8.0,2.0,5.0,5.0,5.0,8.0,7.0}}
194 const std::map < model_types_2CLJF, std::valarray<double>>
kq = {
195 {
MECKE, {11.0,12.0,13.0,16.0,19.0,20.0, 7.0, 8.0, 8.0, 8.0, 8.0, 9.0,10.0,10.0,10.0,10.0,18.0}},
196 {
LISAL, {11.0,12.0,13.0,16.0,19.0,20.0, 7.0, 8.0, 8.0, 8.0, 8.0, 9.0,10.0,10.0,10.0,10.0,18.0}}
203 const std::map < model_types_2CLJF, std::valarray<double>>
oq = {
204 {
MECKE, {1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}},
205 {
LISAL, {1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}}
236 std::valarray<double>
p_t;
241 return 0.25 * sqrt((
p_t[0] +
p_t[1] * L) / (1.0 +
p_t[2] * L +
p_t[3] *
pow(L, 2)));
245 return sqrt((
p_t[0] +
p_t[1] * L) / (1.0 +
p_t[2] * L +
p_t[3] *
pow(L, 2)));
255 template<
typename TauType,
typename DeltaType>
256 auto alphar(
const TauType& tau,
const DeltaType& delta,
const double& alpha)
const {
257 using result = std::common_type_t<TauType, DeltaType>;
260 for (
auto i = 0U; i <
c.size(); ++i) {
261 r = r +
c[i] *
pow(tau,
m[i]) *
powi(delta,
static_cast<int>(
n[i])) *
pow(alpha,
o[i]) * exp(
p[i] *
powi(delta,
static_cast<int>(
q[i])));
270 const double a = 0.67793;
271 const double g = 0.3674;
274 template<
typename TauType,
typename DeltaType>
275 auto alphar(
const TauType& tau,
const DeltaType& delta,
const double& alpha)
const {
278 auto r = (
pow(alpha, 2) - 1.0) * log(1.0 - eta) + ((
pow(alpha, 2) + 3 * alpha) * eta - 3 * alpha *
powi(eta, 2)) / (
pow(1.0 - eta, 2));
285 std::valarray<double>
c,
m,
n,
k,
o;
287 template<
typename TauType,
typename DeltaType>
288 auto alphar(
const TauType& tau,
const DeltaType& delta,
const double& mu_sq)
const {
289 using result = std::common_type_t<TauType, DeltaType>;
292 for (
auto i = 0U; i <
c.size(); ++i) {
293 r = r +
c[i] *
pow(tau,
n[i] / 2.0) *
pow(delta,
m[i] / 2.0) *
pow(mu_sq,
k[i] / 4.0) * exp(-
o[i] *
pow(delta, 2.0));
301 std::valarray<double>
c,
m,
n,
k,
o;
302 template<
typename TauType,
typename DeltaType>
303 auto alphar(
const TauType& tau,
const DeltaType& delta,
const double& mu_sq)
const {
304 using result = std::common_type_t<TauType, DeltaType>;
307 for (
auto i = 0U; i <
c.size(); ++i) {
308 r = r +
c[i] *
pow(tau,
n[i] / 2.0) *
pow(delta,
m[i] / 2.0) *
pow(mu_sq,
k[i] / 4.0) * exp(-
o[i] *
pow(delta, 2.0));
313 template<
typename TypePolarContribution>
320 const TypePolarContribution
Pole;
324 Twocenterljf(
ReducingDensity&&
redD,
ReducingTemperature&&
redT,
HardSphereContribution&&
Hard,
const AttractiveContribution&&
Attr,
const TypePolarContribution&&
Pole,
const double L,
const double&
mu_sq) :
redD(
redD),
redT(
redT),
Hard(
Hard),
Attr(
Attr),
Pole(
Pole),
L(
L),
mu_sq(
mu_sq) {};
326 template<
typename TType,
typename RhoType,
typename MoleFracType>
328 const RhoType& rho_dimer_star,
329 const MoleFracType& )
const
335 auto delta =
forceeval(rho_dimer_star / Rred);
337 auto delta_eta =
forceeval(rho_dimer_star * eta_red);
338 auto alphar_1 =
Hard.
alphar(tau, delta_eta, alpha);
339 auto alphar_2 =
Attr.
alphar(tau, delta, alpha);
340 auto val =
forceeval(alphar_1 + alphar_2);
347 template<
class VecType>
348 auto R(
const VecType& )
const {
423 auto model =
Twocenterljf(std::move(DC_funcs), std::move(TC_func), std::move(EOS_hard), std::move(EOS_att), std::move(EOS_dipolar), L, mu_sq);
441 auto model =
Twocenterljf(std::move(DC_funcs), std::move(TC_func), std::move(EOS_hard), std::move(EOS_att), std::move(EOS_dipolar), L, mu_sq);
461 auto model =
Twocenterljf(std::move(DC_funcs), std::move(TC_func), std::move(EOS_hard), std::move(EOS_att), std::move(EOS_quadrupolar), L, Q_sq);
std::valarray< double > q
std::valarray< double > o
auto alphar(const TauType &tau, const DeltaType &delta, const double &alpha) const
std::valarray< double > c
std::valarray< double > m
std::valarray< double > p
std::valarray< double > n
std::valarray< double > n
std::valarray< double > m
std::valarray< double > c
std::valarray< double > o
auto alphar(const TauType &tau, const DeltaType &delta, const double &mu_sq) const
std::valarray< double > k
auto alphar(const TauType &tau, const DeltaType &delta, const double &alpha) const
const std::map< model_types_2CLJF, std::valarray< double > > kd
const std::map< model_types_2CLJF, std::valarray< double > > n
auto get_quadrupolar_o_parameter(const std::string &model)
const std::map< model_types_2CLJF, std::valarray< double > > nd
auto get_dipolar_n_parameter(const std::string &model)
auto get_q_parameter(const std::string &model)
const std::map< model_types_2CLJF, std::valarray< double > > m
const std::map< model_types_2CLJF, std::valarray< double > > o
auto get_rho_parameter(const std::string &model)
const std::map< model_types_2CLJF, std::valarray< double > > cd
auto get_dipolar_c_parameter(const std::string &model)
const std::map< model_types_2CLJF, std::valarray< double > > nq
auto get_o_parameter(const std::string &model)
auto get_dipolar_k_parameter(const std::string &model)
auto get_p_parameter(const std::string &model)
const std::map< model_types_2CLJF, std::valarray< double > > p_t
const std::map< model_types_2CLJF, std::valarray< double > > c
auto get_c_parameter(const std::string &model)
auto get_dipolar_o_parameter(const std::string &model)
auto get_alpha_star_parameter(const std::string &model)
const std::map< model_types_2CLJF, std::valarray< double > > q
auto get_quadrupolar_c_parameter(const std::string &model)
const std::map< model_types_2CLJF, std::valarray< double > > p_rho
auto get_quadrupolar_m_parameter(const std::string &model)
auto get_quadrupolar_n_parameter(const std::string &model)
const std::map< model_types_2CLJF, std::valarray< double > > od
const std::map< model_types_2CLJF, std::valarray< double > > cq
const std::map< model_types_2CLJF, std::valarray< double > > md
const std::map< model_types_2CLJF, std::valarray< double > > mq
const std::map< model_types_2CLJF, std::valarray< double > > oq
const std::map< model_types_2CLJF, std::valarray< double > > p_eta_rho
auto get_quadrupolar_k_parameter(const std::string &model)
auto get_m_parameter(const std::string &model)
auto get_eta_rho_parameter(const std::string &model)
const std::map< model_types_2CLJF, std::valarray< double > > kq
auto get_T_parameter(const std::string &model)
const std::map< model_types_2CLJF, std::valarray< double > > p_alpha
auto get_dipolar_m_parameter(const std::string &model)
auto get_n_parameter(const std::string &model)
const std::map< model_types_2CLJF, std::valarray< double > > p
std::valarray< double > k
std::valarray< double > m
std::valarray< double > o
std::valarray< double > c
std::valarray< double > n
auto alphar(const TauType &tau, const DeltaType &delta, const double &mu_sq) const
auto get_alpha_star(const double &L) const
auto get_eta_over_rho(const double &L) const
std::valarray< double > p_eta_rho
std::valarray< double > p_alpha
std::valarray< double > p_rho
auto get_rho_red(const double &L) const
std::valarray< double > p_t
auto get_T_red(const double &L) const
auto R(const VecType &) const
auto alphar(const TType &T_star, const RhoType &rho_dimer_star, const MoleFracType &) const
const ReducingTemperature redT
const TypePolarContribution Pole
Twocenterljf(ReducingDensity &&redD, ReducingTemperature &&redT, HardSphereContribution &&Hard, const AttractiveContribution &&Attr, const TypePolarContribution &&Pole, const double L, const double &mu_sq)
const AttractiveContribution Attr
const HardSphereContribution Hard
const ReducingDensity redD
auto get_density_reducing(const std::string &name)
auto build_two_center_model(const std::string &model_version, const double &L=0.0)
auto get_Quadrupolar_contribution(const std::string &name)
auto get_Dipolar_contribution(const std::string &name)
const std::map< std::string, model_types_2CLJF > modelmap
auto get_temperature_reducing(const std::string &name)
auto get_HardSphere_contribution()
auto build_two_center_model_dipole(const std::string &model_version, const double &L=0.0, const double &mu_sq=0.0)
auto build_two_center_model_quadrupole(const std::string &model_version, const double &L=0.0, const double &Q_sq=0.0)
auto get_Attractive_contribution(const std::string &name)
T powi(const T &x, int n)
From Ulrich Deiters.
auto pow(const double &x, const double &e)