Source code for despasito.thermodynamics

"""
Thermodynamics

This package will take in an equation of state object, and any user defined variables
for calculation. The calculation type will then be compared to those available in the
thermo.py file and be executed.

"""

from inspect import getmembers, isfunction

# import logging

from . import calculation_types

# logger = logging.getLogger(__name__)


[docs] def thermo(Eos, calculation_type=None, **kwargs): """ Use factory design pattern to search for matching calculation_type with those supported in this module. To add a new calculation type, add a new wrapper function to ``calculation_types.py``. Parameters ---------- Eos : obj Equation of state object with the following methods: ``pressure``, ``density_max``, and ``fugacity_coefficient``. calculation_type : str Calculation type supported in :mod:`~despasito.thermodynamics.calculation_types` kwargs Other keywords passed to the function, depends on calculation type Returns ------- output_dict : dict Output of dictionary containing given and calculated values """ if calculation_type is None: raise ValueError("No calculation type specified") # Extract available calculation types calc_list = [o[0] for o in getmembers(calculation_types) if isfunction(o[1])] # Unpack inputs and check try: func = getattr(calculation_types, calculation_type) except Exception: raise ImportError( "The calculation type, '{}', was not found\nThe following calculation " "types are supported: {}".format(calculation_type, ", ".join(calc_list)) ) try: output_dict = func(Eos, **kwargs) except Exception: raise TypeError("The calculation type, '{}', failed".format(calculation_type)) return output_dict