www.mooseframework.org
ContactPressureAuxAction.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 #include "Factory.h"
13 #include "FEProblem.h"
14 #include "Parser.h"
15 #include "MooseApp.h"
16 #include "Conversion.h"
17 
18 static unsigned int cp_counter = 0;
19 
20 registerMooseAction("ContactApp", ContactPressureAuxAction, "add_aux_kernel");
21 
22 template <>
23 InputParameters
25 {
26  MooseEnum orders("FIRST SECOND THIRD FOURTH", "FIRST");
27 
28  InputParameters params = validParams<Action>();
29  params.addRequiredParam<BoundaryName>("master", "The master surface");
30  params.addRequiredParam<BoundaryName>("slave", "The slave surface");
31  params.addParam<MooseEnum>("order", orders, "The finite element order: " + orders.getRawNames());
32  return params;
33 }
34 
36  : Action(params),
37  _master(getParam<BoundaryName>("master")),
38  _slave(getParam<BoundaryName>("slave")),
39  _order(getParam<MooseEnum>("order"))
40 {
41 }
42 
43 void
45 {
46  if (!_problem->getDisplacedProblem())
47  {
48  mooseError("Contact requires updated coordinates. Use the 'displacements = ...' line in the "
49  "Mesh block.");
50  }
51 
52  {
53  InputParameters params = _factory.getValidParams("ContactPressureAux");
54 
55  // Extract global params
56  if (isParamValid("parser_syntax"))
57  _app.parser().extractParams(getParam<std::string>("parser_syntax"), params);
58 
59  params.set<std::vector<BoundaryName>>("boundary") = {_slave};
60  params.set<BoundaryName>("paired_boundary") = _master;
61  params.set<AuxVariableName>("variable") = "contact_pressure";
62  params.addRequiredCoupledVar("nodal_area", "The nodal area");
63  params.set<std::vector<VariableName>>("nodal_area") = {"nodal_area_" + _name};
64  params.set<MooseEnum>("order") = _order;
65 
66  params.set<bool>("use_displaced_mesh") = true;
67 
68  std::stringstream name;
69  name << _name;
70  name << "_contact_pressure_";
71  name << cp_counter++;
72 
73  params.set<ExecFlagEnum>("execute_on",
74  true) = {EXEC_NONLINEAR, EXEC_TIMESTEP_END, EXEC_TIMESTEP_BEGIN};
75  _problem->addAuxKernel("ContactPressureAux", name.str(), params);
76  }
77 }
ContactPressureAuxAction.h
ContactPressureAuxAction::act
virtual void act()
Definition: ContactPressureAuxAction.C:44
validParams< ContactPressureAuxAction >
InputParameters validParams< ContactPressureAuxAction >()
Definition: ContactPressureAuxAction.C:24
ContactPressureAuxAction
Definition: ContactPressureAuxAction.h:16
cp_counter
static unsigned int cp_counter
Definition: ContactPressureAuxAction.C:18
ContactPressureAuxAction::_order
const MooseEnum _order
Definition: ContactPressureAuxAction.h:26
ContactPressureAuxAction::_slave
const BoundaryName _slave
Definition: ContactPressureAuxAction.h:25
ContactPressureAuxAction::ContactPressureAuxAction
ContactPressureAuxAction(const InputParameters &params)
Definition: ContactPressureAuxAction.C:35
ContactPressureAuxAction::_master
const BoundaryName _master
Definition: ContactPressureAuxAction.h:24
name
const std::string name
Definition: Setup.h:21
registerMooseAction
registerMooseAction("ContactApp", ContactPressureAuxAction, "add_aux_kernel")