www.mooseframework.org
LangmuirMaterial.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 "LangmuirMaterial.h"
11 #include "libmesh/utility.h"
12 
13 registerMooseObject("ChemicalReactionsApp", LangmuirMaterial);
14 
15 template <>
16 InputParameters
18 {
19  InputParameters params = validParams<Material>();
20 
21  params.addRequiredCoupledVar(
22  "one_over_desorption_time_const",
23  "Time constant for Langmuir desorption (gas moving from matrix to porespace). Units [s]");
24  params.addRequiredCoupledVar(
25  "one_over_adsorption_time_const",
26  "Time constant for Langmuir adsorption (gas moving from porespace to matrix). Units [s].");
27  params.addRequiredParam<Real>("langmuir_density",
28  "This is (Langmuir volume)*(density of gas at standard temp and "
29  "pressure). Langmuir volume is measured in (gas volume)/(matrix "
30  "volume). (Methane density(101kPa, 20degC) = 0.655kg/m^3. "
31  "Methane density(101kPa, 0degC) = 0.715kg/m^3.) Units [kg/m^3]");
32  params.addRequiredParam<Real>("langmuir_pressure", "Langmuir pressure. Units Pa");
33  params.addRequiredCoupledVar("conc_var", "The concentration of gas variable");
34  params.addRequiredCoupledVar("pressure_var", "The gas porepressure variable");
35  params.addClassDescription("Material type that holds info regarding Langmuir desorption from "
36  "matrix to porespace and viceversa");
37  return params;
38 }
39 
40 LangmuirMaterial::LangmuirMaterial(const InputParameters & parameters)
41  : Material(parameters),
42  // coupledValue returns a reference (an alias) to a VariableValue, and the & turns it into a
43  // pointer
44  _one_over_de_time_const(&coupledValue("one_over_desorption_time_const")),
45  _one_over_ad_time_const(&coupledValue("one_over_adsorption_time_const")),
46 
47  _langmuir_dens(getParam<Real>("langmuir_density")),
48  _langmuir_p(getParam<Real>("langmuir_pressure")),
49 
50  _conc(&coupledValue("conc_var")),
51  _pressure(&coupledValue("pressure_var")),
52 
53  _mass_rate_from_matrix(declareProperty<Real>("mass_rate_from_matrix")),
54  _dmass_rate_from_matrix_dC(declareProperty<Real>("dmass_rate_from_matrix_dC")),
55  _dmass_rate_from_matrix_dp(declareProperty<Real>("dmass_rate_from_matrix_dp"))
56 {
57 }
58 
59 void
61 {
62  Real equilib_conc = _langmuir_dens * ((*_pressure)[_qp]) / (_langmuir_p + (*_pressure)[_qp]);
63  Real dequilib_conc_dp =
64  _langmuir_dens / (_langmuir_p + (*_pressure)[_qp]) -
65  _langmuir_dens * ((*_pressure)[_qp]) / Utility::pow<2>(_langmuir_p + (*_pressure)[_qp]);
66 
67  // form the base rate and derivs without the appropriate time const
68  _mass_rate_from_matrix[_qp] = (*_conc)[_qp] - equilib_conc;
69  _dmass_rate_from_matrix_dC[_qp] = 1.0;
70  _dmass_rate_from_matrix_dp[_qp] = -dequilib_conc_dp;
71 
72  // multiply by the appropriate time const
73  if ((*_conc)[_qp] > equilib_conc)
74  {
75  _mass_rate_from_matrix[_qp] *= (*_one_over_de_time_const)[_qp];
76  _dmass_rate_from_matrix_dC[_qp] *= (*_one_over_de_time_const)[_qp];
77  _dmass_rate_from_matrix_dp[_qp] *= (*_one_over_de_time_const)[_qp];
78  }
79  else
80  {
81  _mass_rate_from_matrix[_qp] *= (*_one_over_ad_time_const)[_qp];
82  _dmass_rate_from_matrix_dC[_qp] *= (*_one_over_ad_time_const)[_qp];
83  _dmass_rate_from_matrix_dp[_qp] *= (*_one_over_ad_time_const)[_qp];
84  }
85 }
LangmuirMaterial::_pressure
const VariableValue * _pressure
porespace pressure (or partial pressure if multiphase flow scenario)
Definition: LangmuirMaterial.h:49
LangmuirMaterial::_conc
const VariableValue * _conc
concentration of adsorbed fluid in matrix
Definition: LangmuirMaterial.h:46
LangmuirMaterial::_langmuir_dens
const Real _langmuir_dens
langmuir density
Definition: LangmuirMaterial.h:40
LangmuirMaterial::_mass_rate_from_matrix
MaterialProperty< Real > & _mass_rate_from_matrix
mass flow rate from the matrix = mass flow rate to the porespace
Definition: LangmuirMaterial.h:52
LangmuirMaterial.h
LangmuirMaterial::_dmass_rate_from_matrix_dC
MaterialProperty< Real > & _dmass_rate_from_matrix_dC
derivative of mass flow rate wrt concentration
Definition: LangmuirMaterial.h:55
registerMooseObject
registerMooseObject("ChemicalReactionsApp", LangmuirMaterial)
LangmuirMaterial
Holds Langmuir parameters associated with desorption Calculates mass-flow rates and derivatives there...
Definition: LangmuirMaterial.h:24
validParams< LangmuirMaterial >
InputParameters validParams< LangmuirMaterial >()
Definition: LangmuirMaterial.C:17
LangmuirMaterial::computeQpProperties
virtual void computeQpProperties() override
Definition: LangmuirMaterial.C:60
LangmuirMaterial::LangmuirMaterial
LangmuirMaterial(const InputParameters &parameters)
Definition: LangmuirMaterial.C:40
LangmuirMaterial::_langmuir_p
const Real _langmuir_p
langmuir pressure
Definition: LangmuirMaterial.h:43
LangmuirMaterial::_dmass_rate_from_matrix_dp
MaterialProperty< Real > & _dmass_rate_from_matrix_dp
derivative of mass flow rate wrt pressure
Definition: LangmuirMaterial.h:58