www.mooseframework.org
ContactPenetrationAuxAction.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 
17 static unsigned int counter = 0;
18 
19 registerMooseAction("ContactApp", ContactPenetrationAuxAction, "add_aux_kernel");
20 
21 template <>
22 InputParameters
24 {
25  MooseEnum orders("FIRST SECOND THIRD FOURTH", "FIRST");
26 
27  InputParameters params = validParams<Action>();
28  params.addRequiredParam<BoundaryName>("master", "The master surface");
29  params.addRequiredParam<BoundaryName>("slave", "The slave surface");
30  params.addParam<MooseEnum>("order", orders, "The finite element order: FIRST, SECOND, etc.");
31  return params;
32 }
33 
35  : Action(params),
36  _master(getParam<BoundaryName>("master")),
37  _slave(getParam<BoundaryName>("slave")),
38  _order(getParam<MooseEnum>("order"))
39 {
40 }
41 
42 void
44 {
45  if (!_problem->getDisplacedProblem())
46  {
47  mooseError("Contact requires updated coordinates. Use the 'displacements = ...' line in the "
48  "Mesh block.");
49  }
50 
51  {
52  InputParameters params = _factory.getValidParams("PenetrationAux");
53  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_LINEAR};
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") = "penetration";
62  params.set<MooseEnum>("order") = _order;
63 
64  params.set<bool>("use_displaced_mesh") = true;
65 
66  std::stringstream name;
67  name << _name;
68  name << "_contact_";
69  name << counter++;
70  _problem->addAuxKernel("PenetrationAux", name.str(), params);
71  }
72 }
registerMooseAction
registerMooseAction("ContactApp", ContactPenetrationAuxAction, "add_aux_kernel")
ContactPenetrationAuxAction::act
virtual void act()
Definition: ContactPenetrationAuxAction.C:43
ContactPenetrationAuxAction::_order
const MooseEnum _order
Definition: ContactPenetrationAuxAction.h:31
ContactPenetrationAuxAction::ContactPenetrationAuxAction
ContactPenetrationAuxAction(const InputParameters &params)
Definition: ContactPenetrationAuxAction.C:34
ContactPenetrationAuxAction::_slave
const BoundaryName _slave
Definition: ContactPenetrationAuxAction.h:30
counter
static unsigned int counter
Definition: ContactPenetrationAuxAction.C:17
ContactPenetrationAuxAction.h
validParams< ContactPenetrationAuxAction >
InputParameters validParams< ContactPenetrationAuxAction >()
Definition: ContactPenetrationAuxAction.C:23
name
const std::string name
Definition: Setup.h:21
ContactPenetrationAuxAction::_master
const BoundaryName _master
Definition: ContactPenetrationAuxAction.h:29
ContactPenetrationAuxAction
Definition: ContactPenetrationAuxAction.h:21