NEML2 2.0.0
Loading...
Searching...
No Matches
Reactive Infiltration

This example demonstrates the use of the chemical reactions physics module to compose models for reactive infiltration kinetics, as a solid \((S)\) material is infiltrated by a liquid \((L)\) to create a product \((P)\). The framework and usage of the model is explained below, with both mathematical formulations and example input files.

Representative Volume Element

The infiltration process for a material considers a cylindrical Representative Volume Element (RVE) with radius \(R\) and span \(H\), depicting a solid capillary of radius \(r_o\), corresponding to the initial porosity of \(\varphi_0\). The mathematical description of the model uses cylindrical coordinates and assumes axisymmetry around \(r = 0\).

As the liquid enters the cylinder, it reacts with a solid to form a product with thickness \(\delta_P\), as shown schematically in the figure below.

The (a) top and (b) cross-section view of the Representative Volume Element (RVE) of a given state of the reactive infiltration process, depicting the outer solid walls, the infiltrated liquid and the product from the chemical reaction

Throughout this process, the solid radius, \(r_o\), decreases while the product thickness, \(\delta_P\), increases. Let \(r_i\) denote the inner radius of the product. In addition, define \(\alpha_i\) (in units of mole per volume) as the amount of substance in the RVE, and \(\Omega_i = \dfrac{M_i}{\rho_i}\) as the molar volume of a material with molar mass \(M_i\) (in units of amu, or gram per mole) and density \(\rho_i\) (mass per volume), with subscripts taking \(L\), \(S\), and \(P\), respectively.

The volume fraction, \(\varphi_i\) of each material is then

\[ \varphi_i = \alpha_i \Omega_i \]

and the RVE porosity (void) is

\[ \varphi_v = 1 - \varphi_L - \varphi_P - \varphi_S \]

Key assumptions made throughout the derivation are:

  • Liquid remains liquid over the entire course of reaction, i.e., no phase change.
  • The reaction is irreversible.
  • Formation of the initial product layer is immediate once liquid comes into contact with solid.
  • Once product is formed, reaction rate is primarily limited by the diffusion of liquid through product to the product-solid interface, with a diffusion coefficient \(D\).
  • The product wall thickness remains uniform during the infiltration.
  • The only reaction is between the liquid and the solid.

The following nondimensionalization is applied to the constitutive model for the reactive infiltration process.

\begin{align*} &\ \bar{\delta}_P = \frac{\delta_P}{R}, \quad \bar{r}_o = \dfrac{r_o}{R} = \sqrt{1-\varphi_S}, \quad \bar{r}_i = \dfrac{r_i}{R} = \sqrt{1-\varphi_S-\varphi_P}. \end{align*}

The complete state of the RVE is denoted by the tuple \(\left( \varphi_L, \varphi_S, \varphi_P\right)\), with \(\alpha_L\) as the prescribed force.

‍Mathematically, it is possible that \( \varphi_L + \varphi_P + \varphi_S \ge 1 \). Physically, this implies "overflow", aka the prescribed \(\alpha_L\) is larger than the available voids. Care must be taken at the macroscopic model to avoid or resolve this issue.

Governing equations

The initial-value problem (IVP) corresponding to the constitutive model is

\[ \mathbf{r} = \begin{Bmatrix} r_{\varphi_P} \\ r_{\varphi_S} \end{Bmatrix} = \mathbf{0}, \]

