Cantera  2.5.1
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | Friends | List of all members

Class DustyGasTransport implements the Dusty Gas model for transport in porous media. More...

#include <DustyGasTransport.h>

Inheritance diagram for DustyGasTransport:
[legend]
Collaboration diagram for DustyGasTransport:
[legend]

Public Member Functions

 DustyGasTransport (thermo_t *thermo=0)
 default constructor More...
 
virtual void setThermo (thermo_t &thermo)
 Specifies the ThermoPhase object. More...
 
virtual std::string transportType () const
 Identifies the Transport object type. More...
 
virtual void getMultiDiffCoeffs (const size_t ld, doublereal *const d)
 Return the Multicomponent diffusion coefficients. Units: [m^2/s]. More...
 
virtual void getMolarFluxes (const doublereal *const state1, const doublereal *const state2, const doublereal delta, doublereal *const fluxes)
 Get the molar fluxes [kmol/m^2/s], given the thermodynamic state at two nearby points. More...
 
void setPorosity (doublereal porosity)
 Set the porosity (dimensionless) More...
 
void setTortuosity (doublereal tort)
 Set the tortuosity (dimensionless) More...
 
void setMeanPoreRadius (doublereal rbar)
 Set the mean pore radius (m) More...
 
void setMeanParticleDiameter (doublereal dbar)
 Set the mean particle diameter. More...
 
void setPermeability (doublereal B)
 Set the permeability of the media. More...
 
TransportgasTransport ()
 Return a reference to the transport manager used to compute the gas binary diffusion coefficients and the viscosity. More...
 
- Public Member Functions inherited from Transport
 Transport (thermo_t *thermo=0, size_t ndim=1)
 Constructor. More...
 
 Transport (const Transport &)=delete
 
Transportoperator= (const Transport &)=delete
 
thermo_tthermo ()
 
bool ready ()
 
void setNDim (const int ndim)
 Set the number of dimensions to be expected in flux expressions. More...
 
size_t nDim () const
 Return the number of dimensions in flux expressions. More...
 
void checkSpeciesIndex (size_t k) const
 Check that the specified species index is in range. More...
 
void checkSpeciesArraySize (size_t kk) const
 Check that an array size is at least nSpecies(). More...
 
virtual doublereal viscosity ()
 
virtual void getSpeciesViscosities (doublereal *const visc)
 Returns the pure species viscosities. More...
 
virtual doublereal bulkViscosity ()
 The bulk viscosity in Pa-s. More...
 
virtual doublereal ionConductivity ()
 The ionic conductivity in 1/ohm/m. More...
 
virtual void getSpeciesIonConductivity (doublereal *const ionCond)
 Returns the pure species ionic conductivity. More...
 
virtual void mobilityRatio (double *mobRat)
 Returns the pointer to the mobility ratios of the species in the phase. More...
 
virtual void getSpeciesMobilityRatio (double **mobRat)
 Returns the pure species limit of the mobility ratios. More...
 
virtual doublereal thermalConductivity ()
 Returns the mixture thermal conductivity in W/m/K. More...
 
virtual doublereal electricalConductivity ()
 The electrical conductivity (Siemens/m). More...
 
virtual void getMobilities (doublereal *const mobil_e)
 Get the Electrical mobilities (m^2/V/s). More...
 
virtual void getFluidMobilities (doublereal *const mobil_f)
 Get the fluid mobilities (s kmol/kg). More...
 
virtual doublereal getElectricConduct ()
 Compute the mixture electrical conductivity (S m-1) at the current conditions of the phase (Siemens m-1) More...
 
virtual void getElectricCurrent (int ndim, const doublereal *grad_T, int ldx, const doublereal *grad_X, int ldf, const doublereal *grad_V, doublereal *current)
 Compute the electric current density in A/m^2. More...
 
virtual void getSpeciesFluxes (size_t ndim, const doublereal *const grad_T, size_t ldx, const doublereal *const grad_X, size_t ldf, doublereal *const fluxes)
 Get the species diffusive mass fluxes wrt to the specified solution averaged velocity, given the gradients in mole fraction and temperature. More...
 
