15 #include "metaphysicl/raw_type.h" 22 params.
addClassDescription(
"Compute a material property for bi-materials (consisting of two " 23 "different materials) defined by a level set function.");
25 "level_set_var",
"The name of level set variable used to represent the interface");
27 "Base name for the material in level set positive region.");
29 "Base name for the material in level set negative region.");
30 params.
addParam<std::string>(
"base_name",
31 "Base name for the computed material property (optional)");
32 params.
addRequiredParam<std::string>(
"prop_name",
"Name for the computed material property.");
39 _base_name(isParamValid(
"base_name") ? getParam<
std::string>(
"base_name") +
"_" :
""),
40 _prop_name(getParam<
std::string>(
"prop_name")),
41 _level_set_var_number(_subproblem
43 parameters.
get<VariableName>(
"level_set_var"),
47 _system(_subproblem.getSystem(getParam<VariableName>(
"level_set_var"))),
48 _solution(*_system.current_local_solution.
get()),
49 _use_positive_property(false)
53 if (fe_problem ==
nullptr)
54 mooseError(
"Problem casting _subproblem to FEProblemBase in XFEMMaterialStateMarkerBase");
56 _xfem = MooseSharedNamespace::dynamic_pointer_cast<
XFEM>(fe_problem->
getXFEM());
69 const Node * node = _current_elem->node_ptr(0);
71 dof_id_type ls_dof_id = node->dof_number(_system.number(), _level_set_var_number, 0);
72 Number ls_node_value = _solution(ls_dof_id);
74 _use_positive_property =
false;
76 if (_xfem->isPointInsidePhysicalDomain(_current_elem, *node))
78 if (ls_node_value > 0.0)
79 _use_positive_property =
true;
83 if (ls_node_value < 0.0)
84 _use_positive_property =
true;
94 if (_use_positive_property)
95 assignQpPropertiesForLevelSetPositive();
97 assignQpPropertiesForLevelSetNegative();
virtual void computeProperties() override
virtual void computeQpProperties() override
std::shared_ptr< XFEM > _xfem
shared pointer to XFEM
static InputParameters validParams()
virtual void computeProperties() override
LevelSetBiMaterialBaseTempl(const InputParameters ¶meters)
virtual void initQpStatefulProperties() override
static InputParameters validParams()
std::shared_ptr< XFEMInterface > getXFEM()
void mooseError(Args &&... args) const
Base class for switching between materials in a bi-material system where the interface is defined by ...
const Elem & get(const ElemType type_in)