134 std::shared_ptr<XFEMInterface> xfem_interface = _problem->getXFEM();
135 if (xfem_interface == NULL)
137 _pars.set<FEProblemBase *>(
"_fe_problem_base") = &*_problem;
138 std::shared_ptr<XFEM> new_xfem(
new XFEM(_pars));
139 _problem->initXFEM(new_xfem);
140 xfem_interface = _problem->getXFEM();
143 std::shared_ptr<XFEM> xfem = MooseSharedNamespace::dynamic_pointer_cast<XFEM>(xfem_interface);
145 mooseError(
"dynamic cast of xfem object failed");
147 if (_current_task ==
"setup_xfem")
152 xfem->setDebugOutputLevel(getParam<unsigned int>(
"debug_output_level"));
156 auto var_params = _factory.getValidParams(
"MooseVariable");
157 var_params.set<MooseEnum>(
"family") =
"LAGRANGE";
158 var_params.set<MooseEnum>(
"order") =
"FIRST";
161 _problem->addVariable(
"MooseVariable", enrich_disp, var_params);
167 InputParameters params = _factory.getValidParams(
"CrackTipEnrichmentStressDivergenceTensors");
169 params.set<
unsigned int>(
"component") = i / 4;
170 params.set<
unsigned int>(
"enrichment_component") = i % 4;
173 params.set<std::vector<VariableName>>(
"displacements") =
_displacements;
182 InputParameters params = _factory.getValidParams(
"CrackTipEnrichmentCutOffBC");
184 params.set<Real>(
"value") = 0;
185 params.set<std::vector<BoundaryName>>(
"boundary") =
_cut_off_bc;
188 _problem->addBoundaryCondition(
194 auto var_params = _factory.getValidParams(
"MooseVariableConstMonomial");
196 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut_origin_x", var_params);
197 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut_origin_y", var_params);
198 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut_origin_z", var_params);
199 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut_normal_x", var_params);
200 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut_normal_y", var_params);
201 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut_normal_z", var_params);
202 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut2_origin_x", var_params);
203 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut2_origin_y", var_params);
204 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut2_origin_z", var_params);
205 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut2_normal_x", var_params);
206 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut2_normal_y", var_params);
207 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_cut2_normal_z", var_params);
208 _problem->addAuxVariable(
"MooseVariableConstMonomial",
"xfem_volfrac", var_params);
212 InputParameters params = _factory.getValidParams(
"XFEMVolFracAux");
213 params.set<ExecFlagEnum>(
"execute_on") = EXEC_TIMESTEP_BEGIN;
214 params.set<AuxVariableName>(
"variable") =
"xfem_volfrac";
215 _problem->addAuxKernel(
"XFEMVolFracAux",
"xfem_volfrac", params);
217 params = _factory.getValidParams(
"XFEMCutPlaneAux");
218 params.set<ExecFlagEnum>(
"execute_on") = EXEC_TIMESTEP_END;
221 params.set<
unsigned int>(
"plane_id") = 0;
223 params.set<AuxVariableName>(
"variable") =
"xfem_cut_origin_x";
224 params.set<MooseEnum>(
"quantity") =
"origin_x";
225 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut_origin_x", params);
227 params.set<AuxVariableName>(
"variable") =
"xfem_cut_origin_y";
228 params.set<MooseEnum>(
"quantity") =
"origin_y";
229 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut_origin_y", params);
231 params.set<AuxVariableName>(
"variable") =
"xfem_cut_origin_z";
232 params.set<MooseEnum>(
"quantity") =
"origin_z";
233 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut_origin_z", params);
235 params.set<AuxVariableName>(
"variable") =
"xfem_cut_normal_x";
236 params.set<MooseEnum>(
"quantity") =
"normal_x";
237 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut_normal_x", params);
239 params.set<AuxVariableName>(
"variable") =
"xfem_cut_normal_y";
240 params.set<MooseEnum>(
"quantity") =
"normal_y";
241 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut_normal_y", params);
243 params.set<AuxVariableName>(
"variable") =
"xfem_cut_normal_z";
244 params.set<MooseEnum>(
"quantity") =
"normal_z";
245 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut_normal_z", params);
248 params.set<
unsigned int>(
"plane_id") = 1;
250 params.set<AuxVariableName>(
"variable") =
"xfem_cut2_origin_x";
251 params.set<MooseEnum>(
"quantity") =
"origin_x";
252 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut2_origin_x", params);
254 params.set<AuxVariableName>(
"variable") =
"xfem_cut2_origin_y";
255 params.set<MooseEnum>(
"quantity") =
"origin_y";
256 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut2_origin_y", params);
258 params.set<AuxVariableName>(
"variable") =
"xfem_cut2_origin_z";
259 params.set<MooseEnum>(
"quantity") =
"origin_z";
260 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut2_origin_z", params);
262 params.set<AuxVariableName>(
"variable") =
"xfem_cut2_normal_x";
263 params.set<MooseEnum>(
"quantity") =
"normal_x";
264 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut2_normal_x", params);
266 params.set<AuxVariableName>(
"variable") =
"xfem_cut2_normal_y";
267 params.set<MooseEnum>(
"quantity") =
"normal_y";
268 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut2_normal_y", params);
270 params.set<AuxVariableName>(
"variable") =
"xfem_cut2_normal_z";
271 params.set<MooseEnum>(
"quantity") =
"normal_z";
272 _problem->addAuxKernel(
"XFEMCutPlaneAux",
"xfem_cut2_normal_z", params);