Source code for idaes.surrogate.helmet.Helmet

##############################################################################
# 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".
##############################################################################
"""
HELMholtz Energy Thermodynamics (HELMET)

Main capabilities of HELMET
default HELMET use
"""

__author__ = "Marissa Engle <mengle@andrew.cmu.edu>"

import os
import platform
import subprocess


from idaes.surrogate import alamopy
from . import AncillaryEquations  # , Certainty
from . import Plotting, DataImport, DataManipulation
from . import GAMSWrite, BasisFunctions

from matplotlib import cm


# global R
R = 8.314472  # kJ mol^-1 K^-1

# global molecule, filename, gamsname, data_name
molecule, filename, gamsname, data_name = None, None, None, None

# global sample, sample_ratio
sample = False
sample_ratio = 5

# global critT, critP, critD, M, triple, acc
critT, critP, critD, M, triple, acc = 0, 0, 0, 0, 0, 0

# global max_time, num_terms
max_time = 500
num_terms = 12

# global props
props = []

# global has_alamo
has_alamo = None

# global flag_dirty
flag_dirty = False


[docs]def initialize(**kwargs): """ filename - location of data gamsname - name of the gams file made molecule - name of the molecule/compound data_name - name of the data fluid data - [critT, critP, critD, M, triple, acentric factor] R - gas constant value """ global R, molecule, filename, gamsname, data_name global critT, critP, critD, M, triple, acc global max_time, num_terms, props global sample, sample_ratio global flag_dirty global has_alamo k_dict = { "R": R, "filename": filename, "gamsname": gamsname, "molecule": molecule, "fluid_data": (critT, critP, critD, M, triple, acc), "max_time": max_time, "num_terms": num_terms, "props": props, "sample": 1, } for arg in k_dict: if arg in kwargs: if arg == "R": R = kwargs[arg] elif arg == "filename": filename = kwargs[arg] elif arg == "gamsname": gamsname = kwargs[arg] elif arg == "molecule": molecule = kwargs[arg] elif arg == "fluid_data": (critT, critP, critD, M, triple, acc) = kwargs[arg] elif arg == "max_time": max_time = kwargs[arg] elif arg == "num_terms": num_terms = kwargs[arg] elif arg == "props": props = kwargs[arg] elif arg == "sample": sample = True sample_ratio = kwargs[arg] else: raise Exception("Not a keyword argument") if has_alamo is None: has_alamo = alamopy.multos.has_alamo() if not has_alamo: print("No ALAMO software found.") updateModelSettings() flag_dirty = True
[docs]def updateModelSettings(): """ Settings of the model based on the chemical passed to the different python methods """ global R, molecule, filename, gamsname, data_name global critT, critP, critD, M, triple, acc global max_time, num_terms, props global flag_dirty # SoaveDensity.molData((critT, critP, critD, M, triple, acc), molecule, R) Plotting.molData((critT, critP, critD, M, triple, acc), molecule, R) Plotting.props = props DataImport.molData((critT, critP, critD, M, triple, acc), R) DataImport.filename = filename DataManipulation.molData((critT, critP, critD, M, triple, acc), molecule, R) AncillaryEquations.molecule = molecule AncillaryEquations.max_time = max_time GAMSWrite.molData( (critT, critP, critD, M, triple, acc), molecule, data_name, num_terms, max_time ) BasisFunctions.molData((critT, critP, critD, M, triple, acc), molecule, R) flag_dirty = False
[docs]def prepareAncillaryEquations(plot=False, keepFiles=False): """ Develops ancillary equations of state using ALAMOPY DL - saturated liquid density DV - saturated vapor density PV - vapor pressure Dependent on ALAMO """ global has_alamo if has_alamo: AncillaryEquations.DL() AncillaryEquations.DV() AncillaryEquations.PV() if plot: Plotting.viewAnc() if not keepFiles: for p in ["DL", "DV", "PV"]: os.remove("%s%s" % (molecule, p)) os.remove("%s%s.lst" % (molecule, p)) else: if plot: Plotting.viewAnc() print("Couldn't regress ancillary equations. ALAMO executable not found")
[docs]def viewPropertyData(): """ Plot imported data """ Plotting.viewData()
[docs]def setupRegression(numTerms=14, gams=False, pyomo=False): """ setup gams regression """ global props, sample, sample_ratio GAMSWrite.num_terms = numTerms GAMSWrite.props = props GAMSWrite.sample = sample GAMSWrite.sample = sample_ratio GAMSWrite.importData() GAMSWrite.runFile = "gdx" GAMSWrite.GenerateGDXGamsFiledtlmv() GAMSWrite.runFile = "main" GAMSWrite.GenerateGamsShell()
[docs]def runRegression(gams = False, pyomo=False): """ Runs the gdx and main regression gams file """ GAMSWrite.runFile ="gdx" command = "gams %s%s.gms"%(molecule,GAMSWrite.runFile) process = subprocess.check_call(command, shell=True) GAMSWrite.runFile ="main" command = "gams %s%s.gms"%(molecule,GAMSWrite.runFile) process = subprocess.check_call(command, shell=True)
[docs]def getFlag(): """ Returns flag, marks a change in the construction of the model """ return flag_dirty
[docs]def viewResults(lstFile=None, plot = False, report=False, surface=cm.coolwarm): """ Plot results from gams or pyomo lstFile - gams listing file surface - colormapping color eg. cm.coolwarm """ Plotting.sseCombo(lstFile = lstFile, plot= plot, report=report, surface= surface)
[docs]def viewMultResults(lstFile, numTerms=0): """ View mutliple results from a lst file """ Plotting.multSSECombo(lstFile, numTerms)
[docs]def deletefile(*fname): """ Deletes files """ tos = platform.platform() if "Windows" in tos: for name in fname: os.system("del " + name) else: for name in fname: os.system("rm " + name)