www.mooseframework.org
PorousFlowAqueousPreDisMineral.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 
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<PorousFlowMaterialVectorBase>();
19  params.addCoupledVar("initial_concentrations",
20  "Initial concentrations for the mineral species "
21  "(m^{3}(precipitate)/m^{3}(porous material)). Default = 0");
22  params.addPrivateParam<std::string>("pf_material_type", "mineral");
23  params.addClassDescription("This Material forms a std::vector of mineral concentrations "
24  "(volume-of-mineral/volume-of-material) appropriate to the aqueous "
25  "precipitation-dissolution system provided.");
26  return params;
27 }
28 
30  : PorousFlowMaterialVectorBase(parameters),
31  _num_reactions(_dictator.numAqueousKinetic()),
32  _aq_ph(_dictator.aqueousPhaseNumber()),
33  _saturation(_nodal_material
34  ? getMaterialProperty<std::vector<Real>>("PorousFlow_saturation_nodal")
35  : getMaterialProperty<std::vector<Real>>("PorousFlow_saturation_qp")),
36  _sec_conc(_nodal_material
37  ? declareProperty<std::vector<Real>>("PorousFlow_mineral_concentration_nodal")
38  : declareProperty<std::vector<Real>>("PorousFlow_mineral_concentration_qp")),
39 
40  _porosity_old(_nodal_material ? getMaterialPropertyOld<Real>("PorousFlow_porosity_nodal")
41  : getMaterialPropertyOld<Real>("PorousFlow_porosity_qp")),
42  _sec_conc_old(
43  _nodal_material
44  ? getMaterialPropertyOld<std::vector<Real>>("PorousFlow_mineral_concentration_nodal")
45  : getMaterialPropertyOld<std::vector<Real>>("PorousFlow_mineral_concentration_qp")),
46  _reaction_rate(
47  _nodal_material
48  ? getMaterialProperty<std::vector<Real>>("PorousFlow_mineral_reaction_rate_nodal")
49  : getMaterialProperty<std::vector<Real>>("PorousFlow_mineral_reaction_rate_qp")),
50 
51  _initial_conc_supplied(isParamValid("initial_concentrations")),
52  _num_initial_conc(_initial_conc_supplied ? coupledComponents("initial_concentrations")
53  : _num_reactions)
54 {
55  /* Not needed due to PorousFlow_mineral_reaction_rate already checking this condition
56  if (_dictator.numPhases() < 1)
57  mooseError("PorousFlowAqueousPreDisMineral: The number of fluid phases must not be zero");
58  */
59 
60  if (_num_initial_conc != _dictator.numAqueousKinetic())
61  mooseError("PorousFlowAqueousPreDisMineral: The number of initial concentrations is ",
63  " but the Dictator knows that the number of aqueous kinetic "
64  "(precipitation-dissolution) reactions is ",
65  _dictator.numAqueousKinetic());
66 
69  for (unsigned r = 0; r < _num_reactions; ++r)
70  _initial_conc[r] = (_nodal_material ? &coupledDofValues("initial_concentrations", r)
71  : &coupledValue("initial_concentrations", r));
72 }
73 
74 void
76 {
77  _sec_conc[_qp].assign(_num_reactions, 0.0);
79  for (unsigned r = 0; r < _num_reactions; ++r)
80  _sec_conc[_qp][r] = (*_initial_conc[r])[_qp];
81 }
82 
83 void
85 {
86  _sec_conc[_qp].resize(_num_reactions);
87 
88  /*
89  *
90  * Note the use of the OLD value of porosity here.
91  * This strategy, which breaks the cyclic dependency between porosity
92  * and mineral concentration, is used in
93  * Kernel: PorousFlowPreDis
94  * Material: PorousFlowPorosity
95  * Material: PorousFlowAqueousPreDisChemistry
96  * Material: PorousFlowAqueousPreDisMineral
97  *
98  */
99  for (unsigned r = 0; r < _num_reactions; ++r)
100  _sec_conc[_qp][r] = _sec_conc_old[_qp][r] + _porosity_old[_qp] * _reaction_rate[_qp][r] *
101  _saturation[_qp][_aq_ph] * _dt;
102 }
PorousFlowMaterialVectorBase
Base class for all PorousFlow vector materials.
Definition: PorousFlowMaterialVectorBase.h:23
PorousFlowAqueousPreDisMineral::_reaction_rate
const MaterialProperty< std::vector< Real > > & _reaction_rate
Reaction rate of mineralisation.
Definition: PorousFlowAqueousPreDisMineral.h:52
PorousFlowAqueousPreDisMineral.h
validParams< PorousFlowMaterialVectorBase >
InputParameters validParams< PorousFlowMaterialVectorBase >()
Definition: PorousFlowMaterialVectorBase.C:14
PorousFlowAqueousPreDisMineral::_initial_conc_supplied
const bool _initial_conc_supplied
Whether the initial values of the secondary species concentrations have been supplied by the user.
Definition: PorousFlowAqueousPreDisMineral.h:56
PorousFlowAqueousPreDisMineral::PorousFlowAqueousPreDisMineral
PorousFlowAqueousPreDisMineral(const InputParameters &parameters)
Definition: PorousFlowAqueousPreDisMineral.C:29
validParams< PorousFlowAqueousPreDisMineral >
InputParameters validParams< PorousFlowAqueousPreDisMineral >()
Definition: PorousFlowAqueousPreDisMineral.C:16
PorousFlowAqueousPreDisMineral::_saturation
const MaterialProperty< std::vector< Real > > & _saturation
Saturation.
Definition: PorousFlowAqueousPreDisMineral.h:40
PorousFlowAqueousPreDisMineral::_initial_conc
std::vector< const VariableValue * > _initial_conc
Initial values of the secondary species concentrations.
Definition: PorousFlowAqueousPreDisMineral.h:62
PorousFlowAqueousPreDisMineral::_aq_ph
const unsigned int _aq_ph
Aqueous phase number.
Definition: PorousFlowAqueousPreDisMineral.h:37
PorousFlowAqueousPreDisMineral::_num_reactions
const unsigned int _num_reactions
Number of equations in the aqueous geochemistry system.
Definition: PorousFlowAqueousPreDisMineral.h:34
PorousFlowAqueousPreDisMineral::computeQpProperties
void computeQpProperties() override
Definition: PorousFlowAqueousPreDisMineral.C:84
PorousFlowAqueousPreDisMineral::_num_initial_conc
const unsigned _num_initial_conc
Number of secondary species concentrations supplied by the user.
Definition: PorousFlowAqueousPreDisMineral.h:59
PorousFlowAqueousPreDisMineral::initQpStatefulProperties
void initQpStatefulProperties() override
Definition: PorousFlowAqueousPreDisMineral.C:75
PorousFlowAqueousPreDisMineral
Material designed to form a std::vector of mass fractions of mineral concentrations from reaction rat...
Definition: PorousFlowAqueousPreDisMineral.h:24
PorousFlowAqueousPreDisMineral::_sec_conc
MaterialProperty< std::vector< Real > > & _sec_conc
Mineral concentrations at quadpoint or nodes.
Definition: PorousFlowAqueousPreDisMineral.h:43
PorousFlowAqueousPreDisMineral::_porosity_old
const MaterialProperty< Real > & _porosity_old
Porosity.
Definition: PorousFlowAqueousPreDisMineral.h:46
registerMooseObject
registerMooseObject("PorousFlowApp", PorousFlowAqueousPreDisMineral)
PorousFlowAqueousPreDisMineral::_sec_conc_old
const MaterialProperty< std::vector< Real > > & _sec_conc_old
Old values of the mineral species concentrations.
Definition: PorousFlowAqueousPreDisMineral.h:49