Source code for idaes.models.properties.general_helmholtz.components.parameters
#################################################################################
# The Institute for the Design of Advanced Energy Systems Integrated Platform
# Framework (IDAES IP) was produced under the DOE Institute for the
# Design of Advanced Energy Systems (IDAES).
#
# Copyright (c) 2018-2024 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.md and LICENSE.md
# for full copyright and license information.
#################################################################################
"""This module gets the path of parameters files
"""
__author__ = "John Eslick"
import os
import re
import json
from pyomo.common.fileutils import this_file_dir
import idaes
from idaes.models.properties.general_helmholtz.components import (
clear_component_registry,
register_helmholtz_component,
)
[docs]
def get_parameter_path():
"""Get the parameter file path
Args:
None
Returns:
str: path for parameter files
"""
pth = idaes.cfg.properties.helmholtz.parameter_file_path
if pth is None:
pth = this_file_dir()
return pth
[docs]
def set_parameter_path(path):
"""Set the parameter file path, and register components found there.
Args:
path (str): Parameter file path
Returns:
None
"""
idaes.properties.helmholtz.parameter_file_path = path
def auto_register():
"""Search the parameter file path for available components and register them"""
pth = get_parameter_path()
clear_component_registry()
lst = os.listdir(pth)
eos_set = set() # list of components with EOS
st_set = set() # list of components with surface tension
tcx_set = set() # list of components with thermal conductivity
visc_set = set() # list of components with viscosity
for fname in lst:
rematch = re.fullmatch(r"(.*)_expressions_(.*).nl", fname)
if rematch:
comp = rematch.groups()[0]
expr = rematch.groups()[1]
if expr == "eos":
eos_set.add(rematch.groups()[0])
elif expr == "st":
st_set.add(rematch.groups()[0])
elif expr == "tcx":
tcx_set.add(rematch.groups()[0])
elif expr == "visc":
visc_set.add(rematch.groups()[0])
else:
rematch = re.fullmatch(r"(.*).json", fname)
eos_ref = None
thermal_conductivity_ref = None
viscosity_ref = None
surface_tension_ref = None
if rematch:
with open(os.path.join(pth, fname), "r", encoding="utf-8") as fptr:
dct = json.load(fptr)
try:
eos_ref = dct["eos"]["reference"]
if isinstance(eos_ref, list):
eos_ref = "\n".join(eos_ref)
except KeyError:
eos_ref = None
try:
thermal_conductivity_ref = dct["transport"]["thermal_conductivity"][
"reference"
]
if isinstance(thermal_conductivity_ref, list):
thermal_conductivity_ref = "\n".join(eos_ref)
except KeyError:
thermal_conductivity_ref = None
try:
thermal_conductivity_ref = dct["transport"]["viscosity"][
"reference"
]
if isinstance(viscosity_ref, list):
viscosity_ref = "\n".join(eos_ref)
except KeyError:
viscosity_ref = None
try:
surface_tension_ref = dct["transport"]["surface_tension"][
"reference"
]
if isinstance(surface_tension_ref, list):
surface_tension_ref = "\n".join(eos_ref)
except KeyError:
surface_tension_ref = None
for comp in eos_set:
register_helmholtz_component(
comp,
viscosity=comp in visc_set,
thermal_conductivity=comp in tcx_set,
surface_tension=comp in st_set,
viscosity_ref=viscosity_ref,
thermal_conductivity_ref=thermal_conductivity_ref,
surface_tension_ref=surface_tension_ref,
)