mirror of
https://github.com/CoolProp/CoolProp.git
synced 2026-01-12 23:48:22 -05:00
132 lines
3.6 KiB
Python
132 lines
3.6 KiB
Python
import CoolProp, json
|
|
|
|
|
|
def extract_coeffs(lines):
|
|
N_normal, C_normal, N_critical, C_critical, N_spare, C_spare = [int(el) for el in lines[0].split('!')[0].strip().split(' ') if el]
|
|
|
|
terms = []
|
|
|
|
assert(N_normal > 0)
|
|
assert(C_normal == 4)
|
|
|
|
chunk = []
|
|
for line in lines[1:N_normal + 1]:
|
|
ll = line.split('!')[0].strip()
|
|
ll = [float(f) for f in ll.split(' ') if f]
|
|
chunk.append(ll)
|
|
n, t, d, l = zip(*chunk)
|
|
|
|
terms.append(
|
|
dict(type="ResidualHelmholtzPower",
|
|
n=n, d=d, t=t, l=l)
|
|
)
|
|
|
|
if N_critical > 0:
|
|
chunk = []
|
|
for line in lines[1 + N_normal:N_normal + 1 + N_critical]:
|
|
ll = line.split('!')[0].strip()
|
|
ll = [float(f) for f in ll.split(' ') if f]
|
|
chunk.append(ll)
|
|
n, t, d, l, dummy1, neg_eta, neg_beta, gamma, epsilon, dummy2, dummy3, dummy4 = zip(*chunk)
|
|
eta, beta = [[-el for el in vec] for vec in [neg_eta, neg_beta]]
|
|
|
|
terms.append(
|
|
dict(type="ResidualHelmholtzGaussian",
|
|
n=n, d=d, t=t, eta=eta, beta=beta, gamma=gamma, epsilon=epsilon)
|
|
)
|
|
|
|
return terms
|
|
|
|
|
|
def extract_active_EOS(file_name):
|
|
with open(file_name, 'r') as fp:
|
|
lines = fp.readlines()
|
|
del fp
|
|
|
|
# Find the #EOS key
|
|
iEOS = -1
|
|
for i, line in enumerate(lines):
|
|
if line.startswith('#EOS'):
|
|
if iEOS < 0:
|
|
iEOS = i
|
|
else:
|
|
raise KeyError("Found more than one #EOS in file")
|
|
|
|
# Find the end of the EOS block
|
|
for i in range(iEOS, len(lines)):
|
|
if len(lines[i].strip()) == 0:
|
|
iEOS_end = i
|
|
break
|
|
|
|
if i == len(lines) - 1:
|
|
raise KeyError("Could not find empty line at end of EOS block")
|
|
|
|
iEOS_start = iEOS
|
|
for i in range(iEOS, iEOS_end + 1):
|
|
if lines[i].startswith('!'):
|
|
iEOS_start = i
|
|
break
|
|
|
|
for i in range(iEOS_start + 1, iEOS_end + 1):
|
|
print(lines[i].strip())
|
|
|
|
def unpack(line):
|
|
s = line.split('!')[0].strip()
|
|
try:
|
|
return float(s)
|
|
except ValueError:
|
|
return s
|
|
|
|
Tmin, Tmax, pmax, rhomax, CPP, MW, Tt, Pt, rhot, NBP, acentric, crit, reducing, R = [unpack(line) for line in lines[iEOS_start + 1:iEOS_start + 1 + 14]]
|
|
reducing = [float(f) for f in reducing.split(' ') if f]
|
|
crit = [float(f) for f in crit.split(' ') if f]
|
|
|
|
alphar = extract_coeffs(lines[iEOS_start + 15:iEOS_end + 1])
|
|
|
|
del file_name, iEOS, iEOS_start, iEOS_end, unpack, lines, line, i
|
|
return locals().copy()
|
|
|
|
|
|
def build_states():
|
|
return []
|
|
|
|
|
|
def build_alpha0(ALPHA0):
|
|
return []
|
|
|
|
|
|
def build_alphar(EOS):
|
|
return []
|
|
|
|
|
|
def write(EOS, ALPHA0, json_file):
|
|
|
|
base = dict(BibTeX_CP0="",
|
|
BibTeX_EOS="XXXX TO BE FILLED IN XXX",
|
|
STATES=build_states(),
|
|
T_max=EOS['Tmax'],
|
|
T_max_units='K',
|
|
Ttriple=EOS['Tt'],
|
|
Ttriple_units='K',
|
|
acentric=EOS['acentric'],
|
|
acentric_units='-',
|
|
alpha0=build_alpha0(ALPHA0),
|
|
alphar=EOS['alphar'],
|
|
gas_constant=EOS['R'],
|
|
gas_constant_units='J/mol/K',
|
|
molar_mass=EOS['MW'] / 1000.0,
|
|
molar_mass_units='kg/mol',
|
|
p_max=EOS['pmax'] * 1000.0,
|
|
p_max_units='Pa',
|
|
pseudo_pure='XXX TO BE FILLED IN XXX'
|
|
)
|
|
|
|
with open(json_file, 'w') as fp:
|
|
json.dump(base, fp, indent=2, sort_keys=True)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
EOS = extract_active_EOS('/Users/ian/Downloads/MDM.FLD')
|
|
ALPHA0 = []
|
|
write(EOS, ALPHA0, 'MDM.json')
|