virtual void getSpeciesFluxesES (size_t ndim, const doublereal *grad_T, size_t ldx, const doublereal *grad_X, size_t ldf, const doublereal *grad_Phi, doublereal *fluxes)
 Get the species diffusive mass fluxes wrt to the mass averaged velocity, given the gradients in mole fraction, temperature and electrostatic potential. More...
 
virtual void getSpeciesVdiff (size_t ndim, const doublereal *grad_T, int ldx, const doublereal *grad_X, int ldf, doublereal *Vdiff)
 Get the species diffusive velocities wrt to the mass averaged velocity, given the gradients in mole fraction and temperature. More...
 
virtual void getSpeciesVdiffES (size_t ndim, const doublereal *grad_T, int ldx, const doublereal *grad_X, int ldf, const doublereal *grad_Phi, doublereal *Vdiff)
 Get the species diffusive velocities wrt to the mass averaged velocity, given the gradients in mole fraction, temperature, and electrostatic potential. More...
 
virtual void getMassFluxes (const doublereal *state1, const doublereal *state2, doublereal delta, doublereal *mfluxes)
 Get the mass fluxes [kg/m^2/s], given the thermodynamic state at two nearby points. More...
 
virtual void getThermalDiffCoeffs (doublereal *const dt)
 Return a vector of Thermal diffusion coefficients [kg/m/sec]. More...
 
virtual void getBinaryDiffCoeffs (const size_t ld, doublereal *const d)
 Returns the matrix of binary diffusion coefficients [m^2/s]. More...
 
virtual void getMixDiffCoeffs (doublereal *const d)
 Returns a vector of mixture averaged diffusion coefficients. More...
 
virtual void getMixDiffCoeffsMole (doublereal *const d)
 Returns a vector of mixture averaged diffusion coefficients. More...
 
virtual void getMixDiffCoeffsMass (doublereal *const d)
 Returns a vector of mixture averaged diffusion coefficients. More...
 
virtual void setParameters (const int type, const int k, const doublereal *const p)
 Set model parameters for derived classes. More...
 
void setVelocityBasis (VelocityBasis ivb)
 Sets the velocity basis. More...
 
VelocityBasis getVelocityBasis () const
 Gets the velocity basis. More...
 
virtual void init (thermo_t *thermo, int mode=0, int log_level=0)
 Initialize a transport manager. More...
 
virtual void setRoot (std::shared_ptr< Solution > root)
 Set root Solution holding all phase information. More...
 

Protected Member Functions

void initialize (ThermoPhase *phase, Transport *gastr)
 Initialization routine called by TransportFactory. More...
 
- Protected Member Functions inherited from Transport
void finalize ()
 Enable the transport object for use. More...
 

Private Member Functions

void updateTransport_T ()
 Update temperature-dependent quantities within the object. More...
 
void updateTransport_C ()
 Update concentration-dependent quantities within the object. More...
 
void updateBinaryDiffCoeffs ()
 Private routine to update the dusty gas binary diffusion coefficients. More...
 
void updateMultiDiffCoeffs ()
 Update the Multicomponent diffusion coefficients that are used in the approximation. More...
 
void updateKnudsenDiffCoeffs ()
 Update the Knudsen diffusion coefficients. More...
 
void eval_H_matrix ()
 Calculate the H matrix. More...
 

Private Attributes

vector_fp m_mw
 Local copy of the species molecular weights. More...
 
DenseMatrix m_d
 binary diffusion coefficients More...
 
vector_fp m_x
 mole fractions More...
 
vector_fp m_dk
 Knudsen diffusion coefficients. More...
 
doublereal m_temp
 temperature More...
 
DenseMatrix m_multidiff
 Multicomponent diffusion coefficients. More...
 
vector_fp m_spwork
 work space of size m_nsp; More...
 
vector_fp m_spwork2
 work space of size m_nsp; More...
 
doublereal m_gradP
 Pressure Gradient. More...
 
bool m_knudsen_ok
 Update-to-date variable for Knudsen diffusion coefficients. More...
 
bool m_bulk_ok
 Update-to-date variable for Binary diffusion coefficients. More...
 
doublereal m_porosity
 Porosity. More...
 
doublereal m_tortuosity
 Tortuosity. More...
 
doublereal m_pore_radius
 Pore radius (meter) More...
 
doublereal m_diam
 Particle diameter. More...
 
doublereal m_perm
 Permeability of the media. More...
 