where \(r_{\varphi_i}\) is the residual corresponding to the volume fraction of the liquid, solid and product. The residuals are defined below. Note an implicit backward-Euler time intergration scheme is used.

  • Production rate of the product, dictates by the diffusion of the liquid through the product to react with the solid at the product-solid interface

    \[ r_{\varphi_P} = \dfrac{\alpha_{P, n+1} - \alpha_{P, n}}{t_{n+1}-t_n} - \dfrac{2}{\Omega_L}\dfrac{D}{l_c^2}\dfrac{\bar{r}_o+\bar{r}_i}{\bar{r}_o-\bar{r}_i} R_L R_S \]

    Here \(R_L(\varphi_L), R_S(\varphi_S) \in [0, 1]\) are the reactivity of liquid and solid, represented by a step function of the void fraction, \(\varphi_i\).
  • Reaction rate of the solid, with a (solid, product) reaction coefficient, \((k_S, k_P)\) respectively

    \[ r_{\varphi_S} = \dfrac{\alpha_{S, n+1} - \alpha_{S, n}}{t_{n+1}-t_n} + \dfrac{k_P}{k_S} \dfrac{\alpha_{P, n+1} - \alpha_{P, n}}{t_{n+1}-t_n} \]

Implementation details

The above governing equations are fairly general for a wide range of reactive infiltration systems within this framework given the chemical reaction kinetics with appropriate reaction coefficient ( \(k_i\)) and the corresponding molar volume \(\Omega_i\) of the materials.

Example for determining \(k_i\) and \(\Omega_i\): Consider a reactive infiltration process of liquid (chemical formula \(L_x\)) and solid ( \(S_y\)), with the molar mass \(M_L\) and \(M_S\). The chemical reaction creates a product with chemical formula \(L_m S_n\), with reaction coefficients \(k_S\) and \(k_P\).

\[ L_x + k_S S_y \rightarrow k_P L_mS_n \]

For stoichiometric balance, the reaction coefficients are:

\begin{align*} k_S = \dfrac{xn}{ym}, \quad k_P = \dfrac{x}{m} \end{align*}

The densities of the liquid, solid, and product are respectively \(\rho_L, \rho_S, \rho_P\).

Then, the molar volume is:

\[ \Omega_L = \dfrac{x M_L}{\rho_L}. \quad \Omega_S = \dfrac{y M_S}{\rho_S}, \quad \Omega_P = \dfrac{mM_L+nM_S}{\rho_P}. \]

The instantaneous balance also implies that

\[ \dot{\alpha}_S = \dfrac{k_P}{k_S} \dot{\alpha}_P, \]

Since this constitutive model considers \(\alpha_L\) as the forcing function for the IVP problem, \(\dot{\alpha}_L \ne k_P \dot{\alpha}_P\).

The following table summarizes the relationship between the mathematical expressions and the NEML2 models.

Expression Syntax
\( \bar{r}_i = \sqrt{1-\varphi_S-\varphi_P}; \quad \bar{r}_o = \sqrt{1-\varphi_S}\) CylindricalChannelGeometry
\( \dfrac{2}{\Omega_L}\dfrac{D}{l_c^2}\dfrac{\bar{r}_o+\bar{r}_i}{\bar{r}_o-\bar{r}_i} R_L R_S\) DiffusionLimitedReaction
\( R_L; \quad R_S \) HermiteSmoothStep
\( \varphi_i = \alpha_i \Omega_i \) Linear Combination
\( r_{\varphi_P} = \dfrac{\alpha_{P, n+1} - \alpha_{P, n}}{t_{n+1}-t_n} - \dfrac{2}{\Omega_L}\dfrac{D}{l_c^2}\dfrac{\bar{r}_o+\bar{r}_i}{\bar{r}_o-\bar{r}_i} R_L R_S\) Linear Combination, Variable Rate
\(r_{\varphi_S} = \dfrac{\alpha_{S, n+1} - \alpha_{S, n}}{t_{n+1}-t_n} + \dfrac{k_P}{k_S} \dfrac{\alpha_{P, n+1} - \alpha_{P, n}}{t_{n+1}-t_n}\) Linear Combination, Variable Rate

Complete input file

A complete example input file for the reactive infiltration is shown below with the appropriate model composition.

