Source code for openpnm.phase._species
import logging
from openpnm.models.collections.phase import standard_gas, standard_liquid
from openpnm.phase import Phase, _fetch_chemical_props
logger = logging.getLogger(__name__)
__all__ = [
'Species',
'StandardGas',
'StandardLiquid',
]
[docs]
class Species(Phase):
r"""
A special Phase object that represents a single species in a mixture
This class provides a ``mixture`` attribute which allows one to lookup
which mixture the species is associated with.
Parameters
----------
network : GenericNetwork
The network to which this phase object will be attached.
species : str, optional
If provided, this is used to lookup tabulated constants from the
``chemicals`` package, which attempts to find a match. For instance,
'water', 'Water', and 'H2O' all work. The contants are stored in
``species.params`` like ``species.params['molecular_weight']``. They
can also be accessed using ``species['param.molecular_weight']`` using
some behind the scenes python magic.
name : str, optional
The name of the phase. This is useful to keep track of the objects
throughout the simulation. The name must be unique to the project.
If no name is given, one is generated.
"""
def __init__(self, species, **kwargs):
# Create temp first to ensure all look-ups pass before initializing obj
from thermo import Chemical
temp = _fetch_chemical_props(Chemical(species))
super().__init__(**kwargs)
self.params.update(temp)
@property
def mixture(self):
for item in self.project:
if hasattr(item, 'components'):
for comp in item.components.values():
if self is comp:
return item
logger.warn("No mixture phase found for this species")
[docs]
class StandardLiquid(Species):
"""A ``Species`` object with built-in standard liquid-phase models."""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.add_model_collection(standard_liquid)
self.regenerate_models()
[docs]
class StandardGas(Species):
"""A ``Species`` object with built-in standard gas-phase models."""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.add_model_collection(standard_gas)
self.regenerate_models()