Files
CoolProp/dev/scripts/convert_FLD.py
Ian Bell cb6251110d Add new EOS for MDM from Thol et al.
Also script for converting FLD file to EOS
2016-07-09 19:26:58 -06:00

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