std::unique_ptr< Transportm_gastran
 Pointer to the transport object for the gas phase. More...
 

Friends

class TransportFactory
 Make the TransportFactory object a friend, because this object has restricted its instantiation to classes which are friends. More...
 

Additional Inherited Members

- Protected Attributes inherited from Transport
thermo_tm_thermo
 pointer to the object representing the phase More...
 
bool m_ready
 true if finalize has been called More...
 
size_t m_nsp
 Number of species. More...
 
size_t m_nDim
 Number of dimensions used in flux expressions. More...
 
int m_velocityBasis
 Velocity basis from which diffusion velocities are computed. More...
 
std::weak_ptr< Solutionm_root
 reference to Solution More...
 

Detailed Description

Class DustyGasTransport implements the Dusty Gas model for transport in porous media.

As implemented here, only species transport is handled. The viscosity, thermal conductivity, and thermal diffusion coefficients are not implemented.

The dusty gas model includes the effects of Darcy's law. There is a net flux of species due to a pressure gradient that is part of Darcy's law.

The dusty gas model expresses the value of the molar flux of species \( k \), \( J_k \) by the following formula.

\[ \sum_{j \ne k}{\frac{X_j J_k - X_k J_j}{D^e_{kj}}} + \frac{J_k}{\mathcal{D}^{e}_{k,knud}} = - \nabla C_k - \frac{C_k}{\mathcal{D}^{e}_{k,knud}} \frac{\kappa}{\mu} \nabla p \]

\( j \) is a sum over all species in the gas.

The effective Knudsen diffusion coefficients are given by the following form

\[ \mathcal{D}^e_{k,knud} = \frac{2}{3} \frac{r_{pore} \phi}{\tau} \left( \frac{8 R T}{\pi W_k} \right)^{1/2} \]

The effective knudsen diffusion coefficients take into account the effects of collisions of gas-phase molecules with the wall.

References for the Dusty Gas Model

  1. H. Zhu, R. J. Kee, "Modeling Electrochemical Impedance Spectra in SOFC Button Cells with Internal Methane Reforming," J. Electrochem. Soc., 153(9) A1765-1772 (2006).
  2. H. Zhu, R. J. Kee, V. M. Janardhanan, O. Deutschmann, D. G. Goodwin, J. Electrochem. Soc., 152, A2427 (2005).
  3. E. A. Mason, A. P. Malinauskas," Gas Transport in Porous Media: the Dusty- Gas Model", American Elsevier, New York (1983).
  4. J. W. Veldsink, R. M. J. van Damme, G. F. Versteeg, W. P. M. van Swaaij, "The use of the dusty gas model for the description of mass transport with chemical reaction in porous media," Chemical Engineering Journal, 57, 115
    • 125 (1995).

Definition at line 62 of file DustyGasTransport.h.

Constructor & Destructor Documentation

◆ DustyGasTransport()

DustyGasTransport ( thermo_t thermo = 0)

default constructor

Parameters
thermoPointer to the ThermoPhase object for this phase. Defaults to zero.

Definition at line 16 of file DustyGasTransport.cpp.

Member Function Documentation

◆ setThermo()

void setThermo ( thermo_t thermo)
virtual

Specifies the ThermoPhase object.

We have relaxed this operation so that it will succeed when the underlying old and new ThermoPhase objects have the same number of species and the same names of the species in the same order. The idea here is to allow copy constructors and duplicators to work. In order for them to work, we need a method to switch the internal pointer within the Transport object after the duplication takes place. Also, different thermodynamic instantiations of the same species should also work.

Parameters
thermoReference to the ThermoPhase object that the transport object will use

Reimplemented from Transport.

Definition at line 30 of file DustyGasTransport.cpp.

References DustyGasTransport::m_gastran, Transport::setThermo(), and Transport::thermo().

◆ transportType()

virtual std::string transportType ( ) const
inlinevirtual

Identifies the Transport object type.

Each derived class should override this method to return a meaningful identifier.

Reimplemented from Transport.

Definition at line 76 of file DustyGasTransport.h.

◆ getMultiDiffCoeffs()

void getMultiDiffCoeffs ( const size_t  ld,
doublereal *const  d 
)
virtual

Return the Multicomponent diffusion coefficients. Units: [m^2/s].