ntime = 200
D = 1e-6
omega_Si = 12.0
omega_C = 5.3
omega_SiC = 12.5
chem_ratio = 1.0
oCm1 = 0.18867924528 # 1/Omega_C
oSiCm1 = 0.08 # 1/Omega_SiC
[Tensors]
[times]
type = LinspaceScalar
start = 0
end = 1e4
nstep = ${ntime}
[]
[alpha]
type = FullScalar
batch_shape = '(${ntime})'
value = 0.01
[]
[]
[Drivers]
[driver]
type = InfiltrationDriver
model = 'model'
prescribed_time = 'times'
time = 'forces/t'
prescribed_liquid_species_concentration = 'alpha'
liquid_species_concentration = 'forces/alpha'
ic_Scalar_names = 'state/phi_P state/phi_S state/alpha_P state/alpha_S'
ic_Scalar_values = '0 0.3 0 0.05660377358'
save_as = 'result.pt'
[]
[regression]
type = TransientRegression
driver = 'driver'
reference = 'gold/result.pt'
[]
[]
[Solvers]
[newton]
type = Newton
[]
[]
[Models]
[liquid_volume_fraction]
type = ScalarLinearCombination
from_var = 'forces/alpha'
to_var = 'state/phi_L'
coefficients = '${omega_Si}'
[]
[outer_radius]
type = CylindricalChannelGeometry
solid_fraction = 'state/phi_S'
product_fraction = 'state/phi_P'
inner_radius = 'state/ri'
outer_radius = 'state/ro'
[]
[liquid_reactivity]
type = HermiteSmoothStep
argument = 'state/phi_L'
value = 'state/R_L'
lower_bound = 0
upper_bound = 0.1
[]
[solid_reactivity]
type = HermiteSmoothStep
argument = 'state/phi_S'
value = 'state/R_S'
lower_bound = 0
upper_bound = 0.1
[]
[reaction_rate]
type = DiffusionLimitedReaction
diffusion_coefficient = '${D}'
molar_volume = '${omega_Si}'
product_inner_radius = 'state/ri'
solid_inner_radius = 'state/ro'
liquid_reactivity = 'state/R_L'
solid_reactivity = 'state/R_S'
reaction_rate = 'state/react'
[]
[substance_product]
type = ScalarLinearCombination
from_var = 'state/phi_P'
to_var = 'state/alpha_P'
coefficients = '${oSiCm1}'
[]
[product_rate]
type = ScalarVariableRate
variable = 'state/alpha_P'
rate = 'state/adot_P'
time = 'forces/t'
[]
[substance_solid]
type = ScalarLinearCombination
from_var = 'state/phi_S'
to_var = 'state/alpha_S'
coefficients = '${oCm1}'
[]
[solid_rate]
type = ScalarVariableRate
variable = 'state/alpha_S'
rate = 'state/adot_S'
time = 'forces/t'
[]
##############################################
### IVP
##############################################
[residual_phiP]
type = ScalarLinearCombination
from_var = 'state/adot_P state/react'
to_var = 'residual/phi_P'
coefficients = '1.0 -1.0'
[]
[residual_phiL]
type = ScalarLinearCombination
from_var = 'state/adot_P state/adot_S'
to_var = 'residual/phi_S'
coefficients = '1.0 ${chem_ratio}'
[]
[model_residual]
type = ComposedModel
models = "residual_phiP residual_phiL
liquid_volume_fraction outer_radius liquid_reactivity solid_reactivity
reaction_rate substance_product product_rate substance_solid solid_rate"
[]
[model_update]
type = ImplicitUpdate
implicit_model = 'model_residual'
solver = 'newton'
[]
[substance_product_new]
type = ScalarLinearCombination
from_var = 'state/phi_P'
to_var = 'state/alpha_P'
coefficients = '${oSiCm1}'
[]
[substance_solid_new]
type = ScalarLinearCombination
from_var = 'state/phi_S'
to_var = 'state/alpha_S'
coefficients = '${oCm1}'
[]
[model]
type = ComposedModel
models = 'model_update liquid_volume_fraction substance_solid_new substance_product_new'
additional_outputs = 'state/phi_P state/phi_S'
[]
[]

