https://mooseframework.inl.gov
CohesiveZoneActionBase.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
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 "CohesiveZoneActionBase.h"
12 #include "ActionWarehouse.h"
13 #include "AddAuxVariableAction.h"
14 #include "MooseEnum.h"
15 #include "MooseApp.h"
17 
18 // map vector name shortcuts to tensor material property names
19 const std::map<std::string, std::string>
21  {"traction", "traction_global"},
22  {"jump", "displacement_jump_global"},
23  {"pk1_traction", "PK1traction"}};
24 
25 // map aux variable name prefixes to CZM vector scalar options and list of permitted tensor name
26 // shortcuts
27 const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
29  {"normal", {"Normal", {"traction", "jump"}}},
30  {"tangent", {"Tangent", {"traction", "jump"}}}};
31 
32 const std::vector<char> CohesiveZoneActionBase::_component_table = {'x', 'y', 'z'};
33 
36 {
38  params.addClassDescription("Action to create an instance of the cohesive zone model kernel for "
39  "each displacement component");
40  params.addRequiredParam<std::vector<VariableName>>(
41  "displacements", "The nonlinear displacement variables for the problem");
42  MooseEnum strainType("SMALL FINITE", "SMALL");
43  params.addParam<MooseEnum>("strain", strainType, "Strain formulation");
44 
45  // Advanced
46  params.addParam<bool>("use_automatic_differentiation",
47  false,
48  "Whether to use automatic differentiation to compute the Jacobian");
49  params.addParam<std::string>("base_name", "Material property base name");
50  params.addParam<std::vector<AuxVariableName>>(
51  "save_in_master", {}, "The displacement residuals on the master side");
52  params.addParam<std::vector<AuxVariableName>>(
53  "diag_save_in_master",
54  {},
55  "The displacement diagonal preconditioner terms on the master side");
56  params.addParam<std::vector<AuxVariableName>>(
57  "save_in_slave", {}, "The displacement residuals on the slave side");
58  params.addParam<std::vector<AuxVariableName>>(
59  "diag_save_in_slave",
60  {},
61  "The displacement diagonal preconditioner terms on the slave side");
62  params.addParamNamesToGroup("save_in_master diag_save_in_master save_in_slave diag_save_in_slave",
63  "Advanced");
64  params.addParam<bool>("verbose", false, "Display extra information.");
65 
66  // Output
67  params.addParam<MultiMooseEnum>("generate_output",
69  "Add scalar quantity output for stress and/or strain");
70  params.addParam<MultiMooseEnum>(
71  "material_output_order",
73  "Specifies the order of the FE shape function to use for this variable.");
74  params.addParam<MultiMooseEnum>(
75  "material_output_family",
77  "Specifies the family of FE shape functions to use for this variable.");
78  params.addParamNamesToGroup("generate_output material_output_order material_output_family",
79  "Output");
80  params.addParam<MultiMooseEnum>("additional_generate_output",
82  "Add scalar quantity output for stress and/or strain (will be "
83  "appended to the list in `generate_output`)");
84  params.addParam<MultiMooseEnum>(
85  "additional_material_output_order",
87  "Specifies the order of the FE shape function to use for this variable.");
88 
89  params.addParam<MultiMooseEnum>(
90  "additional_material_output_family",
92  "Specifies the family of FE shape functions to use for this variable.");
93 
94  params.addParamNamesToGroup("additional_generate_output additional_material_output_order "
95  "additional_material_output_family",
96  "Output");
97  return params;
98 }
99 
101 {
102  // FIXME: suggest to use action of action to add this to avoid changing the input parameters in
103  // the warehouse.
105  InputParameters & pars(*(parameters.find(uniqueActionName())->second.get()));
106 
107  // check if a container block with common parameters is found
108  auto action = _awh.getActions<CommonCohesiveZoneAction>();
109  if (action.size() == 1)
110  pars.applyParameters(action[0]->parameters());
111 
112  // append additional_generate_output to generate_output
113  if (isParamValid("additional_generate_output"))
114  {
115  MultiMooseEnum generate_output = getParam<MultiMooseEnum>("generate_output");
116  MultiMooseEnum additional_generate_output =
117  getParam<MultiMooseEnum>("additional_generate_output");
118 
119  MultiMooseEnum material_output_order = getParam<MultiMooseEnum>("material_output_order");
120  MultiMooseEnum additional_material_output_order =
121  getParam<MultiMooseEnum>("additional_material_output_order");
122 
123  MultiMooseEnum material_output_family = getParam<MultiMooseEnum>("material_output_family");
124  MultiMooseEnum additional_material_output_family =
125  getParam<MultiMooseEnum>("additional_material_output_family");
126 
127  for (auto & output : additional_generate_output)
128  generate_output.setAdditionalValue(output);
129  for (auto & order : additional_material_output_order)
130  material_output_order.setAdditionalValue(order);
131  for (auto & family : additional_material_output_family)
132  material_output_family.setAdditionalValue(family);
133 
134  pars.set<MultiMooseEnum>("generate_output") = generate_output;
135  pars.set<MultiMooseEnum>("material_output_order") = material_output_order;
136  pars.set<MultiMooseEnum>("material_output_family") = material_output_family;
137  }
138 }
139 
142 {
143  std::string options = "";
145  for (unsigned int a = 0; a < 3; ++a)
146  options += (options == "" ? "" : " ") + vc.first + '_' + _component_table[a];
147 
148  for (auto & vi : _vector_direction_table)
149  for (auto & t : vi.second.second)
150  options += " " + vi.first + "_" + t;
151 
152  return MultiMooseEnum(options, "", true);
153 }
154 
157 {
159 
160  return MultiMooseEnum(orders);
161 }
162 
165 {
166  return MultiMooseEnum("MONOMIAL");
167 }
static InputParameters validParams()
ActionWarehouse & _awh
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
static const std::vector< char > _component_table
void setAdditionalValue(const std::string &names)
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
InputParameterWarehouse & getInputParameterWarehouse()
MooseApp & _app
T & set(const std::string &name, bool quiet_mode=false)
void applyParameters(const InputParameters &common, const std::vector< std::string > &exclude={}, const bool allow_private=false)
std::string getRawNames() const
MooseObjectName uniqueActionName() const
void addRequiredParam(const std::string &name, const std::string &doc_string)
bool isParamValid(const std::string &name) const
static const std::map< std::string, std::string > _real_vector_cartesian_component_table
table data for output generation
CohesiveZoneActionBase(const InputParameters &params)
static InputParameters validParams()
static MultiMooseEnum materialOutputFamilies()
const std::multimap< MooseObjectName, std::shared_ptr< InputParameters > > & getInputParameters(THREAD_ID tid=0) const
static MultiMooseEnum outputPropertiesType()
output methods
static MooseEnum getAuxVariableOrders()
static MultiMooseEnum materialOutputOrders()
void addClassDescription(const std::string &doc_string)
const InputParameters & parameters() const
std::vector< const T *> getActions()
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _vector_direction_table
Store common tensor mechanics parameters.
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)