Files
CoolProp/wrappers/Python/CoolProp5/tests/test_consistency.py

93 lines
4.5 KiB
Python

from __future__ import division, print_function
import CoolProp
from CoolProp import unit_systems_constants
from CoolProp.CoolProp import Props, get_REFPROPname, IsFluidType, set_standard_unit_system
import CoolProp.CoolProp as CP
import numpy as np
modes = []
modes.append('pure')
#modes.append('pseudo-pure')
# Check if REFPROP is supported, the Props call should work without throwing exception if it is supported
## try:
## Props('D','T',300,'Q',1,'REFPROP-Propane')
## modes.append('REFPROP')
## except ValueError:
## pass
twophase_inputs = [('T','D'),('T','Q'),('P','Q'),('P','H'),('P','S'),('P','D'),('T','S'),('H','S')] #
singlephase_inputs = [('T','D'),('T','P'),('P','H'),('P','S'),('P','D'),('H','S'),('T','S')]
singlephase_outputs = ['T','P','H','S','A','O','C','G','V','L','C0','U']
## def test_subcrit_singlephase_consistency():
## for Fluid in sorted(CoolProp.__fluids__):
## T = (Props(Fluid,'Tmin')+Props(Fluid,'Tcrit'))/2.0
## for mode in modes:
## rhoL = Props('D','T',T,'Q',0,Fluid)
## rhoV = Props('D','T',T,'Q',1,Fluid)
## for rho in [rhoL+0.1, rhoV*0.9]:
## for inputs in singlephase_inputs:
## for unit_system in ['SI','kSI']:
## yield check_consistency,Fluid,mode,unit_system,T,rho,inputs
def test_subcrit_twophase_consistency():
for Fluid in reversed(sorted(CoolProp.__fluids__)):
Tmin = Props(Fluid,'Tmin')
Tcrit = Props(Fluid,'Tcrit')
for T in [Tmin + 1, (Tmin+Tcrit)/2.0, 0.95*Tcrit]:
for mode in modes:
rhoL = Props('D','T',T,'Q',0,Fluid)
rhoV = Props('D','T',T,'Q',1,Fluid)
for Q in [0.0, 0.5, 1.0]:
rho = 1/((1-Q)/rhoL+Q/rhoV)
for inputs in twophase_inputs:
for unit_system in ['kSI','SI']:
yield check_consistency,Fluid,mode,unit_system, T,rho,inputs
def check_consistency(Fluid,mode,unit_system,T,rho,inputs):
if unit_system == 'SI':
set_standard_unit_system(unit_systems_constants.UNIT_SYSTEM_SI)
elif unit_system == 'kSI':
set_standard_unit_system(unit_systems_constants.UNIT_SYSTEM_KSI)
else:
raise ValueError('invalid unit_system:'+str(unit_system))
if get_REFPROPname(Fluid) == 'N/A':
return
if mode == 'REFPROP':
Fluid = 'REFPROP-' + get_REFPROPname(Fluid)
if mode == 'pure' and not IsFluidType(Fluid,'PureFluid'):
return
# Evaluate the inputs; if inputs is ('T','P'), calculate the temperature and the pressure
Input1 = Props(inputs[0],'T',T,'D',rho,Fluid)
Input2 = Props(inputs[1],'T',T,'D',rho,Fluid)
# Evaluate using the inputs given --> back to T,rho
TEOS = Props('T',inputs[0],Input1,inputs[1],Input2,Fluid)
DEOS = Props('D',inputs[0],Input1,inputs[1],Input2,Fluid)
print('T',inputs[0],Input1,inputs[1],Input2,Fluid)
# Check they are consistent
if abs(TEOS -T) > 1e-1 or abs(DEOS/rho-1) > 0.05:
raise AssertionError("{T:g} K {D:g} kg/m^3 inputs: \"D\",'{ins1:s}',{in1:.12g},'{ins2:s}',{in2:.12g},\"{fluid:s}\" || T: {TEOS:g} D: {DEOS:g}".format(T = T,
D = rho,
TEOS = TEOS,
DEOS = DEOS,
inputs = str(inputs),
in1 = Input1,
in2 = Input2,
ins1 = inputs[0],
ins2 = inputs[1],
fluid = Fluid)
)
if __name__=='__main__':
import nose
nose.runmodule()