https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
12#include "ActionWarehouse.h"
14#include "MooseEnum.h"
15#include "MooseApp.h"
17
18// map vector name shortcuts to tensor material property names
19const 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
27const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
29 {"normal", {"Normal", {"traction", "jump"}}},
30 {"tangent", {"Tangent", {"traction", "jump"}}}};
31
32const 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_primary", {}, "The displacement residuals on the primary side");
52 params.addParam<std::vector<AuxVariableName>>(
53 "diag_save_in_primary",
54 {},
55 "The displacement diagonal preconditioner terms on the primary side");
56 params.addParam<std::vector<AuxVariableName>>(
57 "save_in_secondary", {}, "The displacement residuals on the secondary side");
58 params.addParam<std::vector<AuxVariableName>>(
59 "diag_save_in_secondary",
60 {},
61 "The displacement diagonal preconditioner terms on the secondary side");
63 "save_in_primary diag_save_in_primary save_in_secondary diag_save_in_secondary", "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");
71 "material_output_order",
73 "Specifies the order of the FE shape function to use for this variable.");
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`)");
85 "additional_material_output_order",
87 "Specifies the order of the FE shape function to use for this variable.");
88
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
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
162
std::vector< const T * > getActions()
MooseObjectName uniqueActionName() const
static InputParameters validParams()
MooseApp & _app
ActionWarehouse & _awh
static MooseEnum getAuxVariableOrders()
static MultiMooseEnum outputPropertiesType()
output methods
static MultiMooseEnum materialOutputOrders()
static const std::vector< char > _component_table
static const std::map< std::string, std::string > _real_vector_cartesian_component_table
table data for output generation
static MultiMooseEnum materialOutputFamilies()
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _vector_direction_table
static InputParameters validParams()
CohesiveZoneActionBase(const InputParameters &params)
Store common tensor mechanics parameters.
const std::multimap< MooseObjectName, std::shared_ptr< InputParameters > > & getInputParameters(THREAD_ID tid=0) const
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
void addClassDescription(const std::string &doc_string)
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)
InputParameterWarehouse & getInputParameterWarehouse()
const InputParameters & parameters() const
bool isParamValid(const std::string &name) const
std::string getRawNames() const
void setAdditionalValue(const std::string &names)