Source code for idaes.surrogate.helmet.parseGAMS

##############################################################################
# Institute for the Design of Advanced Energy Systems Process Systems
# Engineering Framework (IDAES PSE Framework) Copyright (c) 2018-2019, by the
# software owners: The Regents of the University of California, through
# Lawrence Berkeley National Laboratory,  National Technology & Engineering
# Solutions of Sandia, LLC, Carnegie Mellon University, West Virginia
# University Research Corporation, et al. All rights reserved.
#
# Please see the files COPYRIGHT.txt and LICENSE.txt for full copyright and
# license information, respectively. Both files are also available online
# at the URL "https://github.com/IDAES/idaes-pse".
##############################################################################
"""
Parses and prints the solutions of the multiparameter equation of state solution
"""
# stdlib
import re
# pkg
from . import BasisFunctions

indexes = []
betas = []


[docs]def parser(filename, num=2): """ Parse solution files for the muliparameter equation of state """ global indexes, betas print("Parsing %s" % filename) dataFile = open(filename) # Y variables regex regexY = r"(?<=(VARIABLE y.L))(\s*)(([0-9,. \s]+)(\n))" regexB = r"(?<=(VARIABLE beta.L))(\s*)(([-E0-9,. \s]+)(\n))" dataFile = open(filename) Yb = re.findall(regexY, dataFile.read()) indexes = [] for ybi in Yb: indexes_sub = [] ybi = " ".join(ybi[2].split()) groups = ybi.split(",") for i in groups: trimmed = i.strip() splits = trimmed.split(" ") indexes_sub.append(int(splits[0])) if len(splits) > 3: indexes_sub.append(int(splits[2])) indexes.append(indexes_sub) dataFile2 = open(filename) Yb = re.findall(regexB, dataFile2.read()) betas = [] ind = 0 for ybi in Yb: betas_sub = [] ybi = " ".join(ybi[2].split()) groups = ybi.split(",") for i in groups: i = i.strip() splits = i.split(" ") if len(splits) <= 2: beta = splits[1] index = int(splits[0]) else: beta = splits[1] index = int(splits[0]) if index in indexes[ind]: betas_sub.append(beta) beta = splits[3] index = int(splits[2]) if index in indexes[ind]: betas_sub.append(beta) ind = ind + 1 betas.append(betas_sub)
[docs]def getIndexes(): """ Returns indexes of the basis function terms """ global indexes return indexes
[docs]def getBetas(): """ Returns the weights of the basis functions """ global betas return betas
[docs]def writeTerm(index): """ Writes the basis function term with the given index """ global coeffs coeffs = [] eqtn = "" term_index = 0 for i in range(1, 9): for j in range(1, 13): # 12 term_index += 1 coeffs.append([i, j / 8.0, 0]) if index == term_index: eqtn = eqtn + " %s^%d * %s^%.3f" % ("D", i, "T", j / 8.0) for i in range(1, 6): for j in range(1, 24): # 24 term_index += 1 coeffs.append([i, j / 8.0, 1]) if index == term_index: eqtn = eqtn + " %s^%d * %s^%.3f * exp(-D^1)" % ("D", i, "T", j / 8.0) for i in range(1, 6): for j in range(1, 30): # 24 term_index += 1 coeffs.append([i, j / 8.0, 2]) if index == term_index: eqtn = eqtn + " %s^%d * %s^%.3f * exp(-D^2)" % ("D", i, "T", j / 8.0) for i in range(2, 5): for j in range(24, 38): # 38 term_index += 1 coeffs.append([i, j / 2.0, 3]) if index == term_index: eqtn = eqtn + " %s^%d * %s^%.3f * exp(-D^3)" % ("D", i, "T", j / 8.0) return eqtn
[docs]def writeEquation(Y, Beta =None): """ Write full multiparameter equation """ global coeffs global indexes eqtn = "Equation for Helmholtz Energy \n =" coeffs = BasisFunctions.coeffs indexes = Y lastInd = indexes[-1] for ind, b in zip(indexes, Beta): d, t, c, m = coeffs[ind-1] if not c == 0: eqtn = eqtn + "%f * %s^%d * %s^%.3f * exp(-D^%d)" % ( b, "D", d, "T", t, c ) else: eqtn = eqtn + "%f * %s^%d * %s^%.3f" % ( b, "D", d, "T", t ) if not ind == lastInd: eqtn = eqtn + " +" print(eqtn)