www.mooseframework.org
KineticDisPreRateAux.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #include "KineticDisPreRateAux.h"
11 
12 registerMooseObject("ChemicalReactionsApp", KineticDisPreRateAux);
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<AuxKernel>();
19  params.addCoupledVar("log_k", 0.0, "The equilibrium constant of the dissolution reaction");
20  params.addRequiredParam<std::vector<Real>>("sto_v",
21  "The stoichiometric coefficients of reactant species");
22  params.addParam<Real>("r_area", 0.1, "Specific reactive surface area in m^2/L solution");
23  params.addParam<Real>("ref_kconst", 6.456542e-8, "Kinetic rate constant in mol/m^2 s");
24  params.addParam<Real>("e_act", 2.91e4, "Activation energy, J/mol");
25  params.addParam<Real>("gas_const", 8.31434, "Gas constant, in J/mol K");
26  params.addParam<Real>("ref_temp", 298.15, "Reference temperature, K");
27  params.addCoupledVar("sys_temp", 298.15, "System temperature, K");
28  params.addCoupledVar("v", "The list of reactant species");
29  params.addClassDescription("Kinetic rate of secondary kinetic species");
30  return params;
31 }
32 
33 KineticDisPreRateAux::KineticDisPreRateAux(const InputParameters & parameters)
34  : AuxKernel(parameters),
35  _log_k(coupledValue("log_k")),
36  _r_area(getParam<Real>("r_area")),
37  _ref_kconst(getParam<Real>("ref_kconst")),
38  _e_act(getParam<Real>("e_act")),
39  _gas_const(getParam<Real>("gas_const")),
40  _ref_temp(getParam<Real>("ref_temp")),
41  _sys_temp(coupledValue("sys_temp")),
42  _sto_v(getParam<std::vector<Real>>("sto_v"))
43 {
44  const unsigned int n = coupledComponents("v");
45 
46  // Check that the number of stoichiometric coefficients is equal to the number
47  // of reactant species
48  if (_sto_v.size() != n)
49  mooseError(
50  "The number of stoichiometric coefficients in sto_v is not equal to the number of reactant "
51  "species in ",
52  _name);
53 
54  _vals.resize(n);
55  for (unsigned int i = 0; i < n; ++i)
56  _vals[i] = &coupledValue("v", i);
57 }
58 
59 Real
61 {
62  const Real kconst =
63  _ref_kconst * std::exp(_e_act * (1.0 / _ref_temp - 1.0 / _sys_temp[_qp]) / _gas_const);
64  Real omega = 1.0;
65 
66  if (_vals.size() > 0)
67  {
68  for (unsigned int i = 0; i < _vals.size(); ++i)
69  {
70  if ((*_vals[i])[_qp] < 0.0)
71  omega *= 0.0;
72  else
73  omega *= std::pow((*_vals[i])[_qp], _sto_v[i]);
74  }
75  }
76 
77  const Real saturation_SI = omega / std::pow(10.0, _log_k[_qp]);
78  Real kinetic_rate = _r_area * kconst * (1.0 - saturation_SI);
79 
80  if (std::abs(kinetic_rate) <= 1.0e-12)
81  kinetic_rate = 0.0;
82 
83  return -kinetic_rate;
84 }
KineticDisPreRateAux::_e_act
const Real _e_act
Activation energy.
Definition: KineticDisPreRateAux.h:40
KineticDisPreRateAux::_ref_kconst
const Real _ref_kconst
Reference kinetic rate constant.
Definition: KineticDisPreRateAux.h:38
KineticDisPreRateAux::_ref_temp
const Real _ref_temp
Reference temperature.
Definition: KineticDisPreRateAux.h:44
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
validParams< KineticDisPreRateAux >
InputParameters validParams< KineticDisPreRateAux >()
Definition: KineticDisPreRateAux.C:16
KineticDisPreRateAux.h
KineticDisPreRateAux::_sto_v
const std::vector< Real > _sto_v
Stoichiometric coefficients for involved primary species.
Definition: KineticDisPreRateAux.h:48
KineticDisPreRateAux::_sys_temp
const VariableValue & _sys_temp
Actual system temperature.
Definition: KineticDisPreRateAux.h:46
KineticDisPreRateAux::_gas_const
const Real _gas_const
Gas constant, 8.314 J/mol/K.
Definition: KineticDisPreRateAux.h:42
KineticDisPreRateAux::computeValue
virtual Real computeValue() override
Definition: KineticDisPreRateAux.C:60
registerMooseObject
registerMooseObject("ChemicalReactionsApp", KineticDisPreRateAux)
KineticDisPreRateAux::_log_k
const VariableValue & _log_k
Equilibrium constant at reference temperature.
Definition: KineticDisPreRateAux.h:34
KineticDisPreRateAux::_r_area
const Real _r_area
Specific reactive surface area, m^2/L solution.
Definition: KineticDisPreRateAux.h:36
KineticDisPreRateAux
Calculate the kinetic mineral species kinetic rate according to transient state theory rate law.
Definition: KineticDisPreRateAux.h:23
KineticDisPreRateAux::KineticDisPreRateAux
KineticDisPreRateAux(const InputParameters &parameters)
Definition: KineticDisPreRateAux.C:33
KineticDisPreRateAux::_vals
std::vector< const VariableValue * > _vals
Coupled primary species concentrations.
Definition: KineticDisPreRateAux.h:50