1 #include "FrantzMarshall.h"
2 #include "ThermoParameters.h"
3 
4 namespace ThermoFun {
5 
thermoPropertiesFrantzMarshall(Reaktoro_::Temperature TK,Reaktoro_::Pressure Pbar,Reaction reaction,PropertiesSolvent wp)6 auto thermoPropertiesFrantzMarshall(Reaktoro_::Temperature TK, Reaktoro_::Pressure Pbar, Reaction reaction, PropertiesSolvent wp) -> ThermoPropertiesReaction
7 {
8     ThermoPropertiesReaction tpr;
9 
10 //    auto ref_tpr = reaction.thermoReferenceProperties();
11     auto RHO = wp.density/1000; // in g/cm3
12     auto ALP = wp.Alpha;
13     auto BET = wp.Beta*1e05;
14     auto dALPdT = wp.dAldT;
15     auto MFcoef = reaction.thermoParameters().reaction_FM_coeff;
16 
17     auto dRHOdT = -ALP*RHO;
18     auto dRHOdP = BET*RHO;
19     auto d2RHOdT2 = RHO*(pow(ALP,2)-dALPdT);
20 
21     auto a = MFcoef[0];
22     auto b = MFcoef[1];
23     auto c = MFcoef[2];
24     auto d = MFcoef[3];
25     auto e = MFcoef[4];
26     auto f = MFcoef[5];
27     auto g = MFcoef[6];
28 
29     auto logK = a + b/TK + c/pow(TK,2.) + d/pow(TK,3.) + ( e + f/TK + g/pow(TK,2.) )*log10(RHO);
30 
31     auto J  = a + b/TK + c/pow(TK,2.) + d/pow(TK,3.) + ( e + f/TK + g/pow(TK,2.) )*log10(RHO);
32     auto dJ = - b/pow(TK,2.) - 2.*c/pow(TK,3.) - 3.*d/pow(TK,4.)
33               + ( -f/pow(TK,2.) - 2.*g/pow(TK,3.) )*log10(RHO)
34               + ( e + f/TK + g/pow(TK,2.) ) * 1./(RHO*log(10.)) * dRHOdT;
35     auto d2J = 2.*b/pow(TK,3.) + 6.*c/pow(TK,4.) + 12.*d/pow(TK,5.)
36                + ( 2.*f/pow(TK,3.) + 6.*g/pow(TK,4.) )*log10(RHO)
37                + 2.*( -f/pow(TK,2.) -2.*g/pow(TK,3.) ) * 1./(RHO*log(10.)) * dRHOdT
38                - ( e + f/TK + g/pow(TK,2.) ) * 1./(pow(RHO,2.)*log(10.)) * pow (dRHOdT,2.)
39                + ( e + f/TK + g/pow(TK,2.) ) * 1./(RHO*log(10.)) * d2RHOdT2;
40 
41     auto dGr  = - R_CONSTANT*TK*log(10.)*logK;
42     auto dSr  = R_CONSTANT*log(10.)*( J + dJ*TK );
43     auto dCPr = R_CONSTANT*log(10.)*TK*( 2.*dJ + d2J*TK );
44     auto dVr  = - R_CONSTANT*log(10.)*TK*( ( e + f/TK + g/pow(TK,2.) ) * 1./(RHO*log(10.)) * dRHOdP );
45     auto dHr  = dGr + dSr*TK;
46     auto dUr  = dHr - Pbar*dVr;
47     auto dAr  = dUr - TK*dSr;
48 
49     tpr.ln_equilibrium_constant    = logK*lg_to_ln;
50     tpr.reaction_enthalpy          = dHr;
51     tpr.reaction_entropy           = dSr;
52     tpr.reaction_gibbs_energy      = dGr;
53     tpr.reaction_heat_capacity_cp  = dCPr;
54     tpr.reaction_volume            = dVr;
55     tpr.reaction_helmholtz_energy  = dAr;
56     tpr.reaction_internal_energy   = dUr;
57 
58     return tpr;
59 }
60 
61 
62 }
63