Cantera  2.3.0
ImplicitSurfChem Class Reference

Advances the surface coverages of the associated set of SurfacePhase objects in time. More...

#include <ImplicitSurfChem.h>

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

## Public Member Functions

ImplicitSurfChem (std::vector< InterfaceKinetics *> k)
Constructor for multiple surfaces. More...

virtual void initialize (doublereal t0=0.0)

void integrate (doublereal t0, doublereal t1)
Integrate from t0 to t1. The integrator is reinitialized first. More...

void integrate0 (doublereal t0, doublereal t1)
Integrate from t0 to t1 without reinitializing the integrator. More...

void solvePseudoSteadyStateProblem (int ifuncOverride=-1, doublereal timeScaleOverride=1.0)
Solve for the pseudo steady-state of the surface problem. More...

virtual size_t neq ()
Return the number of equations. More...

virtual void eval (doublereal t, doublereal *y, doublereal *ydot, doublereal *p)
Evaluate the value of ydot[k] at the current conditions. More...

virtual void getInitialConditions (doublereal t0, size_t leny, doublereal *y)
Set the initial conditions for the solution vector. More...

virtual void getState (doublereal *y)
Get the current state of the solution vector. More...

void getConcSpecies (doublereal *const vecConcSpecies) const

void setConcSpecies (const doublereal *const vecConcSpecies)
Sets the concentrations within phases that are unknowns in the surface problem. More...

void setCommonState_TP (doublereal TKelvin, doublereal PresPa)
Sets the state variable in all thermodynamic phases (surface and surrounding bulk phases) to the input temperature and pressure. More...

std::vector< InterfaceKinetics * > & getObjects ()
Returns a reference to the vector of pointers to the InterfaceKinetics objects. More...

int checkMatch (std::vector< ThermoPhase *> m_vec, ThermoPhase *thPtr)

void setIOFlag (int ioFlag)

Public Member Functions inherited from FuncEval
int eval_nothrow (double t, double *y, double *ydot)
Evaluate the right-hand side using return code to indicate status. More...

virtual size_t nparams ()
Number of sensitivity parameters. More...

void suppressErrors (bool suppress)
Enable or disable suppression of errors when calling eval() More...

bool suppressErrors () const
Get current state of error suppression. More...

std::string getErrors () const
Return a string containing the text of any suppressed errors. More...

void clearErrors ()
Clear any previously-stored suppressed errors. More...

## Protected Member Functions

void updateState (doublereal *y)
Set the mixture to a state consistent with solution vector y. More...

## Protected Attributes

std::vector< SurfPhase * > m_surf
vector of pointers to surface phases. More...

std::vector< ThermoPhase * > m_bulkPhases
Vector of pointers to bulk phases. More...

std::vector< InterfaceKinetics * > m_vecKinPtrs
vector of pointers to InterfaceKinetics objects More...

std::vector< size_t > m_nsp
Vector of number of species in each Surface Phase. More...

std::vector< size_t > m_surfindex
index of the surface phase in each InterfaceKinetics object More...

std::vector< size_t > m_specStartIndex

size_t m_nv
Total number of surface species in all surface phases. More...

size_t m_numTotalBulkSpecies

size_t m_numTotalSpecies

std::vector< vector_intpLocVec

std::unique_ptr< Integratorm_integ
Pointer to the CVODE integrator. More...

doublereal m_atol

doublereal m_rtol

doublereal m_maxstep
max step size More...

vector_fp m_work

vector_fp m_concSpecies
Temporary vector - length num species in the Kinetics object. More...

vector_fp m_concSpeciesSave

int m_mediumSpeciesStart
Index into the species vector of the kinetics manager, pointing to the first species from the surrounding medium. More...

int m_bulkSpeciesStart
Index into the species vector of the kinetics manager, pointing to the first species from the condensed phase of the particles. More...

int m_surfSpeciesStart
Index into the species vector of the kinetics manager, pointing to the first species from the surface of the particles. More...

std::unique_ptr< solveSPm_surfSolver
Pointer to the helper method, Placid, which solves the surface problem. More...

bool m_commonTempPressForPhases
If true, a common temperature and pressure for all surface and bulk phases associated with the surface problem is imposed. More...

Protected Attributes inherited from FuncEval
bool m_suppress_errors

std::vector< std::string > m_errors
Errors occuring during function evaluations. More...

## Private Attributes

int m_ioFlag
Controls the amount of printing from this routine and underlying routines. More...

## Friends

class solveSS
We make the solveSS class a friend because we need to access all of the above information directly. More...

## Additional Inherited Members

Public Attributes inherited from FuncEval
vector_fp m_sens_params
Values for the problem parameters for which sensitivities are computed This is the array which is perturbed and passed back as the fourth argument to eval(). More...

vector_fp m_paramScales
Scaling factors for each sensitivity parameter. More...

## Detailed Description

Advances the surface coverages of the associated set of SurfacePhase objects in time.

This function advances a set of SurfPhase objects, each associated with one InterfaceKinetics object, in time. The following equation is used for each surface phase, i.