If the transport manager implements a multicomponent diffusion model, then this method returns the array of multicomponent diffusion coefficients. Otherwise it throws an exception.

Parameters
[in]ldThe dimension of the inner loop of d (usually equal to m_nsp)
[out]dflat vector of diffusion coefficients, fortran ordering. d[ld*j+i] is the D_ij diffusion coefficient (the diffusion coefficient for species i due to species j).

Reimplemented from Transport.

Definition at line 190 of file DustyGasTransport.cpp.

References DustyGasTransport::m_multidiff, Transport::m_nsp, and DustyGasTransport::updateMultiDiffCoeffs().

◆ getMolarFluxes()

void getMolarFluxes ( const doublereal *const  state1,
const doublereal *const  state2,
const doublereal  delta,
doublereal *const  fluxes 
)
virtual

Get the molar fluxes [kmol/m^2/s], given the thermodynamic state at two nearby points.

\[ J_k = - \sum_{j = 1, N} \left[D^{multi}_{kj}\right]^{-1} \left( \nabla C_j + \frac{C_j}{\mathcal{D}^{knud}_j} \frac{\kappa}{\mu} \nabla p \right) \]

Parameters
state1Array of temperature, density, and mass fractions for state 1.
state2Array of temperature, density, and mass fractions for state 2.
deltaDistance from state 1 to state 2 (m).
fluxesVector of species molar fluxes due to diffusional driving force

Reimplemented from Transport.

Definition at line 114 of file DustyGasTransport.cpp.

References Cantera::GasConstant, Cantera::increment(), DustyGasTransport::m_diam, DustyGasTransport::m_dk, DustyGasTransport::m_gastran, DustyGasTransport::m_multidiff, DustyGasTransport::m_mw, Transport::m_nsp, DustyGasTransport::m_perm, DustyGasTransport::m_porosity, DustyGasTransport::m_spwork, DustyGasTransport::m_spwork2, Transport::m_thermo, DustyGasTransport::m_tortuosity, Cantera::multiply(), Cantera::scale(), ThermoPhase::setState_TPX(), and DustyGasTransport::updateMultiDiffCoeffs().

◆ setPorosity()

void setPorosity ( doublereal  porosity)

Set the porosity (dimensionless)

Parameters
porositySet the value of the porosity

Definition at line 223 of file DustyGasTransport.cpp.

References DustyGasTransport::m_bulk_ok, DustyGasTransport::m_knudsen_ok, and DustyGasTransport::m_porosity.

◆ setTortuosity()

void setTortuosity ( doublereal  tort)

Set the tortuosity (dimensionless)

Tortuosity is considered to be constant within the object

Parameters
tortValue of the tortuosity

Definition at line 230 of file DustyGasTransport.cpp.

References DustyGasTransport::m_bulk_ok, DustyGasTransport::m_knudsen_ok, and DustyGasTransport::m_tortuosity.

◆ setMeanPoreRadius()

void setMeanPoreRadius ( doublereal  rbar)

Set the mean pore radius (m)

Parameters
rbarValue of the pore radius ( m)

Definition at line 237 of file DustyGasTransport.cpp.

References DustyGasTransport::m_knudsen_ok, and DustyGasTransport::m_pore_radius.

◆ setMeanParticleDiameter()

void setMeanParticleDiameter ( doublereal  dbar)

Set the mean particle diameter.

Parameters
dbarSet the mean particle diameter (m)

Definition at line 243 of file DustyGasTransport.cpp.

References DustyGasTransport::m_diam.

◆ setPermeability()

void setPermeability ( doublereal  B)

Set the permeability of the media.

If not set, the value for close-packed spheres will be used by default.

The value for close-packed spheres is given below, where p is the porosity, t is the tortuosity, and d is the diameter of the sphere

\[ \kappa = \frac{p^3 d^2}{72 t (1 - p)^2} \]

Parameters
Bset the permeability of the media (units = m^2)

Definition at line 248 of file DustyGasTransport.cpp.

References DustyGasTransport::m_perm.

◆ gasTransport()

Transport & gasTransport ( )

Return a reference to the transport manager used to compute the gas binary diffusion coefficients and the viscosity.

Returns
a reference to the gas transport object

Definition at line 253 of file DustyGasTransport.cpp.

