mirror of
https://github.com/CoolProp/CoolProp.git
synced 2026-01-16 01:18:19 -05:00
124 lines
3.6 KiB
Python
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') |