26 #include "libmesh/transient_system.h" 27 #include "libmesh/string_to_enum.h" 49 params.
addParam<std::vector<UserObjectName>>(
50 "geometric_cut_userobjects",
52 "List of names of GeometricCutUserObjects with cut info and methods");
53 params.
addParam<std::string>(
"qrule",
"volfrac",
"XFEM quadrature rule to use");
57 "debug_output_level <= 3",
58 "Controls the amount of debug output from XFEM. 0: None, 1: Summary, 2: Details on " 59 "modifications to mesh, 3: Full dump of element fragment algorithm mesh");
62 "min_weight_multiplier >= 0 & min_weight_multiplier<=1",
63 "Minimum average multiplier applied by XFEM to integration " 64 "point weights for partial elements");
65 params.
addParam<
bool>(
"output_cut_plane",
false,
"Output the XFEM cut plane and volume fraction");
66 params.
addParam<
bool>(
"use_crack_growth_increment",
false,
"Use fixed crack growth increment");
67 params.
addParam<
Real>(
"crack_growth_increment", 0.1,
"Crack growth increment");
68 params.
addParam<
bool>(
"use_crack_tip_enrichment",
false,
"Use crack tip enrichment functions");
69 params.
addParam<UserObjectName>(
"crack_front_definition",
70 "The CrackFrontDefinition user object name (only " 71 "needed if 'use_crack_tip_enrichment=true')");
72 params.
addParam<std::vector<VariableName>>(
"displacements",
73 "Names of displacement variables (only " 74 "needed if 'use_crack_tip_enrichment=true')");
75 params.
addParam<std::vector<VariableName>>(
"enrichment_displacements",
76 "Names of enrichment displacement variables (only " 77 "needed if 'use_crack_tip_enrichment=true')");
78 params.
addParam<std::vector<BoundaryName>>(
"cut_off_boundary",
79 "Boundary that contains all nodes for which " 80 "enrichment DOFs should be fixed away from crack tip " 81 "(only needed if 'use_crack_tip_enrichment=true')");
83 "The cut off radius of crack tip enrichment functions (only needed if " 84 "'use_crack_tip_enrichment=true')");
85 params.
addClassDescription(
"Action to input general parameters and simulation options for use " 92 _geom_cut_userobjects(getParam<
std::vector<UserObjectName>>(
"geometric_cut_userobjects")),
93 _xfem_qrule(getParam<
std::string>(
"qrule")),
94 _xfem_cut_plane(false),
95 _xfem_use_crack_growth_increment(getParam<bool>(
"use_crack_growth_increment")),
96 _xfem_crack_growth_increment(getParam<
Real>(
"crack_growth_increment")),
97 _use_crack_tip_enrichment(getParam<bool>(
"use_crack_tip_enrichment"))
109 mooseError(
"To add crack tip enrichment, crack_front_definition must be provided.");
112 _displacements = getParam<std::vector<VariableName>>(
"displacements");
114 mooseError(
"To add crack tip enrichment, displacements must be provided.");
120 mooseError(
"The number of enrichment displacements should be total 8 for 2D.");
122 mooseError(
"The number of enrichment displacements should be total 12 for 3D.");
125 mooseError(
"To add crack tip enrichment, enrichment_displacements must be provided.");
128 _cut_off_bc = getParam<std::vector<BoundaryName>>(
"cut_off_boundary");
130 mooseError(
"To add crack tip enrichment, cut_off_boundary must be provided.");
135 mooseError(
"To add crack tip enrichment, cut_off_radius must be provided.");
143 std::shared_ptr<XFEMInterface> xfem_interface =
_problem->getXFEM();
144 if (xfem_interface ==
nullptr)
149 std::shared_ptr<XFEM> new_xfem(
new XFEM(
_pars));
151 xfem_interface =
_problem->getXFEM();
154 std::shared_ptr<XFEM> xfem = MooseSharedNamespace::dynamic_pointer_cast<
XFEM>(xfem_interface);
156 mooseError(
"dynamic cast of xfem object failed");
163 xfem->setDebugOutputLevel(getParam<unsigned int>(
"debug_output_level"));
164 xfem->setMinWeightMultiplier(getParam<Real>(
"min_weight_multiplier"));
170 var_params.set<
MooseEnum>(
"order") =
"FIRST";
173 _problem->addVariable(
"MooseVariable", enrich_disp, var_params);
181 params.
set<
unsigned int>(
"component") = i / 4;
182 params.
set<
unsigned int>(
"enrichment_component") = i % 4;
208 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut_origin_x", var_params);
209 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut_origin_y", var_params);
210 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut_origin_z", var_params);
211 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut_normal_x", var_params);
212 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut_normal_y", var_params);
213 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut_normal_z", var_params);
214 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut2_origin_x", var_params);
215 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut2_origin_y", var_params);
216 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut2_origin_z", var_params);
217 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut2_normal_x", var_params);
218 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut2_normal_y", var_params);
219 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut2_normal_z", var_params);
220 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_volfrac", var_params);
226 params.
set<AuxVariableName>(
"variable") =
"xfem_volfrac";
227 _problem->addAuxKernel(
"XFEMVolFracAux",
"xfem_volfrac", params);
233 params.
set<
unsigned int>(
"plane_id") = 0;
235 params.
set<AuxVariableName>(
"variable") =
"xfem_cut_origin_x";
237 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut_origin_x", params);
239 params.
set<AuxVariableName>(
"variable") =
"xfem_cut_origin_y";
241 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut_origin_y", params);
243 params.
set<AuxVariableName>(
"variable") =
"xfem_cut_origin_z";
245 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut_origin_z", params);
247 params.
set<AuxVariableName>(
"variable") =
"xfem_cut_normal_x";
249 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut_normal_x", params);
251 params.
set<AuxVariableName>(
"variable") =
"xfem_cut_normal_y";
253 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut_normal_y", params);
255 params.
set<AuxVariableName>(
"variable") =
"xfem_cut_normal_z";
257 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut_normal_z", params);
260 params.
set<
unsigned int>(
"plane_id") = 1;
262 params.
set<AuxVariableName>(
"variable") =
"xfem_cut2_origin_x";
264 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut2_origin_x", params);
266 params.
set<AuxVariableName>(
"variable") =
"xfem_cut2_origin_y";
268 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut2_origin_y", params);
270 params.
set<AuxVariableName>(
"variable") =
"xfem_cut2_origin_z";
272 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut2_origin_z", params);
274 params.
set<AuxVariableName>(
"variable") =
"xfem_cut2_normal_x";
276 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut2_normal_x", params);
278 params.
set<AuxVariableName>(
"variable") =
"xfem_cut2_normal_y";
280 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut2_normal_y", params);
282 params.
set<AuxVariableName>(
"variable") =
"xfem_cut2_normal_z";
284 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut2_normal_z", params);
const InputParameters & _pars
UserObjectName _crack_front_definition
bool _xfem_use_crack_growth_increment
InputParameterWarehouse & getInputParameterWarehouse()
InputParameters getValidParams(const std::string &name) const
const ExecFlagType EXEC_TIMESTEP_END
MooseObjectName uniqueActionName() const
static InputParameters validParams()
bool _use_crack_tip_enrichment
const ExecFlagType EXEC_TIMESTEP_BEGIN
std::vector< VariableName > _enrich_displacements
registerMooseAction("XFEMApp", XFEMAction, "setup_xfem")
std::vector< VariableName > _displacements
const std::string & _current_task
std::vector< BoundaryName > _cut_off_bc
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Real _xfem_crack_growth_increment
void mooseError(Args &&... args) const
static InputParameters validParams()
std::shared_ptr< FEProblemBase > & _problem
bool isParamValid(const std::string &name) const
XFEMAction(const InputParameters ¶ms)