This example demonstrates the use of the chemical reactions physics module to compose models for reactive infiltration kinetics, as a solid \((S)\) material is infiltrated by a liquid \((L)\) to create a product \((P)\). The framework and usage of the model is explained below, with both mathematical formulations and example input files.

Representative Volume Element

The infiltration process for a material considers a cylindrical Representative Volume Element (RVE) with radius \(R\) and span \(H\), depicting a solid capillary of radius \(r_o\), corresponding to the initial porosity of \(\varphi_0\). The mathematical description of the model uses cylindrical coordinates and assumes axisymmetry around \(r = 0\).

As the liquid enters the cylinder, it reacts with a solid to form a product with thickness \(\delta_P\), as shown schematically in the figure below.

The (a) top and (b) cross-section view of the Representative Volume Element (RVE) of a given state of the reactive infiltration process, depicting the outer solid walls, the infiltrated liquid and the product from the chemical reaction

Throughout this process, the solid radius, \(r_o\), decreases while the product thickness, \(\delta_P\), increases. Let \(r_i\) denote the inner radius of the product. In addition, define \(\alpha_i\) (in units of mole per volume) as the amount of substance in the RVE, and \(\Omega_i = \dfrac{M_i}{\rho_i}\) as the molar volume of a material with molar mass \(M_i\) (in units of amu, or gram per mole) and density \(\rho_i\) (mass per volume), with subscripts taking \(L\), \(S\), and \(P\), respectively.

The volume fraction, \(\varphi_i\) of each material is then

\[ \varphi_i = \alpha_i \Omega_i \]

and the RVE porosity (void) is

\[ \varphi_v = 1 - \varphi_L - \varphi_P - \varphi_S \]

Key assumptions made throughout the derivation are:

  • Liquid remains liquid over the entire course of reaction, i.e., no phase change.
  • The reaction is irreversible.
  • Formation of the initial product layer is immediate once liquid comes into contact with solid.
  • Once product is formed, reaction rate is primarily limited by the diffusion of liquid through product to the product-solid interface, with a diffusion coefficient \(D\).
  • The product wall thickness remains uniform during the infiltration.
  • The only reaction is between the liquid and the solid.

The following nondimensionalization is applied to the constitutive model for the reactive infiltration process.

\begin{align*} &\ \bar{\delta}_P = \frac{\delta_P}{R}, \quad \bar{r}_o = \dfrac{r_o}{R} = \sqrt{1-\varphi_S}, \quad \bar{r}_i = \dfrac{r_i}{R} = \sqrt{1-\varphi_S-\varphi_P}. \end{align*}

The complete state of the RVE is denoted by the tuple \(\left( \varphi_L, \varphi_S, \varphi_P\right)\), with \(\alpha_L\) as the prescribed force.

‍Mathematically, it is possible that \( \varphi_L + \varphi_P + \varphi_S \ge 1 \). Physically, this implies "overflow", aka the prescribed \(\alpha_L\) is larger than the available voids. Care must be taken at the macroscopic model to avoid or resolve this issue.

Governing equations

The initial-value problem (IVP) corresponding to the constitutive model is

\[ \mathbf{r} = \begin{Bmatrix} r_{\varphi_P} \\ r_{\varphi_S} \end{Bmatrix} = \mathbf{0}, \]

