13 #include "MooseMesh.h"
15 #include "libmesh/parallel_algebra.h"
16 #include "libmesh/parallel.h"
22 InputParameters params = validParams<ElementUserObject>();
23 params.addParam<std::vector<BoundaryName>>(
24 "initiate_on_boundary",
25 "Permit cracks to initiate in elements adjacent to specified boundaries");
26 params.addParam<
bool>(
"secondary_cracks",
false,
"should secondary cracks be allowed");
31 : ElementUserObject(parameters),
32 _mesh(_subproblem.mesh()),
33 _secondary_cracks(getParam<bool>(
"secondary_cracks"))
35 FEProblemBase * fe_problem = dynamic_cast<FEProblemBase *>(&_subproblem);
36 if (fe_problem == NULL)
37 mooseError(
"Problem casting _subproblem to FEProblemBase in XFEMMaterialStateMarkerBase");
38 _xfem = MooseSharedNamespace::dynamic_pointer_cast<XFEM>(fe_problem->getXFEM());
40 mooseError(
"Problem casting to XFEM in XFEMMaterialStateMarkerBase");
42 mooseError(
"XFEMMaterialStateMarkerBase can only be run on an element variable");
44 if (isParamValid(
"initiate_on_boundary"))
46 std::vector<BoundaryName> initiation_boundary_names =
47 getParam<std::vector<BoundaryName>>(
"initiate_on_boundary");
64 RealVectorValue direction;
65 bool isCut =
_xfem->isElemCut(_current_elem);
66 bool isCTE =
_xfem->isElemAtCrackTip(_current_elem);
67 bool isOnBoundary =
false;
68 unsigned int boundarySide = 99999;
69 unsigned int _current_eid = _current_elem->id();
70 std::map<unsigned int, RealVectorValue>::iterator mit;
86 mooseError(
"ERROR: element ", _current_eid,
" already marked for crack growth.");
94 mooseError(
"ERROR: element ", _current_eid,
" already marked for crack growth.");
103 mooseError(
"ERROR: element ", _current_eid,
" already marked for crack growth.");
115 for (std::map<unsigned int, RealVectorValue>::const_iterator mit = xmuo.
_marked_elems.begin();
122 for (std::set<unsigned int>::const_iterator mit = xmuo.
_marked_frags.begin();
129 for (std::map<unsigned int, unsigned int>::const_iterator mit = xmuo.
_marked_elem_sides.begin();
144 _xfem->clearStateMarkedElems();
145 std::map<unsigned int, RealVectorValue>::iterator mit;
154 _xfem->addStateMarkedFrag(mit->first, mit->second);
158 _xfem->addStateMarkedElem(mit->first, mit->second);