www.mooseframework.org
CoupledBEEquilibriumSub.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 
11 
12 registerMooseObject("ChemicalReactionsApp", CoupledBEEquilibriumSub);
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<TimeDerivative>();
19  params.addParam<Real>(
20  "weight", 1.0, "The weight of the equilibrium species in total concentration");
21  params.addCoupledVar("log_k", 0.0, "The equilibrium constant of this equilibrium species");
22  params.addParam<Real>(
23  "sto_u",
24  1.0,
25  "The stoichiometric coefficient of the primary species this kernel operates on");
26  params.addCoupledVar(
27  "gamma_u", 1.0, "Activity coefficient of primary species that this kernel operates on");
28  params.addParam<std::vector<Real>>("sto_v",
29  "The stoichiometric coefficients of coupled primary species");
30  params.addCoupledVar("gamma_v", 1.0, "Activity coefficients of coupled primary species");
31  params.addCoupledVar("gamma_eq", 1.0, "Activity coefficient of this equilibrium species");
32  params.addCoupledVar("v", "Coupled primary species constituting the equilibrium species");
33  params.addClassDescription("Derivative of equilibrium species concentration wrt time");
34  return params;
35 }
36 
37 CoupledBEEquilibriumSub::CoupledBEEquilibriumSub(const InputParameters & parameters)
38  : TimeDerivative(parameters),
39  _weight(getParam<Real>("weight")),
40  _log_k(coupledValue("log_k")),
41  _sto_u(getParam<Real>("sto_u")),
42  _sto_v(getParam<std::vector<Real>>("sto_v")),
43  _gamma_u(coupledValue("gamma_u")),
44  _gamma_u_old(coupledValueOld("gamma_u")),
45  _gamma_eq(coupledValue("gamma_eq")),
46  _gamma_eq_old(coupledValueOld("gamma_eq")),
47  _porosity(getMaterialProperty<Real>("porosity")),
48  _u_old(valueOld())
49 {
50  const unsigned int n = coupledComponents("v");
51 
52  // Check that the correct number of coupled values have been provided
53  if (_sto_v.size() != n)
54  mooseError("The number of stoichiometric coefficients in sto_v is not equal to the number of "
55  "coupled species in ",
56  _name);
57 
58  if (isCoupled("gamma_v"))
59  if (coupledComponents("gamma_v") != n)
60  mooseError("The number of activity coefficients in gamma_v is not equal to the number of "
61  "coupled species in ",
62  _name);
63 
64  _vars.resize(n);
65  _v_vals.resize(n);
66  _v_vals_old.resize(n);
67  _gamma_v.resize(n);
68  _gamma_v_old.resize(n);
69 
70  for (unsigned int i = 0; i < _vars.size(); ++i)
71  {
72  _vars[i] = coupled("v", i);
73  _v_vals[i] = &coupledValue("v", i);
74  _v_vals_old[i] = &coupledValueOld("v", i);
75  // If gamma_v has been supplied, use those values, but if not, use the default value
76  _gamma_v[i] = (isCoupled("gamma_v") ? &coupledValue("gamma_v", i) : &coupledValue("gamma_v"));
77  _gamma_v_old[i] =
78  (isCoupled("gamma_v") ? &coupledValueOld("gamma_v", i) : &coupledValue("gamma_v"));
79  }
80 }
81 
82 Real
84 {
85  mooseAssert(_gamma_eq[_qp] > 0.0, "Activity coefficient must be greater than zero");
86 
87  // Contribution due to primary species that this kernel acts on
88  Real val_new =
89  std::pow(10.0, _log_k[_qp]) * std::pow(_gamma_u[_qp] * _u[_qp], _sto_u) / _gamma_eq[_qp];
90  Real val_old = std::pow(10.0, _log_k[_qp]) * std::pow(_gamma_u_old[_qp] * _u_old[_qp], _sto_u) /
91  _gamma_eq_old[_qp];
92 
93  // Contribution due to coupled primary species
94  for (unsigned int i = 0; i < _vars.size(); ++i)
95  {
96  val_new *= std::pow((*_gamma_v[i])[_qp] * (*_v_vals[i])[_qp], _sto_v[i]);
97  val_old *= std::pow((*_gamma_v_old[i])[_qp] * (*_v_vals_old[i])[_qp], _sto_v[i]);
98  }
99 
100  return _porosity[_qp] * _weight * _test[_i][_qp] * (val_new - val_old) / _dt;
101 }
102 
103 Real
105 {
106  Real val_new = std::pow(10.0, _log_k[_qp]) * _sto_u * _gamma_u[_qp] *
107  std::pow(_gamma_u[_qp] * _u[_qp], _sto_u - 1.0) * _phi[_j][_qp] / _gamma_eq[_qp];
108 
109  for (unsigned int i = 0; i < _vars.size(); ++i)
110  val_new *= std::pow((*_gamma_v[i])[_qp] * (*_v_vals[i])[_qp], _sto_v[i]);
111 
112  return _porosity[_qp] * _test[_i][_qp] * _weight * val_new / _dt;
113 }
114 
115 Real
117 {
118  // If no coupled species, return 0
119  if (_v_vals.size() == 0)
120  return 0.0;
121 
122  // If jvar is not one of the coupled species, return 0
123  if (std::find(_vars.begin(), _vars.end(), jvar) == _vars.end())
124  return 0.0;
125 
126  Real val_new =
127  std::pow(10.0, _log_k[_qp]) * std::pow(_gamma_u[_qp] * _u[_qp], _sto_u) / _gamma_eq[_qp];
128 
129  for (unsigned int i = 0; i < _vars.size(); ++i)
130  {
131  if (jvar == _vars[i])
132  val_new *= _sto_v[i] * (*_gamma_v[i])[_qp] *
133  std::pow((*_gamma_v[i])[_qp] * (*_v_vals[i])[_qp], _sto_v[i] - 1.0) *
134  _phi[_j][_qp];
135  else
136  val_new *= std::pow((*_gamma_v[i])[_qp] * (*_v_vals[i])[_qp], _sto_v[i]);
137  }
138 
139  return _porosity[_qp] * _test[_i][_qp] * _weight * val_new / _dt;
140 }
CoupledBEEquilibriumSub::_sto_v
const std::vector< Real > _sto_v
Stoichiometric coefficients of the coupled primary species in the equilibrium species.
Definition: CoupledBEEquilibriumSub.h:40
CoupledBEEquilibriumSub::_v_vals_old
std::vector< const VariableValue * > _v_vals_old
Old values of coupled primary species concentrations.
Definition: CoupledBEEquilibriumSub.h:60
CoupledBEEquilibriumSub::_gamma_eq_old
const VariableValue & _gamma_eq_old
Old activity coefficient of equilibrium species.
Definition: CoupledBEEquilibriumSub.h:52
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
registerMooseObject
registerMooseObject("ChemicalReactionsApp", CoupledBEEquilibriumSub)
CoupledBEEquilibriumSub::computeQpJacobian
virtual Real computeQpJacobian() override
Definition: CoupledBEEquilibriumSub.C:104
validParams< CoupledBEEquilibriumSub >
InputParameters validParams< CoupledBEEquilibriumSub >()
Definition: CoupledBEEquilibriumSub.C:16
CoupledBEEquilibriumSub::_weight
const Real _weight
Weight of the equilibrium species in the total primary species.
Definition: CoupledBEEquilibriumSub.h:34
CoupledBEEquilibriumSub::_gamma_v_old
std::vector< const VariableValue * > _gamma_v_old
Old activity coefficients of coupled primary species in the equilibrium species.
Definition: CoupledBEEquilibriumSub.h:48
CoupledBEEquilibriumSub::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar) override
Definition: CoupledBEEquilibriumSub.C:116
CoupledBEEquilibriumSub::_v_vals
std::vector< const VariableValue * > _v_vals
Coupled primary species concentrations.
Definition: CoupledBEEquilibriumSub.h:58
CoupledBEEquilibriumSub::_vars
std::vector< unsigned int > _vars
Coupled primary species variable numbers.
Definition: CoupledBEEquilibriumSub.h:56
CoupledBEEquilibriumSub
Time derivative of primary species in given equilibrium species.
Definition: CoupledBEEquilibriumSub.h:22
CoupledBEEquilibriumSub::_sto_u
const Real _sto_u
Stoichiometric coefficient of the primary species in the equilibrium species.
Definition: CoupledBEEquilibriumSub.h:38
CoupledBEEquilibriumSub::_gamma_eq
const VariableValue & _gamma_eq
Activity coefficient of equilibrium species.
Definition: CoupledBEEquilibriumSub.h:50
CoupledBEEquilibriumSub::_gamma_u
const VariableValue & _gamma_u
Activity coefficient of primary species in the equilibrium species.
Definition: CoupledBEEquilibriumSub.h:42
CoupledBEEquilibriumSub::computeQpResidual
virtual Real computeQpResidual() override
Definition: CoupledBEEquilibriumSub.C:83
CoupledBEEquilibriumSub::_u_old
const VariableValue & _u_old
Old value of the primary species concentration.
Definition: CoupledBEEquilibriumSub.h:62
CoupledBEEquilibriumSub::_gamma_u_old
const VariableValue & _gamma_u_old
Old activity coefficient of primary species in the equilibrium species.
Definition: CoupledBEEquilibriumSub.h:44
CoupledBEEquilibriumSub::_log_k
const VariableValue & _log_k
Equilibrium constant for the equilibrium species.
Definition: CoupledBEEquilibriumSub.h:36
CoupledBEEquilibriumSub::_gamma_v
std::vector< const VariableValue * > _gamma_v
Activity coefficients of coupled primary species in the equilibrium species.
Definition: CoupledBEEquilibriumSub.h:46
CoupledBEEquilibriumSub.h
CoupledBEEquilibriumSub::_porosity
const MaterialProperty< Real > & _porosity
Porosity.
Definition: CoupledBEEquilibriumSub.h:54
CoupledBEEquilibriumSub::CoupledBEEquilibriumSub
CoupledBEEquilibriumSub(const InputParameters &parameters)
Definition: CoupledBEEquilibriumSub.C:37