www.mooseframework.org
PorousFlowVariableBase.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 "PorousFlowVariableBase.h"
11 
12 template <>
13 InputParameters
15 {
16  InputParameters params = validParams<PorousFlowMaterial>();
17  params.addPrivateParam<std::string>("pf_material_type", "pressure_saturation");
18  params.addClassDescription("Base class for thermophysical variable materials. Provides pressure "
19  "and saturation material properties for all phases as required");
20  return params;
21 }
22 
23 PorousFlowVariableBase::PorousFlowVariableBase(const InputParameters & parameters)
24  : DerivativeMaterialInterface<PorousFlowMaterial>(parameters),
25 
26  _num_phases(_dictator.numPhases()),
27  _num_components(_dictator.numComponents()),
28  _num_pf_vars(_dictator.numVariables()),
29 
30  _porepressure(_nodal_material
31  ? declareProperty<std::vector<Real>>("PorousFlow_porepressure_nodal")
32  : declareProperty<std::vector<Real>>("PorousFlow_porepressure_qp")),
33  _dporepressure_dvar(
34  _nodal_material
35  ? declareProperty<std::vector<std::vector<Real>>>("dPorousFlow_porepressure_nodal_dvar")
36  : declareProperty<std::vector<std::vector<Real>>>("dPorousFlow_porepressure_qp_dvar")),
37  _gradp_qp(_nodal_material
38  ? nullptr
39  : &declareProperty<std::vector<RealGradient>>("PorousFlow_grad_porepressure_qp")),
40  _dgradp_qp_dgradv(_nodal_material ? nullptr
41  : &declareProperty<std::vector<std::vector<Real>>>(
42  "dPorousFlow_grad_porepressure_qp_dgradvar")),
43  _dgradp_qp_dv(_nodal_material ? nullptr
44  : &declareProperty<std::vector<std::vector<RealGradient>>>(
45  "dPorousFlow_grad_porepressure_qp_dvar")),
46 
47  _saturation(_nodal_material ? declareProperty<std::vector<Real>>("PorousFlow_saturation_nodal")
48  : declareProperty<std::vector<Real>>("PorousFlow_saturation_qp")),
49  _dsaturation_dvar(
50  _nodal_material
51  ? declareProperty<std::vector<std::vector<Real>>>("dPorousFlow_saturation_nodal_dvar")
52  : declareProperty<std::vector<std::vector<Real>>>("dPorousFlow_saturation_qp_dvar")),
53  _grads_qp(_nodal_material
54  ? nullptr
55  : &declareProperty<std::vector<RealGradient>>("PorousFlow_grad_saturation_qp")),
56  _dgrads_qp_dgradv(_nodal_material ? nullptr
57  : &declareProperty<std::vector<std::vector<Real>>>(
58  "dPorousFlow_grad_saturation_qp_dgradvar")),
59  _dgrads_qp_dv(_nodal_material ? nullptr
60  : &declareProperty<std::vector<std::vector<RealGradient>>>(
61  "dPorousFlow_grad_saturation_qp_dvar"))
62 {
63 }
64 
65 void
67 {
68  _porepressure[_qp].resize(_num_phases);
69  _saturation[_qp].resize(_num_phases);
70  // the porepressure and saturation values get set by derived classes
71 }
72 
73 void
75 {
76  // do we really need this stuff here? it seems very inefficient to keep resizing everything!
77  _porepressure[_qp].resize(_num_phases);
78  _dporepressure_dvar[_qp].resize(_num_phases);
79 
80  _saturation[_qp].resize(_num_phases);
81  _dsaturation_dvar[_qp].resize(_num_phases);
82 
83  if (!_nodal_material)
84  {
85  (*_gradp_qp)[_qp].resize(_num_phases);
86  (*_dgradp_qp_dgradv)[_qp].resize(_num_phases);
87  (*_dgradp_qp_dv)[_qp].resize(_num_phases);
88 
89  (*_grads_qp)[_qp].resize(_num_phases);
90  (*_dgrads_qp_dgradv)[_qp].resize(_num_phases);
91  (*_dgrads_qp_dv)[_qp].resize(_num_phases);
92  }
93 
94  // Prepare the derivative matrices with zeroes
95  for (unsigned phase = 0; phase < _num_phases; ++phase)
96  {
97  _dporepressure_dvar[_qp][phase].assign(_num_pf_vars, 0.0);
98  _dsaturation_dvar[_qp][phase].assign(_num_pf_vars, 0.0);
99  if (!_nodal_material)
100  {
101  (*_dgradp_qp_dgradv)[_qp][phase].assign(_num_pf_vars, 0.0);
102  (*_dgradp_qp_dv)[_qp][phase].assign(_num_pf_vars, RealGradient());
103  (*_dgrads_qp_dgradv)[_qp][phase].assign(_num_pf_vars, 0.0);
104  (*_dgrads_qp_dv)[_qp][phase].assign(_num_pf_vars, RealGradient());
105  }
106  }
107 }
PorousFlowVariableBase::computeQpProperties
virtual void computeQpProperties() override
Definition: PorousFlowVariableBase.C:74
validParams< PorousFlowMaterial >
InputParameters validParams< PorousFlowMaterial >()
Definition: PorousFlowMaterial.C:16
libMesh::RealGradient
VectorValue< Real > RealGradient
Definition: GrainForceAndTorqueInterface.h:17
validParams< PorousFlowVariableBase >
InputParameters validParams< PorousFlowVariableBase >()
Definition: PorousFlowVariableBase.C:14
PorousFlowVariableBase::_num_phases
const unsigned int _num_phases
Number of phases.
Definition: PorousFlowVariableBase.h:35
PorousFlowVariableBase::_porepressure
MaterialProperty< std::vector< Real > > & _porepressure
Computed nodal or quadpoint values of porepressure of the phases.
Definition: PorousFlowVariableBase.h:44
PorousFlowVariableBase::_dporepressure_dvar
MaterialProperty< std::vector< std::vector< Real > > > & _dporepressure_dvar
d(porepressure)/d(PorousFlow variable)
Definition: PorousFlowVariableBase.h:47
PorousFlowVariableBase::_num_pf_vars
const unsigned int _num_pf_vars
Number of PorousFlow variables.
Definition: PorousFlowVariableBase.h:41
PorousFlowMaterial
PorousFlowMaterial is the base class for all PorousFlow Materials It allows users to specify that the...
Definition: PorousFlowMaterial.h:40
PorousFlowVariableBase::PorousFlowVariableBase
PorousFlowVariableBase(const InputParameters &parameters)
Definition: PorousFlowVariableBase.C:23
PorousFlowVariableBase.h
PorousFlowVariableBase::initQpStatefulProperties
virtual void initQpStatefulProperties() override
Definition: PorousFlowVariableBase.C:66
PorousFlowVariableBase::_saturation
MaterialProperty< std::vector< Real > > & _saturation
Computed nodal or qp saturation of the phases.
Definition: PorousFlowVariableBase.h:59
PorousFlowVariableBase::_dsaturation_dvar
MaterialProperty< std::vector< std::vector< Real > > > & _dsaturation_dvar
d(saturation)/d(PorousFlow variable)
Definition: PorousFlowVariableBase.h:62