www.mooseframework.org
MollifiedLangmuirMaterial.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", MollifiedLangmuirMaterial);
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<Material>();
19 
20  params.addRequiredCoupledVar(
21  "one_over_desorption_time_const",
22  "Time constant for Langmuir desorption (gas moving from matrix to porespace). Units [s]");
23  params.addRequiredCoupledVar(
24  "one_over_adsorption_time_const",
25  "Time constant for Langmuir adsorption (gas moving from porespace to matrix). Units [s].");
26  params.addRequiredParam<Real>("langmuir_density",
27  "This is (Langmuir volume)*(density of gas at standard temp and "
28  "pressure). Langmuir volume is measured in (gas volume)/(matrix "
29  "volume). (Methane density(101kPa, 20degC) = 0.655kg/m^3. "
30  "Methane density(101kPa, 0degC) = 0.715kg/m^3.) Units [kg/m^3]");
31  params.addRequiredParam<Real>("langmuir_pressure", "Langmuir pressure. Units Pa");
32  params.addRequiredCoupledVar("conc_var", "The concentration of gas variable");
33  params.addRequiredCoupledVar("pressure_var", "The gas porepressure variable");
34  params.addRangeCheckedParam<Real>("mollifier",
35  0.1,
36  "mollifier > 0",
37  "The reciprocal of time constants will be "
38  "one_over_time_const*tanh( |conc_var - "
39  "equilib_conc|/(mollifier*langmuir_density)). So for "
40  "mollifier very small you will get a stepchange between "
41  "desorption and adsorption, but for mollifier bigger you "
42  "will be a gradual change");
43  params.addClassDescription("Material type that holds info regarding MollifiedLangmuir desorption "
44  "from matrix to porespace and viceversa");
45  return params;
46 }
47 
48 MollifiedLangmuirMaterial::MollifiedLangmuirMaterial(const InputParameters & parameters)
49  : Material(parameters),
50  // coupledValue returns a reference (an alias) to a VariableValue, and the & turns it into a
51  // pointer
52  _one_over_de_time_const(&coupledValue("one_over_desorption_time_const")),
53  _one_over_ad_time_const(&coupledValue("one_over_adsorption_time_const")),
54 
55  _langmuir_dens(getParam<Real>("langmuir_density")),
56  _langmuir_p(getParam<Real>("langmuir_pressure")),
57 
58  _conc(&coupledValue("conc_var")),
59  _pressure(&coupledValue("pressure_var")),
60 
61  _mollifier(getParam<Real>("mollifier")),
62 
63  _mass_rate_from_matrix(declareProperty<Real>("mass_rate_from_matrix")),
64  _dmass_rate_from_matrix_dC(declareProperty<Real>("dmass_rate_from_matrix_dC")),
65  _dmass_rate_from_matrix_dp(declareProperty<Real>("dmass_rate_from_matrix_dp"))
66 {
67 }
68 
69 void
71 {
72  Real equilib_conc = _langmuir_dens * ((*_pressure)[_qp]) / (_langmuir_p + (*_pressure)[_qp]);
73  Real dequilib_conc_dp =
74  _langmuir_dens / (_langmuir_p + (*_pressure)[_qp]) -
75  _langmuir_dens * ((*_pressure)[_qp]) / std::pow(_langmuir_p + (*_pressure)[_qp], 2);
76 
77  Real mol = std::tanh(std::abs((*_conc)[_qp] - equilib_conc) / (_mollifier * _langmuir_dens));
78  Real deriv_tanh =
79  1 - std::pow(std::tanh(((*_conc)[_qp] - equilib_conc) / (_mollifier * _langmuir_dens)), 2);
80  if ((*_conc)[_qp] < equilib_conc)
81  deriv_tanh *= -1;
82  Real dmol_dC = deriv_tanh / (_mollifier * _langmuir_dens);
83  Real dmol_dp = -dmol_dC * dequilib_conc_dp;
84 
85  /*
86  Real de_plus_ad = (*_one_over_de_time_const)[_qp] + (*_one_over_ad_time_const)[_qp];
87  Real de_minus_ad = (*_one_over_de_time_const)[_qp] - (*_one_over_ad_time_const)[_qp];
88 
89  Real one_over_tau = 0.5*de_plus_ad + 0.5*de_minus_ad*std::tanh( ((*_conc)[_qp] -
90  equilib_conc)/(_mollifier*_langmuir_dens));
91  Real deriv_tanh = 1 - std::pow(std::tanh(((*_conc)[_qp] -
92  equilib_conc)/(_mollifier*_langmuir_dens)), 2);
93  Real d_one_over_tau_dC = 0.5*de_minus_ad*deriv_tanh/(_mollifier*_langmuir_dens);
94  Real d_one_over_tau_dp = -0.5*de_minus_ad*dequilib_conc_dp*deriv_tanh/(_mollifier*_langmuir_dens);
95  */
96 
97  // form the base rate and derivs without the appropriate time const
98  _mass_rate_from_matrix[_qp] = ((*_conc)[_qp] - equilib_conc) * mol;
99  _dmass_rate_from_matrix_dC[_qp] = mol + ((*_conc)[_qp] - equilib_conc) * dmol_dC;
101  -dequilib_conc_dp * mol + ((*_conc)[_qp] - equilib_conc) * dmol_dp;
102 
103  // multiply by the appropriate time const
104  if ((*_conc)[_qp] > equilib_conc)
105  {
106  _mass_rate_from_matrix[_qp] *= (*_one_over_de_time_const)[_qp];
107  _dmass_rate_from_matrix_dC[_qp] *= (*_one_over_de_time_const)[_qp];
108  _dmass_rate_from_matrix_dp[_qp] *= (*_one_over_de_time_const)[_qp];
109  }
110  else
111  {
112  _mass_rate_from_matrix[_qp] *= (*_one_over_ad_time_const)[_qp];
113  _dmass_rate_from_matrix_dC[_qp] *= (*_one_over_ad_time_const)[_qp];
114  _dmass_rate_from_matrix_dp[_qp] *= (*_one_over_ad_time_const)[_qp];
115  }
116 }
validParams< MollifiedLangmuirMaterial >
InputParameters validParams< MollifiedLangmuirMaterial >()
Definition: MollifiedLangmuirMaterial.C:16
registerMooseObject
registerMooseObject("ChemicalReactionsApp", MollifiedLangmuirMaterial)
MollifiedLangmuirMaterial
Holds Langmuir parameters associated with desorption Calculates mass-flow rates and derivatives there...
Definition: MollifiedLangmuirMaterial.h:24
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
MollifiedLangmuirMaterial::_langmuir_p
const Real _langmuir_p
langmuir pressure
Definition: MollifiedLangmuirMaterial.h:43
MollifiedLangmuirMaterial::_langmuir_dens
const Real _langmuir_dens
langmuir density
Definition: MollifiedLangmuirMaterial.h:40
MollifiedLangmuirMaterial::MollifiedLangmuirMaterial
MollifiedLangmuirMaterial(const InputParameters &parameters)
Definition: MollifiedLangmuirMaterial.C:48
MollifiedLangmuirMaterial::_mollifier
const Real _mollifier
mollifying parameter.
Definition: MollifiedLangmuirMaterial.h:57
MollifiedLangmuirMaterial::_dmass_rate_from_matrix_dp
MaterialProperty< Real > & _dmass_rate_from_matrix_dp
derivative of mass flow rate wrt pressure
Definition: MollifiedLangmuirMaterial.h:66
MollifiedLangmuirMaterial::_pressure
const VariableValue * _pressure
porespace pressure (or partial pressure if multiphase flow scenario)
Definition: MollifiedLangmuirMaterial.h:49
MollifiedLangmuirMaterial::_dmass_rate_from_matrix_dC
MaterialProperty< Real > & _dmass_rate_from_matrix_dC
derivative of mass flow rate wrt concentration
Definition: MollifiedLangmuirMaterial.h:63
MollifiedLangmuirMaterial::_mass_rate_from_matrix
MaterialProperty< Real > & _mass_rate_from_matrix
mass flow rate from the matrix = mass flow rate to the porespace
Definition: MollifiedLangmuirMaterial.h:60
MollifiedLangmuirMaterial::computeQpProperties
virtual void computeQpProperties() override
Definition: MollifiedLangmuirMaterial.C:70
MollifiedLangmuirMaterial::_conc
const VariableValue * _conc
concentration of adsorbed fluid in matrix
Definition: MollifiedLangmuirMaterial.h:46
MollifiedLangmuirMaterial.h