Cantera
2.5.1
|
Class DustyGasTransport implements the Dusty Gas model for transport in porous media. More...
#include <DustyGasTransport.h>
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... | |
Transport & | gasTransport () |
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 | |
Transport & | operator= (const Transport &)=delete |
thermo_t & | thermo () |
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< Transport > | m_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_t * | m_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< Solution > | m_root |
reference to Solution More... | |
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
Definition at line 62 of file DustyGasTransport.h.
DustyGasTransport | ( | thermo_t * | thermo = 0 | ) |
default constructor
thermo | Pointer to the ThermoPhase object for this phase. Defaults to zero. |
Definition at line 16 of file DustyGasTransport.cpp.
|
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.
thermo | Reference 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().
|
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.
|
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.
[in] | ld | The dimension of the inner loop of d (usually equal to m_nsp) |
[out] | d | flat 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().
|
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) \]
state1 | Array of temperature, density, and mass fractions for state 1. |
state2 | Array of temperature, density, and mass fractions for state 2. |
delta | Distance from state 1 to state 2 (m). |
fluxes | Vector 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().
void setPorosity | ( | doublereal | porosity | ) |
Set the porosity (dimensionless)
porosity | Set 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.
void setTortuosity | ( | doublereal | tort | ) |
Set the tortuosity (dimensionless)
Tortuosity is considered to be constant within the object
tort | Value of the tortuosity |
Definition at line 230 of file DustyGasTransport.cpp.
References DustyGasTransport::m_bulk_ok, DustyGasTransport::m_knudsen_ok, and DustyGasTransport::m_tortuosity.
void setMeanPoreRadius | ( | doublereal | rbar | ) |
Set the mean pore radius (m)
rbar | Value of the pore radius ( m) |
Definition at line 237 of file DustyGasTransport.cpp.
References DustyGasTransport::m_knudsen_ok, and DustyGasTransport::m_pore_radius.
void setMeanParticleDiameter | ( | doublereal | dbar | ) |
Set the mean particle diameter.
dbar | Set the mean particle diameter (m) |
Definition at line 243 of file DustyGasTransport.cpp.
References DustyGasTransport::m_diam.
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} \]
B | set the permeability of the media (units = m^2) |
Definition at line 248 of file DustyGasTransport.cpp.
References DustyGasTransport::m_perm.
Transport & gasTransport | ( | ) |
Return a reference to the transport manager used to compute the gas binary diffusion coefficients and the viscosity.
Definition at line 253 of file DustyGasTransport.cpp.
References DustyGasTransport::m_gastran.
|
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
phase | Pointer to the underlying ThermoPhase model for the gas phase |
gastr | Pointer 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().
|
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().
|
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().
|
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().
|
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().
|
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().
|
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().
|
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.
|
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().
|
private |
binary diffusion coefficients
Definition at line 237 of file DustyGasTransport.h.
Referenced by DustyGasTransport::eval_H_matrix(), DustyGasTransport::initialize(), and DustyGasTransport::updateBinaryDiffCoeffs().
|
private |
mole fractions
Definition at line 240 of file DustyGasTransport.h.
Referenced by DustyGasTransport::eval_H_matrix(), DustyGasTransport::initialize(), and DustyGasTransport::updateTransport_C().
|
private |
Knudsen diffusion coefficients.
Definition at line 243 of file DustyGasTransport.h.
Referenced by DustyGasTransport::eval_H_matrix(), DustyGasTransport::getMolarFluxes(), DustyGasTransport::initialize(), and DustyGasTransport::updateKnudsenDiffCoeffs().
|
private |
temperature
Definition at line 246 of file DustyGasTransport.h.
Referenced by DustyGasTransport::updateKnudsenDiffCoeffs(), and DustyGasTransport::updateTransport_T().
|
private |
Multicomponent diffusion coefficients.
Definition at line 249 of file DustyGasTransport.h.
Referenced by DustyGasTransport::eval_H_matrix(), DustyGasTransport::getMolarFluxes(), DustyGasTransport::getMultiDiffCoeffs(), DustyGasTransport::initialize(), and DustyGasTransport::updateMultiDiffCoeffs().
|
private |
work space of size m_nsp;
Definition at line 252 of file DustyGasTransport.h.
Referenced by DustyGasTransport::getMolarFluxes(), and DustyGasTransport::initialize().
|
private |
work space of size m_nsp;
Definition at line 255 of file DustyGasTransport.h.
Referenced by DustyGasTransport::getMolarFluxes(), and DustyGasTransport::initialize().
|
private |
Pressure Gradient.
Definition at line 258 of file DustyGasTransport.h.
|
private |
Update-to-date variable for Knudsen diffusion coefficients.
Definition at line 261 of file DustyGasTransport.h.
Referenced by DustyGasTransport::initialize(), DustyGasTransport::setMeanPoreRadius(), DustyGasTransport::setPorosity(), DustyGasTransport::setTortuosity(), DustyGasTransport::updateKnudsenDiffCoeffs(), and DustyGasTransport::updateTransport_T().
|
private |
Update-to-date variable for Binary diffusion coefficients.
Definition at line 264 of file DustyGasTransport.h.
Referenced by DustyGasTransport::initialize(), DustyGasTransport::setPorosity(), DustyGasTransport::setTortuosity(), DustyGasTransport::updateBinaryDiffCoeffs(), DustyGasTransport::updateTransport_C(), and DustyGasTransport::updateTransport_T().
|
private |
Porosity.
Definition at line 267 of file DustyGasTransport.h.
Referenced by DustyGasTransport::getMolarFluxes(), DustyGasTransport::setPorosity(), DustyGasTransport::updateBinaryDiffCoeffs(), and DustyGasTransport::updateKnudsenDiffCoeffs().
|
private |
Tortuosity.
Definition at line 270 of file DustyGasTransport.h.
Referenced by DustyGasTransport::getMolarFluxes(), DustyGasTransport::setTortuosity(), DustyGasTransport::updateBinaryDiffCoeffs(), and DustyGasTransport::updateKnudsenDiffCoeffs().
|
private |
Pore radius (meter)
Definition at line 273 of file DustyGasTransport.h.
Referenced by DustyGasTransport::setMeanPoreRadius(), and DustyGasTransport::updateKnudsenDiffCoeffs().
|
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().
|
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().
|
private |
Pointer to the transport object for the gas phase.
Definition at line 297 of file DustyGasTransport.h.
Referenced by DustyGasTransport::gasTransport(), DustyGasTransport::getMolarFluxes(), DustyGasTransport::initialize(), DustyGasTransport::setThermo(), and DustyGasTransport::updateBinaryDiffCoeffs().