Source code for openpnm.models.phase.misc._funcs

import numpy as np
from openpnm.models.phase import _phasedocs


__all__ = [
    "mix_and_match",
    "mole_to_mass_fraction",
]


[docs] @_phasedocs def mix_and_match( phase, prop, phases, occupancy, ): r""" Return the given property by looking it up from a list of given phases based on occupancy. Parameters ---------- %(phase)s prop : str The dictionary key to the array containing the pore/throat property to be used in the calculation. phases : list List of Phases over which the given `prop` is to be averaged out. occupancy : str The dictionary key to the array containing the occupancy associated with each of the given ``phases``. Returns ------- weighted_average : ndarray Weighted average of the given `prop` averaged over `phases`. """ # Hack for ModelsMixin to not complain (cyclic dep) prop = prop.strip("_") values = np.zeros_like(phases[0][prop]) for phase in phases: mask = phase[occupancy] values[mask] = phase[prop][mask] return values
[docs] @_phasedocs def mole_to_mass_fraction( phase, MWs='param.molecular_weight.*', ): r""" Convert mole fraction to mass fraction Parameters ---------- %(phase)s %(MWs)s Returns ------- """ MWs = phase.get_comp_vals(MWs) xs = phase['pore.mole_fraction'] ms = {} # Find the actual masses in each pore for c in xs.keys(): ms[c] = xs[c]*MWs[c] # Normalize component mass by total mass in each pore denom = np.vstack(list(ms.values())).sum(axis=0) for c in xs.keys(): ms[c] = ms[c]/denom return ms