$\dot \theta_k = \dot s_k (\sigma_k / s_0)$

In this equation,

• $$\theta_k$$ is the site coverage for the kth species.
• $$\dot s_k$$ is the source term for the kth species
• $$\sigma_k$$ is the number of surface sites covered by each species k.
• $$s_0$$ is the total site density of the interfacial phase.

Additionally, the 0'th equation in the set is discarded. Instead the alternate equation is solved for

$\sum_{k=0}^{N-1} \dot \theta_k = 0$

This last equation serves to ensure that sum of the $$\theta_k$$ values stays constant.

The object uses the CVODE software to advance the surface equations.

The solution vector used by this object is as follows: For each surface phase with $$N_s$$ surface sites, it consists of the surface coverages $$\theta_k$$ for $$k = 0, N_s - 1$$

Definition at line 56 of file ImplicitSurfChem.h.

## ◆ ImplicitSurfChem()

 ImplicitSurfChem ( std::vector< InterfaceKinetics *> k )

Constructor for multiple surfaces.

Parameters
 k Vector of pointers to InterfaceKinetics objects Each object consists of a surface or an edge containing internal degrees of freedom representing the concentration of surface adsorbates.

Definition at line 20 of file ImplicitSurfChem.cpp.

## ◆ initialize()

 void initialize ( doublereal t0 = 0.0 )
virtual

Must be called before calling method 'advance'

Definition at line 115 of file ImplicitSurfChem.cpp.

References ImplicitSurfChem::m_integ.

## ◆ integrate()

 void integrate ( doublereal t0, doublereal t1 )

Integrate from t0 to t1. The integrator is reinitialized first.

This routine does a time accurate solve from t = t0 to t = t1. of the surface problem.

Parameters
 t0 Initial Time -> this is an input t1 Final Time -> This is an input

Definition at line 121 of file ImplicitSurfChem.cpp.

References ImplicitSurfChem::m_integ, and ImplicitSurfChem::updateState().

## ◆ integrate0()

 void integrate0 ( doublereal t0, doublereal t1 )

Integrate from t0 to t1 without reinitializing the integrator.

Use when the coverages have not changed from their values on return from the last call to integrate or integrate0.

Parameters
 t0 Initial Time -> this is an input t1 Final Time -> This is an input

Definition at line 129 of file ImplicitSurfChem.cpp.

References ImplicitSurfChem::m_integ, and ImplicitSurfChem::updateState().

 void solvePseudoSteadyStateProblem ( int ifuncOverride = -1, doublereal timeScaleOverride = 1.0 )

Solve for the pseudo steady-state of the surface problem.

Solve for the steady state of the surface problem. This is the same thing as the advanceCoverages() function, but at infinite times.

Note, a direct solve is carried out under the hood here, to reduce the computational time.

Parameters
 ifuncOverride One of the values defined in Surface Problem Solver Methods. The default is -1, which means that the program will decide. timeScaleOverride When a pseudo transient is selected this value can be used to override the default time scale for integration which is one. When SFLUX_TRANSIENT is used, this is equal to the time over which the equations are integrated. When SFLUX_INITIALIZE is used, this is equal to the time used in the initial transient algorithm, before the equation system is solved directly.

Definition at line 163 of file ImplicitSurfChem.cpp.

## ◆ neq()

 virtual size_t neq ( )
inlinevirtual

Return the number of equations.

Implements FuncEval.

Definition at line 119 of file ImplicitSurfChem.h.

References ImplicitSurfChem::m_nv.

## ◆ eval()

 void eval ( doublereal t, doublereal * y, doublereal * ydot, doublereal * p )
virtual

Evaluate the value of ydot[k] at the current conditions.

Parameters
 t Time (seconds) y Vector containing the current solution vector ydot Output vector containing the value of the derivative of the surface coverages. p Unused parameter pass-through parameter vector

Implements FuncEval.

Definition at line 144 of file ImplicitSurfChem.cpp.

## ◆ getInitialConditions()

 void getInitialConditions ( doublereal t0, size_t leny, doublereal * y )
virtual

Set the initial conditions for the solution vector.

Essentially calls getState()

Parameters
 t0 Initial time leny Length of the solution vector y Value of the solution vector to be used. On output, this contains the initial value of the solution.
Deprecated:
Use getState() instead. To be removed after Cantera 2.3.

Reimplemented from FuncEval.

Definition at line 98 of file ImplicitSurfChem.cpp.

## ◆ getState()

 void getState ( doublereal * y )
virtual

Get the current state of the solution vector.

Parameters
 y Value of the solution vector to be used. On output, this contains the initial value of the solution.

Reimplemented from FuncEval.

Definition at line 106 of file ImplicitSurfChem.cpp.

## ◆ getConcSpecies()

 void getConcSpecies ( doublereal *const vecConcSpecies ) const

Get the specifications for the problem from the values in the ThermoPhase objects for all phases.

