Files
CoolProp/dev/scripts/convert_FLD.py
2019-01-12 20:45:25 -07:00

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')