mirror of
https://github.com/CoolProp/CoolProp.git
synced 2026-01-12 15:38:29 -05:00
407 lines
14 KiB
Python
407 lines
14 KiB
Python
from __future__ import print_function
|
|
import os, json, glob, textwrap
|
|
|
|
json_options = {'indent': 2, 'sort_keys': True}
|
|
|
|
# Data from Mulero, JPCRD, 2012
|
|
# CAS codes added from CoolProp 4.2, and wikipedia where necessary
|
|
Mulero2012_data = """67-64-1 Acetone 0.0633 1.160
|
|
7664-41-7 Ammonia 0.1028 1.211 -0.09453 5.585
|
|
7440-37-1 Argon 0.037 1.25
|
|
71-43-2 Benzene 0.07298 1.232 -0.0007802 0.8635 -0.0001756 0.3065
|
|
106-97-8 n-Butane 0.05138 1.209
|
|
106-98-9 1-Butene 0.05644 1.248
|
|
112-40-3 n-Dodecane 0.0154 4.180 0.0480 1.170
|
|
355-25-9 Decafluorobutane 0.04429 1.242
|
|
124-38-9 CarbonDioxide 0.07863 1.254
|
|
630-08-0 CarbonMonoxide 0.02843 1.148
|
|
463-58-1 CarbonylSulfide 0.07246 1.407
|
|
110-82-7 Cyclohexane 0.06485 1.263
|
|
124-18-5 n-Decane 0.05473 1.290
|
|
7782-39-0 Deuterium 0.009376 1.258
|
|
7789-20-0 D2O -0.1423 2.645 0.2094 1.214
|
|
115-10-6 DimethylEther 0.063157 1.2595
|
|
74-84-0 Ethane 0.07602 1.320 -0.02912 1.676
|
|
64-17-5 Ethanol 0.05 0.952
|
|
74-85-1 Ethylene 0.0477 1.170
|
|
7782-41-4 Fluorine 0.03978 1.218
|
|
7440-59-7 Helium 0.0004656 1.040 0.001889 2.468 -0.002006 2.661
|
|
142-82-5 n-Heptane 0.07765 1.319 -0.02599 1.600
|
|
110-54-3 n-Hexane 0.210952 1.0962 -0.158485 1.05893
|
|
1333-74-0 Hydrogen -1.4165 0.63882 0.746383 0.659804 0.675625 0.619149
|
|
7783-06-4 HydrogenSulfide 0.078557 1.2074
|
|
75-28-5 Isobutane -0.01639 2.102 0.06121 1.304
|
|
115-11-7 Isobutene 0.0545 1.230
|
|
107-83-5 Isohexane 0.05024 1.194
|
|
78-78-4 Isopentane 0.051 1.209
|
|
7439-90-9 Krypton 0.0447 1.245
|
|
74-82-8 Methane 0.03825 1.191 -0.006024 5.422 -0.0007065 0.6161
|
|
67-56-1 Methanol 0.22421 1.3355 -0.21408 1.677 0.083233 4.4402
|
|
7440-01-9 Neon 0.012254 1.4136 0.02728 1.4517 -0.025715 1.6567
|
|
7727-37-9 Nitrogen 0.02898 1.246
|
|
10024-97-2 NitrousOxide 0.07087 1.204
|
|
111-84-2 n-Nonane 0.05388 1.262
|
|
111-65-9 n-Octane 0.34338 1.6607 -0.50634 1.9632 0.2238 2.3547
|
|
7782-44-7 Oxygen 0.03843 1.225
|
|
1333-74-0p Parahydrogen 0.005314 1.060
|
|
109-66-0 n-Pentane 0.08015 1.408 0.004384 1.031 -0.03437 1.818
|
|
678-26-2 Perfluoropentane 0.04394 1.254
|
|
74-98-6 n-Propane 0.05334 1.235 -0.01748 4.404
|
|
115-07-1 Propylene 0.05268 1.186
|
|
74-99-7 Propyne 0.05801 1.205
|
|
75-69-4 R11 0.06212 1.247
|
|
75-71-8 R12 -0.000124 0.4318 0.05662 1.263
|
|
75-72-9 R13 0.05045 1.269
|
|
75-73-0 R14 0.0423 1.24
|
|
75-43-4 R21 0.06924 1.259
|
|
75-45-6 R22 3.0587 1.41809 -2.99856 1.42291
|
|
75-46-7 R23 -0.32359 1.6055 0.37702 1.5232
|
|
75-10-5 R32 0.07147 1.246
|
|
593-53-3 R41 0.05049 1.242
|
|
76-13-1 R113 0.0556 1.24
|
|
76-14-2 R114 0.05239 1.258
|
|
76-15-3 R115 0.04771 1.246
|
|
76-16-4 R116 0.047593 1.2666 -0.0073402 1.9892
|
|
306-83-2 R123 0.056151 1.2367
|
|
2837-89-0 R124 0.05175 1.197
|
|
354-33-6 R125 0.05252 1.237
|
|
811-97-2 R134a 0.05801 1.241
|
|
1717-00-6 R141b 7.3958e-5 0.066331 0.059941 1.2214
|
|
75-68-3 R142b 0.05685 1.237
|
|
420-46-2 R143a 0.05416 1.255
|
|
75-37-6 R152a 0.05808 1.2115
|
|
353-36-6 R161 0.05385 1.111
|
|
76-19-7 R218 0.04322 1.224
|
|
431-89-0 R227ea 0.06127 1.192 -0.009516 0.9795 -0.00192 1.421
|
|
431-63-0 R236ea 0.306974 1.12614 -0.247277 1.09899
|
|
690-39-1 R236fa 0.05389 1.249
|
|
679-86-7 R245ca 0.069297 1.2795 -0.022419 3.1368
|
|
460-73-1 R245fa 0.073586 1.0983 0.0103 0.60033 -0.02663 0.72765
|
|
406-58-6 R365mfc 0.0534 1.210
|
|
754-12-1 R1234yf 0.06274 1.394
|
|
115-25-3 RC318 0.0507 1.250
|
|
7446-09-5 SulfurDioxide 0.0803 0.928 0.0139 1.570 -0.0114 0.364
|
|
2551-62-4 SulfurHexafluoride 0.0538 1.271 -4.064e-5 0.2116
|
|
108-88-3 Toluene 0.06897 1.291
|
|
2314-97-8 Trifluoroiodomethane 0.05767 1.298
|
|
7732-18-5 Water -0.1306 2.471 0.2151 1.233
|
|
7440-63-3 Xenon -0.11538 1.0512 0.16598 1.098"""
|
|
|
|
|
|
def inject_surface_tension_2012(root_dir):
|
|
print("*** Injecting surface tension curves from Mulero")
|
|
Tc_dict = {'Argon': 150.687,
|
|
'Benzene': 562.02,
|
|
'1-Butene': 419.29, # Butene from Mulero
|
|
'CarbonMonoxide': 132.86,
|
|
'Cyclohexane': 553.64,
|
|
'D2O': 643.847,
|
|
'n-Decane': 617.7,
|
|
'Ethane': 305.322,
|
|
'Fluorine': 144.414,
|
|
'Helium': 5.1953,
|
|
'Isobutane': 407.81,
|
|
'Isobutene': 418.09,
|
|
'Isopentane': 460.35,
|
|
'Methanol': 513.38,
|
|
'Nitrogen': 126.192,
|
|
'n-Nonane': 594.55,
|
|
'Oxygen': 154.581,
|
|
'Parahydrogen': 32.938,
|
|
'Perfluorobutane': 386.326,
|
|
'n-Propane': 369.89,
|
|
'Propyne': 402.38,
|
|
'R11': 471.11,
|
|
'R113': 487.21,
|
|
'R114': 418.83,
|
|
'R115': 353.1,
|
|
'R123': 456.831,
|
|
'R1234yf': 367.85,
|
|
'R124': 395.425,
|
|
'R125': 339.173,
|
|
'R134a': 374.21,
|
|
'R14': 227.51,
|
|
'R142b': 410.26,
|
|
'R143a': 345.857,
|
|
'R152a': 386.411,
|
|
'R21': 451.48,
|
|
'R218': 345.02,
|
|
'R227ea': 374.9,
|
|
'R32': 351.255,
|
|
'R365mfc': 460,
|
|
'RC318': 388.38,
|
|
'SulfurDioxide': 430.64,
|
|
'Toluene': 591.75,
|
|
'Trifluoroiodomethane': 396.44,
|
|
'Water': 647.096,
|
|
'Acetone': 508.1,
|
|
'n-Butane': 425.125,
|
|
'CarbonDioxide': 304.128,
|
|
'DimethylEther': 400.378,
|
|
'n-Dodecane': 658.1, # Decane in Mulero
|
|
'Ethylene': 282.35,
|
|
'n-Heptane': 540.13,
|
|
'n-Hexane': 507.82,
|
|
'HydrogenSulfide': 373.1,
|
|
'Isohexane': 497.7,
|
|
'Krypton': 209.48,
|
|
'NitrousOxide': 309.52,
|
|
'n-Pentane': 469.7,
|
|
'R116': 293.03,
|
|
'R13': 302,
|
|
'R23': 299.293,
|
|
'R245ca': 447.57,
|
|
'Xenon': 289.733,
|
|
'CarbonylSulfide': 378.77,
|
|
'Hydrogen': 33.145,
|
|
'Methane': 190.564,
|
|
'n-Octane': 569.32,
|
|
'Perfluoropentane': 420.555,
|
|
'Propylene': 364.211,
|
|
'R12': 385.12,
|
|
'R141b': 477.5,
|
|
'R161': 375.3,
|
|
'R22': 369.295,
|
|
'R236ea': 412.44,
|
|
'R236fa': 398.07,
|
|
'R245fa': 427.16,
|
|
'R41': 317.28,
|
|
'SulfurHexafluoride': 318.723,
|
|
'Ammonia': 405.4,
|
|
'Deuterium': 38.34,
|
|
'Ethanol': 513.9,
|
|
'Neon': 44.4918,
|
|
'Decafluorobutane': 113.3 + 273.15 # According to http://encyclopedia.airliquide.com/Encyclopedia.asp?GasID=19#GeneralData, not in Mulero
|
|
}
|
|
|
|
import glob, json, os
|
|
for row in Mulero2012_data.split('\n'):
|
|
row = row.split(' ')
|
|
cas = row.pop(0)
|
|
name = row.pop(0)
|
|
a = row[0:len(row):2]
|
|
a = [float(_) for _ in a]
|
|
n = row[1:len(row):2]
|
|
n = [float(_) for _ in n]
|
|
if name not in Tc_dict:
|
|
raise ValueError('could not find Tc for ' + name)
|
|
continue
|
|
Tc = Tc_dict[name]
|
|
|
|
# The dictionary of values for the surface tension
|
|
j_st = dict(Tc=Tc,
|
|
a=a,
|
|
n=n,
|
|
BibTeX='Mulero-JPCRD-2012',
|
|
description='sigma = sum(a_i*(1-T/Tc)^n_i)'
|
|
)
|
|
|
|
fname = os.path.join(root_dir, 'dev', 'fluids', name + '.json')
|
|
if not os.path.exists(fname):
|
|
print(fname + ' does not exist')
|
|
continue
|
|
|
|
j = json.load(open(fname, 'r'))
|
|
|
|
j['ANCILLARIES']['surface_tension'] = j_st
|
|
|
|
fp = open(fname, 'w')
|
|
fp.write(json.dumps(j, **json_options))
|
|
fp.close()
|
|
|
|
|
|
Mulero2014_data = """cis-2-butene 435.75 0.05903 1.246
|
|
Cyclopentane 511.72 0.07348 1.388
|
|
Cyclopropane 398.3 0.06812 1.314
|
|
Decamethylcyclopentasiloxane 619.15 0.04408 1.357
|
|
Decamethyltetrasiloxane 599.4 0.0456 1.41
|
|
Diethyl ether 466.7 1.2348 1.4846 1.1808 1.5021
|
|
Dimethyl carbonate (Dimethyl ester carbonic acid) 557 0.0825 1.39
|
|
Dodecamethylcyclohexasiloxane 645.78 0.05105 1.594
|
|
Dodecamethylpentasiloxane 628.36 0.03972 1.254
|
|
Ethylbenzene 617.12 0.0638 1.22
|
|
Ethylene oxide 468.92 0.07542 1.151
|
|
Hexamethyldisiloxane 518.75 0.04576 1.272
|
|
Hydrogen chloride 21 0.05994 1.0953
|
|
Isooctane (2,2,4- trimethylpentane) 543.87 0.04794 1.209
|
|
Methyl linoleate (Methyl (Z,Z)- 9,12-octadecadienoate) 799 0.072487 1.9014
|
|
Methyl oleate (Methyl cis-9-octadecenoate) 782 0.0565 1.31
|
|
Methyl palmitate (Methyl hexadecanoate) 755 0.025025 3.039 0.044435 1.1653
|
|
Methyl stearate (Methyl octadecanoate) 775 0.02313 3.242 0.04567 1.163
|
|
Methylcyclohexane 572.2 0.0606 1.3
|
|
m-xylene (1,3-dimethylbenzene) 616.89 0.06445 1.256
|
|
Neopentane (2,2- dimethylpropane) 433.74 0.04465 1.21
|
|
Nitrogen trifluoride 234 0.063203 1.2565
|
|
Octamethylcyclotetrasiloxane 586.5 0.04246 1.207
|
|
Octamethyltrisiloxane 564.09 0.04992 1.465
|
|
o-xylene (1,2-dimethylbenzene) 630.259 0.06477 1.227
|
|
Propylcyclohexane 630.8 0.055 1.17
|
|
p-xylene 616.168 0.0619 1.21
|
|
R1216 (Hexafluoropropene) 358.9 0.053876 1.0944 0.038318 2.3239
|
|
R1234ze(E) (trans-1,3,3,3-tetrafluoropropene) 382.51 0.06158 1.281 0.8247 6.505
|
|
R143a (1,1,1-Trifluoroethane) 345.857 0.0537 1.25
|
|
R40 (Methyl chloride) 416.3 0.071315 1.2177
|
|
RE245cb2 (Methyl-pentafluoroethyl ether) 406.813 0.04534 1.237
|
|
RE245fa2 (2,2,2-trifluoroethyl-difluoromethyl ether) 444.88 0.0699 1.222
|
|
RE347mcc (HFE-7000 or Methyl-heptafluoropropyl ether) 437.7 0.05031 1.232
|
|
Tetradecamethylhexasiloxane 653.2 0.040798 1.3323
|
|
trans-2-butene 428.61 0.0001859 0.07485 0.05539 1.224
|
|
Undecane 638.8 0.0556 1.32"""
|
|
|
|
|
|
def inject_surface_tension_2014(root_dir):
|
|
rename = {'Undecane': 'n-Undecane',
|
|
'm-xylene (1,3-dimethylbenzene)': 'm-Xylene',
|
|
'o-xylene (1,2-dimethylbenzene)': 'o-Xylene',
|
|
'R1234ze(E) (trans-1,3,3,3-tetrafluoropropene)': 'R1234ze(E)',
|
|
'R143a (1,1,1-Trifluoroethane)': 'R143a',
|
|
'Methyl linoleate (Methyl (Z,Z)- 9,12-octadecadienoate)': 'MethylLinoleate',
|
|
'Methyl oleate (Methyl cis-9-octadecenoate)': 'MethylOleate',
|
|
'Methyl palmitate (Methyl hexadecanoate)': 'MethylPalmitate',
|
|
'Methyl stearate (Methyl octadecanoate)': 'MethylStearate',
|
|
'Dimethyl carbonate (Dimethyl ester carbonic acid)': 'DimethylCarbonate',
|
|
'Hexamethyldisiloxane': 'MM',
|
|
'Tetradecamethylhexasiloxane': 'MD4M',
|
|
'Dodecamethylpentasiloxane': 'MD3M',
|
|
'Octamethyltrisiloxane': 'MDM',
|
|
'Decamethyltetrasiloxane': 'MD2M',
|
|
'Octamethylcyclotetrasiloxane': 'D4',
|
|
'Dodecamethylcyclohexasiloxane': 'D6',
|
|
'Decamethylcyclopentasiloxane': 'D5',
|
|
'Diethyl ether': 'DiethylEther',
|
|
'Neopentane (2,2- dimethylpropane)': 'Neopentane'
|
|
}
|
|
import glob, json, os
|
|
for line in Mulero2014_data.split('\n'):
|
|
|
|
row = line.split(' ')
|
|
# print(row)
|
|
values = []
|
|
j = 0
|
|
for i in range(len(row)):
|
|
try:
|
|
values.append(float(row[i]))
|
|
except:
|
|
j = i
|
|
|
|
name = ' '.join(row[0:j + 1])
|
|
|
|
Tc = values.pop(0)
|
|
a = values[0:len(row):2]
|
|
n = values[1:len(row):2]
|
|
|
|
# The dictionary of values for the surface tension
|
|
j_st = dict(Tc=Tc,
|
|
a=a,
|
|
n=n,
|
|
BibTeX='Mulero-JPCRD-2014',
|
|
description='sigma = sum(a_i*(1-T/Tc)^n_i)'
|
|
)
|
|
|
|
if name in rename:
|
|
name = rename[name]
|
|
fname = os.path.join(root_dir, 'dev', 'fluids', name + '.json')
|
|
if not os.path.exists(fname):
|
|
print(fname + ' does not exist')
|
|
continue
|
|
|
|
j = json.load(open(fname, 'r'))
|
|
|
|
j['ANCILLARIES']['surface_tension'] = j_st
|
|
|
|
fp = open(fname, 'w')
|
|
fp.write(json.dumps(j, **json_options))
|
|
fp.close()
|
|
|
|
|
|
def inject_environmental_data(root_dir):
|
|
print('*** Injecting environmental data from DTU')
|
|
j = json.load(open(os.path.join(root_dir, 'dev', 'environmental_data_from_DTU', 'DTU_environmental.json'), 'r'))
|
|
|
|
for CAS in j:
|
|
data = j[CAS]
|
|
fname = os.path.join(root_dir, 'dev', 'fluids', data['Name'] + '.json')
|
|
if os.path.isfile(fname):
|
|
fluid = json.load(open(fname, 'r'))
|
|
fluid['ENVIRONMENTAL'] = data
|
|
fp = open(fname, 'w')
|
|
fp.write(json.dumps(fluid, **json_options))
|
|
else:
|
|
print('Could not inject environmental data for', data['Name'])
|
|
|
|
|
|
def inject_ancillaries(root_dir):
|
|
print('*** Injecting saturation ancillary curves')
|
|
master = []
|
|
|
|
for file in glob.glob(os.path.join(root_dir, 'dev', 'fluids', '*.json')):
|
|
path, file_name = os.path.split(file)
|
|
fluid_name = file_name.split('.')[0]
|
|
# Load the fluid file
|
|
fluid = json.load(open(os.path.join(root_dir, 'dev', 'fluids', fluid_name + '.json'), 'r'))
|
|
|
|
# Load the ancillary
|
|
anc = json.load(open(os.path.join(root_dir, 'dev', 'ancillaries', fluid_name + '_anc.json'), 'r'))
|
|
# Apply the ancillary by merging dictionaries
|
|
fluid.update(anc)
|
|
# Write fluid back to file
|
|
fp = open(os.path.join(root_dir, 'dev', 'fluids', fluid_name + '.json'), 'w')
|
|
fp.write(json.dumps(fluid, **json_options))
|
|
|
|
|
|
def inject(root_dir):
|
|
inject_surface_tension_2014(root_dir)
|
|
inject_ancillaries(root_dir)
|
|
inject_surface_tension_2012(root_dir)
|
|
inject_environmental_data(root_dir)
|
|
|
|
|
|
def combine_json(root_dir):
|
|
|
|
master = []
|
|
|
|
print('*** Combining fluid JSON files in JSON format in dev folder...')
|
|
for file in glob.glob(os.path.join(root_dir, 'dev', 'fluids', '*.json')):
|
|
|
|
path, file_name = os.path.split(file)
|
|
fluid_name = file_name.split('.')[0]
|
|
|
|
# Load the fluid file
|
|
fluid = json.load(open(file, 'r'))
|
|
|
|
master += [fluid]
|
|
|
|
fp = open(os.path.join(root_dir, 'dev', 'all_fluids_verbose.json'), 'w')
|
|
fp.write(json.dumps(master, **json_options))
|
|
fp.close()
|
|
|
|
fp = open(os.path.join(root_dir, 'dev', 'all_fluids.json'), 'w')
|
|
fp.write(json.dumps(master))
|
|
fp.close()
|
|
|
|
master = []
|
|
|
|
print('*** Combining incompressible JSON files in JSON format in dev folder...')
|
|
for file in glob.glob(os.path.join(root_dir, 'dev', 'IncompressibleLiquids', '*.json')):
|
|
|
|
path, file_name = os.path.split(file)
|
|
fluid_name = file_name.split('.')[0]
|
|
|
|
# Load the fluid file
|
|
fluid = json.load(open(file, 'r'))
|
|
|
|
master += [fluid]
|
|
|
|
fp = open(os.path.join(root_dir, 'dev', 'all_incompressibles_verbose.json'), 'w')
|
|
fp.write(json.dumps(master, **json_options))
|
|
fp.close()
|
|
|
|
fp = open(os.path.join(root_dir, 'dev', 'all_incompressibles.json'), 'w')
|
|
fp.write(json.dumps(master))
|
|
fp.close()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
inject_surface_tension_2014(root_dir='..')
|
|
combine_json(root_dir='..')
|