References DustyGasTransport::m_gastran.

◆ initialize()

void initialize ( ThermoPhase phase,
Transport gastr 
)
protected

Initialization routine called by TransportFactory.

The DustyGas model is a subordinate model to the gas phase transport model. Here we set the gas phase models.

This is a protected routine, so that initialization of the Model must occur within Cantera's setup

Parameters
phasePointer to the underlying ThermoPhase model for the gas phase
gastrPointer to the underlying Transport model for transport in the gas phase.

Definition at line 36 of file DustyGasTransport.cpp.

References Phase::getMoleFractions(), DustyGasTransport::m_bulk_ok, DustyGasTransport::m_d, DustyGasTransport::m_dk, DustyGasTransport::m_gastran, DustyGasTransport::m_knudsen_ok, DustyGasTransport::m_multidiff, DustyGasTransport::m_mw, Transport::m_nsp, DustyGasTransport::m_spwork, DustyGasTransport::m_spwork2, Transport::m_thermo, DustyGasTransport::m_x, Phase::molecularWeights(), Phase::nSpecies(), and DenseMatrix::resize().

Referenced by TransportFactory::newTransport().

◆ updateTransport_T()

void updateTransport_T ( )
private

Update temperature-dependent quantities within the object.

The object keeps a value m_temp, which is the temperature at which quantities were last evaluated at. If the temperature is changed, update Booleans are set false, triggering recomputation.

Definition at line 200 of file DustyGasTransport.cpp.

References DustyGasTransport::m_bulk_ok, DustyGasTransport::m_knudsen_ok, DustyGasTransport::m_temp, Transport::m_thermo, and Phase::temperature().

Referenced by DustyGasTransport::updateMultiDiffCoeffs().

◆ updateTransport_C()

void updateTransport_C ( )
private

Update concentration-dependent quantities within the object.

The object keeps a value m_temp, which is the temperature at which quantities were last evaluated at. If the temperature is changed, update Booleans are set false, triggering recomputation.

Definition at line 210 of file DustyGasTransport.cpp.

References Phase::getMoleFractions(), DustyGasTransport::m_bulk_ok, Transport::m_nsp, Transport::m_thermo, DustyGasTransport::m_x, and Cantera::Tiny.

Referenced by DustyGasTransport::updateMultiDiffCoeffs().

◆ updateBinaryDiffCoeffs()

void updateBinaryDiffCoeffs ( )
private

Private routine to update the dusty gas binary diffusion coefficients.

The dusty gas binary diffusion coefficients \( D^{dg}_{i,j} \) are evaluated from the binary gas-phase diffusion coefficients \( D^{bin}_{i,j} \) using the following formula

\[ D^{dg}_{i,j} = \frac{\phi}{\tau} D^{bin}_{i,j} \]

where \( \phi \) is the porosity of the media and \( \tau \) is the tortuosity of the media.

Definition at line 63 of file DustyGasTransport.cpp.

References DustyGasTransport::m_bulk_ok, DustyGasTransport::m_d, DustyGasTransport::m_gastran, Transport::m_nsp, DustyGasTransport::m_porosity, DustyGasTransport::m_tortuosity, and Array2D::ptrColumn().

Referenced by DustyGasTransport::eval_H_matrix().

◆ updateMultiDiffCoeffs()

void updateMultiDiffCoeffs ( )
private

Update the Multicomponent diffusion coefficients that are used in the approximation.

This routine updates the H matrix and then inverts it.

Definition at line 173 of file DustyGasTransport.cpp.

References DustyGasTransport::eval_H_matrix(), Cantera::invert(), DustyGasTransport::m_multidiff, DustyGasTransport::updateTransport_C(), and DustyGasTransport::updateTransport_T().

Referenced by DustyGasTransport::getMolarFluxes(), and DustyGasTransport::getMultiDiffCoeffs().

◆ updateKnudsenDiffCoeffs()

void updateKnudsenDiffCoeffs ( )
private

Update the Knudsen diffusion coefficients.

The Knudsen diffusion coefficients are given by the following form

\[ \mathcal{D}^{knud}_k = \frac{2}{3} \frac{r_{pore} \phi}{\tau} \left( \frac{8 R T}{\pi W_k} \right)^{1/2} \]

