16 const Monomer monomer;
18 const std::valarray<std::valarray<double>> aij_Johnson = {
20 {0, 0.49304346593882, 2.1528349894745 ,-15.955682329017, 24.035999666294 , -8.6437958513990},
21 {0,-0.47031983115362, 1.1471647487376 , 37.889828024211, -84.667121491179 , 39.643914108411},
22 {0, 5.0325486243620 ,-25.915399226419 ,-18.862251310090, 107.63707381726 ,-66.602649735720},
23 {0,-7.3633150434385 , 51.553565337453 ,-40.519369256098, -38.796692647218 , 44.605139198378},
24 {0, 2.9043607296043 ,-24.478812869291 , 31.500186765040, -5.3368920371407, -9.5183440180133}
28 LJChain(Monomer &&monomer,
double m) : monomer(monomer), m(m){};
30 template<
typename TType,
typename RhoType>
31 auto g_LJ(
const TType& Tstar,
const RhoType& rhostar_monomer)
const{
32 std::common_type_t<TType, RhoType> summer = 1.0;
33 for (
auto i = 1; i < 6; ++i){
34 for (
auto j = 1; j < 6; ++j){
35 summer += aij_Johnson[i][j]*
powi(rhostar_monomer,i)*
powi(Tstar, 1-j);
41 template<
typename TType,
typename RhoType>
42 auto get_lnyR(
const TType& Tstar,
const RhoType& rhostar_monomer)
const{
46 template<
typename TType,
typename RhoType,
typename MoleFracType>
48 const RhoType& rho_chain_star,
49 const MoleFracType& molefrac)
const
51 auto rhostar_monomer =
forceeval(rho_chain_star*m);
52 auto alphar_monomer = m*monomer.alphar(Tstar, rhostar_monomer, molefrac);
53 auto alphar_chain = (1-m)*
get_lnyR(Tstar, rhostar_monomer);
54 return forceeval(alphar_chain + alphar_monomer);
57 template<
class VecType>
58 auto R(
const VecType& )
const {