.. raw:: html

   <style> .red {color:#ed5a6a; font-weight:bold} </style>
   <style> .green {color:#7ac083; font-weight:bold} </style>
   <style> .orange {color:#f98f60; font-weight:bold} </style>
   <style> .blue {color:#60c1cf; font-weight:bold} </style>

.. role:: red
.. role:: green
.. role:: orange
.. role:: blue

ThermoSTEAM: BioSTEAM's Premier Thermodynamic Engine
====================================================

.. figure:: class_diagram_light.png
   :class: only-light
   :align: center
.. figure:: class_diagram_dark.png
   :class: only-dark
   :align: center

- :blue:`Properties:` ThermoSTEAM builds upon `chemicals <https://github.com/CalebBell/chemicals>`_ and `thermo <https://github.com/CalebBell/thermo>`_, from the Chemical Engineering Design Library, for thermodynamic models and data which become encapsulated as callable property classes.

- :green:`Data:` Chemical objects manage the thermodynamic methods and makes sure to use a valid method at given temperatures and pressures whenever estimating properties. 

- :red:`Interface:` A thermodynamic property package is first defined through a Thermo object, which defines the working chemicals, mixing rules, and equlibrium estimation methods. Then, Stream objects can be used to estimate thermodynamic equilibrium, mixture properties, and mass and energy balances. 

- :orange:`Equilibrium:` Phase equilibrium calculations are handled by callable equilibrium objects. The main vapor-liquid equilibrium algorithm solves the modified Raoult’s law equation with activity coefficients estimated through interaction parameters for UNIQUAC Functional-group Activity Coefficients. 

.. toctree::
   :maxdepth: 2
   :hidden:
   
   Chemical
   Chemicals
   Thermo
   Stream
   MultiStream
   ThermalCondition
   ThermoData
   functor
   functional
   equilibrium/index
   reaction/index
   indexer/index
   mixture/index
   separations

Related Projects
----------------

There are many third party open-source Python libraries that may provide additional resources for designing and modeling chemical processes:

* `thermo <https://pypi.org/project/thermo/#documentation>`_: Chemical properties component of Chemical Engineering Design Library. 
* `chemicals <https://chemicals.readthedocs.io/en/latest/>`_: Chemical database component of Chemical Engineering Design Library.
* `fluids <https://fluids.readthedocs.io/>`_: Fluid dynamics component of Chemical Engineering Design Library (ChEDL) 
* `chempy <https://pythonhosted.org/chempy/>`_: A package useful for chemistry written in Python.
* `thermochem <https://thermochem.readthedocs.io/en/latest/>`_: Useful Python modules for Thermodynamics and Thermochemistry.
* `chemics <https://chemics.github.io/>`_: A Python package for chemical reactor engineering.
* `ase <https://gitlab.com/ase/ase>`_: The Atomic Simulation Environment.
* `pMuTT <https://vlachosgroup.github.io/pMuTT/includeme.html>`_: The Python Multiscale Thermochemistry Toolbox.