mirror of
https://github.com/CoolProp/CoolProp.git
synced 2026-01-13 07:58:04 -05:00
139 lines
5.9 KiB
Python
139 lines
5.9 KiB
Python
|
|
from __future__ import print_function, division
|
|
|
|
import CoolProp
|
|
#from CoolProp.CoolProp import PropsSI
|
|
|
|
import timeit
|
|
|
|
|
|
def get_speed_data():
|
|
|
|
H_TP = 350e3
|
|
P_TP = 400e3
|
|
|
|
H_SP = 250e3
|
|
P_SP = 1000e3
|
|
|
|
P_PT = 101325
|
|
T_PT = 300
|
|
|
|
fluid = 'R245fa'
|
|
number = 50000
|
|
repeat = 3
|
|
version = CoolProp.__version__
|
|
|
|
if int(CoolProp.__version__[0]) > 4:
|
|
loaded = 5
|
|
print("Loaded CoolProp version 5")
|
|
from CoolProp.CoolProp import generate_update_pair, get_parameter_index, set_debug_level
|
|
TTSE = CoolProp.AbstractState('TTSE&HEOS', fluid)
|
|
BICUBIC = CoolProp.AbstractState('BICUBIC&HEOS', fluid)
|
|
HEOS = CoolProp.AbstractState('HEOS', fluid)
|
|
|
|
def two_phase_TTSE():
|
|
TTSE.update(CoolProp.HmassP_INPUTS, H_TP, P_TP)
|
|
TTSE.rhomolar()
|
|
|
|
def single_phase_TTSE():
|
|
TTSE.update(CoolProp.HmassP_INPUTS, H_SP, P_SP)
|
|
TTSE.rhomolar()
|
|
|
|
def single_phase_pT_TTSE():
|
|
TTSE.update(CoolProp.PT_INPUTS, P_PT, T_PT)
|
|
TTSE.rhomolar()
|
|
|
|
def two_phase_BICUBIC():
|
|
BICUBIC.update(CoolProp.HmassP_INPUTS, H_TP, P_TP)
|
|
BICUBIC.rhomolar()
|
|
|
|
def single_phase_BICUBIC():
|
|
BICUBIC.update(CoolProp.HmassP_INPUTS, H_SP, P_SP)
|
|
BICUBIC.rhomolar()
|
|
|
|
def single_phase_pT_BICUBIC():
|
|
BICUBIC.update(CoolProp.PT_INPUTS, P_PT, T_PT)
|
|
BICUBIC.rhomolar()
|
|
|
|
def two_phase_HEOS():
|
|
HEOS.update(CoolProp.HmassP_INPUTS, H_TP, P_TP)
|
|
HEOS.rhomolar()
|
|
|
|
def single_phase_HEOS():
|
|
HEOS.update(CoolProp.HmassP_INPUTS, H_SP, P_SP)
|
|
HEOS.rhomolar()
|
|
|
|
def single_phase_pT_HEOS():
|
|
HEOS.update(CoolProp.PT_INPUTS, P_PT, T_PT)
|
|
HEOS.rhomolar()
|
|
|
|
else:
|
|
loaded = 4
|
|
print("Loaded CoolProp version 4")
|
|
#from CoolProp.CoolProp import set_debug_level,set_standard_unit_system,enable_TTSE_LUT,disable_TTSE_LUT
|
|
CoolProp.CoolProp.set_standard_unit_system(CoolProp.UNIT_SYSTEM_SI)
|
|
state = CoolProp.State.State(fluid, {"H": H_TP * 2, "P": P_TP})
|
|
|
|
def two_phase_HP():
|
|
state.update({"H": H_TP, "P": P_TP})
|
|
state.get_rho()
|
|
|
|
def single_phase_HP():
|
|
state.update({"H": H_SP, "P": P_SP})
|
|
state.get_rho()
|
|
|
|
def single_phase_PT():
|
|
state.update({"P": P_PT, "T": T_PT})
|
|
state.get_rho()
|
|
|
|
if loaded == 4:
|
|
CoolProp.CoolProp.disable_TTSE_LUT(fluid)
|
|
two_phase_hp_heos = min(timeit.Timer(two_phase_HP).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
single_phase_hp_heos = min(timeit.Timer(single_phase_HP).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
single_phase_pt_heos = min(timeit.Timer(single_phase_PT).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
CoolProp.CoolProp.enable_TTSE_LUT(fluid)
|
|
two_phase_hp_ttse = min(timeit.Timer(two_phase_HP).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
single_phase_hp_ttse = min(timeit.Timer(single_phase_HP).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
single_phase_pt_ttse = min(timeit.Timer(single_phase_PT).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
CoolProp.CoolProp.disable_TTSE_LUT(fluid)
|
|
elif loaded == 5:
|
|
two_phase_hp_heos = min(timeit.Timer(two_phase_HEOS).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
single_phase_hp_heos = min(timeit.Timer(single_phase_HEOS).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
single_phase_pt_heos = min(timeit.Timer(single_phase_pT_HEOS).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
two_phase_hp_ttse = min(timeit.Timer(two_phase_TTSE).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
single_phase_hp_ttse = min(timeit.Timer(single_phase_TTSE).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
single_phase_pt_ttse = min(timeit.Timer(single_phase_pT_TTSE).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
two_phase_hp_bicubic = min(timeit.Timer(two_phase_BICUBIC).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
single_phase_hp_bicubic = min(timeit.Timer(single_phase_BICUBIC).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
single_phase_pt_bicubic = min(timeit.Timer(single_phase_pT_BICUBIC).repeat(repeat=repeat, number=number)) / number * 1e6
|
|
else:
|
|
raise ValueError("Unknown CoolProp version.")
|
|
|
|
return locals()
|
|
|
|
|
|
table = """.. csv-table:: Execution speed in :math:`\mu` s/call
|
|
:header: Backend, 2-Phase p-h inputs, 1-phase p-h inputs, 1-phase p-T inputs
|
|
:widths: 30, 30, 30, 40
|
|
|
|
``HEOS``, {two_phase_hp_heos:6.2f}, {single_phase_hp_heos:6.2f}, {single_phase_pt_heos:6.2f}
|
|
``TTSE&HEOS``, {two_phase_hp_ttse:6.2f}, {single_phase_hp_ttse:6.2f}, {single_phase_pt_ttse:6.2f}
|
|
``BICUBIC&HEOS``, {two_phase_hp_bicubic:6.2f},{single_phase_hp_bicubic:6.2f},{single_phase_pt_bicubic:6.2f}
|
|
"""
|
|
|
|
|
|
def generate_rst():
|
|
d = get_speed_data()
|
|
s = "{fluid:s} : {number:6d} calls, best of {repeat:2d} repetitions\n\n".format(**d)
|
|
s += table.format(**d)
|
|
return s
|
|
|
|
|
|
if __name__ == '__main__':
|
|
print(generate_rst())
|
|
d = get_speed_data()
|
|
print("{0:15s}: {1:6d} calls, {2:2d} repetitions, CoolProp version {3:1d}".format(d['fluid'], d['number'], d['repeat'], d['loaded']))
|
|
print("{0:15s}: 2P HEOS: {1:6.2f} us, 1P HEOS: {2:6.2f} us, PT HEOS: {3:6.2f} us".format(d['fluid'], d['two_phase_hp_heos'], d['single_phase_hp_heos'], d['single_phase_pt_heos']))
|
|
print("{0:15s}: 2P TTSE: {1:6.2f} us, 1P TTSE: {2:6.2f} us, PT TTSE: {3:6.2f} us".format(d['fluid'], d['two_phase_hp_ttse'], d['single_phase_hp_ttse'], d['single_phase_pt_ttse']))
|
|
print("{0:15s}: 2P BICU: {1:6.2f} us, 1P BICU: {2:6.2f} us, PT BICU: {3:6.2f} us".format(d['fluid'], d['two_phase_hp_bicubic'], d['single_phase_hp_bicubic'], d['single_phase_pt_bicubic']))
|