www.mooseframework.org
EquilibriumConstantAux.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 "EquilibriumConstantAux.h"
11 
12 registerMooseObject("ChemicalReactionsApp", EquilibriumConstantAux);
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<AuxKernel>();
19  params.addCoupledVar(
20  "temperature", 298.15, "The temperature of the aqueous phase (K). Default is 298.15K");
21  params.addRequiredParam<std::vector<Real>>(
22  "temperature_points", "Temperature points where log(Keq) data is evaluated (K)");
23  params.addRequiredParam<std::vector<Real>>(
24  "logk_points", "log(Keq) data evaluated at each value of temperature_points");
25  params.addClassDescription(
26  "Equilibrium constant for a given equilibrium species (in form log10(Keq))");
27  return params;
28 }
29 
30 EquilibriumConstantAux::EquilibriumConstantAux(const InputParameters & parameters)
31  : AuxKernel(parameters),
32  _temperature(coupledValue("temperature")),
33  _temperature_points(getParam<std::vector<Real>>("temperature_points")),
34  _logk_points(getParam<std::vector<Real>>("logk_points"))
35 {
36  // Check that the number of temperature_points and logk_points are equal
37  if (_temperature_points.size() != _logk_points.size())
38  mooseError("The number of temperature_points and logk_points must be equal in ", _name);
39 
40  if (_temperature_points.size() >= 5)
41  {
42  // If there at least 5 values, then use the Maier-Kelley fit
43  _logk = libmesh_make_unique<EquilibriumConstantFit>(_temperature_points, _logk_points);
44  _logk->generate();
45  }
46  else if ((_temperature_points.size() >= 2) && (_temperature_points.size() <= 4))
47  {
48  // If between 2 and 4 values are provided, use a linear fit
49  _linear_logk = libmesh_make_unique<PolynomialFit>(_temperature_points, _logk_points, 1);
50  _linear_logk->generate();
51  }
52 }
53 
54 Real
56 {
57  if (_temperature_points.size() == 1)
58  return -_logk_points[0];
59 
60  if (_temperature_points.size() > 5)
61  return -_logk->sample(_temperature[_qp]);
62 
63  return -_linear_logk->sample(_temperature[_qp]);
64 }
registerMooseObject
registerMooseObject("ChemicalReactionsApp", EquilibriumConstantAux)
EquilibriumConstantAux::_linear_logk
std::unique_ptr< PolynomialFit > _linear_logk
Linear least-squares fit.
Definition: EquilibriumConstantAux.h:58
EquilibriumConstantAux::_temperature_points
const std::vector< Real > & _temperature_points
Temperature points in data set (in K)
Definition: EquilibriumConstantAux.h:52
EquilibriumConstantAux::_logk_points
const std::vector< Real > & _logk_points
log(Keq) values at each temperature point
Definition: EquilibriumConstantAux.h:54
validParams< EquilibriumConstantAux >
InputParameters validParams< EquilibriumConstantAux >()
Definition: EquilibriumConstantAux.C:16
EquilibriumConstantAux::_logk
std::unique_ptr< EquilibriumConstantFit > _logk
Least-squares fit to data.
Definition: EquilibriumConstantAux.h:56
EquilibriumConstantAux.h
EquilibriumConstantAux::_temperature
const VariableValue & _temperature
Temperature (in K)
Definition: EquilibriumConstantAux.h:50
EquilibriumConstantAux::computeValue
virtual Real computeValue() override
Definition: EquilibriumConstantAux.C:55
EquilibriumConstantAux::EquilibriumConstantAux
EquilibriumConstantAux(const InputParameters &parameters)
Definition: EquilibriumConstantAux.C:30
EquilibriumConstantAux
Equilibrium constant (in the form log10(Keq)) calculated using a least-squares fit to the data provid...
Definition: EquilibriumConstantAux.h:41