where \(r_{\varphi_i}\) is the residual corresponding to the volume fraction of the liquid, solid and product. The residuals are defined below. Note an implicit backward-Euler time intergration scheme is used.

  • Production rate of the product, dictates by the diffusion of the liquid through the product to react with the solid at the product-solid interface

    \[ r_{\varphi_P} = \dfrac{\alpha_{P, n+1} - \alpha_{P, n}}{t_{n+1}-t_n} - \dfrac{2}{\Omega_L}\dfrac{D}{l_c^2}\dfrac{\bar{r}_o+\bar{r}_i}{\bar{r}_o-\bar{r}_i} R_L R_S \]

    Here \(R_L(\varphi_L), R_S(\varphi_S) \in [0, 1]\) are the reactivity of liquid and solid, represented by a step function of the void fraction, \(\varphi_i\).
  • Reaction rate of the solid, with a (solid, product) reaction coefficient, \((k_S, k_P)\) respectively

    \[ r_{\varphi_S} = \dfrac{\alpha_{S, n+1} - \alpha_{S, n}}{t_{n+1}-t_n} + \dfrac{k_P}{k_S} \dfrac{\alpha_{P, n+1} - \alpha_{P, n}}{t_{n+1}-t_n} \]

Implementation details

The above governing equations are fairly general for a wide range of reactive infiltration systems within this framework given the chemical reaction kinetics with appropriate reaction coefficient ( \(k_i\)) and the corresponding molar volume \(\Omega_i\) of the materials.

Example for determining \(k_i\) and \(\Omega_i\): Consider a reactive infiltration process of liquid (chemical formula \(L_x\)) and solid ( \(S_y\)), with the molar mass \(M_L\) and \(M_S\). The chemical reaction creates a product with chemical formula \(L_m S_n\), with reaction coefficients \(k_S\) and \(k_P\).

\[ L_x + k_S S_y \rightarrow k_P L_mS_n \]

For stoichiometric balance, the reaction coefficients are:

\begin{align*} k_S = \dfrac{xn}{ym}, \quad k_P = \dfrac{x}{m} \end{align*}

The densities of the liquid, solid, and product are respectively \(\rho_L, \rho_S, \rho_P\).

Then, the molar volume is:

\[ \Omega_L = \dfrac{x M_L}{\rho_L}. \quad \Omega_S = \dfrac{y M_S}{\rho_S}, \quad \Omega_P = \dfrac{mM_L+nM_S}{\rho_P}. \]

The instantaneous balance also implies that

\[ \dot{\alpha}_S = \dfrac{k_P}{k_S} \dot{\alpha}_P, \]

Since this constitutive model considers \(\alpha_L\) as the forcing function for the IVP problem, \(\dot{\alpha}_L \ne k_P \dot{\alpha}_P\).

The following table summarizes the relationship between the mathematical expressions and the NEML2 models.

Expression Syntax
\( \bar{r}_i = \sqrt{1-\varphi_S-\varphi_P}; \quad \bar{r}_o = \sqrt{1-\varphi_S}\) CylindricalChannelGeometry
\( \dfrac{2}{\Omega_L}\dfrac{D}{l_c^2}\dfrac{\bar{r}_o+\bar{r}_i}{\bar{r}_o-\bar{r}_i} R_L R_S\) DiffusionLimitedReaction
\( R_L; \quad R_S \) HermiteSmoothStep
\( \varphi_i = \alpha_i \Omega_i \) Linear Combination
\( r_{\varphi_P} = \dfrac{\alpha_{P, n+1} - \alpha_{P, n}}{t_{n+1}-t_n} - \dfrac{2}{\Omega_L}\dfrac{D}{l_c^2}\dfrac{\bar{r}_o+\bar{r}_i}{\bar{r}_o-\bar{r}_i} R_L R_S\) Linear Combination, Variable Rate
\(r_{\varphi_S} = \dfrac{\alpha_{S, n+1} - \alpha_{S, n}}{t_{n+1}-t_n} + \dfrac{k_P}{k_S} \dfrac{\alpha_{P, n+1} - \alpha_{P, n}}{t_{n+1}-t_n}\) Linear Combination, Variable Rate

Complete input file

A complete example input file for the reactive infiltration is shown below with the appropriate model composition.