1. concentrations of all species in all phases, m_concSpecies
2. Temperature and pressure
Parameters
 vecConcSpecies Vector of concentrations. The phase concentration vectors are contiguous within the object, in the same order as the unknown vector.

Definition at line 239 of file ImplicitSurfChem.cpp.

## ◆ setConcSpecies()

 void setConcSpecies ( const doublereal *const vecConcSpecies )

Sets the concentrations within phases that are unknowns in the surface problem.

Fills the local concentration vector for all of the species in all of the phases that are unknowns in the surface problem.

Parameters
 vecConcSpecies Vector of concentrations. The phase concentration vectors are contiguous within the object, in the same order as the unknown vector.

Definition at line 255 of file ImplicitSurfChem.cpp.

## ◆ setCommonState_TP()

 void setCommonState_TP ( doublereal TKelvin, doublereal PresPa )

Sets the state variable in all thermodynamic phases (surface and surrounding bulk phases) to the input temperature and pressure.

Parameters
 TKelvin input temperature (kelvin) PresPa input pressure in pascal.

Definition at line 271 of file ImplicitSurfChem.cpp.

## ◆ getObjects()

 std::vector& getObjects ( )
inline

Returns a reference to the vector of pointers to the InterfaceKinetics objects.

This should probably go away in the future, as it opens up the class.

Definition at line 193 of file ImplicitSurfChem.h.

References ImplicitSurfChem::m_vecKinPtrs.

 void updateState ( doublereal * y )
protected

Set the mixture to a state consistent with solution vector y.

This function will set the surface site factions in the underlying SurfPhase objects to the current value of the solution vector.

Parameters
 y Current value of the solution vector. The lenth is equal to the sum of the number of surface sites in all the surface phases.

Definition at line 135 of file ImplicitSurfChem.cpp.

## ◆ solveSS

 friend class solveSS
friend

We make the solveSS class a friend because we need to access all of the above information directly.

Adding the members into the class is also a possibility.

Definition at line 283 of file ImplicitSurfChem.h.

## ◆ m_surf

 std::vector m_surf
protected

vector of pointers to surface phases.

Definition at line 216 of file ImplicitSurfChem.h.

## ◆ m_bulkPhases

 std::vector m_bulkPhases
protected

Vector of pointers to bulk phases.

Definition at line 219 of file ImplicitSurfChem.h.

## ◆ m_vecKinPtrs

 std::vector m_vecKinPtrs
protected

vector of pointers to InterfaceKinetics objects

Definition at line 222 of file ImplicitSurfChem.h.

## ◆ m_nsp

 std::vector m_nsp
protected

Vector of number of species in each Surface Phase.

Definition at line 225 of file ImplicitSurfChem.h.

Referenced by ImplicitSurfChem::eval().

## ◆ m_surfindex

 std::vector m_surfindex
protected

index of the surface phase in each InterfaceKinetics object

Definition at line 228 of file ImplicitSurfChem.h.

Referenced by ImplicitSurfChem::eval().

## ◆ m_nv

 size_t m_nv
protected

Total number of surface species in all surface phases.

This is the total number of unknowns in m_mode 0 problem

Definition at line 236 of file ImplicitSurfChem.h.

## ◆ m_integ

 std::unique_ptr m_integ
protected

Pointer to the CVODE integrator.

Definition at line 243 of file ImplicitSurfChem.h.

## ◆ m_maxstep

 doublereal m_maxstep
protected

max step size

Definition at line 245 of file ImplicitSurfChem.h.

## ◆ m_concSpecies

 vector_fp m_concSpecies
protected

Temporary vector - length num species in the Kinetics object.

This is the sum of the number of species in each phase included in the kinetics object.

Definition at line 253 of file ImplicitSurfChem.h.

## ◆ m_mediumSpeciesStart

 int m_mediumSpeciesStart
protected

Index into the species vector of the kinetics manager, pointing to the first species from the surrounding medium.

Definition at line 260 of file ImplicitSurfChem.h.

## ◆ m_bulkSpeciesStart

 int m_bulkSpeciesStart
protected

Index into the species vector of the kinetics manager, pointing to the first species from the condensed phase of the particles.

Definition at line 265 of file ImplicitSurfChem.h.

## ◆ m_surfSpeciesStart

 int m_surfSpeciesStart
protected

Index into the species vector of the kinetics manager, pointing to the first species from the surface of the particles.

Definition at line 270 of file ImplicitSurfChem.h.

## ◆ m_surfSolver

 std::unique_ptr m_surfSolver
protected

Pointer to the helper method, Placid, which solves the surface problem.

Definition at line 274 of file ImplicitSurfChem.h.

## ◆ m_commonTempPressForPhases

 bool m_commonTempPressForPhases
protected

If true, a common temperature and pressure for all surface and bulk phases associated with the surface problem is imposed.

Definition at line 278 of file ImplicitSurfChem.h.

## ◆ m_ioFlag

 int m_ioFlag
private

Controls the amount of printing from this routine and underlying routines.

Definition at line 288 of file ImplicitSurfChem.h.