www.mooseframework.org
AqueousEquilibriumRxnAux.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", AqueousEquilibriumRxnAux);
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<AuxKernel>();
19  params.addCoupledVar("log_k", 0.0, "The equilibrium constant in dissociation form");
20  params.addRequiredParam<std::vector<Real>>("sto_v",
21  "The stoichiometric coefficient of reactants");
22  params.addRequiredCoupledVar(
23  "v", "The list of primary species participating in this equilibrium species");
24  params.addCoupledVar("gamma", 1.0, "Activity coefficient of this secondary equilibrium species");
25  params.addCoupledVar("gamma_v", 1.0, "Activity coefficients of coupled primary species");
26  params.addClassDescription("Concentration of secondary equilibrium species");
27  return params;
28 }
29 
30 AqueousEquilibriumRxnAux::AqueousEquilibriumRxnAux(const InputParameters & parameters)
31  : AuxKernel(parameters),
32  _log_k(coupledValue("log_k")),
33  _sto_v(getParam<std::vector<Real>>("sto_v")),
34  _gamma_eq(coupledValue("gamma"))
35 {
36  const unsigned int n = coupledComponents("v");
37 
38  // Check that the correct number of stoichiometric coefficients have been provided
39  if (_sto_v.size() != n)
40  mooseError("The number of stoichiometric coefficients in sto_v is not equal to the number of "
41  "coupled species in ",
42  _name);
43 
44  // Check that the correct number of activity coefficients have been provided (if applicable)
45  if (isCoupled("gamma_v"))
46  if (coupledComponents("gamma_v") != n)
47  mooseError("The number of activity coefficients in gamma_v is not equal to the number of "
48  "coupled species in ",
49  _name);
50 
51  _vals.resize(n);
52  _gamma_v.resize(n);
53 
54  for (unsigned int i = 0; i < n; ++i)
55  {
56  _vals[i] = &coupledValue("v", i);
57  // If gamma_v has been supplied, use those values, but if not, use the default value
58  _gamma_v[i] = (isCoupled("gamma_v") ? &coupledValue("gamma_v", i) : &coupledValue("gamma_v"));
59  }
60 }
61 
62 Real
64 {
65  Real conc_product = 1.0;
66 
67  for (unsigned int i = 0; i < _vals.size(); ++i)
68  conc_product *= std::pow((*_gamma_v[i])[_qp] * (*_vals[i])[_qp], _sto_v[i]);
69 
70  mooseAssert(_gamma_eq[_qp] > 0.0, "Activity coefficient must be greater than zero");
71  return std::pow(10.0, _log_k[_qp]) * conc_product / _gamma_eq[_qp];
72 }
registerMooseObject
registerMooseObject("ChemicalReactionsApp", AqueousEquilibriumRxnAux)
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
validParams< AqueousEquilibriumRxnAux >
InputParameters validParams< AqueousEquilibriumRxnAux >()
Definition: AqueousEquilibriumRxnAux.C:16
AqueousEquilibriumRxnAux::AqueousEquilibriumRxnAux
AqueousEquilibriumRxnAux(const InputParameters &parameters)
Definition: AqueousEquilibriumRxnAux.C:30
AqueousEquilibriumRxnAux::_gamma_eq
const VariableValue & _gamma_eq
Activity coefficient of equilibrium species.
Definition: AqueousEquilibriumRxnAux.h:39
AqueousEquilibriumRxnAux::_log_k
const VariableValue & _log_k
Equilibrium constant.
Definition: AqueousEquilibriumRxnAux.h:31
AqueousEquilibriumRxnAux::computeValue
virtual Real computeValue() override
Definition: AqueousEquilibriumRxnAux.C:63
AqueousEquilibriumRxnAux
Calculates equilibrium species concentration according to the mass action law.
Definition: AqueousEquilibriumRxnAux.h:22
AqueousEquilibriumRxnAux::_sto_v
const std::vector< Real > _sto_v
Stoichiometric coefficients of coupled primary species.
Definition: AqueousEquilibriumRxnAux.h:33
AqueousEquilibriumRxnAux::_gamma_v
std::vector< const VariableValue * > _gamma_v
Activity coefficients of coupled primary species.
Definition: AqueousEquilibriumRxnAux.h:37
AqueousEquilibriumRxnAux.h
AqueousEquilibriumRxnAux::_vals
std::vector< const VariableValue * > _vals
Coupled primary species.
Definition: AqueousEquilibriumRxnAux.h:35