Definition at line 80 of file DustyGasTransport.cpp.

References Cantera::GasConstant, DustyGasTransport::m_dk, DustyGasTransport::m_knudsen_ok, DustyGasTransport::m_mw, Transport::m_nsp, DustyGasTransport::m_pore_radius, DustyGasTransport::m_porosity, DustyGasTransport::m_temp, DustyGasTransport::m_tortuosity, and Cantera::Pi.

Referenced by DustyGasTransport::eval_H_matrix().

◆ eval_H_matrix()

void eval_H_matrix ( )
private

Calculate the H matrix.

The multicomponent diffusion H matrix \( H_{k,l} \) is given by the following form

\[ H_{k,l} = - \frac{X_k}{D_{k,l}} \]

\[ H_{k,k} = \frac{1}{\mathcal(D)^{knud}_{k}} + \sum_{j \ne k}^N{ \frac{X_j}{D_{k,j}} } \]

Definition at line 93 of file DustyGasTransport.cpp.

References DustyGasTransport::m_d, DustyGasTransport::m_dk, DustyGasTransport::m_multidiff, Transport::m_nsp, DustyGasTransport::m_x, DustyGasTransport::updateBinaryDiffCoeffs(), and DustyGasTransport::updateKnudsenDiffCoeffs().

Referenced by DustyGasTransport::updateMultiDiffCoeffs().

Friends And Related Function Documentation

◆ TransportFactory

friend class TransportFactory
friend

Make the TransportFactory object a friend, because this object has restricted its instantiation to classes which are friends.

Definition at line 150 of file DustyGasTransport.h.

Member Data Documentation

◆ m_mw

vector_fp m_mw
private

Local copy of the species molecular weights.

units kg /kmol length = m_nsp;

Definition at line 234 of file DustyGasTransport.h.

Referenced by DustyGasTransport::getMolarFluxes(), DustyGasTransport::initialize(), and DustyGasTransport::updateKnudsenDiffCoeffs().

◆ m_d

DenseMatrix m_d
private

◆ m_x

vector_fp m_x
private

◆ m_dk

vector_fp m_dk
private

◆ m_temp

doublereal m_temp
private

◆ m_multidiff

DenseMatrix m_multidiff
private

◆ m_spwork

vector_fp m_spwork
private

work space of size m_nsp;

Definition at line 252 of file DustyGasTransport.h.

Referenced by DustyGasTransport::getMolarFluxes(), and DustyGasTransport::initialize().

◆ m_spwork2

vector_fp m_spwork2
private

work space of size m_nsp;

Definition at line 255 of file DustyGasTransport.h.

Referenced by DustyGasTransport::getMolarFluxes(), and DustyGasTransport::initialize().

◆ m_gradP

doublereal m_gradP
private

Pressure Gradient.

Definition at line 258 of file DustyGasTransport.h.

◆ m_knudsen_ok

bool m_knudsen_ok
private

◆ m_bulk_ok

bool m_bulk_ok
private

◆ m_porosity

doublereal m_porosity
private

◆ m_tortuosity

doublereal m_tortuosity
private

◆ m_pore_radius

doublereal m_pore_radius
private

Pore radius (meter)

Definition at line 273 of file DustyGasTransport.h.

Referenced by DustyGasTransport::setMeanPoreRadius(), and DustyGasTransport::updateKnudsenDiffCoeffs().

◆ m_diam

doublereal m_diam
private

Particle diameter.

The medium is assumed to consist of particles of size m_diam. units = m

Definition at line 279 of file DustyGasTransport.h.

Referenced by DustyGasTransport::getMolarFluxes(), and DustyGasTransport::setMeanParticleDiameter().

◆ m_perm

doublereal m_perm
private

Permeability of the media.

The permeability is the proportionality constant for Darcy's law which relates discharge rate and viscosity to the applied pressure gradient.

Below is Darcy's law, where \( \kappa \) is the permeability

\[ v = \frac{\kappa}{\mu} \frac{\delta P}{\delta x} \]

units are m2

Definition at line 294 of file DustyGasTransport.h.

Referenced by DustyGasTransport::getMolarFluxes(), and DustyGasTransport::setPermeability().

◆ m_gastran

std::unique_ptr<Transport> m_gastran
private

The documentation for this class was generated from the following files: