www.mooseframework.org
PoroMechanicsAction.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 "PoroMechanicsAction.h"
11 
12 #include "Factory.h"
13 #include "FEProblem.h"
14 #include "Parser.h"
15 #include "Conversion.h"
16 
17 registerMooseAction("TensorMechanicsApp", PoroMechanicsAction, "setup_mesh_complete");
18 
19 registerMooseAction("TensorMechanicsApp", PoroMechanicsAction, "validate_coordinate_systems");
20 
21 registerMooseAction("TensorMechanicsApp", PoroMechanicsAction, "add_kernel");
22 
24 
25 InputParameters
27 {
28  InputParameters params = TensorMechanicsAction::validParams();
29  params.addRequiredParam<VariableName>("porepressure", "The pore pressure variable");
30  return params;
31 }
32 
33 PoroMechanicsAction::PoroMechanicsAction(const InputParameters & params)
34  : TensorMechanicsAction(params)
35 {
36  if (_use_ad)
37  paramError("use_ad", "AD not setup for use with PoroMechanicsAction");
38 }
39 
40 void
42 {
44 
45  if (_current_task == "add_kernel")
46  {
47  // Prepare displacements and set value for dim
48  std::vector<VariableName> displacements = getParam<std::vector<VariableName>>("displacements");
49  unsigned int dim = displacements.size();
50 
51  // all the kernels added below have pore pressure as a coupled variable
52  // add this to the kernel's params
53  std::string type("PoroMechanicsCoupling");
54  InputParameters params = _factory.getValidParams(type);
55  VariableName pp_var(getParam<VariableName>("porepressure"));
56  params.addCoupledVar("porepressure", "");
57  params.set<std::vector<VariableName>>("porepressure") = {pp_var};
58 
59  // now add the kernels
60  for (unsigned int i = 0; i < dim; ++i)
61  {
62  std::string kernel_name = "PoroMechanics" + Moose::stringify(i);
63 
64  params.set<unsigned int>("component") = i;
65  params.set<NonlinearVariableName>("variable") = displacements[i];
66 
67  _problem->addKernel(type, kernel_name, params);
68  }
69  }
70 }
PoroMechanicsAction
Definition: PoroMechanicsAction.h:19
registerMooseAction
registerMooseAction("TensorMechanicsApp", PoroMechanicsAction, "setup_mesh_complete")
TensorMechanicsAction
Definition: TensorMechanicsAction.h:19
TensorMechanicsActionBase::_use_ad
const bool _use_ad
Definition: TensorMechanicsActionBase.h:37
PoroMechanicsAction::PoroMechanicsAction
PoroMechanicsAction(const InputParameters &params)
Definition: PoroMechanicsAction.C:33
defineLegacyParams
defineLegacyParams(PoroMechanicsAction)
TensorMechanicsAction::act
virtual void act()
Definition: TensorMechanicsAction.C:156
PoroMechanicsAction::validParams
static InputParameters validParams()
Definition: PoroMechanicsAction.C:26
PoroMechanicsAction::act
virtual void act()
Definition: PoroMechanicsAction.C:41
PoroMechanicsAction.h
TensorMechanicsAction::validParams
static InputParameters validParams()
Definition: TensorMechanicsAction.C:39