www.mooseframework.org
PorousFlowAdvectiveFluxCalculatorBase.h
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 #pragma once
11 
13 #include "PorousFlowDictator.h"
14 
16 
17 template <>
19 
33 {
34 public:
35  PorousFlowAdvectiveFluxCalculatorBase(const InputParameters & parameters);
36 
42  const std::map<dof_id_type, std::vector<Real>> & getdFluxOut_dvars(unsigned node_id) const;
43 
44 protected:
45  virtual void timestepSetup() override;
46  virtual void initialize() override;
47  virtual void execute() override;
48  virtual void finalize() override;
49  virtual void threadJoin(const UserObject & uo) override;
50 
51  virtual Real computeVelocity(unsigned i, unsigned j, unsigned qp) const override;
52 
53  virtual void executeOnElement(dof_id_type global_i,
54  dof_id_type global_j,
55  unsigned local_i,
56  unsigned local_j,
57  unsigned qp) override;
58 
64  virtual Real computedU_dvar(unsigned i, unsigned pvar) const = 0;
65 
71  const std::map<dof_id_type, std::vector<Real>> & getdK_dvar(dof_id_type node_i,
72  dof_id_type node_j) const;
73 
74  virtual void buildCommLists() override;
75  virtual void exchangeGhostedInfo() override;
76 
79 
81  const unsigned _num_vars;
82 
84  const RealVectorValue _gravity;
85 
87  const unsigned int _phase;
88 
90  const MaterialProperty<RealTensorValue> & _permeability;
91 
93  const MaterialProperty<std::vector<RealTensorValue>> & _dpermeability_dvar;
94 
96  const MaterialProperty<std::vector<std::vector<RealTensorValue>>> & _dpermeability_dgradvar;
97 
99  const MaterialProperty<std::vector<Real>> & _fluid_density_qp;
100 
102  const MaterialProperty<std::vector<std::vector<Real>>> & _dfluid_density_qp_dvar;
103 
105  const MaterialProperty<std::vector<RealGradient>> & _grad_p;
106 
108  const MaterialProperty<std::vector<std::vector<Real>>> & _dgrad_p_dgrad_var;
109 
111  const MaterialProperty<std::vector<std::vector<RealGradient>>> & _dgrad_p_dvar;
112 
114  const FEType _fe_type;
115 
117  const VariablePhiValue & _phi;
118 
120  const VariablePhiGradient & _grad_phi;
121 
123  std::vector<std::vector<Real>> _du_dvar;
124 
126  std::vector<bool> _du_dvar_computed_by_thread;
127 
133  std::vector<std::vector<std::map<dof_id_type, std::vector<Real>>>> _dkij_dvar;
134 
136  std::vector<std::map<dof_id_type, std::vector<Real>>> _dflux_out_dvars;
137 
147  std::map<processor_id_type, std::vector<dof_id_type>> _triples_to_receive;
148 
158  std::map<processor_id_type, std::vector<dof_id_type>> _triples_to_send;
159 
161  const bool _perm_derivs;
162 };
PorousFlowAdvectiveFluxCalculatorBase::_triples_to_send
std::map< processor_id_type, std::vector< dof_id_type > > _triples_to_send
_triples_to_send[proc_id] indicates the dk(i, j)/du_nodal information that we will send to proc_id.
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:158
PorousFlowAdvectiveFluxCalculatorBase::initialize
virtual void initialize() override
Definition: PorousFlowAdvectiveFluxCalculatorBase.C:176
PorousFlowDictator.h
PorousFlowAdvectiveFluxCalculatorBase::buildCommLists
virtual void buildCommLists() override
When using multiple processors, other processors will compute:
Definition: PorousFlowAdvectiveFluxCalculatorBase.C:302
PorousFlowAdvectiveFluxCalculatorBase::_fluid_density_qp
const MaterialProperty< std::vector< Real > > & _fluid_density_qp
Fluid density for each phase (at the qp)
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:99
AdvectiveFluxCalculatorBase.h
PorousFlowAdvectiveFluxCalculatorBase::getdK_dvar
const std::map< dof_id_type, std::vector< Real > > & getdK_dvar(dof_id_type node_i, dof_id_type node_j) const
Returns, r, where r[global node k][a] = d(K[node_i][node_j])/d(porous_flow_variable[global node k][po...
Definition: PorousFlowAdvectiveFluxCalculatorBase.C:239
PorousFlowAdvectiveFluxCalculatorBase::computedU_dvar
virtual Real computedU_dvar(unsigned i, unsigned pvar) const =0
Compute d(u)/d(porous_flow_variable)
PorousFlowAdvectiveFluxCalculatorBase::_fe_type
const FEType _fe_type
FEType to use.
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:114
PorousFlowAdvectiveFluxCalculatorBase::_du_dvar_computed_by_thread
std::vector< bool > _du_dvar_computed_by_thread
Whether _du_dvar has been computed by the local thread.
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:126
PorousFlowAdvectiveFluxCalculatorBase::_phi
const VariablePhiValue & _phi
Kuzmin-Turek shape function.
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:117
PorousFlowAdvectiveFluxCalculatorBase::executeOnElement
virtual void executeOnElement(dof_id_type global_i, dof_id_type global_j, unsigned local_i, unsigned local_j, unsigned qp) override
This is called by multiple times in execute() in a double loop over _current_elem's nodes (local_i an...
Definition: PorousFlowAdvectiveFluxCalculatorBase.C:109
PorousFlowAdvectiveFluxCalculatorBase::_dflux_out_dvars
std::vector< std::map< dof_id_type, std::vector< Real > > > _dflux_out_dvars
_dflux_out_dvars[sequential_i][global_j][pvar] = d(flux_out[global version of sequential_i])/d(porous...
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:136
PorousFlowAdvectiveFluxCalculatorBase::_grad_p
const MaterialProperty< std::vector< RealGradient > > & _grad_p
Gradient of the pore pressure in each phase.
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:105
PorousFlowDictator
This holds maps between the nonlinear variables used in a PorousFlow simulation and the variable numb...
Definition: PorousFlowDictator.h:71
PorousFlowAdvectiveFluxCalculatorBase::computeVelocity
virtual Real computeVelocity(unsigned i, unsigned j, unsigned qp) const override
Computes the transfer velocity between current node i and current node j at the current qp in the cur...
Definition: PorousFlowAdvectiveFluxCalculatorBase.C:96
PorousFlowAdvectiveFluxCalculatorBase::_dfluid_density_qp_dvar
const MaterialProperty< std::vector< std::vector< Real > > > & _dfluid_density_qp_dvar
Derivative of the fluid density for each phase wrt PorousFlow variables (at the qp)
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:102
PorousFlowAdvectiveFluxCalculatorBase::threadJoin
virtual void threadJoin(const UserObject &uo) override
Definition: PorousFlowAdvectiveFluxCalculatorBase.C:213
PorousFlowAdvectiveFluxCalculatorBase::getdFluxOut_dvars
const std::map< dof_id_type, std::vector< Real > > & getdFluxOut_dvars(unsigned node_id) const
Returns d(flux_out)/d(porous_flow_variables.
Definition: PorousFlowAdvectiveFluxCalculatorBase.C:247
PorousFlowAdvectiveFluxCalculatorBase::_dgrad_p_dgrad_var
const MaterialProperty< std::vector< std::vector< Real > > > & _dgrad_p_dgrad_var
Derivative of Grad porepressure in each phase wrt grad(PorousFlow variables)
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:108
PorousFlowAdvectiveFluxCalculatorBase::_num_vars
const unsigned _num_vars
Number of PorousFlow variables.
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:81
PorousFlowAdvectiveFluxCalculatorBase::_dgrad_p_dvar
const MaterialProperty< std::vector< std::vector< RealGradient > > > & _dgrad_p_dvar
Derivative of Grad porepressure in each phase wrt PorousFlow variables.
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:111
PorousFlowAdvectiveFluxCalculatorBase::_dkij_dvar
std::vector< std::vector< std::map< dof_id_type, std::vector< Real > > > > _dkij_dvar
_dkij_dvar[sequential_i][j][global_k][a] = d(K[sequential_i][j])/d(porous_flow_variable[global_k][por...
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:133
PorousFlowAdvectiveFluxCalculatorBase::_gravity
const RealVectorValue _gravity
Gravity.
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:84
validParams< PorousFlowAdvectiveFluxCalculatorBase >
InputParameters validParams< PorousFlowAdvectiveFluxCalculatorBase >()
Definition: PorousFlowAdvectiveFluxCalculatorBase.C:17
AdvectiveFluxCalculatorBase
Base class to compute Advective fluxes.
Definition: AdvectiveFluxCalculatorBase.h:33
PorousFlowAdvectiveFluxCalculatorBase::_dictator
const PorousFlowDictator & _dictator
PorousFlowDictator UserObject.
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:78
PorousFlowAdvectiveFluxCalculatorBase::_grad_phi
const VariablePhiGradient & _grad_phi
grad(Kuzmin-Turek shape function)
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:120
PorousFlowAdvectiveFluxCalculatorBase::_phase
const unsigned int _phase
The phase.
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:87
PorousFlowAdvectiveFluxCalculatorBase::_dpermeability_dgradvar
const MaterialProperty< std::vector< std::vector< RealTensorValue > > > & _dpermeability_dgradvar
d(permeabiity)/d(grad(PorousFlow variable))
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:96
PorousFlowAdvectiveFluxCalculatorBase
Base class to compute the advective flux of fluid in PorousFlow situations using the Kuzmin-Turek FEM...
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:32
PorousFlowAdvectiveFluxCalculatorBase::_dpermeability_dvar
const MaterialProperty< std::vector< RealTensorValue > > & _dpermeability_dvar
d(permeabiity)/d(PorousFlow variable)
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:93
PorousFlowAdvectiveFluxCalculatorBase::_du_dvar
std::vector< std::vector< Real > > _du_dvar
_du_dvar[sequential_i][a] = d(u[global version of sequential node i])/d(porous_flow_variable[a])
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:123
PorousFlowAdvectiveFluxCalculatorBase::exchangeGhostedInfo
virtual void exchangeGhostedInfo() override
Sends and receives multi-processor information regarding u_nodal and k_ij.
Definition: PorousFlowAdvectiveFluxCalculatorBase.C:397
PorousFlowAdvectiveFluxCalculatorBase::_triples_to_receive
std::map< processor_id_type, std::vector< dof_id_type > > _triples_to_receive
_triples_to_receive[proc_id] indicates the dk(i, j)/du_nodal information that we will receive from pr...
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:147
PorousFlowAdvectiveFluxCalculatorBase::timestepSetup
virtual void timestepSetup() override
Definition: PorousFlowAdvectiveFluxCalculatorBase.C:144
PorousFlowAdvectiveFluxCalculatorBase::finalize
virtual void finalize() override
Definition: PorousFlowAdvectiveFluxCalculatorBase.C:253
PorousFlowAdvectiveFluxCalculatorBase::_perm_derivs
const bool _perm_derivs
Flag to check whether permeabiity derivatives are non-zero.
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:161
PorousFlowAdvectiveFluxCalculatorBase::execute
virtual void execute() override
Definition: PorousFlowAdvectiveFluxCalculatorBase.C:193
PorousFlowAdvectiveFluxCalculatorBase::PorousFlowAdvectiveFluxCalculatorBase
PorousFlowAdvectiveFluxCalculatorBase(const InputParameters &parameters)
Definition: PorousFlowAdvectiveFluxCalculatorBase.C:45
PorousFlowAdvectiveFluxCalculatorBase::_permeability
const MaterialProperty< RealTensorValue > & _permeability
Permeability of porous material.
Definition: PorousFlowAdvectiveFluxCalculatorBase.h:90