ntime = 200
D = 1e-6
omega_Si = 12.0
omega_C = 5.3
omega_SiC = 12.5
chem_ratio = 1.0
oCm1 = 0.18867924528 # 1/Omega_C
oSiCm1 = 0.08 # 1/Omega_SiC
[Tensors]
[times]
type = LinspaceScalar
start = 0
end = 1e4
nstep = ${ntime}
[]
[alpha]
type = FullScalar
batch_shape = '(${ntime})'
value = 0.01
[]
[]
[Drivers]
[driver]
type = InfiltrationDriver
model = 'model'
prescribed_time = 'times'
time = 'forces/t'
prescribed_liquid_species_concentration = 'alpha'
liquid_species_concentration = 'forces/alpha'
ic_Scalar_names = 'state/phi_P state/phi_S state/alpha_P state/alpha_S'
ic_Scalar_values = '0 0.3 0 0.05660377358'
save_as = 'result.pt'
[]
[regression]
type = TransientRegression
driver = 'driver'
reference = 'gold/result.pt'
[]
[]
[Solvers]
[newton]
type = Newton
[]
[]
[Models]
[liquid_volume_fraction]
type = ScalarLinearCombination
from_var = 'forces/alpha'
to_var = 'state/phi_L'
coefficients = '${omega_Si}'
[]
[outer_radius]
type = CylindricalChannelGeometry
solid_fraction = 'state/phi_S'
product_fraction = 'state/phi_P'
inner_radius = 'state/ri'
outer_radius = 'state/ro'
[]
[liquid_reactivity]
type = HermiteSmoothStep
argument = 'state/phi_L'
value = 'state/R_L'
lower_bound = 0
upper_bound = 0.1
[]
[solid_reactivity]
type = HermiteSmoothStep
argument = 'state/phi_S'
value = 'state/R_S'
lower_bound = 0
upper_bound = 0.1
[]
[reaction_rate]
type = DiffusionLimitedReaction
diffusion_coefficient = '${D}'
molar_volume = '${omega_Si}'
product_inner_radius = 'state/ri'
solid_inner_radius = 'state/ro'
liquid_reactivity = 'state/R_L'
solid_reactivity = 'state/R_S'
reaction_rate = 'state/react'
[]
[substance_product]
type = ScalarLinearCombination
from_var = 'state/phi_P'
to_var = 'state/alpha_P'
coefficients = '${oSiCm1}'
[]
[product_rate]
type = ScalarVariableRate
variable = 'state/alpha_P'
rate = 'state/adot_P'
time = 'forces/t'
[]
[substance_solid]
type = ScalarLinearCombination
from_var = 'state/phi_S'
to_var = 'state/alpha_S'
coefficients = '${oCm1}'
[]
[solid_rate]
type = ScalarVariableRate
variable = 'state/alpha_S'
rate = 'state/adot_S'
time = 'forces/t'
[]
##############################################
### IVP
##############################################
[residual_phiP]
type = ScalarLinearCombination
from_var = 'state/adot_P state/react'
to_var = 'residual/phi_P'
coefficients = '1.0 -1.0'
[]
[residual_phiL]
type = ScalarLinearCombination
from_var = 'state/adot_P state/adot_S'
to_var = 'residual/phi_S'
coefficients = '1.0 ${chem_ratio}'
[]
[model_residual]
type = ComposedModel
models = "residual_phiP residual_phiL
liquid_volume_fraction outer_radius liquid_reactivity solid_reactivity
reaction_rate substance_product product_rate substance_solid solid_rate"
[]
[model_update]
type = ImplicitUpdate
implicit_model = 'model_residual'
solver = 'newton'
[]
[substance_product_new]
type = ScalarLinearCombination
from_var = 'state/phi_P'
to_var = 'state/alpha_P'
coefficients = '${oSiCm1}'
[]
[substance_solid_new]
type = ScalarLinearCombination
from_var = 'state/phi_S'
to_var = 'state/alpha_S'
coefficients = '${oCm1}'
[]
[model]
type = ComposedModel
models = 'model_update liquid_volume_fraction substance_solid_new substance_product_new'
additional_outputs = 'state/phi_P state/phi_S'
[]
[]