"""Chemical Engineering Design Library (ChEDL). Utilities for process modeling.
Copyright (C) 2020 Caleb Bell
<Caleb.Andrew.Bell@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
This module contains various thermodynamic functions for air and humid air.
For reporting bugs, adding feature requests, or submitting pull requests,
please use the `GitHub issue tracker <https://github.com/CalebBell/chemicals/>`_.
.. contents:: :local:
Dry Air Basic Solvers
------------------------
.. autofunction:: chemicals.air.lemmon2000_rho
.. autofunction:: chemicals.air.lemmon2000_P
.. autofunction:: chemicals.air.lemmon2000_T
Dry Air Bubble/Dew Points
-------------------------
.. autofunction:: chemicals.air.lemmon2000_air_P_dew
.. autofunction:: chemicals.air.lemmon2000_air_P_bubble
.. autofunction:: chemicals.air.lemmon2000_air_rho_dew
.. autofunction:: chemicals.air.lemmon2000_air_rho_bubble
Dry Air Constants
-----------------
.. autodata:: chemicals.air.lemmon2000_air_T_reducing
.. autodata:: chemicals.air.lemmon2000_air_rho_reducing
.. autodata:: chemicals.air.lemmon2000_air_P_reducing
.. autodata:: chemicals.air.lemmon2000_air_MW
.. autodata:: chemicals.air.lemmon2000_air_R
.. autodata:: chemicals.air.lemmon2000_air_T_max
.. autodata:: chemicals.air.lemmon2000_air_P_max
Dry Air Ideal Gas Terms
-----------------------
.. autofunction:: chemicals.air.lemmon2000_air_A0
.. autofunction:: chemicals.air.lemmon2000_air_dA0_dtau
.. autofunction:: chemicals.air.lemmon2000_air_d2A0_dtau2
.. autofunction:: chemicals.air.lemmon2000_air_d3A0_dtau3
.. autofunction:: chemicals.air.lemmon2000_air_d4A0_dtau4
Dry Air Residual Terms
----------------------
.. autofunction:: chemicals.air.lemmon2000_air_Ar
.. autofunction:: chemicals.air.lemmon2000_air_dAr_dtau
.. autofunction:: chemicals.air.lemmon2000_air_d2Ar_dtau2
.. autofunction:: chemicals.air.lemmon2000_air_d3Ar_dtau3
.. autofunction:: chemicals.air.lemmon2000_air_d4Ar_dtau4
.. autofunction:: chemicals.air.lemmon2000_air_dAr_ddelta
.. autofunction:: chemicals.air.lemmon2000_air_d2Ar_ddelta2
.. autofunction:: chemicals.air.lemmon2000_air_d3Ar_ddelta3
.. autofunction:: chemicals.air.lemmon2000_air_d4Ar_ddelta4
.. autofunction:: chemicals.air.lemmon2000_air_d2Ar_ddeltadtau
.. autofunction:: chemicals.air.lemmon2000_air_d3Ar_ddeltadtau2
.. autofunction:: chemicals.air.lemmon2000_air_d3Ar_ddelta2dtau
.. autofunction:: chemicals.air.lemmon2000_air_d4Ar_ddelta2dtau2
.. autofunction:: chemicals.air.lemmon2000_air_d4Ar_ddeltadtau3
.. autofunction:: chemicals.air.lemmon2000_air_d4Ar_ddelta3dtau
Humid Air Virial Terms
----------------------
.. autofunction:: chemicals.air.TEOS10_BAW_derivatives
.. autofunction:: chemicals.air.TEOS10_CAAW_derivatives
.. autofunction:: chemicals.air.TEOS10_CAWW_derivatives
Henry's Law for Air in Water
----------------------------
.. autofunction:: chemicals.air.iapws04_Henry_air
.. autofunction:: chemicals.air.iapws04_dHenry_air_dT
"""
from fluids.numerics import exp, horner_and_der3, log, sqrt
from chemicals.iapws import iapws92_dPsat_dT, iapws92_Psat, iapws95_Tc, iapws95_Tc_inv
__all__ = ['lemmon2000_air_A0', 'lemmon2000_air_dA0_dtau',
'lemmon2000_air_d2A0_dtau2', 'lemmon2000_air_d3A0_dtau3',
'lemmon2000_air_d4A0_dtau4',
'lemmon2000_air_Ar', 'lemmon2000_air_dAr_dtau',
'lemmon2000_air_d2Ar_dtau2', 'lemmon2000_air_d3Ar_dtau3',
'lemmon2000_air_d4Ar_dtau4',
'lemmon2000_air_dAr_ddelta', 'lemmon2000_air_d2Ar_ddelta2',
'lemmon2000_air_d3Ar_ddelta3', 'lemmon2000_air_d4Ar_ddelta4',
'lemmon2000_air_d2Ar_ddeltadtau', 'lemmon2000_air_d3Ar_ddeltadtau2',
'lemmon2000_air_d3Ar_ddelta2dtau', 'lemmon2000_air_d4Ar_ddelta2dtau2',
'lemmon2000_air_d4Ar_ddeltadtau3', 'lemmon2000_air_d4Ar_ddelta3dtau',
'lemmon2000_air_rho_dew', 'lemmon2000_air_rho_bubble',
'lemmon2000_air_P_dew', 'lemmon2000_air_P_bubble',
'lemmon2000_air_R', 'lemmon2000_air_T_reducing', 'lemmon2000_air_P_reducing',
'lemmon2000_air_rho_reducing',
'lemmon2000_air_MW', 'lemmon2000_air_P_max', 'lemmon2000_air_T_max',
'lemmon2000_rho', 'lemmon2000_P', 'lemmon2000_T',
'TEOS10_BAW_derivatives', 'TEOS10_CAWW_derivatives',
'TEOS10_CAAW_derivatives',
'iapws04_Henry_air', 'iapws04_dHenry_air_dT',
]
# Get a good, fast variant of lemmon (2000) in here
# For values of tau above this, log(exp(87.31279*tau) + 2/3) reduces to 87.31279*tau in double precision
TAU_MAX_EXP_87 = 0.4207493606569795
lemmon2000_air_R = 8.314510
"""Molar gas constant in Jlemmon2000_air_R/(mol*K) used in the the Lemmon (2000) EOS for dry air"""
lemmon2000_air_R2 = lemmon2000_air_R*lemmon2000_air_R
lemmon2000_air_R_inv = 1.0/lemmon2000_air_R
lemmon2000_air_T_reducing = 132.6312
"""Reducing temperature in K for the Lemmon (2000) EOS for dry air"""
lemmon2000_air_P_reducing = 3.78502E6
"""Reducing pressure in Pa for the Lemmon (2000) EOS for dry air"""
lemmon2000_air_rho_reducing = 10447.7
"""Reducing molar density in mol/m^3 for the Lemmon (2000) EOS for dry air"""
lemmon2000_air_rho_reducing_inv = 1.0/lemmon2000_air_rho_reducing
lemmon2000_air_MW = 28.9586
"""Molecular weight of air in g/mol for the Lemmon (2000) EOS for dry air"""
lemmon2000_air_P_max = 2000E6
"""Maximum pressure in Pa valid for the Lemmon (2000) EOS for dry air"""
lemmon2000_air_T_max = 2000.
"""Maximum temperature in K valid for the Lemmon (2000) EOS for dry air"""
[docs]def lemmon2000_air_A0(tau, delta):
r'''Calculates the ideal gas Helmholtz energy of air according to Lemmon
(2000).
.. math::
\phi^\circ = \ln \delta + \sum_{i=1}^5 N_i\tau^{i-4} + N_6\tau^{1.5}
+ N_7\ln \tau + N_8\ln[1-\exp(-N_{11}\tau)] + N_9\ln[1-\exp(-N_{12}\tau)]
+ N_{10}\ln[2/3 + \exp(N_{13}\tau)]
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
A0 : float
Ideal gas dimensionless Helmholtz energy A0/(RT) [-]
Notes
-----
The coefficients are as follows:
Ns = [0.605719400E-7, -0.210274769E-4, -0.158860716E-3, -13.841928076,
17.275266575, -0.195363420E-3, 2.490888032, 0.791309509, 0.212236768,
-0.197938904, 25.36365, 16.90741, 37.31279]
Examples
--------
>>> lemmon2000_air_A0(132.6312/200.0, 13000/10447.7)
-14.65173785639
'''
tau_inv = 1.0/tau
# exp0_00001 = exp(0.00001*tau)
A0 = (-0.00019536342*tau*sqrt(tau) + 17.275266575*tau + tau_inv*(tau_inv*(6.057194e-8*tau_inv
- 0.0000210274769) - 0.000158860716) + log(delta) + 2.490888032*log(tau)
# These two logs both fail for tau < 1e-18, can be truncated but should not be necessary.
+ 0.791309509*log(1.0 - exp(-25.36365*tau)) + 0.212236768*log(1.0 - exp(-16.90741*tau))
- 13.841928076)
if tau < TAU_MAX_EXP_87:
A0 -= 0.197938904*log(exp(87.31279*tau) + (2.0/3.0))
else:
A0 -= 17.282597957782162*tau # 17.282... = 87.31279*0.197938904
return A0
[docs]def lemmon2000_air_dA0_dtau(tau, delta):
r'''Calculates the first temperature derivative of ideal gas Helmholtz
energy of air according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
dA0_dtau : float
First derivative of `A0/(RT)` Ideal gas dimensionless Helmholtz energy
with respect to `tau` [-]
Notes
-----
Examples
--------
>>> lemmon2000_air_dA0_dtau(132.6312/200.0, 13000/10447.7)
3.749095669249
'''
tau_inv = 1.0/tau
dA0_dtau = (-0.00029304513*sqrt(tau) + tau_inv*(-tau_inv*(tau_inv*(1.8171582e-7*tau_inv
- 0.0000420549538) - 0.000158860716) + 2.490888032) + 17.275266575)
try:
# limit as tau gets high goes to zer0
x0 = exp(87.31279*tau)
dA0_dtau -= 17.282597957782162*x0/(x0 + (2.0/3.0))
except:
dA0_dtau -= 17.282597957782162
try:
# Limit is zero
dA0_dtau += 20.0704974279478492/(exp(25.36365*tau) - 1.0)
except:
pass
try:
dA0_dtau += 3.58837405365087969/(exp(16.90741*tau) - 1.0)
except:
pass
return dA0_dtau
[docs]def lemmon2000_air_d2A0_dtau2(tau, delta):
r'''Calculates the second temperature derivative of ideal gas Helmholtz
energy of air according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (126.192 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d2A0_dtau2 : float
Second derivative of `A0/(RT)` Ideal gas dimensionless Helmholtz energy
with respect to `tau` [-]
Notes
-----
Examples
--------
>>> lemmon2000_air_d2A0_dtau2(132.6312/200.0, 13000/10447.7)
-5.66675499015
'''
tau_inv = 1.0/tau
d2A0_dtau2 = (-0.000146522565*sqrt(tau_inv) + tau_inv*(tau_inv*(tau_inv*(
7.2686328e-7*tau_inv - 0.0001261648614) - 0.000317721432)
- 2.490888032)*tau_inv)
if tau < 3.0:
# 87.31279 Begins to have an impact a little under 0.5, others at 2.5 - set to 3 for safety
x0 = exp(87.31279*tau)
a = x0 + 2.0/3.0
b = x0*(4.0/3.0 + x0) + 4.0/9.0
d2A0_dtau2 += 1508.99184614226283*x0*(a*x0 - b)/(a*b)
x0 = exp(25.36365*tau)
a = (x0 - 1.0)
b = x0*(x0 - 2.0) + 1.0
d2A0_dtau2 -= 509.061072088369485*(a+b)/(a*b)
x0 = exp(16.90741*tau)
a = x0 - 1.0
b = x0*(x0 - 2.0) + 1.0
d2A0_dtau2 -= 60.670111358437417*(a+b)/(a*b)
return d2A0_dtau2
[docs]def lemmon2000_air_d3A0_dtau3(tau, delta):
r'''Calculates the third temperature derivative of ideal gas Helmholtz
energy of air according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (126.192 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d3A0_dtau3 : float
Third derivative of `A0/(RT)` Ideal gas dimensionless Helmholtz energy
with respect to `tau` [-]
Notes
-----
Examples
--------
>>> lemmon2000_air_d3A0_dtau3(132.6312/200.0, 13000/10447.7)
17.10538866838
'''
tau_inv = 1.0/tau
d3A0_dtau3 = (tau_inv*(0.0000732612825*sqrt(tau_inv) + tau_inv*(-tau_inv*(tau_inv*(
3.6343164e-6*tau_inv - 0.0005046594456) - 0.000953164296) + 4.981776064)*tau_inv))
if tau < 2.5:
x0 = exp(16.90741*tau)
x1 = exp(25.36365*tau)
x3 = x0*x0
x2 = exp(87.31279*tau)
x4 = x2*x2
x5 = x2*x2*x2
d3A0_dtau3 += (-131754.288173931709*x2/(x2 + (2.0/3.0))
+ 395262.864521795127*x4/(1.333333333333333333*x2 + x4 + 0.444444444444444864)
- 263508.576347863418*x5/(1.333333333333333333*x2 + 2.0*x4 + x5 + 0.296296296296296668))
d3A0_dtau3 += (25823.2937221483444/(3.0*x1 - 3.0*x1*x1 + x1*x1*x1 - 1.0)
+ 38734.9405832225166/(-2.0*x1 + x1*x1 + 1.0)
+ 12911.6468610741722/(x1 - 1.0))
d3A0_dtau3 += (+ 2051.54889496551641/(3.0*x0 - 3.0*x3 + x0*x0*x0 - 1.0)
+ 3077.32334244827462/(-2.0*x0
+ x3 + 1.0) + 1025.77444748275821/(x0 - 1.0))
return d3A0_dtau3
[docs]def lemmon2000_air_d4A0_dtau4(tau, delta):
r'''Calculates the fourth temperature derivative of ideal gas Helmholtz
energy of air according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d4A0_dtau4 : float
Fourth derivative of `A0/(RT)` Ideal gas dimensionless Helmholtz energy
with respect to `tau` [-]
Notes
-----
Examples
--------
>>> lemmon2000_air_d4A0_dtau4(126.192/200.0, 13000/10447.7)
-94.815532727
'''
tau_inv = 1.0/tau
tau_inv2 = tau_inv*tau_inv
d4A0_dtau4 = (-tau_inv2*(0.00010989192375*sqrt(tau_inv) - tau_inv2*(tau_inv*(
tau_inv*(0.0000218058984*tau_inv - 0.002523297228)
- 0.003812657184) - 14.945328192)))
if tau < 0.4:
x2 = exp(87.31279*tau)
x5 = x2*x2
x8 = x2*x2*x2
x9 = x2*x2*x2*x2
d4A0_dtau4 += 11503834.4949299842*x2*(-1.0/(x2 + 2.0/3.0) #1
+ x2*(7.0/((4.0/3.0)*x2 + x5 + (4.0/9.0)) #7
- x2*(12.0/((4.0/3.0)*x2 + 2.0*x5 + x8 + (8.0/27.0)) #12
+ 6.0*x2/((-32.0/27.0)*x2 - (8.0/3.0)*(x5 +x8) - x9 - 16.0/81.0) #6
)))
if tau < 2.0:
x1 = exp(25.36365*tau)
d4A0_dtau4 -= 327486.491907883901*(6.0/(x1*(x1*(x1*(x1 - 4.0) + 6.0) - 4.0) + 1.0) #6
+ 12.0/(x1*(x1*(x1 - 3.0) + 3.0) - 1.0) #12
+ 7.0/(x1*(x1 - 2.0) + 1.0) # 7
+ 1.0/(x1 - 1.0))
if tau < 2.875:
x0 = exp(16.90741*tau)
d4A0_dtau4 += 17343.1891511144604*(6.0/(-x0*(x0*(x0*(x0 - 4.0) + 6.0) - 4.0) -1.0) #6
- 12.0/(x0*(x0*(x0 - 3.0) + 3.0) - 1.0) # 12
- 7.0/(1.0 + x0*(x0 - 2.0)) # 7
- 1.0/(x0 - 1.0)) # 1
return d4A0_dtau4
[docs]def lemmon2000_air_Ar(tau, delta):
r'''Calculates the residual Helmholtz energy of air according to Lemmon
(2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
Ar : float
Residual dimensionless Helmholtz energy Ar/(RT) [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt and many multiplies/adds.
Examples
--------
>>> lemmon2000_air_Ar(132.6312/200.0, 13000/10447.7)
-0.34683017661
>>> lemmon2000_air_Ar(0.36842, 0.15880050154579475)
0.0047988122806
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
delta6 = delta2*delta4
taurt2 = sqrt(tau)
taurt4 = sqrt(taurt2)
tau2 = tau*tau
tau3 = tau*tau2
tau6 = tau3*tau3
tau12 = tau6*tau6
tau_100 = tau**0.01
tau2_100 = tau_100*tau_100
tau4_100 = tau2_100*tau2_100
tau5_100 = tau_100*tau4_100
tau10_100 = tau5_100*tau5_100
tau15_100 = tau5_100*tau10_100
tau8_100 = tau4_100*tau4_100
tau16_100 = tau8_100*tau8_100
tau20_100 = tau4_100*tau16_100
tau32_100 = tau16_100*tau16_100
tau33_100 = tau_100*tau32_100
tau64_100 = tau32_100*tau32_100
tau80_100 = tau16_100*tau64_100
tau40_100 = tau20_100*tau20_100
tau97_100 = tau33_100*tau64_100
tau45_100 = tau5_100*tau40_100
tau90_100 = tau45_100*tau45_100
tau160_100 = tau80_100*tau80_100
tau320_100 = tau160_100*tau160_100
x0 = exp(-delta)
x1 = exp(-delta2)
x2 = tau3*exp(-delta3)
return (-0.101365037911999994*delta*tau160_100*x0 + 0.713116392079000017*delta*tau33_100
- 0.146629609712999986*delta*tau40_100*x1*tau320_100
- 1.61824192067000006*delta*tau4_100*tau97_100 + 0.0148287891978000005*delta*taurt2*x2
+ 0.118160747228999996*delta + 0.0714140178971000017*delta2 + 0.134211176704000013*delta3*tau15_100
- 0.031605587982100003*delta3*tau6*x1 - 0.17381369096999999*delta3*tau80_100*x0
- 0.00938782884667000057*delta3*x2*tau12 - 0.0865421396646000041*delta3 - 0.042053322884200002*delta4*tau20_100
+ 0.0349008431981999989*delta4*tau2_100*tau33_100 + 0.0112626704218000001*delta4
- 0.0472103183731000034*delta5*tau15_100*x0*tau80_100 + 0.000233594806141999996*delta5*tau3*taurt4*x1*delta6
- 0.0122523554252999996*delta6*tau*taurt4*x0 + 0.000164957183186000006*delta6*tau45_100*tau90_100)
[docs]def lemmon2000_air_dAr_dtau(tau, delta):
r'''Calculates the first derivative of residual Helmholtz energy of air
with respect to tau according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
dAr_dtau : float
First derivative of residual dimensionless Helmholtz energy Ar/(RT)
with respect to tau, [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt, 1 divisions
and the necessary adds/multiplies.
Examples
--------
>>> lemmon2000_air_dAr_dtau(132.6312/200.0, 13000/10447.7)
-1.8112257495223263
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
delta6 = delta2*delta4
taurt2 = sqrt(tau)
taurt4 = sqrt(taurt2)
tau2 = tau*tau
tau4 = tau2*tau2
tau5 = tau*tau4
tau10 = tau5*tau5
tau_100 = tau**0.01
tau2_100 = tau_100*tau_100
tau4_100 = tau2_100*tau2_100
tau8_100 = tau4_100*tau4_100
tau16_100 = tau8_100*tau8_100
tau32_100 = tau16_100*tau16_100
tau33_100 = tau_100*tau32_100
tau20_100 = tau4_100*tau16_100
tau40_100 = tau20_100*tau20_100
tau65_100 = tau32_100*tau33_100
tau130_100 = tau65_100*tau65_100
tau_inv_100 = 1.0/tau_100
tau_inv2_100 = tau_inv_100*tau_inv_100
tau_inv4_100 = tau_inv2_100*tau_inv2_100
tau_inv5_100 = tau_inv_100*tau_inv4_100
tau_inv8_100 = tau_inv4_100*tau_inv4_100
tau_inv16_100 = tau_inv8_100*tau_inv8_100
tau_inv20_100 = tau_inv4_100*tau_inv16_100
tau_inv32_100 = tau_inv16_100*tau_inv16_100
tau_inv64_100 = tau_inv32_100*tau_inv32_100
tau_inv65_100 = tau_inv_100*tau_inv64_100
tau_inv80_100 = tau_inv16_100*tau_inv64_100
x0 = exp(-delta2)
x1 = exp(-delta)
x2 = delta6*taurt4
x3 = exp(-delta3)
return (-0.527866594966799996*delta*tau130_100*tau130_100*x0 + 0.0519007621922999984*delta*tau2*taurt2*x3
- 0.162184060659199991*delta*tau20_100*tau40_100*x1 - 1.63442433987669999*delta*tau_100
+ 0.235328409386070025*delta*tau_inv2_100*tau_inv65_100 - 0.14081743270005001*delta3*tau10*tau4*x3
- 0.189633527892600018*delta3*tau5*x0 - 0.139050952775999992*delta3*tau_inv20_100*x1
+ 0.0201316765056000005*delta3*tau_inv5_100*tau_inv80_100 + 0.0122152951193699993*delta4*tau_inv65_100
- 0.0084106645768400011*delta4*tau_inv80_100 + 0.000759183119961499907*delta5*tau2*x0*x2
- 0.0448498024544450036*delta5*tau_inv5_100*x1 + 0.00022269219730110002*delta6*tau2_100*tau33_100
- 0.0153154442816249986*x1*x2)
[docs]def lemmon2000_air_d2Ar_dtau2(tau, delta):
r'''Calculates the second derivative of residual Helmholtz energy of air
with respect to tau according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d2Ar_dtau2 : float
Second derivative of residual dimensionless Helmholtz energy Ar/(RT)
with respect to tau, [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt, 2 divisions
and the necessary adds/multiplies.
Examples
--------
>>> lemmon2000_air_d2Ar_dtau2(132.6312/200.0, 13000/10447.7)
-0.7632109061747
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
tau_inv = 1.0/tau
taurt2 = sqrt(tau)
tau_invrt2 = 1.0/taurt2
tau_invrt4 = sqrt(tau_invrt2)
tau2 = tau*tau
tau4 = tau2*tau2
tau8 = tau4*tau4
tau12 = tau4*tau8
tau_inv_100 = tau_inv**0.01
tau_inv2_100 = tau_inv_100*tau_inv_100
tau_inv4_100 = tau_inv2_100*tau_inv2_100
tau_inv8_100 = tau_inv4_100*tau_inv4_100
tau_inv16_100 = tau_inv8_100*tau_inv8_100
tau_inv32_100 = tau_inv16_100*tau_inv16_100
tau_inv40_100 = tau_inv8_100*tau_inv32_100
tau_inv33_100 = tau_inv_100*tau_inv32_100
tau_inv65_100 = tau_inv32_100*tau_inv33_100
tau_inv66_100 = tau_inv33_100*tau_inv33_100
tau_inv99_100 = tau_inv33_100*tau_inv66_100
tau_inv105_100 = tau_inv40_100*tau_inv65_100
tau_inv80_100 = tau_inv40_100*tau_inv40_100
tau_inv165_100 = tau_inv66_100*tau_inv99_100
tau_inv20_100 = tau_inv4_100*tau_inv16_100
tau_inv160_100 = tau_inv80_100*tau_inv80_100
x0 = exp(-delta)
x1 = tau_inv40_100*x0
x2 = exp(-delta2)
x3 = tau*exp(-delta3)
return (-delta*(0.948167639463000089*delta2*tau4*x2 + 0.0171119250297600001*delta2*tau_inv80_100*tau_inv105_100
- 0.0278101905551999921*delta2*x1*tau_inv80_100 + 1.9714440578007002*delta2*x3*tau12
+ 0.00793994182759050031*delta3*tau_inv165_100 - 0.00672853166147200157*delta3*tau_inv20_100*tau_inv160_100
- 0.00224249012272225226*delta4*tau_inv105_100*x0 - 0.00170816201991337503*delta5*tau*taurt2**0.5*x2*delta5
- 0.0000779422690553850206*delta5*tau_inv65_100 + 0.00382886107040624965*delta5*tau_invrt2*tau_invrt4*x0
+ 1.37245314691368003*tau**1.6*x2 + 0.15767003428866691*tau_inv2_100*tau_inv165_100 + 0.0163442433987670138*tau_inv99_100
- 0.129751905480749996*taurt2*x3 + 0.0973104363955200058*x1))
[docs]def lemmon2000_air_d3Ar_dtau3(tau, delta):
r'''Calculates the third derivative of residual Helmholtz energy of air
with respect to tau according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d3Ar_dtau3 : float
Third derivative of residual dimensionless Helmholtz energy Ar/(RT)
with respect to tau, [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt, 4 divisions
and the necessary adds/multiplies.
Examples
--------
>>> lemmon2000_air_d3Ar_dtau3(132.6312/200.0, 13000/10447.7)
0.27922007457420
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
tau_inv = 1.0/tau
taurt2 = sqrt(tau)
tau_invrt2 = 1.0/taurt2
tau_invrt4 = sqrt(tau_invrt2)
tau2 = tau*tau
tau3 = tau*tau2
tau6 = tau3*tau3
tau_inv_100 = tau_inv**0.01
tau_inv2_100 = tau_inv_100*tau_inv_100
tau_inv4_100 = tau_inv2_100*tau_inv2_100
tau_inv8_100 = tau_inv4_100*tau_inv4_100
tau_inv16_100 = tau_inv8_100*tau_inv8_100
tau_inv32_100 = tau_inv16_100*tau_inv16_100
tau_inv33_100 = tau_inv_100*tau_inv32_100
tau_inv66_100 = tau_inv33_100*tau_inv33_100
tau_inv132_100 = tau_inv66_100*tau_inv66_100
tau_inv140_100 = tau_inv8_100*tau_inv132_100
tau_inv198_100 = tau_inv66_100*tau_inv132_100
tau_inv41_100 = tau_inv8_100*tau_inv33_100
tau_inv82_100 = tau_inv41_100*tau_inv41_100
tau_inv164_100 = tau_inv82_100*tau_inv82_100
tau_inv40_100 = tau_inv8_100*tau_inv32_100
tau_inv44_100 = tau_inv4_100*tau_inv40_100
tau_inv88_100 = tau_inv44_100*tau_inv44_100
tau_inv264_100 = tau_inv132_100*tau_inv132_100
tau_inv265_100 = tau_inv_100*tau_inv264_100
tau_inv17_100 = tau_inv_100*tau_inv16_100
tau_inv281_100 = tau_inv17_100*tau_inv264_100
x0 = tau_inv132_100
x1 = exp(-delta)
x2 = exp(-delta3)
x3 = exp(-delta2)
return (delta*(-3.79267055785200036*delta2*tau3*x3 - 25.6287727514091017*delta2*tau6*x2*tau6
+ 0.0316570613050560015*delta2*tau_inv4_100*tau_inv281_100 - 0.0333722286662399906*delta2*tau_inv88_100*x0*x1
- 0.0121113569906496025*delta3*tau_inv140_100*tau_inv140_100 + 0.0131009040155243249*delta3*tau_inv265_100
- 0.00235461462885836479*delta4*tau_inv41_100*x1*tau_inv164_100
+ 0.00287164580280468724*delta5*tau_inv*tau_invrt2*tau_invrt4*x1 - 0.000050662474886000258*delta5*tau_inv33_100*x0
+ 0.00213520252489171874*delta5*x3*delta5/tau_invrt4 - 2.19592503506188796*tau_inv2_100*tau_inv4_100/tau_inv66_100*x3
+ 0.0389241745582079926*tau_inv140_100*x1 + 0.263308957262073706*tau_inv2_100*tau_inv265_100
+ 0.0161808009647793419*tau_inv_100*tau_inv198_100 + 0.194627858221124994*taurt2*x2))
[docs]def lemmon2000_air_d4Ar_dtau4(tau, delta):
r'''Calculates the fourth derivative of residual Helmholtz energy of air
with respect to tau according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d4Ar_dtau4 : float
Fourth derivative of residual dimensionless Helmholtz energy Ar/(RT)
with respect to tau, [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt, 4 divisions
and the necessary adds/multiplies.
Examples
--------
>>> lemmon2000_air_d4Ar_dtau4(132.6312/200.0, 13000/10447.7)
-8.197368061417
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
tau_inv = 1.0/tau
tau_invrt2 = sqrt(tau_inv)
tau_invrt4 = sqrt(tau_invrt2)
tau2 = tau*tau
tau4 = tau2*tau2
tau8 = tau4*tau4
tau10 = tau2*tau8
tau_inv_100 = tau_inv**0.01
tau_inv2_100 = tau_inv_100*tau_inv_100
tau_inv4_100 = tau_inv2_100*tau_inv2_100
tau_inv8_100 = tau_inv4_100*tau_inv4_100
tau_inv16_100 = tau_inv8_100*tau_inv8_100
tau_inv32_100 = tau_inv16_100*tau_inv16_100
tau_inv40_100 = tau_inv8_100*tau_inv32_100
tau_inv64_100 = tau_inv32_100*tau_inv32_100
tau_inv80_100 = tau_inv16_100*tau_inv64_100
tau_inv160_100 = tau_inv80_100*tau_inv80_100
tau_inv240_100 = tau_inv80_100*tau_inv160_100
tau_inv128_100 = tau_inv64_100*tau_inv64_100
tau_inv256_100 = tau_inv128_100*tau_inv128_100
tau_inv264_100 = tau_inv8_100*tau_inv256_100
tau_inv265_100 = tau_inv_100*tau_inv264_100
tau_inv34_100 = tau_inv2_100*tau_inv32_100
tau_inv304_100 = tau_inv64_100*tau_inv240_100
tau_inv320_100 = tau_inv64_100*tau_inv256_100
tau_inv9_100 = tau_inv_100*tau_inv8_100
tau_inv73_100 = tau_inv9_100*tau_inv64_100
tau_inv146_100 = tau_inv73_100*tau_inv73_100
tau_inv292_100 = tau_inv146_100*tau_inv146_100
tau_inv68_100 = tau_inv34_100*tau_inv34_100
tau_inv77_100 = tau_inv9_100*tau_inv68_100
tau_inv145_100 = tau_inv68_100*tau_inv77_100
tau_inv290_100 = tau_inv145_100*tau_inv145_100
tau_inv20_100 = tau_inv4_100*tau_inv16_100
tau_inv360_100 = tau_inv40_100*tau_inv320_100
tau_inv384_100 = tau_inv128_100*tau_inv256_100
x0 = exp(-delta)
x1 = exp(-delta2)
x2 = exp(-delta3)
x3 = delta5*tau_invrt2*tau_invrt4
return (-delta*(307.545273016909221*delta2*tau*x2*tau10 + 11.3780116735560011*delta2*tau2*x1
- 0.0734189030657279862*delta2*tau_inv320_100*x0 + 0.0902226247194096026*delta2*tau_inv_100*tau_inv384_100
- 0.0339117995738188877*delta3*tau_inv20_100*tau_inv360_100 + 0.0347173956411394591*delta3*tau_inv73_100*tau_inv292_100
- 0.00482695998915964701*delta4*tau_inv_100*x0*tau_inv304_100 - 0.0000835930835619004249*delta5*tau_inv265_100
+ 0.00502538015490820288*tau_inv*x0*x3*tau_inv + 0.0544938443814911855*tau_inv240_100*x0
+ 0.0321997939199108879*tau_inv34_100*tau_inv265_100 + 1.31755502103713296*tau_inv40_100*x1
+ 0.703034915889736767*tau_inv77_100*tau_inv290_100 - 0.0973139291105624971*tau_invrt2*x2
- 0.000533800631222929685*x1*x3*delta5))
[docs]def lemmon2000_air_dAr_ddelta(tau, delta):
r'''Calculates the first derivative of residual Helmholtz energy of air
with respect to delta according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
dAr_ddelta : float
First derivative of residual dimensionless Helmholtz energy Ar/(RT)
with respect to delta, [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt,
and the necessary adds/multiplies.
Examples
--------
>>> lemmon2000_air_dAr_ddelta(132.6312/200.0, 13000/10447.7)
-0.1367917666005
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
delta6 = delta2*delta4
taurt2 = sqrt(tau)
taurt4 = sqrt(taurt2)
tau2 = tau*tau
tau3 = tau*tau2
tau6 = tau3*tau3
tau12 = tau6*tau6
tau15 = tau3*tau12
tau_100 = tau**0.01
tau2_100 = tau_100*tau_100
tau4_100 = tau2_100*tau2_100
tau5_100 = tau_100*tau4_100
tau10_100 = tau5_100*tau5_100
tau15_100 = tau5_100*tau10_100
tau8_100 = tau4_100*tau4_100
tau16_100 = tau8_100*tau8_100
tau20_100 = tau4_100*tau16_100
tau32_100 = tau16_100*tau16_100
tau33_100 = tau_100*tau32_100
tau64_100 = tau32_100*tau32_100
tau80_100 = tau16_100*tau64_100
tau40_100 = tau20_100*tau20_100
tau95_100 = tau15_100*tau80_100
tau97_100 = tau33_100*tau64_100
tau45_100 = tau5_100*tau40_100
tau90_100 = tau45_100*tau45_100
tau160_100 = tau80_100*tau80_100
tau320_100 = tau160_100*tau160_100
tau360_100 = tau40_100*tau320_100
x0 = exp(-delta)
x1 = 0.101365037911999994*tau160_100*x0
x2 = exp(-delta2)
x3 = tau360_100*x2
x4 = exp(-delta3)
x5 = 0.0281634865400100035*tau15*x4
x6 = tau6*x2
x7 = tau80_100*x0
x8 = tau95_100*x0
x9 = tau3*taurt2*x4
x10 = tau*x0
x11 = delta6*taurt4
x12 = tau3*x2
x13 = delta6
return (delta*x1 + 0.142828035794200003*delta + 0.402633530112000038*delta2*tau15_100
+ 0.293259219425999973*delta2*x3 - delta2*x5 - 0.0948167639463000089*delta2*x6
- 0.52144107290999997*delta2*x7 - 0.259626418993800012*delta2 - 0.168213291536800008*delta3*tau20_100
+ 0.139603372792799996*delta3*tau2_100*tau33_100 + 0.17381369096999999*delta3*x7
- 0.0444863675934000016*delta3*x9 + 0.0450506816872000004*delta3
+ 0.00256954286756199985*delta4*taurt4*x12*x13 + 0.063211175964200006*delta4*x6
- 0.23605159186550001*delta4*x8 + 0.000989743099116000089*delta5*tau45_100*tau90_100
- 0.0735141325518000044*delta5*taurt4*x10 + delta5*x5 + 0.0472103183731000034*delta5*x8
+ 0.713116392079000017*tau33_100 - 1.61824192067000006*tau4_100*tau97_100 - x1
+ 0.0122523554252999996*x10*x11 - 0.000467189612283999993*x11*x12*x13 - 0.146629609712999986*x3
+ 0.0148287891978000005*x9 + 0.118160747228999996)
[docs]def lemmon2000_air_d2Ar_ddelta2(tau, delta):
r'''Calculates the second derivative of residual Helmholtz energy of air
with respect to delta according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d2Ar_ddelta2 : float
Second derivative of residual dimensionless Helmholtz energy Ar/(RT)
with respect to delta, [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt,
and the necessary adds/multiplies.
Examples
--------
>>> lemmon2000_air_d2Ar_ddelta2(132.6312/200.0, 13000/10447.7)
0.27027259528316
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
delta6 = delta2*delta4
delta7 = delta*delta6
taurt2 = sqrt(tau)
taurt4 = sqrt(taurt2)
tau2 = tau*tau
tau3 = tau*tau2
tau6 = tau3*tau3
tau12 = tau6*tau6
tau15 = tau3*tau12
tau_20 = tau**0.05
tau2_20 = tau_20*tau_20
tau3_20 = tau_20*tau2_20
tau4_20 = tau2_20*tau2_20
tau8_20 = tau4_20*tau4_20
tau16_20 = tau8_20*tau8_20
tau18_20 = tau2_20*tau16_20
tau19_20 = tau_20*tau18_20
tau9_20 = tau_20*tau8_20
tau32_20 = tau16_20*tau16_20
tau64_20 = tau32_20*tau32_20
tau72_20 = tau8_20*tau64_20
x0 = exp(-delta)
x1 = tau32_20*x0
x2 = exp(-delta3)
x3 = tau15*x2
x4 = 1.04288214581999994*tau16_20*x0
x5 = exp(-delta2)
x6 = tau6*x5
x7 = tau72_20*x5
x8 = delta3*x0
x9 = tau19_20*x0
x10 = tau3*taurt2*x2
x11 = tau*x0
x12 = taurt4*x11
x13 = delta6*taurt4
x14 = tau3*x5
x15 = delta4*taurt4*x14
x16 = delta7
return (0.805267060224000075*delta*tau3_20 - 0.101365037911999994*delta*x1 - 0.0563269730800200069*delta*x3
- delta*x4 - 0.189633527892600018*delta*x6 + 0.879777658277999919*delta*x7
- 0.519252837987600024*delta + 0.418810118378399987*delta2*tau3_20*tau4_20
- 0.504639874610400052*delta2*tau4_20 - 0.177945470373600007*delta2*x10 + delta2*x4
+ 0.135152045061600001*delta2 + 0.442478231749400042*delta3*x6 - 0.586518438851999946*delta3*x7
+ 0.00494871549558000001*delta4*tau9_20*tau18_20 - 0.367570662759000022*delta4*x12
+ 0.225307892320080028*delta4*x3 + 0.47210318373100002*delta4*x9 + 0.133459102780200012*delta5*x10
+ 0.147028265103600009*delta5*x12 - 0.126422351928400012*delta5*x6 - 0.0472103183731000034*delta5*x9
- 0.0844904596200300173*delta7*x3 - 0.17381369096999999*tau16_20*x8 - 0.94420636746200004*tau19_20*x8
+ 0.202730075823999989*x1 - 0.0122523554252999996*x11*x13 + 0.000934379224567999985*x13*x14*x16
- 0.0107453610825320005*x15*x16 + 0.0256954286756199968*x15*delta5 + 0.142828035794200003)
[docs]def lemmon2000_air_d3Ar_ddelta3(tau, delta):
r'''Calculates the third derivative of residual Helmholtz energy of air
with respect to delta according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d3Ar_ddelta3 : float
Third derivative of residual dimensionless Helmholtz energy Ar/(RT)
with respect to delta, [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt,
and the necessary adds/multiplies.
Examples
--------
>>> lemmon2000_air_d3Ar_ddelta3(132.6312/200.0, 13000/10447.7)
0.1849386546766
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
delta6 = delta2*delta4
delta8 = delta4*delta4
delta12 = delta4*delta8
taurt2 = sqrt(tau)
taurt4 = sqrt(taurt2)
tau2 = tau*tau
tau3 = tau*tau2
tau6 = tau3*tau3
tau12 = tau6*tau6
tau15 = tau3*tau12
tau_20 = tau**0.05
tau2_20 = tau_20*tau_20
tau3_20 = tau_20*tau2_20
tau4_20 = tau2_20*tau2_20
tau8_20 = tau4_20*tau4_20
tau16_20 = tau8_20*tau8_20
tau18_20 = tau2_20*tau16_20
tau19_20 = tau_20*tau18_20
tau9_20 = tau_20*tau8_20
tau32_20 = tau16_20*tau16_20
tau64_20 = tau32_20*tau32_20
tau72_20 = tau8_20*tau64_20
x0 = exp(-delta3)
x1 = tau15*x0
x2 = exp(-delta)
x3 = tau16_20*x2
x4 = tau32_20*x2
x5 = exp(-delta2)
x6 = tau6*x5
x7 = tau72_20*x5
x8 = tau19_20*x2
x9 = 2.83261910238600034*x8
x10 = tau3*taurt2*x0
x11 = delta*x10
x12 = tau3*taurt4*x5
x13 = tau*taurt4*x2
x14 = delta8
x15 = delta2*x12
return (0.837620236756799974*delta*tau3_20*tau4_20 - 1.0092797492208001*delta*tau4_20
+ 0.25347137886009008*delta*x1*x14 + 3.1286464374599996*delta*x3 + 0.101365037911999994*delta*x4
+ 0.270304090123200003*delta + 0.0336376520844480012*delta12*x12 - 1.5643232187299998*delta2*x3
+ 1.70670175103340016*delta2*x6 - 3.51911063311199968*delta2*x7 - delta2*x9
+ 0.01979486198232*delta3*tau9_20*tau18_20 + 1.07021248852038009*delta3*x1
- 1.47028265103600009*delta3*x13 + 0.17381369096999999*delta3*x3 + delta3*x9
+ 1.20113192502180022*delta4*x10 + 1.10271198827700001*delta4*x13 - 1.51706822314080014*delta4*x6
+ 1.17303687770399989*delta4*x7 - 0.708154775596500086*delta4*x8 - 0.220542397655400013*delta5*x13
+ 0.0472103183731000034*delta5*x8 - 1.26735689430045029*delta6*x1 + 0.0122523554252999996*delta6*x13
+ 0.252844703856800024*delta6*x6 + 0.231258858080579971*delta8*x12 + 0.805267060224000075*tau3_20
- 0.0563269730800200069*x1 - 0.355890940747200013*x11 - 0.400377308340600035*x11*delta6
- 0.169589829259091995*x14*x15 - 0.00186875844913599997*x15*delta12 - 1.04288214581999994*x3
- 0.304095113735999956*x4 - 0.189633527892600018*x6 + 0.879777658277999919*x7 - 0.519252837987600024)
[docs]def lemmon2000_air_d4Ar_ddelta4(tau, delta):
r'''Calculates the fourth derivative of residual Helmholtz energy of air
with respect to delta according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d4Ar_ddelta4 : float
Fourth derivative of residual dimensionless Helmholtz energy Ar/(RT)
with respect to delta, [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt,
and the necessary adds/multiplies.
Examples
--------
>>> lemmon2000_air_d4Ar_ddelta4(132.6312/200.0, 13000/10447.7)
0.37902213262258
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
delta6 = delta2*delta4
delta7 = delta*delta6
delta8 = delta4*delta4
delta9 = delta*delta8
delta11 = delta2*delta9
taurt2 = sqrt(tau)
taurt4 = sqrt(taurt2)
tau2 = tau*tau
tau3 = tau*tau2
tau6 = tau3*tau3
tau12 = tau6*tau6
tau15 = tau3*tau12
tau_20 = tau**0.05
tau2_20 = tau_20*tau_20
tau4_20 = tau2_20*tau2_20
tau6_20 = tau2_20*tau4_20
tau8_20 = tau4_20*tau4_20
tau16_20 = tau8_20*tau8_20
tau18_20 = tau2_20*tau16_20
tau19_20 = tau_20*tau18_20
tau9_20 = tau_20*tau8_20
tau32_20 = tau16_20*tau16_20
tau64_20 = tau32_20*tau32_20
tau72_20 = tau8_20*tau64_20
x0 = exp(-delta)
x1 = tau16_20*x0
x2 = tau32_20*x0
x3 = tau19_20*x0
x4 = 5.66523820477200069*x3
x5 = exp(-delta2)
x6 = tau6*x5
x7 = tau72_20*x5
x8 = exp(-delta3)
x9 = tau15*x8
x10 = tau3*taurt2*x8
x11 = tau3*x5
x12 = taurt4*x11
x13 = tau*x0
x14 = taurt4*x13
x15 = delta4*taurt4
x16 = delta9
return (-6.25729287491999919*delta*x1 - 0.101365037911999994*delta*x2 - delta*x4
+ 3.79267055785200036*delta*x6 - 8.79777658277999919*delta*x7 + 0.742831483531560033*delta11*x12
- 0.760414136580270239*delta11*x9 + 0.0593845859469600001*delta2*tau9_20*tau18_20
+ 2.08576429163999988*delta2*x1 - 4.41084795310800004*delta2*x14 + 11.3304764095440014*delta2*x3
+ 3.37961838480120003*delta2*x9 - 0.17381369096999999*delta3*x1 + 5.87220052232880096*delta3*x10
+ 5.88113060414400035*delta3*x14 - delta3*x4 - 9.48167639463*delta3*x6
+ 11.7303687770399989*delta3*x7 + 0.94420636746200004*delta4*x3 + 0.294056530207200018*delta5*x14
- 0.0472103183731000034*delta5*x3 + 4.55120466942240043*delta5*x6 - 2.34607375540799978*delta5*x7
- 10.8147788313638422*delta5*x9 - 6.40603693344960057*delta6*x10 + 0.00373751689827199994*delta6*x12*x16
- 0.0122523554252999996*delta6*x14 + 1.85007086464463977*delta7*x12
- 0.505689407713600048*delta7*x6 + 6.08331309264216191*delta8*x9 + 1.20113192502180022*delta9*x10
- 2.15841600875207984*delta9*x12 - 1.0092797492208001*tau4_20 + 0.837620236756799974*tau_20*tau6_20
+ 4.17152858327999976*x1 - 0.355890940747200013*x10 - 0.0934379224567999933*x11*x15*x16
- 2.20542397655400002*x13*x15 + 0.405460151647999978*x2 + 0.270304090123200003)
[docs]def lemmon2000_air_d2Ar_ddeltadtau(tau, delta):
r'''Calculates the second derivative of residual Helmholtz energy of air
with respect to `delta` and `tau` according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d2Ar_ddeltadtau : float
Second derivative of residual dimensionless Helmholtz energy Ar/(RT)
with respect to `delta` and `tau`, [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt,
and the necessary adds/multiplies.
Examples
--------
>>> lemmon2000_air_d2Ar_ddeltadtau(132.6312/200.0, 13000/10447.7)
-1.359976184125
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
delta6 = delta2*delta4
taurt2 = sqrt(tau)
taurt4 = sqrt(taurt2)
tau2 = tau*tau
tau4 = tau2*tau2
tau5 = tau*tau4
tau10 = tau5*tau5
tau14 = tau4*tau10
tau_100 = tau**0.01
tau2_100 = tau_100*tau_100
tau4_100 = tau2_100*tau2_100
tau8_100 = tau4_100*tau4_100
tau16_100 = tau8_100*tau8_100
tau32_100 = tau16_100*tau16_100
tau33_100 = tau_100*tau32_100
tau20_100 = tau4_100*tau16_100
tau40_100 = tau20_100*tau20_100
tau60_100 = tau20_100*tau40_100
tau65_100 = tau32_100*tau33_100
tau130_100 = tau65_100*tau65_100
tau260_100 = tau130_100*tau130_100
tau_inv_100 = 1.0/tau_100
tau_inv2_100 = tau_inv_100*tau_inv_100
tau_inv4_100 = tau_inv2_100*tau_inv2_100
tau_inv5_100 = tau_inv_100*tau_inv4_100
tau_inv8_100 = tau_inv4_100*tau_inv4_100
tau_inv16_100 = tau_inv8_100*tau_inv8_100
tau_inv20_100 = tau_inv4_100*tau_inv16_100
tau_inv32_100 = tau_inv16_100*tau_inv16_100
tau_inv64_100 = tau_inv32_100*tau_inv32_100
tau_inv65_100 = tau_inv_100*tau_inv64_100
tau_inv80_100 = tau_inv16_100*tau_inv64_100
x0 = exp(-delta2)
x1 = tau260_100*x0
x2 = exp(-delta)
x3 = 0.162184060659199991*tau60_100*x2
x4 = exp(-delta3)
x5 = 0.422452298100150059*tau14*x4
x6 = tau5*x0
x7 = tau_inv20_100*x2
x8 = tau_inv5_100*x2
x9 = taurt4*x2
x10 = tau2*taurt2*x4
x11 = tau2*taurt4*x0
x12 = delta6
return (delta*x3 + 0.0603950295168000015*delta2*tau_inv5_100*tau_inv80_100 + 1.05573318993359999*delta2*x1
- delta2*x5 - 0.568900583677800054*delta2*x6 - 0.417152858327999976*delta2*x7
+ 0.0488611804774799971*delta3*tau_inv65_100 - 0.0336426583073600044*delta3*tau_inv80_100
- 0.155702286576899995*delta3*x10 + 0.139050952775999992*delta3*x7
+ 0.0083510143195764993*delta4*x11*x12 + 0.379267055785200036*delta4*x6
- 0.22424901227222499*delta4*x8 + 0.00133615318380660023*delta5*tau2_100*tau33_100 + delta5*x5
+ 0.0448498024544450036*delta5*x8 - 0.0918926656897500055*delta5*x9
- 0.00151836623992300003*delta6*x11*x12 + 0.0153154442816249986*delta6*x9
- 1.63442433987669999*tau_100 + 0.235328409386070025*tau_inv2_100*tau_inv65_100
- 0.527866594966799996*x1 + 0.0519007621922999984*x10 - x3)
[docs]def lemmon2000_air_d3Ar_ddeltadtau2(tau, delta):
r'''Calculates the third derivative of residual Helmholtz energy of air
with respect to `delta` once and `tau` twice according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d3Ar_ddeltadtau2 : float
Third derivative of residual dimensionless Helmholtz energy Ar/(RT)
with respect to `delta` once and `tau` twice, [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt, 3 divisions,
and the necessary adds/multiplies.
Examples
--------
>>> lemmon2000_air_d3Ar_ddeltadtau2(132.6312/200.0, 13000/10447.7)
-0.19089212184849
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
delta6 = delta2*delta4
taurt2 = sqrt(tau)
taurt4 = sqrt(taurt2)
tau_invrt2 = 1.0/taurt2
tau_invrt4 = 1.0/taurt4
tau2 = tau*tau
tau4 = tau2*tau2
tau8 = tau4*tau4
tau12 = tau4*tau8
tau13 = tau*tau12
tau_inv_100 = tau**-0.01
tau_inv2_100 = tau_inv_100*tau_inv_100
tau_inv4_100 = tau_inv2_100*tau_inv2_100
tau_inv8_100 = tau_inv4_100*tau_inv4_100
tau_inv16_100 = tau_inv8_100*tau_inv8_100
tau_inv32_100 = tau_inv16_100*tau_inv16_100
tau_inv40_100 = tau_inv8_100*tau_inv32_100
tau_inv33_100 = tau_inv_100*tau_inv32_100
tau_inv65_100 = tau_inv32_100*tau_inv33_100
tau_inv66_100 = tau_inv33_100*tau_inv33_100
tau_inv99_100 = tau_inv33_100*tau_inv66_100
tau_inv105_100 = tau_inv40_100*tau_inv65_100
tau_inv80_100 = tau_inv40_100*tau_inv40_100
tau_inv120_100 = tau_inv40_100*tau_inv80_100
tau_inv165_100 = tau_inv66_100*tau_inv99_100
tau_inv20_100 = tau_inv4_100*tau_inv16_100
tau_inv160_100 = tau_inv80_100*tau_inv80_100
x0 = exp(-delta)
x1 = 0.0973104363955200058*tau_inv40_100*x0
x2 = exp(-delta3)
x3 = 5.9143321734021006*tau13*x2
x4 = exp(-delta2)
x5 = tau4*x4
x6 = tau_inv120_100*x0
x7 = tau_inv105_100*x0
x8 = tau*taurt2*x2
x9 = x4/tau_inv160_100
x10 = tau_invrt2*tau_invrt4*x0
x11 = tau*taurt4*x4
return (delta*x1 - 0.0513357750892800002*delta2*tau_inv80_100*tau_inv105_100 - delta2*x3
- 2.84450291838900027*delta2*x5 + 0.083430571665599973*delta2*x6 + 2.74490629382736007*delta2*x9
- 0.0317597673103620012*delta3*tau_inv165_100 + 0.0269141266458880063*delta3*tau_inv20_100*tau_inv160_100
- 0.0278101905551999921*delta3*x6 - 0.389255716442249988*delta3*x8
+ 0.0187897822190471221*delta4*x11*delta6 + 1.89633527892600018*delta4*x5 +
0.0112124506136112596*delta4*x7 + 0.000467653614332310178*delta5*tau_inv65_100
- 0.0229731664224375014*delta5*x10 + delta5*x3 - 0.00224249012272225226*delta5*x7
+ 0.00382886107040624965*delta6*x10 - 0.00341632403982675007*delta6*x11*delta6
- 0.15767003428866691*tau_inv2_100*tau_inv165_100 - 0.0163442433987670138*tau_inv99_100
- x1 + 0.129751905480749996*x8 - 1.37245314691368003*x9)
[docs]def lemmon2000_air_d3Ar_ddelta2dtau(tau, delta):
r'''Calculates the third derivative of residual Helmholtz energy of air
with respect to `delta` twice and `tau` once according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d3Ar_ddelta2dtau : float
Third derivative of residual dimensionless Helmholtz energy Ar/(RT)
with respect to `delta` twice and `once` twice, [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt, 3 divisions,
and the necessary adds/multiplies.
Examples
--------
>>> lemmon2000_air_d3Ar_ddelta2dtau(132.6312/200.0, 13000/10447.7)
0.01441788198940
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
delta6 = delta2*delta4
delta7 = delta*delta6
taurt2 = sqrt(tau)
taurt4 = sqrt(taurt2)
tau2 = tau*tau
tau4 = tau2*tau2
tau5 = tau*tau4
tau10 = tau5*tau5
tau14 = tau4*tau10
tau_20 = tau**0.05
tau2_20 = tau_20*tau_20
tau4_20 = tau2_20*tau2_20
tau6_20 = tau2_20*tau4_20
tau12_20 = tau6_20*tau6_20
tau24_20 = tau12_20*tau12_20
tau48_20 = tau24_20*tau24_20
tau52_20 = tau4_20*tau48_20
tau_inv_20 = 1.0/tau_20
tau_inv2_20 = tau_inv_20*tau_inv_20
tau_inv4_20 = tau_inv2_20*tau_inv2_20
tau_inv8_20 = tau_inv4_20*tau_inv4_20
tau_inv12_20 = tau_inv4_20*tau_inv8_20
tau_inv16_20 = tau_inv8_20*tau_inv8_20
x0 = exp(-delta)
x1 = tau12_20*x0
x2 = exp(-delta3)
x3 = tau14*x2
x4 = exp(-delta2)
x5 = tau5*x4
x6 = tau52_20*x4
x7 = tau_inv4_20*x0
x8 = 0.834305716655999952*x7
x9 = tau_inv_20*x0
x10 = taurt4*x0
x11 = tau2*taurt2*x2
x12 = tau2*taurt4*x4
x13 = delta4*x12
x14 = delta7
return (0.120790059033600003*delta*tau_inv_20*tau_inv16_20 - 0.162184060659199991*delta*x1
- 0.844904596200300118*delta*x3 - 1.13780116735560011*delta*x5 + 3.16719956980079997*delta*x6
- delta*x8 - 0.100927974922080013*delta2*tau_inv16_20
+ 0.146583541432439984*delta2*tau_inv_20*tau_inv12_20 - 0.622809146307599981*delta2*x11
+ delta2*x8 + 2.65486939049640025*delta3*x5 - 2.11146637986719998*delta3*x6
- 0.139050952775999992*delta3*x7 - 0.89699604908889996*delta3*x9
+ 0.00668076591903300071*delta4*tau_20*tau6_20 - 0.459463328448750041*delta4*x10
+ 3.37961838480120047*delta4*x3 + 0.44849802454444998*delta4*x9 + 0.183785331379500011*delta5*x10
+ 0.467106859730700041*delta5*x11 - 0.758534111570400071*delta5*x5 - 0.0448498024544450036*delta5*x9
- 0.0153154442816249986*delta6*x10 + 0.00303673247984600006*delta6*x12*x14
- 1.26735689430045029*delta7*x3 + 0.324368121318399982*x1 - 0.0349224235182290024*x13*x14
+ 0.0835101431957649964*x13*delta5)
[docs]def lemmon2000_air_d4Ar_ddelta2dtau2(tau, delta):
r'''Calculates the fourth derivative of residual Helmholtz energy of air
with respect to `delta` twice and `tau` twice according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d4Ar_ddelta2dtau2 : float
Fourth derivative of residual dimensionless Helmholtz energy Ar/(RT)
with respect to `delta` twice and `tau` twice, [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt, 2 divisions,
and the necessary adds/multiplies.
Examples
--------
>>> lemmon2000_air_d4Ar_ddelta2dtau2(132.6312/200.0, 13000/10447.7)
0.1196873112730
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
delta6 = delta2*delta4
delta7 = delta*delta6
taurt2 = sqrt(tau)
taurt4 = sqrt(taurt2)
tau2 = tau*tau
tau4 = tau2*tau2
tau8 = tau4*tau4
tau12 = tau4*tau8
tau13 = tau*tau12
tau_inv_20 = tau**-0.05
tau_inv2_20 = tau_inv_20*tau_inv_20
tau_inv4_20 = tau_inv2_20*tau_inv2_20
tau_inv8_20 = tau_inv4_20*tau_inv4_20
tau_inv12_20 = tau_inv4_20*tau_inv8_20
tau_inv16_20 = tau_inv8_20*tau_inv8_20
tau_inv17_20 = tau_inv_20*tau_inv16_20
tau_inv21_20 = tau_inv4_20*tau_inv17_20
tau_inv24_20 = tau_inv8_20*tau_inv16_20
tau_inv33_20 = tau_inv16_20*tau_inv17_20
x0 = exp(-delta)
x1 = tau_inv8_20*x0
x2 = exp(-delta3)
x3 = tau13*x2
x4 = exp(-delta2)
x5 = tau4*x4
x6 = tau_inv24_20*x0
x7 = 0.166861143331199946*x6
x8 = tau_inv21_20*x0
x9 = tau*taurt2*x2
x10 = x0/(taurt2*taurt4)
x11 = x4/(tau_inv16_20*tau_inv16_20)
x12 = tau*taurt4*x4
x13 = delta4*x12
x14 = delta7
return (-0.10267155017856*delta*tau_inv4_20*tau_inv33_20 - 0.0973104363955200058*delta*x1
+ 8.23471888148208109*delta*x11 - 11.8286643468042012*delta*x3 - 5.68900583677800054*delta*x5
+ delta*x7 + 0.0807423799376640189*delta2*tau_inv12_20*tau_inv24_20
- 0.0952793019310859968*delta2*tau_inv33_20 - delta2*x7 - 1.55702286576899995*delta2*x9
- 5.48981258765472013*delta3*x11 + 13.2743469524820021*delta3*x5 + 0.0278101905551999921*delta3*x6
+ 0.0448498024544450383*delta3*x8 + 0.00233826807166155094*delta4*tau_inv_20*tau_inv12_20
- 0.11486583211218751*delta4*x10 + 47.3146573872168048*delta4*x3 - 0.0224249012272225191*delta4*x8
+ 0.0459463328448750027*delta5*x10 - 3.79267055785200036*delta5*x5
+ 0.00224249012272225226*delta5*x8 + 1.16776714932675008*delta5*x9
- 0.00382886107040624965*delta6*x10 + 0.00683264807965350014*delta6*x12*x14
- 17.7429965202063045*delta7*x3 + 0.194620872791040012*x1 - 0.0785754529160152537*x13*x14
+ 0.187897822190471242*x13*delta5)
[docs]def lemmon2000_air_d4Ar_ddeltadtau3(tau, delta):
r'''Calculates the fourth derivative of residual Helmholtz energy of air
with respect to `delta` once and `tau` thrice according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d4Ar_ddeltadtau3 : float
Fourth derivative of residual dimensionless Helmholtz energy Ar/(RT)
with respect to `delta` once and `tau` thrice, [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt, 1 division,
and the necessary adds/multiplies.
Examples
--------
>>> lemmon2000_air_d4Ar_ddeltadtau3(132.6312/200.0, 13000/10447.7)
2.077739387492
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
delta6 = delta2*delta4
taurt2 = sqrt(tau)
taurt4 = sqrt(taurt2)
tau2 = tau*tau
tau3 = tau*tau2
tau6 = tau3*tau3
tau12 = tau6*tau6
tau_inv_100 = tau**-0.01
tau_inv2_100 = tau_inv_100*tau_inv_100
tau_inv4_100 = tau_inv2_100*tau_inv2_100
tau_inv8_100 = tau_inv4_100*tau_inv4_100
tau_inv16_100 = tau_inv8_100*tau_inv8_100
tau_inv32_100 = tau_inv16_100*tau_inv16_100
tau_inv33_100 = tau_inv_100*tau_inv32_100
tau_inv66_100 = tau_inv33_100*tau_inv33_100
tau_inv132_100 = tau_inv66_100*tau_inv66_100
tau_inv140_100 = tau_inv8_100*tau_inv132_100
tau_inv198_100 = tau_inv66_100*tau_inv132_100
tau_inv41_100 = tau_inv8_100*tau_inv33_100
tau_inv82_100 = tau_inv41_100*tau_inv41_100
tau_inv164_100 = tau_inv82_100*tau_inv82_100
tau_inv205_100 = tau_inv41_100*tau_inv164_100
tau_inv40_100 = tau_inv8_100*tau_inv32_100
tau_inv44_100 = tau_inv4_100*tau_inv40_100
tau_inv88_100 = tau_inv44_100*tau_inv44_100
tau_inv220_100 = tau_inv88_100*tau_inv132_100
tau_inv264_100 = tau_inv132_100*tau_inv132_100
tau_inv265_100 = tau_inv_100*tau_inv264_100
tau_inv17_100 = tau_inv_100*tau_inv16_100
tau_inv281_100 = tau_inv17_100*tau_inv264_100
x0 = exp(-delta)
x1 = 0.0389241745582079926*tau_inv140_100*x0
x2 = exp(-delta3)
x3 = taurt2*x2
x4 = 76.8863182542273051*tau12*x2
x5 = exp(-delta2)
x6 = tau3*x5
x7 = tau_inv220_100*x0
x8 = tau_inv205_100*x0
x9 = tau*tau_inv40_100*x5
x10 = taurt4*x5
x11 = delta6
x12 = x0/(taurt2*taurt4*tau)
return (-delta*x1 + 0.0949711839151680115*delta2*tau_inv4_100*tau_inv281_100
- delta2*x4 - 11.3780116735560011*delta2*x6 - 0.100116685998719965*delta2*x7
+ 4.39185007012377593*delta2*x9 - 0.0484454279625984099*delta3*tau_inv140_100*tau_inv140_100
+ 0.0524036160620972996*delta3*tau_inv265_100 - 0.583883574663375038*delta3*x3
+ 0.0333722286662399906*delta3*x7 + 0.0234872277738089018*delta4*x10*x11
+ 7.58534111570400071*delta4*x6 - 0.0117730731442918235*delta4*x8
- 0.000303974849316001575*delta5*tau_inv33_100*tau_inv132_100
+ 0.0172298748168281252*delta5*x12 + delta5*x4 + 0.00235461462885836479*delta5*x8
- 0.00427040504978343748*delta6*x10*x11 - 0.00287164580280468724*delta6*x12
+ 0.263308957262073706*tau_inv2_100*tau_inv265_100
+ 0.0161808009647793419*tau_inv_100*tau_inv198_100 + x1 + 0.194627858221124994*x3
- 2.19592503506188796*x9)
[docs]def lemmon2000_air_d4Ar_ddelta3dtau(tau, delta):
r'''Calculates the fourth derivative of residual Helmholtz energy of air
with respect to `delta` thrice and `tau` once according to Lemmon (2000).
Parameters
----------
tau : float
Dimensionless temperature, (132.6312 K)/T [-]
delta : float
Dimensionless density, rho/(10447.7 mol/m^3), [-]
Returns
-------
d4Ar_ddelta3dtau : float
Fourth derivative of residual dimensionless Helmholtz energy Ar/(RT)
with respect to `delta` thrice and `tau` once, [-]
Notes
-----
The cost of this function is 1 power, 3 exp, 2 sqrt, 1 division,
and the necessary adds/multiplies.
Examples
--------
>>> lemmon2000_air_d4Ar_ddelta3dtau(132.6312/200.0, 13000/10447.7)
-0.26039336747
'''
delta2 = delta*delta
delta3 = delta*delta2
delta4 = delta2*delta2
delta5 = delta*delta4
delta6 = delta2*delta4
delta8 = delta4*delta4
delta12 = delta4*delta8
taurt2 = sqrt(tau)
taurt4 = sqrt(taurt2)
tau2 = tau*tau
tau4 = tau2*tau2
tau5 = tau*tau4
tau10 = tau5*tau5
tau14 = tau4*tau10
tau_20 = tau**0.05
tau2_20 = tau_20*tau_20
tau4_20 = tau2_20*tau2_20
tau6_20 = tau2_20*tau4_20
tau12_20 = tau6_20*tau6_20
tau24_20 = tau12_20*tau12_20
tau48_20 = tau24_20*tau24_20
tau52_20 = tau4_20*tau48_20
tau_inv_20 = 1.0/tau_20
tau_inv2_20 = tau_inv_20*tau_inv_20
tau_inv4_20 = tau_inv2_20*tau_inv2_20
tau_inv8_20 = tau_inv4_20*tau_inv4_20
tau_inv12_20 = tau_inv4_20*tau_inv8_20
tau_inv16_20 = tau_inv8_20*tau_inv8_20
x0 = exp(-delta)
x1 = tau12_20*x0
x2 = exp(-delta3)
x3 = tau14*x2
x4 = exp(-delta2)
x5 = tau5*x4
x6 = tau52_20*x4
x7 = tau_inv4_20*x0
x8 = tau_inv_20*x0
x9 = 2.6909881472667001*x8
x10 = taurt4*x0
x11 = tau2*taurt2*x2
x12 = delta*x11
x13 = tau2*taurt4*x4
x14 = delta8
x15 = delta2*x13
return (-0.201855949844160026*delta*tau_inv16_20 + 0.293167082864879969*delta*tau_inv_20*tau_inv12_20
+ 0.162184060659199991*delta*x1 + 3.80207068290135108*delta*x14*x3 + 2.50291714996799985*delta*x7
+ 0.109322369274456002*delta12*x13 + 10.2402105062004019*delta2*x5 - 12.6687982792031999*delta2*x6
- 1.25145857498399993*delta2*x7 - delta2*x9 + 0.0267230636761320028*delta3*tau_20*tau6_20
- 1.83785331379500017*delta3*x10 + 16.053187327805702*delta3*x3 + 0.139050952775999992*delta3*x7
+ delta3*x9 + 1.37838998534625001*delta4*x10 + 4.20396173757630098*delta4*x11
- 9.10240933884480086*delta4*x5 + 4.22293275973439997*delta4*x6 - 0.672747036816675026*delta4*x8
- 0.275677997069250003*delta5*x10 + 0.0448498024544450036*delta5*x8
+ 0.0153154442816249986*delta6*x10 - 19.0103534145067528*delta6*x3 + 1.51706822314080014*delta6*x5
+ 0.751591288761884857*delta8*x13 + 0.120790059033600003*tau_inv_20*tau_inv16_20
- 0.486552181977599973*x1 - 1.24561829261519996*x12 - 1.40132057919210018*x12*delta6
- 0.551166945092048999*x14*x15 - 0.00607346495969200012*x15*delta12 - 0.844904596200300118*x3
- 1.13780116735560011*x5 + 3.16719956980079997*x6 - 0.834305716655999952*x7)
[docs]def lemmon2000_air_rho_dew(T):
r'''Calculates the dew molar density of standard dry air according to Lemmon
(2000).
.. math::
\ln \left(\frac{\rho_{dew}}{\rho_j} \right) = N_1\theta^{0.41}
+ N_2\theta + N_3\theta^{2.8} + N_4\theta^{6.5}
Parameters
----------
T : float
Temperature, [K]
Returns
-------
rho_dew : float
Dew point molar density, [mol/m^3]
Notes
-----
The stated range of this ancillary equation is 59.75 K <= T <= 132.6312 K.
Examples
--------
>>> lemmon2000_air_rho_dew(100.0)
785.7863223794999
'''
if T < 59.75 or T > 132.6312:
raise ValueError("Outside limits")
Tj = 132.6312
Pj = 3.78502E6
rhoj = 10447.7
theta = 1.0 - T/Tj
N1 = -2.0466
N2 = -4.7520
N3 = -13.259
N4 = -47.652
tot = N1*theta**0.41 + N2*theta + N3*theta**2.8 + N4*theta**6.5
return exp(tot)*rhoj
[docs]def lemmon2000_air_rho_bubble(T):
r'''Calculates the bubble molar density of standard dry air according to Lemmon
(2000).
.. math::
\left(\frac{\rho_{bubble}}{rho_j} -1 \right) = N_1\theta^{0.65}
+ N_2\theta^{0.85} + N_3\theta^{0.95} + N_4\theta^{1.1}
+ N_5\ln\frac{T}{T_j}
Parameters
----------
T : float
Temperature, [K]
Returns
-------
rho_bubble : float
bubble point molar density, [mol/m^3]
Notes
-----
The stated range of this ancillary equation is 59.75 K <= T <= 132.6312 K.
Examples
--------
>>> lemmon2000_air_rho_bubble(100.0)
26530.979020427476
'''
if T < 59.75 or T > 132.6312:
raise ValueError("Outside limits")
Tj = 132.6312
Pj = 3.78502E6
rhoj = 10447.7
N1 = 44.3413
N2 = -240.073
N3 = 285.139
N4 = -88.3366
N5 = -0.892181
theta = 1.0 - T/Tj
tot = N1*theta**0.65 + N2*theta**0.85 + N3*theta**0.95 + N4*theta**1.1 + N5*log(T/Tj)
tot += 1
tot *= rhoj
return tot
[docs]def lemmon2000_air_P_dew(T):
r'''Calculates the dew pressure of standard dry air according to Lemmon
(2000).
.. math::
\ln \left(\frac{P_{dew}}{P_j} \right) = \left(\frac{T_j}{T} \right)
\sum_{i}^8 N_i \theta^{i/2}
Parameters
----------
T : float
Temperature, [K]
Returns
-------
P_dew : float
Dew pressure, [Pa]
Notes
-----
The stated range of this ancillary equation is 59.75 K <= T <= 132.6312 K.
Examples
--------
>>> lemmon2000_air_P_dew(100.0)
567424.1338937
'''
if T < 59.75 or T > 132.6312:
raise ValueError("Outside limits")
Tj = 132.6312
Pj = 3.78502E6
thetart = sqrt(1.0 - T/Tj)
thetart3 = thetart*thetart*thetart
tot = thetart*(thetart*(thetart3*(0.7567212 - 3.514322*thetart3) - 5.539635) - 0.1567266)
# Ns = [0.0, -0.1567266, -5.539635, 0, 0, 0.7567212, 0, 0, -3.514322]
# tot = 0.0
# for i in range(1, 9):
# tot += Ns[i]*theta**(i*0.5)
tot *= Tj/T
return exp(tot)*Pj
[docs]def lemmon2000_air_P_bubble(T):
r'''Calculates the bubble pressure of standard dry air according to Lemmon
(2000).
.. math::
\ln \left(\frac{P_{bubble}}{P_j} \right) = \left(\frac{T_j}{T} \right)
\sum_{i}^8 N_i \theta^{i/2}
Parameters
----------
T : float
Temperature, [K]
Returns
-------
P_bubble : float
Bubble pressure, [Pa]
Notes
-----
The stated range of this ancillary equation is 59.75 K <= T <= 132.6312 K.
Examples
--------
>>> lemmon2000_air_P_bubble(100.0)
663128.589440
'''
if T < 59.75 or T > 132.6312:
raise ValueError("Outside limits")
Tj = 132.6312
Pj = 3.78502E6
# theta = 1.0 - T/Tj
# Ns = [0.0, 0.2260724, -7.080499, 5.700283, -12.44017, 17.81926, -10.81364, 0.0, 0.0]
# tot = 0.0
# for i in range(1, 9):
# tot += Ns[i]*theta**(i*0.5)
thetart = sqrt(1.0 - T/Tj)
tot = thetart*(thetart*(thetart*(thetart*(thetart*(17.81926 - 10.81364*thetart)
- 12.44017) + 5.700283) - 7.080499) + 0.2260724)
tot *= Tj/T
return exp(tot)*Pj
[docs]def lemmon2000_P(T, rho):
r'''Calculate the pressure of air according to the (2000)
given a temperature `T` and molar density `rho`.
Parameters
----------
T : float
Temperature, [K]
rho : float
Molar density of air, [mol/m^3]
Returns
-------
P : float
Pressure, [Pa]
Notes
-----
Helmholtz equations of state are explicit with inputs of temperature and
density, so this is a direct calculation with no iteration required.
Examples
--------
>>> lemmon2000_P(330.0, lemmon2000_rho(T=330.0, P=8e5))
8e5
>>> lemmon2000_P(823.0, 40)
273973.0024911
References
----------
.. [1] Lemmon, Eric W., Richard T. Jacobsen, Steven G. Penoncello, and
Daniel G. Friend. "Thermodynamic Properties of Air and Mixtures of
Nitrogen, Argon, and Oxygen From 60 to 2000 K at Pressures to 2000 MPa."
Journal of Physical and Chemical Reference Data 29, no. 3 (May 1, 2000):
331-85. https://doi.org/10.1063/1.1285884.
'''
tau = lemmon2000_air_T_reducing/T
delta = rho*lemmon2000_air_rho_reducing_inv
dAddelta_res_val = lemmon2000_air_dAr_ddelta(tau, delta)
return (1.0 + dAddelta_res_val*delta)*rho*(lemmon2000_air_R*T)
def lemmon2000_rho_err(rho, T, P_spec):
# For solving for a rho (molar) while P is specified
RT = lemmon2000_air_R*T
tau = lemmon2000_air_T_reducing / T
delta = rho * lemmon2000_air_rho_reducing_inv
dAddelta_res_val = lemmon2000_air_dAr_ddelta(tau, delta)
d2Ad2delta_res_val = lemmon2000_air_d2Ar_ddelta2(tau, delta)
P_calc = (1.0 + dAddelta_res_val*delta)*rho*RT
err = P_calc - P_spec
derr = RT*(rho*(rho*d2Ad2delta_res_val + 2.0*lemmon2000_air_rho_reducing*dAddelta_res_val)
+ lemmon2000_air_rho_reducing*lemmon2000_air_rho_reducing)/(lemmon2000_air_rho_reducing*lemmon2000_air_rho_reducing)
return err, derr
[docs]def lemmon2000_rho(T, P):
r'''Calculate the density of air according to the Lemmon (2000) [1]_
given a temperature `T` and pressure `P`.
Parameters
----------
T : float
Temperature, [K]
P : float
Pressure, [Pa]
Returns
-------
rho : float
Molar density of air, [mol/m^3]
Notes
-----
This solution is iterative due to the nature of the equation.
This solver has been tested only for gas solutions.
Examples
--------
>>> lemmon2000_rho(T=300.0, P=1e6)
402.046613509
2 GPa and 2000 K are suggested as upper limits of [1]_ although there are
no hardcoded limits for temperature and pressure.
>>> lemmon2000_rho(T=2000.0, P=2e9)
32892.9327834
References
----------
.. [1] Lemmon, Eric W., Richard T. Jacobsen, Steven G. Penoncello, and
Daniel G. Friend. "Thermodynamic Properties of Air and Mixtures of
Nitrogen, Argon, and Oxygen From 60 to 2000 K at Pressures to 2000 MPa."
Journal of Physical and Chemical Reference Data 29, no. 3 (May 1, 2000):
331-85. https://doi.org/10.1063/1.1285884.
'''
a = 1e-20 # Value where error is always negative
b = 500000.0 # value where error is always positive
rho = P/(lemmon2000_air_R*T) # ideal gas guess
rho_old = 100000.0
iterations = 0
while iterations < 2 or ((abs(rho_old - rho) > abs(1e-13*rho)) and iterations < 100):
err, derr = lemmon2000_rho_err(rho, T, P)
if err < 0.0:
a = rho
else:
b = rho
drho = - err/derr
rho_old = rho
rho = rho + drho
if rho > b or rho < a:
rho = 0.5*(a + b)
iterations += 1
if iterations >= 99:
raise ValueError("Could not converge")
# Note that the derivatives have not been computed at this spot, so we can't save and return them
return rho
def lemmon2000_T_err(T, rho, P_spec):
# Use for solving for T
tau = lemmon2000_air_T_reducing / T
delta = rho * lemmon2000_air_rho_reducing_inv
dAddelta_val = lemmon2000_air_dAr_ddelta(tau, delta) + 1.0/delta
err = (dAddelta_val*delta)*rho*lemmon2000_air_R*T - P_spec
dP_dT = rho*lemmon2000_air_R*delta*(dAddelta_val - tau*lemmon2000_air_d2Ar_ddeltadtau(tau, delta))
return err, dP_dT
[docs]def lemmon2000_T(P, rho):
r'''Calculate the temperature of air according to the Lemmon (2000) [1]_
given a pressure `P` and molar density `rho` .
Parameters
----------
P : float
Pressure, [Pa]
rho : float
Molar density of air, [mol/m^3]
Returns
-------
T : float
Temperature, [K]
Notes
-----
This solution is iterative due to the nature of the equation.
This solver has been tested only for gas solutions.
Examples
--------
>>> lemmon2000_T(P=1e5, rho=20.0)
601.1393854499
References
----------
.. [1] Lemmon, Eric W., Richard T. Jacobsen, Steven G. Penoncello, and
Daniel G. Friend. "Thermodynamic Properties of Air and Mixtures of
Nitrogen, Argon, and Oxygen From 60 to 2000 K at Pressures to 2000 MPa."
Journal of Physical and Chemical Reference Data 29, no. 3 (May 1, 2000):
331-85. https://doi.org/10.1063/1.1285884.
'''
# Estimate the initial temperature by fitting a second virial coefficient
# to a quadratic. Choose 1 atm as the pressure instead of using the theoretical
# virial coefficient as that pressure range is more common
B2, B1, B0 = -4.269819117654342e-11, 1.174790062327561e-07, -4.6404598566915656e-05
V = 1.0/rho
x0 = B1*P
x1 = P*P
x2 = 4.0*B2*x1
try:
T = -(lemmon2000_air_R + x0 - sqrt(-B0*x2 + B1*B1*x1 + lemmon2000_air_R2
+ 2.0*lemmon2000_air_R*x0 + V*x2))/(2.0*B2*P)
except:
# For T ~= 2000 K, 100 MPa; and 10 MPa and 130 K there are small regions
# the fit has a sqrt under zero
# Fail back to the idea-gas solution for those regions
T = P*V*lemmon2000_air_R_inv
if T < lemmon2000_air_T_reducing:
T = lemmon2000_air_T_reducing
MAX_T_STEP = 100.0
T_old = 10000000.0
iterations = 0
while (abs(T_old - T) > abs(1e-13*T)) and iterations < 100:
T_old = T
err, derr = lemmon2000_T_err(T, rho, P)
dT = - err/derr
if dT < -MAX_T_STEP:
dT = -MAX_T_STEP
# elif dT > MAX_T_STEP: # Not being used by solver
# dT = MAX_T_STEP
T = T_old + dT
iterations += 1
if iterations == 100:
raise ValueError("Could not converge a temprature solution")
return T
### Virial
TEOS10_CAAW_coeffs = [0.482737E-9, 1.05678E-7, -6.56394E-5, 0.294442E-1, -3.19317][::-1]
[docs]def TEOS10_CAAW_derivatives(T):
r'''Calculates the third molar virial cross coefficient between
air and air-water according to [1]_.
.. math::
C_{aaw}(T) = \frac{1}{(\bar \rho^*)^2}\sum_{i=1}^5 c_i(\theta)^{1-i}
Where :math:`\theta = T/T^*` and :math:`T^* = 100` K and :math:`\bar \rho = 10^6`
mol/m^3.
Parameters
----------
T : float
Temperature, [K]
Returns
-------
Caaw : float
Air air-water second molar virial cross coefficient [m^6/mol^2]
dCaaw_dT : float
First temperature derivative of air air-water third molar virial cross
coefficient [m^6/(mol^2*K)]
d2Caaw_dT2 : float
Second temperature derivative of air air-water third molar virial cross
coefficient [m^6/(mol^2*K^2)]
d3Caaw_dT3 : float
Third temperature derivative of air air-water third molar virial cross
coefficient [m^6/(mol^2*K^3)]
Notes
-----
The coefficients are as follows:
cis = [0.482737E-9, 1.05678E-7, -6.56394E-5, 0.294442E-1, -3.19317]
Examples
--------
>>> TEOS10_CAAW_derivatives(300.0)
(8.019777407407409e-10, -1.9610345679012353e-12, 1.700556378600824e-14, -1.0129827160493832e-16)
References
----------
.. [1] Herrmann, Sebastian, Hans-Joachim Kretzschmar, and Donald P. Gatley.
"Thermodynamic Properties of Real Moist Air, Dry Air, Steam, Water, and
Ice (RP-1485)." HVAC&R Research 15, no. 5 (September 1, 2009): 961-986.
https://doi.org/10.1080/10789669.2009.10390874.
'''
T_inv = 1.0/T
d0, d1, d2, d3 = horner_and_der3(TEOS10_CAAW_coeffs, T_inv)
T_inv2 = T_inv*T_inv
return (d0,
-d1*T_inv2,
T_inv2*T_inv*(d1 + d1 + d2*T_inv),
-(6.0*(d1 + d2*T_inv) + d3*T_inv2)*T_inv2*T_inv2)
[docs]def TEOS10_CAWW_derivatives(T):
r'''Calculates the third molar virial cross coefficient between
air and water-water according to [1]_.
.. math::
C_{aww}(T) = \frac{1}{(\bar \rho^*)^2}\exp\left[\sum_{i=1}^4
d_i(\theta)^{1-i}\right]
Where :math:`\theta = T/T^*` and :math:`T^* = 100` K and :math:`\bar \rho = 10^6`
mol/m^3.
Parameters
----------
T : float
Temperature, [K]
Returns
-------
Caww : float
Air water-water second molar virial cross coefficient [m^6/mol^2]
dCaww_dT : float
First temperature derivative of air water-water third molar virial cross
coefficient [m^6/(mol^2*K)]
d2Caww_dT2 : float
Second temperature derivative of air water-water third molar virial cross
coefficient [m^6/(mol^2*K^2)]
d3Caww_dT3 : float
Third temperature derivative of air water-water third molar virial cross
coefficient [m^6/(mol^2*K^3)]
Notes
-----
The coefficients are as follows:
dis = [-0.10728876E2, 0.347802E2, -0.383383E2, 0.334060E2]
Examples
--------
>>> TEOS10_CAWW_derivatives(300.0)
(-1.1555278368039349e-07, 2.6136327775413448e-09, -7.513345818045024e-11, 2.601834967770415e-12)
References
----------
.. [1] Herrmann, Sebastian, Hans-Joachim Kretzschmar, and Donald P. Gatley.
"Thermodynamic Properties of Real Moist Air, Dry Air, Steam, Water, and
Ice (RP-1485)." HVAC&R Research 15, no. 5 (September 1, 2009): 961-986.
https://doi.org/10.1080/10789669.2009.10390874.
'''
T_inv = 1.0/T
expt = exp(T_inv*(T_inv*(33406000.0*T_inv - 383383.0) + 3478.02))
d0 = -2.190323971261093e-11*expt
T_inv2 = T_inv*T_inv
d1 = T_inv2*(T_inv*(0.00219509887751844195*T_inv*expt - 0.0000167946595014798305*expt)
+ 7.61799057852550599e-8*expt)
d2 = T_inv*T_inv2*(T_inv*(T_inv*(T_inv*(T_inv*(-219988.419307143195*T_inv*expt
+ 3366.25437183861095*expt) - 28.1467694832850697*expt) + 0.108043927768599987*expt)
- 0.0002145712574147933*expt) - 1.5235981157051012e-7*expt)
d3 = T_inv2*T_inv2*(T_inv*(T_inv*(T_inv*(T_inv*(T_inv*(T_inv*(T_inv*(
22046799406123.2734*T_inv*expt - 506038920955.382813*expt) + 6167066465.87169647*expt)
- 42357924.8786190823*expt) + 178679.559190398955*expt) - 356.155073924973806*expt)
+ 0.0892391625921256371*expt) + 0.00138819550149763883*expt) + 4.57079434711530359e-7*expt)
return (d0, d1, d2, d3)
[docs]def TEOS10_BAW_derivatives(T):
r'''Calculates the second molar virial cross coefficient between
air and water according to [1]_.
.. math::
B_{aw}(T) = \frac{1}{\bar \rho^*}\sum_{i=1}^3 c_i(\theta)^{d_i}
Where :math:`\theta = T/T^*` and :math:`T^* = 100` K and :math:`\bar \rho = 10^6`
mol/m^3.
Parameters
----------
T : float
Temperature, [K]
Returns
-------
Baw : float
Air-water second molar virial cross coefficient [m^3/mol]
dBaw_dT : float
First temperature derivative of air-water second molar virial cross
coefficient [m^3/(mol*K)]
d2Baw_dT2 : float
Second temperature derivative of air-water second molar virial cross
coefficient [m^3/(mol*K^2)]
d3Baw_dT3 : float
Third temperature derivative of air-water second molar virial cross
coefficient [m^3/(mol*K^3)]
Notes
-----
The coefficients are as follows:
cis = [0.665687E2, -0.238834E3, -0.176755E3]
dis = [-0.237, -1.048, -3.183]
Examples
--------
>>> TEOS10_BAW_derivatives(300.0)
(-2.956727474282386e-05, 2.8009736043809844e-07, -2.425992413058737e-09, 3.0736974302787557e-11)
References
----------
.. [1] Herrmann, Sebastian, Hans-Joachim Kretzschmar, and Donald P. Gatley.
"Thermodynamic Properties of Real Moist Air, Dry Air, Steam, Water, and
Ice (RP-1485)." HVAC&R Research 15, no. 5 (September 1, 2009): 961-986.
https://doi.org/10.1080/10789669.2009.10390874.
'''
T_inv = 1.0/T
T_inv3_1000 = T_inv**0.003
T_inv12_1000 = T_inv3_1000*T_inv3_1000
T_inv12_1000 *= T_inv12_1000
T_inv24_1000 = T_inv12_1000*T_inv12_1000
T_inv27_1000 = T_inv3_1000*T_inv24_1000
T_inv54_1000 = T_inv27_1000*T_inv27_1000
T_inv156_1000 = T_inv24_1000*T_inv54_1000
T_inv156_1000 *= T_inv156_1000
T_inv183_1000 = T_inv27_1000*T_inv156_1000
T_inv48_1000 = T_inv24_1000*T_inv24_1000
T_inv237_1000 = T_inv54_1000*T_inv183_1000
T_inv2 = T_inv*T_inv
T_inv3 = T_inv2*T_inv
d0 = -410.555342440099992*T_inv183_1000*T_inv3 - 0.0297917594240699017*T_inv48_1000*T_inv + 0.000198275966635743002*T_inv237_1000
d1 = 1306.79765498684*T_inv183_1000*T_inv3*T_inv + 0.0312217638764253*T_inv48_1000*T_inv2 - 4.69914040926711e-5*T_inv237_1000*T_inv
d2 = -5466.33459080994*T_inv183_1000*T_inv3*T_inv2 - 0.0639421724189189*T_inv48_1000*T_inv3 + 5.81283668626341e-5*T_inv237_1000*T_inv2
d3 = 28332.0121841679*T_inv183_1000*T_inv3*T_inv3+ 0.194895741532865*T_inv48_1000*T_inv2*T_inv2 - 0.000130033156671713*T_inv237_1000*T_inv3
return d0, d1, d2, d3
### Henry
[docs]def iapws04_Henry_air(T):
r'''Calculate the Henry's law constant of air in water according to the
IAPWS-04 standard.
Parameters
----------
T : float
Temperature, [K]
Returns
-------
H : float
Henry's law constant, [1/Pa]
Notes
-----
The mole fractions of air in this model are 0.7812 N2, 0.2095 O2 and
0.0093 Ar.
Examples
--------
>>> iapws04_Henry_air(320.0)
1.0991553689889531e-10
References
----------
.. [1] Fernández-Prini, Roberto, Jorge L. Alvarez, and Allan H. Harvey.
"Henry's Constants and Vapor-Liquid Distribution Constants for Gaseous
Solutes in H2O and D2O at High Temperatures." Journal of Physical and
Chemical Reference Data 32, no. 2 (June 2003): 903-16.
https://doi.org/10.1063/1.1564818.
'''
# result has units of 1/Pa
Tr = T*iapws95_Tc_inv
Tr_inv = 1.0/Tr
tau = 1.0 - Tr
Psat = iapws92_Psat(T)
tau_355_1000 = tau**0.355
exp_041_term = Tr**-0.41*exp(tau)
kH_N2 = exp(Tr_inv*(9.67578 - 4.72162*tau_355_1000) - 11.70585*exp_041_term)
kH_O2 = exp(Tr_inv*(9.44833 - 4.43822*tau_355_1000) - 11.42005*exp_041_term)
kH_Ar = exp(Tr_inv*(8.40954 - 4.29587*tau_355_1000) - 10.52779*exp_041_term)
# NOT the mole fractions of Lemmon (2000)!
return (0.7812*kH_N2 + 0.2095*kH_O2 + 0.0093*kH_Ar)/(1.01325*Psat)
[docs]def iapws04_dHenry_air_dT(T):
r'''Calculate the temperature derivative of Henry's law constant of air in
water according to the IAPWS-04 standard. As the actual Henry's law
constant must be calculated as well, it is also returned.
Parameters
----------
T : float
Temperature, [K]
Returns
-------
dH_dT : float
First temperature derivative of Henry's law constant, [1/(Pa*K)]
H : float
Henry's law constant, [1/Pa]
Notes
-----
The mole fractions of air in this model are 0.7812 N2, 0.2095 O2 and
0.0093 Ar.
Examples
--------
>>> iapws04_dHenry_air_dT(320.0)
(-8.680064421141611e-13, 1.0991553689889561e-10)
References
----------
.. [1] Fernández-Prini, Roberto, Jorge L. Alvarez, and Allan H. Harvey.
"Henry's Constants and Vapor-Liquid Distribution Constants for Gaseous
Solutes in H2O and D2O at High Temperatures." Journal of Physical and
Chemical Reference Data 32, no. 2 (June 2003): 903-16.
https://doi.org/10.1063/1.1564818.
'''
dPsat_dT, Psat = iapws92_dPsat_dT(T)
x1 = 1.0/Psat
Tr = T*iapws95_Tc_inv
tau = 1.0 - Tr
x5 = Tr**(-0.41)*exp(tau)
x6 = 11.70585*x5
x7 = tau**0.355
x8 = 4.72162*x7
T_inv = 1.0/T
x10 = iapws95_Tc*T_inv
x11 = 0.7812*exp(x10*(9.67578 - x8) - x6)
x12 = 11.42005*x5
x13 = 4.43822*x7
x14 = 0.2095*exp(x10*(9.44833 - x13) - x12)
x15 = 10.52779*x5
x16 = 4.29587*x7
x17 = 0.0093*exp(x10*(8.40954 - x16) - x15)
x18 = x1*(x11 + x14 + x17)
x19 = x7/tau*T_inv
x20 = iapws95_Tc*T_inv*T_inv
x21 = x5*T_inv
H = 0.9869232667160128*x18
dH_dT = (0.9869232667160128*x1*(x11*(1.6761751*x19 + iapws95_Tc_inv*x6 + x20*(x8 - 9.67578)
+ 4.7993985*x21) + x14*(x12*iapws95_Tc_inv + 1.5755681*x19 + x20*(x13 - 9.44833) + 4.6822205*x21)
+ x17*(x15*iapws95_Tc_inv + 1.52503385*x19 + x20*(x16 - 8.40954) + 4.3163939*x21) - x18*dPsat_dT))
return dH_dT, H