Source code for watertap.tools.oli_api.util.fixed_keys_dict

#################################################################################
# WaterTAP Copyright (c) 2020-2024, The Regents of the University of California,
# through Lawrence Berkeley National Laboratory, Oak Ridge National Laboratory,
# National Renewable Energy Laboratory, and National Energy Technology
# Laboratory (subject to receipt of any required approvals from the U.S. Dept.
# of Energy). All rights reserved.
#
# Please see the files COPYRIGHT.md and LICENSE.md for full copyright and license
# information, respectively. These files are also available online at the URL
# "https://github.com/watertap-org/watertap/"
#################################################################################

__author__ = "Paul Vecchiarelli, Ben Knueven"

from collections import UserDict
from pyomo.environ import units as pyunits


[docs]class FixedKeysDict(UserDict):
[docs] def __init__(self, d): self.data = d
def __setitem__(self, k, v): if k not in self.data: raise RuntimeError(f" Key {k} not in dictionary.") # also check for valid value if a list of values is given in the default dictionary else: self.data[k] = v def __delitem__(self, k): raise Exception(" Deleting keys not supported for this object.") def _check_value(self, k, valid_values): if k not in self.data: raise RuntimeError(f" Key {k} not in dictionary.") else: if self.data[k] not in valid_values: raise RuntimeError( f" Value {self.data[k]} not a valid value for key {k}." ) def pprint(self): print("-------------------------") for key, value in self.data.items(): print(f" {key}\n - {value}\n")
input_unit_set = FixedKeysDict( { "molecularConcentration": { "oli_unit": "mg/L", "pyomo_unit": pyunits.mg / pyunits.L, }, "mass": {"oli_unit": "mg", "pyomo_unit": pyunits.mg}, "temperature": {"oli_unit": "K", "pyomo_unit": pyunits.K}, "pressure": {"oli_unit": "Pa", "pyomo_unit": pyunits.Pa}, "enthalpy": {"oli_unit": "J", "pyomo_unit": pyunits.J}, "vaporAmountMoles": {"oli_unit": "mol", "pyomo_unit": pyunits.mol}, "vaporMolFrac": { "oli_unit": "mol/mol", "pyomo_unit": pyunits.mol / pyunits.mol, }, "totalVolume": {"oli_unit": "L", "pyomo_unit": pyunits.L}, "pipeDiameter": {"oli_unit": "m", "pyomo_unit": pyunits.meter}, "pipeFlowVelocity": { "oli_unit": "m/s", "pyomo_unit": pyunits.meter / pyunits.second, }, "diskDiameter": {"oli_unit": "m", "pyomo_unit": pyunits.meter}, "diskRotatingSpeed": {"oli_unit": "cycle/s", "pyomo_unit": 1 / pyunits.second}, "rotorDiameter": {"oli_unit": "m", "pyomo_unit": pyunits.meter}, "rotorRotation": {"oli_unit": "cycle/s", "pyomo_unit": 1 / pyunits.second}, "shearStress": {"oli_unit": "Pa", "pyomo_unit": pyunits.Pa}, "pipeDiameter": {"oli_unit": "m", "pyomo_unit": pyunits.meter}, "pipeRoughness": {"oli_unit": "m", "pyomo_unit": pyunits.meter}, "liquidFlowInPipe": { "oli_unit": "L/s", "pyomo_unit": pyunits.L / pyunits.second, }, "gasFlowInPipe": {"oli_unit": "L/s", "pyomo_unit": pyunits.L / pyunits.second}, "viscAbs2ndLiq": { "oli_unit": "Pa-s", "pyomo_unit": pyunits.Pa * pyunits.second, }, "alkalinity": {"oli_unit": "mg HCO3/L", "pyomo_unit": pyunits.mg / pyunits.L}, "TIC": {"oli_unit": "mol C/L", "pyomo_unit": pyunits.mol / pyunits.L}, "CO2GasFraction": { "oli_unit": "mol/mol", "pyomo_unit": pyunits.mol / pyunits.mol, }, } ) optional_properties = FixedKeysDict( { "electricalConductivity": True, "viscosity": True, "selfDiffusivityAndMobility": True, "heatCapacity": True, "thermalConductivity": True, "surfaceTension": True, "interfacialTension": True, "volumeStdConditions": True, "prescalingTendenciesEstimated": False, "prescalingIndexEstimated": False, "prescalingTendenciesRigorous": True, "prescalingIndexRigorous": True, "scalingTendencies": True, "scalingIndex": True, "hardness": True, "ionicStrengthXBased": True, "ionicStrengthMBased": True, "totalDissolvedSolids": True, "vaporToInflowMoleFraction": True, "partialPressure": True, "vaporDiffusivityMatrix": True, "entropyStream": True, "entropySpecies": True, "entropyStreamStandardState": True, "entropySpeciesStandardState": True, "gibbsEnergyStream": True, "gibbsEnergySpecies": True, "gibbsEnergyStreamStandardState": True, "gibbsEnergySpeciesStandardState": True, "activityCoefficientsXBased": True, "activityCoefficientsMBased": True, "fugacityCoefficients": True, "vaporFugacity": True, "kValuesXBased": True, "kValuesMBased": True, "MBGComposition": True, "materialBalanceGroup": True, } ) # TODO: consider adding these: https://devdocs.olisystems.com/user-defined-output-unit-set # and reducing hard-coding by using default_input_unit_set references output_unit_set = FixedKeysDict( { "enthalpy": input_unit_set["enthalpy"]["oli_unit"], "mass": input_unit_set["mass"]["oli_unit"], "pt": input_unit_set["pressure"]["oli_unit"], "total": input_unit_set["mass"]["oli_unit"], "liq1_phs_comp": input_unit_set["mass"]["oli_unit"], "solid_phs_comp": input_unit_set["mass"]["oli_unit"], "vapor_phs_comp": input_unit_set["mass"]["oli_unit"], "liq2_phs_comp": input_unit_set["mass"]["oli_unit"], "combined_phs_comp": input_unit_set["mass"]["oli_unit"], "molecularConcentration": input_unit_set["molecularConcentration"]["oli_unit"], } )