21 #include "libmesh/string_to_enum.h" 39 "JIntegral CIntegral KFromJIntegral InteractionIntegralKI InteractionIntegralKII " 40 "InteractionIntegralKIII InteractionIntegralT");
42 "Creates the MOOSE objects needed to compute fraction domain integrals");
45 "Domain integrals to calculate. Choices are: " +
47 params.
addParam<std::vector<BoundaryName>>(
48 "boundary", {},
"Boundary containing the crack front points");
49 params.
addParam<std::vector<Point>>(
"crack_front_points",
"Set of points to define crack front");
51 "order",
"FIRST",
"Specifies the order of the FE shape function to use for q AuxVariables");
53 "family",
"LAGRANGE",
"Specifies the family of FE shape functions to use for q AuxVariables");
54 params.
addParam<std::vector<Real>>(
"radius_inner",
"Inner radius for volume integral domain");
55 params.
addParam<std::vector<Real>>(
"radius_outer",
"Outer radius for volume integral domain");
56 params.
addParam<
unsigned int>(
"ring_first",
57 "The first ring of elements for volume integral domain");
58 params.
addParam<
unsigned int>(
"ring_last",
59 "The last ring of elements for volume integral domain");
60 params.
addParam<std::vector<VariableName>>(
61 "output_variable",
"Variable values to be reported along the crack front");
62 params.
addParam<
Real>(
"poissons_ratio",
"Poisson's ratio");
63 params.
addParam<
Real>(
"youngs_modulus",
"Young's modulus");
64 params.
addParam<std::vector<SubdomainName>>(
65 "block", {},
"The block ids where integrals are defined");
66 params.
addParam<std::vector<VariableName>>(
69 "The displacements appropriate for the simulation geometry and coordinate system");
70 params.
addParam<VariableName>(
"temperature",
"",
"The temperature");
71 params.
addParam<MaterialPropertyName>(
72 "functionally_graded_youngs_modulus_crack_dir_gradient",
73 "Gradient of the spatially varying Young's modulus provided in " 74 "'functionally_graded_youngs_modulus' in the direction of crack extension.");
75 params.
addParam<MaterialPropertyName>(
76 "functionally_graded_youngs_modulus",
77 "Spatially varying elasticity modulus variable. This input is required when " 78 "using the functionally graded material capability.");
80 "Optional additional eigenstrain variable that will be accounted for in the " 81 "interaction integral (component 00 or XX).");
83 "Optional additional eigenstrain variable that will be accounted for in the " 84 "interaction integral (component 01 or XY).");
86 "Optional additional eigenstrain variable that will be accounted for in the " 87 "interaction integral (component 11 or YY).");
89 "Optional additional eigenstrain variable that will be accounted for in the " 90 "interaction integral (component 22 or ZZ).");
92 "Optional additional eigenstrain variable that will be accounted for in the " 93 "interaction integral (component 02 or XZ).");
95 "Optional additional eigenstrain variable that will be accounted for in the " 96 "interaction integral (component 12 or XZ).");
98 "additional_eigenstrain_00 additional_eigenstrain_01 additional_eigenstrain_11 " 99 "additional_eigenstrain_22 additional_eigenstrain_02 additional_eigenstrain_12",
100 "Generic eigenstrains for the computation of the interaction integral.");
101 MooseEnum position_type(
"Angle Distance",
"Distance");
105 "The method used to calculate position along crack front. Options are: " +
107 MooseEnum q_function_type(
"Geometry Topology",
"Geometry");
110 "The method used to define the integration domain. Options are: " +
115 "Calculate an equivalent K from KI, KII and KIII, assuming self-similar crack growth.");
116 params.
addParam<
bool>(
"output_q",
true,
"Output q");
118 "incremental",
"Flag to indicate whether an incremental or total model is being used.");
119 params.
addParam<std::vector<MaterialPropertyName>>(
120 "eigenstrain_names",
"List of eigenstrains applied in the strain calculation");
123 "Convert J-integral to stress intensity factor K.",
124 "This input parameter is deprecated and will be removed soon. " 125 "Use 'integrals = KFromJIntegral' to request output of the " 126 "conversion from the J-integral to stress intensity factors");
127 params.
addParam<std::vector<MaterialName>>(
129 "The material objects to use to calculate the strain energy rate density.");
130 params.
addParam<MaterialPropertyName>(
"eigenstrain_gradient",
131 "Material defining gradient of eigenstrain tensor");
132 params.
addParam<MaterialPropertyName>(
"body_force",
"Material defining body force");
133 params.
addParam<
bool>(
"use_automatic_differentiation",
135 "Flag to use automatic differentiation (AD) objects when possible");
138 "Flag to control the vector postprocessor outputs. Select false to " 139 "suppress the redundant csv files for each time step and ring");
145 _boundary_names(getParam<
std::vector<BoundaryName>>(
"boundary")),
146 _closed_loop(getParam<bool>(
"closed_loop")),
147 _use_crack_front_points_provider(false),
148 _order(getParam<
std::string>(
"order")),
149 _family(getParam<
std::string>(
"family")),
150 _direction_method_moose_enum(getParam<
MooseEnum>(
"crack_direction_method")),
151 _end_direction_method_moose_enum(getParam<
MooseEnum>(
"crack_end_direction_method")),
152 _have_crack_direction_vector(isParamValid(
"crack_direction_vector")),
153 _crack_direction_vector(
154 _have_crack_direction_vector ? getParam<
RealVectorValue>(
"crack_direction_vector") : 0.0),
155 _have_crack_direction_vector_end_1(isParamValid(
"crack_direction_vector_end_1")),
156 _crack_direction_vector_end_1(_have_crack_direction_vector_end_1
159 _have_crack_direction_vector_end_2(isParamValid(
"crack_direction_vector_end_2")),
160 _crack_direction_vector_end_2(_have_crack_direction_vector_end_2
163 _treat_as_2d(getParam<bool>(
"2d")),
164 _axis_2d(getParam<unsigned
int>(
"axis_2d")),
165 _has_symmetry_plane(isParamValid(
"symmetry_plane")),
166 _symmetry_plane(_has_symmetry_plane ? getParam<unsigned
int>(
"symmetry_plane")
167 :
std::numeric_limits<unsigned
int>::
max()),
168 _position_type(getParam<
MooseEnum>(
"position_type")),
169 _q_function_type(getParam<
MooseEnum>(
"q_function_type")),
170 _get_equivalent_k(getParam<bool>(
"equivalent_k")),
171 _use_displaced_mesh(false),
172 _output_q(getParam<bool>(
"output_q")),
173 _incremental(getParam<bool>(
"incremental")),
174 _convert_J_to_K(isParamValid(
"convert_J_to_K") ? getParam<bool>(
"convert_J_to_K") : false),
176 _use_ad(getParam<bool>(
"use_automatic_differentiation"))
179 if (
isParamValid(
"functionally_graded_youngs_modulus_crack_dir_gradient") !=
181 paramError(
"functionally_graded_youngs_modulus_crack_dir_gradient",
182 "You have selected to compute the interaction integral for a crack in FGM. That " 183 "selection requires the user to provide a spatially varying elasticity modulus that " 184 "defines the transition of material properties (i.e. " 185 "'functionally_graded_youngs_modulus') and its " 186 "spatial derivative in the crack direction (i.e. " 187 "'functionally_graded_youngs_modulus_crack_dir_gradient').");
189 if (
isParamValid(
"functionally_graded_youngs_modulus_crack_dir_gradient") &&
194 getParam<MaterialPropertyName>(
"functionally_graded_youngs_modulus_crack_dir_gradient");
196 getParam<MaterialPropertyName>(
"functionally_graded_youngs_modulus");
207 mooseError(
"DomainIntegral error: must set radius_inner and radius_outer.");
215 _ring_first = getParam<unsigned int>(
"ring_first");
216 _ring_last = getParam<unsigned int>(
"ring_last");
220 "DomainIntegral error: must set ring_first and ring_last if q_function_type = Topology.");
225 paramError(
"q_function_type",
"DomainIntegral error: invalid q_function_type.");
234 "DomainIntegral error: when crack_front_points_provider is used, " 235 "number_points_from_provider must be provided.");
241 "DomainIntegral error: number_points_from_provider is provided but " 242 "crack_front_points_provider cannot be found.");
248 mooseError(
"Number of entries in 'radius_inner' and 'radius_outer' must match.");
250 bool youngs_modulus_set(
false);
251 bool poissons_ratio_set(
false);
254 _blocks = getParam<std::vector<SubdomainName>>(
"block");
256 MultiMooseEnum integral_moose_enums = getParam<MultiMooseEnum>(
"integrals");
257 for (
unsigned int i = 0; i < integral_moose_enums.size(); ++i)
259 _displacements = getParam<std::vector<VariableName>>(
"displacements");
264 "DomainIntegral error: The size of the displacements vector should at least be 2.");
266 if (integral_moose_enums[i] !=
"JIntegral" && integral_moose_enums[i] !=
"CIntegral" &&
267 integral_moose_enums[i] !=
"KFromJIntegral")
272 "DomainIntegral error: must set Poisson's ratio and Young's modulus for integral: ",
273 integral_moose_enums[i]);
276 poissons_ratio_set =
true;
278 youngs_modulus_set =
true;
288 "JIntegral, CIntegral, and KFromJIntegral options are mutually exclusive");
298 _temp = getParam<VariableName>(
"temperature");
303 "DomainIntegral error: must provide `eigenstrain_names` when temperature is coupled.");
309 "DomainIntegral error: must calculate KI, KII and KIII to get equivalent K.");
316 "'output_variables' not yet supported with 'crack_front_points'");
322 mooseError(
"DomainIntegral error: must set Young's modulus and Poisson's ratio " 323 "if K_FROM_J_INTEGRAL is selected.");
324 if (!youngs_modulus_set)
326 if (!poissons_ratio_set)
335 "'eigenstrain_gradient' cannot be specified when the computed integrals include " 336 "JIntegral, CIntegral, or KFromJIntegral");
339 "'body_force' cannot be specified when the computed integrals include JIntegral, " 340 "CIntegral, or KFromJIntegral");
344 "'eigenstrain_gradient' cannot be specified together with 'temperature' or " 345 "'eigenstrain_names'. These are for separate, mutually exclusive systems for " 346 "including the effect of eigenstrains");
354 const std::string uo_name(
"crackFrontDefinition");
355 const std::string ak_base_name(
"q");
356 const std::string av_base_name(
"q");
358 const std::string aux_stress_base_name(
"aux_stress");
359 const std::string aux_grad_disp_base_name(
"aux_grad_disp");
364 std::string ad_prepend =
"";
370 const std::string uo_type_name(
"CrackFrontDefinition");
376 params.
set<
int>(
"execution_order_group") = -1;
404 {
"crack_front_points_provider, number_points_from_provider"});
414 params.
set<
bool>(
"t_stress") =
true;
417 unsigned int nrings = 0;
420 params.
set<
bool>(
"q_function_rings") =
true;
432 params.
set<
unsigned int>(
"nrings") = nrings;
435 _problem->addUserObject(uo_type_name, uo_name, params);
439 for (
unsigned int ring_index = 0; ring_index <
_ring_vec.size(); ++ring_index)
441 std::string aux_var_type;
443 aux_var_type =
"MooseVariable";
444 else if (
_family ==
"MONOMIAL")
445 aux_var_type =
"MooseVariableConstMonomial";
447 aux_var_type =
"MooseVariableScalar";
450 ". Please use LAGRANGE, MONOMIAL, or SCALAR");
458 std::ostringstream av_name_stream;
459 av_name_stream << av_base_name <<
"_" <<
_ring_vec[ring_index];
460 _problem->addAuxVariable(aux_var_type, av_name_stream.str(), params);
464 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
466 std::ostringstream av_name_stream;
467 av_name_stream << av_base_name <<
"_" << cfp_index + 1 <<
"_" <<
_ring_vec[ring_index];
468 _problem->addAuxVariable(aux_var_type, av_name_stream.str(), params);
476 std::string ak_type_name;
477 unsigned int nrings = 0;
480 ak_type_name =
"DomainIntegralQFunction";
485 ak_type_name =
"DomainIntegralTopologicalQFunction";
491 params.
set<UserObjectName>(
"crack_front_definition") = uo_name;
494 for (
unsigned int ring_index = 0; ring_index < nrings; ++ring_index)
503 params.
set<
unsigned int>(
"ring_index") =
_ring_first + ring_index;
508 std::ostringstream ak_name_stream;
509 ak_name_stream << ak_base_name <<
"_" <<
_ring_vec[ring_index];
510 std::ostringstream av_name_stream;
511 av_name_stream << av_base_name <<
"_" <<
_ring_vec[ring_index];
512 params.
set<AuxVariableName>(
"variable") = av_name_stream.str();
513 _problem->addAuxKernel(ak_type_name, ak_name_stream.str(), params);
517 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
519 std::ostringstream ak_name_stream;
520 ak_name_stream << ak_base_name <<
"_" << cfp_index + 1 <<
"_" <<
_ring_vec[ring_index];
521 std::ostringstream av_name_stream;
522 av_name_stream << av_base_name <<
"_" << cfp_index + 1 <<
"_" <<
_ring_vec[ring_index];
523 params.
set<AuxVariableName>(
"variable") = av_name_stream.str();
524 params.
set<
unsigned int>(
"crack_front_point_index") = cfp_index;
525 _problem->addAuxKernel(ak_type_name, ak_name_stream.str(), params);
535 std::string pp_base_name;
551 pp_base_name =
"II_KI";
555 pp_base_name =
"II_KII";
559 pp_base_name =
"II_KIII";
563 pp_base_name =
"II_T";
566 const std::string pp_type_name(
"VectorPostprocessorComponent");
568 for (
unsigned int ring_index = 0; ring_index <
_ring_vec.size(); ++ring_index)
572 params.
set<VectorPostprocessorName>(
"vectorpostprocessor") =
575 params.
set<
unsigned int>(
"index") = 0;
576 params.
set<std::string>(
"vector_name") =
578 _problem->addPostprocessor(pp_type_name, pp_name, params);
582 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
584 params.
set<VectorPostprocessorName>(
"vectorpostprocessor") =
586 std::string pp_name = pp_base_name +
"_" +
Moose::stringify(cfp_index + 1) +
"_" +
588 params.
set<
unsigned int>(
"index") = cfp_index;
589 params.
set<std::string>(
"vector_name") =
591 _problem->addPostprocessor(pp_type_name, pp_name, params);
599 std::string pp_base_name(
"Keq");
600 const std::string pp_type_name(
"VectorPostprocessorComponent");
602 for (
unsigned int ring_index = 0; ring_index <
_ring_vec.size(); ++ring_index)
606 params.
set<VectorPostprocessorName>(
"vectorpostprocessor") =
609 params.
set<
unsigned int>(
"index") = 0;
610 params.
set<std::string>(
"vector_name") =
612 _problem->addPostprocessor(pp_type_name, pp_name, params);
616 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
618 params.
set<VectorPostprocessorName>(
"vectorpostprocessor") =
620 std::string pp_name = pp_base_name +
"_" +
Moose::stringify(cfp_index + 1) +
"_" +
622 params.
set<
unsigned int>(
"index") = cfp_index;
623 params.
set<std::string>(
"vector_name") =
625 _problem->addPostprocessor(pp_type_name, pp_name, params);
634 const std::string pp_type_name(
"CrackFrontData");
637 params.
set<UserObjectName>(
"crack_front_definition") = uo_name;
640 std::ostringstream pp_name_stream;
641 pp_name_stream << ov_base_name <<
"_crack";
643 _problem->addPostprocessor(pp_type_name, pp_name_stream.str(), params);
647 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
649 std::ostringstream pp_name_stream;
650 pp_name_stream << ov_base_name <<
"_crack_" << cfp_index + 1;
652 params.
set<
unsigned int>(
"crack_front_point_index") = cfp_index;
653 _problem->addPostprocessor(pp_type_name, pp_name_stream.str(), params);
664 std::string vpp_base_name;
665 std::string jintegral_selection =
"JIntegral";
670 jintegral_selection =
"JIntegral";
675 jintegral_selection =
"KFromJIntegral";
680 jintegral_selection =
"CIntegral";
684 vpp_base_name +=
"_2DVPP";
686 const std::string vpp_type_name(
"JIntegral");
688 if (!getParam<bool>(
"output_vpp"))
689 params.
set<std::vector<OutputName>>(
"outputs") = {
"none"};
692 params.
set<UserObjectName>(
"crack_front_definition") = uo_name;
693 params.
set<std::vector<SubdomainName>>(
"block") = {
_blocks};
706 params.
set<
MooseEnum>(
"integral") = jintegral_selection;
710 for (
unsigned int ring_index = 0; ring_index <
_ring_vec.size(); ++ring_index)
712 params.
set<
unsigned int>(
"ring_index") =
_ring_vec[ring_index];
716 _problem->addVectorPostprocessor(vpp_type_name, vpp_name, params);
728 "In DomainIntegral, symmetry_plane option cannot be used with mode-II or " 729 "mode-III interaction integral");
731 std::string vpp_base_name;
732 std::string vpp_type_name(ad_prepend +
"InteractionIntegral");
735 if (!getParam<bool>(
"output_vpp"))
736 params.
set<std::vector<OutputName>>(
"outputs") = {
"none"};
747 getParam<CoupledName>(
"additional_eigenstrain_00");
749 getParam<CoupledName>(
"additional_eigenstrain_01");
751 getParam<CoupledName>(
"additional_eigenstrain_11");
753 getParam<CoupledName>(
"additional_eigenstrain_22");
756 params.
set<UserObjectName>(
"crack_front_definition") = uo_name;
758 params.
set<std::vector<SubdomainName>>(
"block") = {
_blocks};
765 params.
set<MaterialPropertyName>(
766 "functionally_graded_youngs_modulus_crack_dir_gradient") = {
768 params.
set<MaterialPropertyName>(
"functionally_graded_youngs_modulus") = {
776 params.
set<std::vector<VariableName>>(
"temperature") = {
_temp};
779 params.
set<MaterialPropertyName>(
"eigenstrain_gradient") =
780 parameters().
get<MaterialPropertyName>(
"eigenstrain_gradient");
782 params.
set<MaterialPropertyName>(
"body_force") =
799 vpp_base_name =
"II_KI";
806 vpp_base_name =
"II_KII";
813 vpp_base_name =
"II_KIII";
819 vpp_base_name =
"II_T";
825 vpp_base_name +=
"_2DVPP";
826 for (
unsigned int ring_index = 0; ring_index <
_ring_vec.size(); ++ring_index)
828 params.
set<
unsigned int>(
"ring_index") =
_ring_vec[ring_index];
832 _problem->addVectorPostprocessor(vpp_type_name, vpp_name, params);
839 std::string vpp_base_name(
"Keq");
841 vpp_base_name +=
"_2DVPP";
842 const std::string vpp_type_name(
"MixedModeEquivalentK");
847 for (
unsigned int ring_index = 0; ring_index <
_ring_vec.size(); ++ring_index)
849 std::string ki_name =
"II_KI_";
850 std::string kii_name =
"II_KII_";
851 std::string kiii_name =
"II_KIII_";
852 params.
set<
unsigned int>(
"ring_index") =
_ring_vec[ring_index];
855 params.
set<VectorPostprocessorName>(
"KI_vectorpostprocessor") =
857 params.
set<VectorPostprocessorName>(
"KII_vectorpostprocessor") =
859 params.
set<VectorPostprocessorName>(
"KIII_vectorpostprocessor") =
864 params.
set<VectorPostprocessorName>(
"KI_vectorpostprocessor") =
866 params.
set<VectorPostprocessorName>(
"KII_vectorpostprocessor") =
868 params.
set<VectorPostprocessorName>(
"KIII_vectorpostprocessor") =
871 params.
set<std::string>(
"KI_vector_name") =
873 params.
set<std::string>(
"KII_vector_name") =
875 params.
set<std::string>(
"KIII_vector_name") =
878 _problem->addVectorPostprocessor(vpp_type_name, vpp_name, params);
886 const std::string vpp_type_name(
"VectorOfPostprocessors");
889 std::ostringstream vpp_name_stream;
891 std::vector<PostprocessorName> postprocessor_names;
892 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
894 std::ostringstream pp_name_stream;
895 pp_name_stream << vpp_name_stream.str() <<
"_" << cfp_index + 1;
896 postprocessor_names.push_back(pp_name_stream.str());
898 params.
set<std::vector<PostprocessorName>>(
"postprocessors") = postprocessor_names;
899 _problem->addVectorPostprocessor(vpp_type_name, vpp_name_stream.str(), params);
908 std::string mater_name;
909 const std::string mater_type_name(
"ThermalFractureIntegral");
910 mater_name =
"ThermalFractureIntegral";
913 params.
set<std::vector<MaterialPropertyName>>(
"eigenstrain_names") =
914 getParam<std::vector<MaterialPropertyName>>(
"eigenstrain_names");
915 params.
set<std::vector<VariableName>>(
"temperature") = {
_temp};
916 params.
set<std::vector<SubdomainName>>(
"block") = {
_blocks};
917 _problem->addMaterial(mater_type_name, mater_name, params);
919 MultiMooseEnum integral_moose_enums = getParam<MultiMooseEnum>(
"integrals");
920 bool have_j_integral =
false;
921 bool have_c_integral =
false;
923 for (
auto ime : integral_moose_enums)
925 if (ime ==
"JIntegral" || ime ==
"CIntegral" || ime ==
"KFromJIntegral" ||
926 ime ==
"InteractionIntegralKI" || ime ==
"InteractionIntegralKII" ||
927 ime ==
"InteractionIntegralKIII" || ime ==
"InteractionIntegralT")
928 have_j_integral =
true;
930 if (ime ==
"CIntegral")
931 have_c_integral =
true;
935 std::string mater_name;
936 const std::string mater_type_name(ad_prepend +
"StrainEnergyDensity");
937 mater_name = ad_prepend +
"StrainEnergyDensity";
942 params.
set<std::vector<SubdomainName>>(
"block") = {
_blocks};
943 _problem->addMaterial(mater_type_name, mater_name, params);
946 std::string mater_name;
947 const std::string mater_type_name(ad_prepend +
"EshelbyTensor");
948 mater_name = ad_prepend +
"EshelbyTensor";
951 _displacements = getParam<std::vector<VariableName>>(
"displacements");
953 params.
set<std::vector<SubdomainName>>(
"block") = {
_blocks};
956 params.
set<
bool>(
"compute_dissipation") =
true;
959 params.
set<std::vector<VariableName>>(
"temperature") = {
_temp};
961 _problem->addMaterial(mater_type_name, mater_name, params);
966 std::string mater_name;
967 const std::string mater_type_name(ad_prepend +
"StrainEnergyRateDensity");
968 mater_name = ad_prepend +
"StrainEnergyRateDensity";
971 params.
set<std::vector<SubdomainName>>(
"block") = {
_blocks};
972 params.
set<std::vector<MaterialName>>(
"inelastic_models") =
973 getParam<std::vector<MaterialName>>(
"inelastic_models");
975 _problem->addMaterial(mater_type_name, mater_name, params);
984 unsigned int num_points = 0;
988 std::set<unsigned int> nodes;
996 for (
unsigned int ibid = 0; ibid < bids.size(); ++ibid)
998 if (boundary_id == bids[ibid])
1000 nodes.insert(bnode->
_node->
id());
1005 num_points = nodes.size();
1010 num_points = getParam<unsigned int>(
"number_points_from_provider");
1012 mooseError(
"Must define either 'boundary' or 'crack_front_points'");
const RealVectorValue _crack_direction_vector
Vector optionally used to prescribe direction of crack extension.
unsigned int _symmetry_plane
Identifier for which plane is the symmetry plane.
VariableName _temp
Temperature variable.
std::vector< VariableName > _output_variables
List of variables for which values are to be sampled and output at the crack front points...
const std::vector< BoundaryName > & _boundary_names
Boundaries containing the crack front points.
virtual void act() override
UserObjectName _crack_front_points_provider
Name of crack front points provider user object used to optionally define the crack points...
const std::string _order
Order and family of the AuxVariables optionally created to output the values of q.
const bool _have_crack_direction_vector_end_2
Whether the crack direction vector at the 2nd end of the crack has been provided. ...
MaterialPropertyName _functionally_graded_youngs_modulus
Material property name for spatially-dependent Youngs modulus for functionally graded materials...
void paramError(const std::string ¶m, Args... args) const
const T & getParam(const std::string &name) const
const ExecFlagType EXEC_XFEM_MARK
Exec flag used to execute MooseObjects while elements are being marked for cutting by XFEM...
const InputParameters & parameters() const
const bool _have_crack_direction_vector
Whether the crack direction vector has been provided.
std::vector< BoundaryName > _intersecting_boundary_names
Names of boundaries optionally used for improved computation of crack extension direction at ends of ...
InputParameters getValidParams(const std::string &name) const
unsigned int calcNumCrackFrontPoints()
Compute the number of points on the crack front.
Action to set up all objects used in computation of fracture domain integrals.
const ExecFlagType EXEC_TIMESTEP_END
const bool _use_ad
Whether to create automatic differentiation objects from the action.
std::vector< Real > _radius_inner
Sets of inner and outer radii of the rings used for the domain form of the fracture integrals...
static void includeCrackFrontDefinitionParams(InputParameters ¶ms)
used by Actions to add CrackFrontDefinitionParams
std::string getRawNames() const
bool _has_symmetry_plane
Whether the model has a symmetry plane passing through the plane of the crack.
bool _use_crack_front_points_provider
Whether to use a crack front points provider.
auto max(const L &left, const R &right)
DomainIntegralAction(const InputParameters ¶ms)
bool _treat_as_2d
Whether fracture computations for a 3D model should be treated as though it were a 2D model...
Real _poissons_ratio
Poisson's ratio of material.
const std::string & name() const
const std::string _family
static InputParameters validParams()
MooseEnum _direction_method_moose_enum
Enum used to define the method to compute crack front direction.
boundary_id_type BoundaryID
static InputParameters validParams()
std::vector< VariableName > _displacements
Vector of displacement variables.
std::vector< BoundaryName > _crack_mouth_boundary_names
Names of boundaries optionally used to define the crack mouth location.
const std::string & _current_task
virtual void addRelationshipManagers(Moose::RelationshipManagerType input_rm_type) override
std::vector< SubdomainName > _blocks
Blocks for which the domain integrals are to be computed.
std::string stringify(const T &t)
MooseEnum _end_direction_method_moose_enum
Enum used to define the method to compute crack front direction at ends of crack front.
std::vector< unsigned int > _ring_vec
Vector of ids for the individual rings on which the fracture integral is computed.
const_iterator end() const
bool _incremental
Whether the constitutive models for the mechanics calculations use an incremental form...
std::vector< Real > _radius_outer
MooseEnum _q_function_type
How the q function is evaluated (geometric distance from crack front or ring of elements) ...
const bool _have_crack_direction_vector_end_1
Whether the crack direction vector at the 1st end of the crack has been provided. ...
std::shared_ptr< MooseMesh > & _mesh
bool _convert_J_to_K
Whether to convert the J-integral to a stress intensity factor (K) –deprecated.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
MaterialPropertyName _functionally_graded_youngs_modulus_crack_dir_gradient
Material property name for the Youngs modulus derivative for functionally graded materials.
bool _use_displaced_mesh
Whether to compute the fracture integrals on the displaced mesh.
vec_type::const_iterator const_iterator
std::vector< VariableName > CoupledName
const RealVectorValue _crack_direction_vector_end_1
Vector optionally used to prescribe direction of crack extension at the 1st end of the crack...
const_iterator begin() const
INTEGRAL
Enum used to select the type of integral to be performed.
void mooseError(Args &&... args) const
bool _output_q
Whether to ouput the q function as a set of AuxVariables.
std::shared_ptr< FEProblemBase > & _problem
bool _get_equivalent_k
Whether to compute the equivalent K from the individual fracture integrals for mixed-mode fracture...
MooseEnum _position_type
How the distance along the crack front is measured (angle or distance)
bool isParamValid(const std::string &name) const
std::vector< Point > _crack_front_points
User-defined vector of crack front points.
unsigned int _ring_last
Number of elements away from the crack tip to outside of outer ring with the topological q function...
unsigned int _ring_first
Number of elements away from the crack tip to inside of inner ring with the topological q function...
bool _fgm_crack
Whether the crack lives in a functionally-graded material.
const RealVectorValue _crack_direction_vector_end_2
Vector optionally used to prescribe direction of crack extension at the 2nd end of the crack...
MooseUnits pow(const MooseUnits &, int)
unsigned int _axis_2d
Out-of-plane axis for 3D models treated as 2D.
bool _closed_loop
Indicates whether the crack forms a closed loop.
void ErrorVector unsigned int
Real _youngs_modulus
Young's modulus of material.
std::set< INTEGRAL > _integrals
Container for enumerations describing the individual integrals computed.
registerMooseAction("SolidMechanicsApp", DomainIntegralAction, "add_user_object")
const ExecFlagType EXEC_INITIAL