13 #include "FEProblem.h"
16 #include "MooseMesh.h"
18 #include "libmesh/string_to_enum.h"
37 MultiMooseEnum integral_vec(
"JIntegral InteractionIntegralKI InteractionIntegralKII "
38 "InteractionIntegralKIII InteractionIntegralT");
39 params.addClassDescription(
40 "Creates the MOOSE objects needed to compute fraction domain integrals");
41 params.addRequiredParam<MultiMooseEnum>(
"integrals",
43 "Domain integrals to calculate. Choices are: " +
44 integral_vec.getRawNames());
45 params.addParam<std::vector<BoundaryName>>(
46 "boundary",
"The list of boundary IDs from the mesh where this boundary condition applies");
47 params.addParam<std::vector<Point>>(
"crack_front_points",
"Set of points to define crack front");
48 params.addParam<std::string>(
49 "order",
"FIRST",
"Specifies the order of the FE shape function to use for q AuxVariables");
50 params.addParam<std::string>(
51 "family",
"LAGRANGE",
"Specifies the family of FE shape functions to use for q AuxVariables");
52 params.addParam<std::vector<Real>>(
"radius_inner",
"Inner radius for volume integral domain");
53 params.addParam<std::vector<Real>>(
"radius_outer",
"Outer radius for volume integral domain");
54 params.addParam<
unsigned int>(
"ring_first",
55 "The first ring of elements for volume integral domain");
56 params.addParam<
unsigned int>(
"ring_last",
57 "The last ring of elements for volume integral domain");
58 params.addParam<std::vector<VariableName>>(
59 "output_variable",
"Variable values to be reported along the crack front");
60 params.addParam<
bool>(
61 "convert_J_to_K",
false,
"Convert J-integral to stress intensity factor K.");
62 params.addParam<Real>(
"poissons_ratio",
"Poisson's ratio");
63 params.addParam<Real>(
"youngs_modulus",
"Young's modulus");
64 params.addParam<std::vector<SubdomainName>>(
"block",
"The block ids where integrals are defined");
66 params.addParam<std::vector<VariableName>>(
68 "The displacements appropriate for the simulation geometry and coordinate system");
69 params.addParam<VariableName>(
"disp_x",
"The x displacement");
70 params.addParam<VariableName>(
"disp_y",
"The y displacement");
71 params.addParam<VariableName>(
"disp_z",
"The z displacement");
72 params.addParam<VariableName>(
"temperature",
"",
"The temperature");
73 MooseEnum position_type(
"Angle Distance",
"Distance");
74 params.addParam<MooseEnum>(
77 "The method used to calculate position along crack front. Options are: " +
78 position_type.getRawNames());
79 MooseEnum q_function_type(
"Geometry Topology",
"Geometry");
80 params.addParam<MooseEnum>(
"q_function_type",
82 "The method used to define the integration domain. Options are: " +
83 q_function_type.getRawNames());
84 params.addParam<
bool>(
87 "Calculate an equivalent K from KI, KII and KIII, assuming self-similar crack growth.");
88 params.addParam<
bool>(
"output_q",
true,
"Output q");
89 params.addParam<
bool>(
"solid_mechanics",
91 "Set to true if the solid_mechanics system is "
93 params.addRequiredParam<
bool>(
94 "incremental",
"Flag to indicate whether an incremental or total model is being used.");
95 params.addParam<std::vector<MaterialPropertyName>>(
96 "eigenstrain_names",
"List of eigenstrains applied in the strain calculation");
102 _boundary_names(getParam<std::vector<BoundaryName>>(
"boundary")),
103 _closed_loop(getParam<bool>(
"closed_loop")),
104 _use_crack_front_points_provider(false),
105 _order(getParam<std::string>(
"order")),
106 _family(getParam<std::string>(
"family")),
107 _direction_method_moose_enum(getParam<MooseEnum>(
"crack_direction_method")),
108 _end_direction_method_moose_enum(getParam<MooseEnum>(
"crack_end_direction_method")),
109 _have_crack_direction_vector(false),
110 _have_crack_direction_vector_end_1(false),
111 _have_crack_direction_vector_end_2(false),
112 _treat_as_2d(getParam<bool>(
"2d")),
113 _axis_2d(getParam<unsigned int>(
"axis_2d")),
114 _convert_J_to_K(false),
115 _has_symmetry_plane(isParamValid(
"symmetry_plane")),
116 _symmetry_plane(_has_symmetry_plane ? getParam<unsigned int>(
"symmetry_plane")
117 : std::numeric_limits<unsigned int>::max()),
118 _position_type(getParam<MooseEnum>(
"position_type")),
119 _q_function_type(getParam<MooseEnum>(
"q_function_type")),
120 _get_equivalent_k(getParam<bool>(
"equivalent_k")),
121 _use_displaced_mesh(false),
122 _output_q(getParam<bool>(
"output_q")),
123 _solid_mechanics(getParam<bool>(
"solid_mechanics")),
124 _incremental(getParam<bool>(
"incremental"))
128 if (isParamValid(
"radius_inner") && isParamValid(
"radius_outer"))
134 mooseError(
"DomainIntegral error: must set radius_inner and radius_outer.");
140 if (isParamValid(
"ring_first") && isParamValid(
"ring_last"))
142 _ring_first = getParam<unsigned int>(
"ring_first");
143 _ring_last = getParam<unsigned int>(
"ring_last");
147 "DomainIntegral error: must set ring_first and ring_last if q_function_type = Topology.");
152 mooseError(
"DomainIntegral error: invalid q_function_type.");
154 if (isParamValid(
"crack_front_points"))
157 if (isParamValid(
"crack_front_points_provider"))
159 if (!isParamValid(
"number_points_from_provider"))
160 mooseError(
"DomainIntegral error: when crack_front_points_provider is used, the "
161 "number_points_from_provider must be "
166 else if (isParamValid(
"number_points_from_provider"))
167 mooseError(
"DomainIntegral error: number_points_from_provider is provided but "
168 "crack_front_points_provider cannot "
170 if (isParamValid(
"crack_direction_vector"))
175 if (isParamValid(
"crack_direction_vector_end_1"))
180 if (isParamValid(
"crack_direction_vector_end_2"))
185 if (isParamValid(
"crack_mouth_boundary"))
187 if (isParamValid(
"intersecting_boundary"))
190 mooseError(
"Number of entries in 'radius_inner' and 'radius_outer' must match.");
192 bool youngs_modulus_set(
false);
193 bool poissons_ratio_set(
false);
194 MultiMooseEnum integral_moose_enums = getParam<MultiMooseEnum>(
"integrals");
195 if (integral_moose_enums.size() == 0)
196 mooseError(
"Must specify at least one domain integral to perform.");
197 for (
unsigned int i = 0; i < integral_moose_enums.size(); ++i)
199 if (integral_moose_enums[i] !=
"JIntegral")
202 if (isParamValid(
"displacements"))
204 _displacements = getParam<std::vector<VariableName>>(
"displacements");
208 "DomainIntegral error: The size of the displacements vector should atleast be 2.");
212 if (isParamValid(
"disp_x") || isParamValid(
"disp_y") || isParamValid(
"disp_z"))
213 mooseDeprecated(
"DomainIntegral Warning: disp_x, disp_y and disp_z are deprecated. "
214 "Please specify displacements using the `dispalcements` parameter.");
216 if (!isParamValid(
"disp_x") || !isParamValid(
"disp_y"))
218 "DomainIntegral error: Specify displacements using the `displacements` parameter.");
224 if (isParamValid(
"disp_z"))
229 if (!(isParamValid(
"poissons_ratio")) || !(isParamValid(
"youngs_modulus")))
231 "DomainIntegral error: must set Poisson's ratio and Young's modulus for integral: ",
232 integral_moose_enums[i]);
234 if (!(isParamValid(
"block")))
235 mooseError(
"DomainIntegral error: must set block ID or name for integral: ",
236 integral_moose_enums[i]);
239 poissons_ratio_set =
true;
241 youngs_modulus_set =
true;
242 _blocks = getParam<std::vector<SubdomainName>>(
"block");
248 if (isParamValid(
"temperature"))
249 _temp = getParam<VariableName>(
"temperature");
253 "DomainIntegral error: must provide `eigenstrain_names` when temperature is coupled.");
258 mooseError(
"DomainIntegral error: must calculate KI, KII and KIII to get equivalent K.");
260 if (isParamValid(
"output_variable"))
264 mooseError(
"'output_variables' not yet supported with 'crack_front_points'");
267 if (isParamValid(
"convert_J_to_K"))
271 if (!isParamValid(
"youngs_modulus") || !isParamValid(
"poissons_ratio"))
272 mooseError(
"DomainIntegral error: must set Young's modulus and Poisson's ratio for "
273 "J-integral if convert_J_to_K = true.");
274 if (!youngs_modulus_set)
276 if (!poissons_ratio_set)
286 const std::string uo_name(
"crackFrontDefinition");
287 const std::string ak_base_name(
"q");
288 const std::string av_base_name(
"q");
290 const std::string aux_stress_base_name(
"aux_stress");
291 const std::string aux_grad_disp_base_name(
"aux_grad_disp");
293 if (_current_task ==
"add_user_object")
295 const std::string uo_type_name(
"CrackFrontDefinition");
297 InputParameters params = _factory.getValidParams(uo_type_name);
298 params.set<ExecFlagEnum>(
"execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
312 params.set<
unsigned int>(
"axis_2d") =
_axis_2d;
320 params.applyParameters(parameters(),
321 {
"crack_front_points_provider, number_points_from_provider"});
331 params.set<
bool>(
"t_stress") =
true;
334 unsigned int nrings = 0;
337 params.set<
bool>(
"q_function_rings") =
true;
338 params.set<
unsigned int>(
"last_ring") =
_ring_last;
339 params.set<
unsigned int>(
"first_ring") =
_ring_first;
344 params.set<std::vector<Real>>(
"j_integral_radius_inner") =
_radius_inner;
345 params.set<std::vector<Real>>(
"j_integral_radius_outer") =
_radius_outer;
349 params.set<
unsigned int>(
"nrings") = nrings;
352 _problem->addUserObject(uo_type_name, uo_name, params);
354 else if (_current_task ==
"add_aux_variable" &&
_output_q)
356 for (
unsigned int ring_index = 0; ring_index <
_ring_vec.size(); ++ring_index)
358 std::string aux_var_type;
360 aux_var_type =
"MooseVariable";
361 else if (
_family ==
"MONOMIAL")
362 aux_var_type =
"MooseVariableConstMonomial";
364 aux_var_type =
"MooseVariableScalar";
366 mooseError(
"Unsupported finite element family in, " +
name() +
367 ". Please use LAGRANGE, MONOMIAL, or SCALAR");
369 auto params = _factory.getValidParams(aux_var_type);
370 params.set<MooseEnum>(
"order") =
_order;
371 params.set<MooseEnum>(
"family") =
_family;
375 std::ostringstream av_name_stream;
376 av_name_stream << av_base_name <<
"_" <<
_ring_vec[ring_index];
377 _problem->addAuxVariable(aux_var_type, av_name_stream.str(), params);
381 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
383 std::ostringstream av_name_stream;
384 av_name_stream << av_base_name <<
"_" << cfp_index + 1 <<
"_" <<
_ring_vec[ring_index];
385 _problem->addAuxVariable(aux_var_type, av_name_stream.str(), params);
391 else if (_current_task ==
"add_aux_kernel" &&
_output_q)
393 std::string ak_type_name;
394 unsigned int nrings = 0;
397 ak_type_name =
"DomainIntegralQFunction";
402 ak_type_name =
"DomainIntegralTopologicalQFunction";
406 InputParameters params = _factory.getValidParams(ak_type_name);
407 params.set<ExecFlagEnum>(
"execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
408 params.set<UserObjectName>(
"crack_front_definition") = uo_name;
411 for (
unsigned int ring_index = 0; ring_index < nrings; ++ring_index)
415 params.set<Real>(
"j_integral_radius_inner") =
_radius_inner[ring_index];
416 params.set<Real>(
"j_integral_radius_outer") =
_radius_outer[ring_index];
420 params.set<
unsigned int>(
"ring_index") =
_ring_first + ring_index;
425 std::ostringstream ak_name_stream;
426 ak_name_stream << ak_base_name <<
"_" <<
_ring_vec[ring_index];
427 std::ostringstream av_name_stream;
428 av_name_stream << av_base_name <<
"_" <<
_ring_vec[ring_index];
429 params.set<AuxVariableName>(
"variable") = av_name_stream.str();
430 _problem->addAuxKernel(ak_type_name, ak_name_stream.str(), params);
434 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
436 std::ostringstream ak_name_stream;
437 ak_name_stream << ak_base_name <<
"_" << cfp_index + 1 <<
"_" <<
_ring_vec[ring_index];
438 std::ostringstream av_name_stream;
439 av_name_stream << av_base_name <<
"_" << cfp_index + 1 <<
"_" <<
_ring_vec[ring_index];
440 params.set<AuxVariableName>(
"variable") = av_name_stream.str();
441 params.set<
unsigned int>(
"crack_front_point_index") = cfp_index;
442 _problem->addAuxKernel(ak_type_name, ak_name_stream.str(), params);
448 else if (_current_task ==
"add_postprocessor")
452 std::string pp_base_name;
457 const std::string pp_type_name(
"JIntegral");
458 InputParameters params = _factory.getValidParams(pp_type_name);
459 params.set<ExecFlagEnum>(
"execute_on") = EXEC_TIMESTEP_END;
460 params.set<UserObjectName>(
"crack_front_definition") = uo_name;
470 for (
unsigned int ring_index = 0; ring_index <
_ring_vec.size(); ++ring_index)
472 params.set<
unsigned int>(
"ring_index") =
_ring_vec[ring_index];
474 params.set<
unsigned int>(
"ring_first") =
_ring_first;
479 std::ostringstream av_name_stream;
480 av_name_stream << av_base_name <<
"_" <<
_ring_vec[ring_index];
481 std::ostringstream pp_name_stream;
482 pp_name_stream << pp_base_name <<
"_" <<
_ring_vec[ring_index];
483 _problem->addPostprocessor(pp_type_name, pp_name_stream.str(), params);
487 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
489 std::ostringstream av_name_stream;
490 av_name_stream << av_base_name <<
"_" << cfp_index + 1 <<
"_" <<
_ring_vec[ring_index];
491 std::ostringstream pp_name_stream;
492 pp_name_stream << pp_base_name <<
"_" << cfp_index + 1 <<
"_" <<
_ring_vec[ring_index];
493 params.set<
unsigned int>(
"crack_front_point_index") = cfp_index;
494 _problem->addPostprocessor(pp_type_name, pp_name_stream.str(), params);
507 mooseError(
"In DomainIntegral, symmetry_plane option cannot be used with mode-II or "
508 "mode-III interaction integral");
510 const std::string pp_base_name(
"II");
511 std::string pp_type_name(
"InteractionIntegral");
514 pp_type_name =
"InteractionIntegralSM";
516 InputParameters params = _factory.getValidParams(pp_type_name);
517 params.set<ExecFlagEnum>(
"execute_on") = EXEC_TIMESTEP_END;
518 params.set<UserObjectName>(
"crack_front_definition") = uo_name;
524 params.set<std::vector<VariableName>>(
"displacements") =
_displacements;
526 params.set<std::vector<VariableName>>(
"temperature") = {
_temp};
532 std::string pp_base_name;
533 std::string aux_mode_name;
540 pp_base_name =
"II_KI";
541 aux_mode_name =
"_I_";
542 params.set<Real>(
"K_factor") =
544 params.set<MooseEnum>(
"sif_mode") =
"KI";
548 pp_base_name =
"II_KII";
549 aux_mode_name =
"_II_";
550 params.set<Real>(
"K_factor") =
552 params.set<MooseEnum>(
"sif_mode") =
"KII";
556 pp_base_name =
"II_KIII";
557 aux_mode_name =
"_III_";
559 params.set<MooseEnum>(
"sif_mode") =
"KIII";
563 pp_base_name =
"II_T";
564 aux_mode_name =
"_T_";
566 params.set<MooseEnum>(
"sif_mode") =
"T";
570 for (
unsigned int ring_index = 0; ring_index <
_ring_vec.size(); ++ring_index)
572 params.set<
unsigned int>(
"ring_index") =
_ring_vec[ring_index];
573 params.set<
unsigned int>(
"ring_first") =
_ring_first;
578 std::ostringstream av_name_stream;
579 av_name_stream << av_base_name <<
"_" <<
_ring_vec[ring_index];
580 std::ostringstream pp_name_stream;
581 pp_name_stream << pp_base_name <<
"_" <<
_ring_vec[ring_index];
583 _problem->addPostprocessor(pp_type_name, pp_name_stream.str(), params);
587 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
589 std::ostringstream av_name_stream;
590 av_name_stream << av_base_name <<
"_" << cfp_index + 1 <<
"_"
592 std::ostringstream pp_name_stream;
593 pp_name_stream << pp_base_name <<
"_" << cfp_index + 1 <<
"_"
595 std::ostringstream cfn_index_stream;
596 cfn_index_stream << cfp_index + 1;
598 params.set<
unsigned int>(
"crack_front_point_index") = cfp_index;
599 _problem->addPostprocessor(pp_type_name, pp_name_stream.str(), params);
608 const std::string pp_type_name(
"CrackFrontData");
609 InputParameters params = _factory.getValidParams(pp_type_name);
610 params.set<ExecFlagEnum>(
"execute_on") = EXEC_TIMESTEP_END;
611 params.set<UserObjectName>(
"crack_front_definition") = uo_name;
614 std::ostringstream pp_name_stream;
615 pp_name_stream << ov_base_name <<
"_crack";
617 _problem->addPostprocessor(pp_type_name, pp_name_stream.str(), params);
621 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
623 std::ostringstream pp_name_stream;
624 pp_name_stream << ov_base_name <<
"_crack_" << cfp_index + 1;
626 params.set<
unsigned int>(
"crack_front_point_index") = cfp_index;
627 _problem->addPostprocessor(pp_type_name, pp_name_stream.str(), params);
633 std::string pp_base_name(
"Keq");
634 const std::string pp_type_name(
"MixedModeEquivalentK");
635 InputParameters params = _factory.getValidParams(pp_type_name);
636 params.set<ExecFlagEnum>(
"execute_on") = EXEC_TIMESTEP_END;
638 for (
unsigned int ring_index = 0; ring_index <
_ring_vec.size(); ++ring_index)
642 std::ostringstream ki_name_stream;
643 ki_name_stream <<
"II_KI_" <<
_ring_vec[ring_index];
644 std::ostringstream kii_name_stream;
645 kii_name_stream <<
"II_KII_" <<
_ring_vec[ring_index];
646 std::ostringstream kiii_name_stream;
647 kiii_name_stream <<
"II_KIII_" <<
_ring_vec[ring_index];
648 params.set<PostprocessorName>(
"KI_name") = ki_name_stream.str();
649 params.set<PostprocessorName>(
"KII_name") = kii_name_stream.str();
650 params.set<PostprocessorName>(
"KIII_name") = kiii_name_stream.str();
651 std::ostringstream pp_name_stream;
652 pp_name_stream << pp_base_name <<
"_" <<
_ring_vec[ring_index];
653 _problem->addPostprocessor(pp_type_name, pp_name_stream.str(), params);
657 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
659 std::ostringstream ki_name_stream;
660 ki_name_stream <<
"II_KI_" << cfp_index + 1 <<
"_" <<
_ring_vec[ring_index];
661 std::ostringstream kii_name_stream;
662 kii_name_stream <<
"II_KII_" << cfp_index + 1 <<
"_" <<
_ring_vec[ring_index];
663 std::ostringstream kiii_name_stream;
664 kiii_name_stream <<
"II_KIII_" << cfp_index + 1 <<
"_" <<
_ring_vec[ring_index];
665 params.set<PostprocessorName>(
"KI_name") = ki_name_stream.str();
666 params.set<PostprocessorName>(
"KII_name") = kii_name_stream.str();
667 params.set<PostprocessorName>(
"KIII_name") = kiii_name_stream.str();
668 std::ostringstream pp_name_stream;
669 pp_name_stream << pp_base_name <<
"_" << cfp_index + 1 <<
"_" <<
_ring_vec[ring_index];
670 params.set<
unsigned int>(
"crack_front_point_index") = cfp_index;
671 _problem->addPostprocessor(pp_type_name, pp_name_stream.str(), params);
678 else if (_current_task ==
"add_vector_postprocessor")
684 std::string pp_base_name;
694 pp_base_name =
"II_KI";
697 pp_base_name =
"II_KII";
700 pp_base_name =
"II_KIII";
703 pp_base_name =
"II_T";
706 const std::string vpp_type_name(
"CrackDataSampler");
707 InputParameters params = _factory.getValidParams(vpp_type_name);
708 params.set<ExecFlagEnum>(
"execute_on") = EXEC_TIMESTEP_END;
709 params.set<UserObjectName>(
"crack_front_definition") = uo_name;
710 params.set<MooseEnum>(
"sort_by") =
"id";
712 for (
unsigned int ring_index = 0; ring_index <
_ring_vec.size(); ++ring_index)
714 std::vector<PostprocessorName> postprocessor_names;
715 std::ostringstream vpp_name_stream;
716 vpp_name_stream << pp_base_name <<
"_" <<
_ring_vec[ring_index];
717 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
719 std::ostringstream pp_name_stream;
720 pp_name_stream << pp_base_name <<
"_" << cfp_index + 1 <<
"_" <<
_ring_vec[ring_index];
721 postprocessor_names.push_back(pp_name_stream.str());
723 params.set<std::vector<PostprocessorName>>(
"postprocessors") = postprocessor_names;
724 _problem->addVectorPostprocessor(vpp_type_name, vpp_name_stream.str(), params);
730 const std::string vpp_type_name(
"VectorOfPostprocessors");
731 InputParameters params = _factory.getValidParams(vpp_type_name);
732 params.set<ExecFlagEnum>(
"execute_on") = EXEC_TIMESTEP_END;
733 std::ostringstream vpp_name_stream;
735 std::vector<PostprocessorName> postprocessor_names;
736 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
738 std::ostringstream pp_name_stream;
739 pp_name_stream << vpp_name_stream.str() <<
"_" << cfp_index + 1;
740 postprocessor_names.push_back(pp_name_stream.str());
742 params.set<std::vector<PostprocessorName>>(
"postprocessors") = postprocessor_names;
743 _problem->addVectorPostprocessor(vpp_type_name, vpp_name_stream.str(), params);
748 std::string pp_base_name(
"Keq");
749 const std::string vpp_type_name(
"CrackDataSampler");
750 InputParameters params = _factory.getValidParams(vpp_type_name);
751 params.set<ExecFlagEnum>(
"execute_on") = EXEC_TIMESTEP_END;
752 params.set<UserObjectName>(
"crack_front_definition") = uo_name;
753 params.set<MooseEnum>(
"sort_by") =
"id";
755 for (
unsigned int ring_index = 0; ring_index <
_ring_vec.size(); ++ring_index)
757 std::vector<PostprocessorName> postprocessor_names;
758 std::ostringstream vpp_name_stream;
759 vpp_name_stream << pp_base_name <<
"_" <<
_ring_vec[ring_index];
760 for (
unsigned int cfp_index = 0; cfp_index < num_crack_front_points; ++cfp_index)
762 std::ostringstream pp_name_stream;
763 pp_name_stream << pp_base_name <<
"_" << cfp_index + 1 <<
"_" <<
_ring_vec[ring_index];
764 postprocessor_names.push_back(pp_name_stream.str());
766 params.set<std::vector<PostprocessorName>>(
"postprocessors") = postprocessor_names;
767 _problem->addVectorPostprocessor(vpp_type_name, vpp_name_stream.str(), params);
772 else if (_current_task ==
"add_material")
776 std::string mater_name;
777 const std::string mater_type_name(
"ThermalFractureIntegral");
778 mater_name =
"ThermalFractureIntegral";
780 InputParameters params = _factory.getValidParams(mater_type_name);
781 params.set<std::vector<MaterialPropertyName>>(
"eigenstrain_names") =
782 getParam<std::vector<MaterialPropertyName>>(
"eigenstrain_names");
783 params.set<std::vector<VariableName>>(
"temperature") = {
_temp};
784 params.set<std::vector<SubdomainName>>(
"block") = {
_blocks};
785 _problem->addMaterial(mater_type_name, mater_name, params);
787 MultiMooseEnum integral_moose_enums = getParam<MultiMooseEnum>(
"integrals");
788 bool have_j_integral =
false;
789 for (
auto ime : integral_moose_enums)
791 if (ime ==
"JIntegral")
792 have_j_integral =
true;
796 std::string mater_name;
797 const std::string mater_type_name(
"StrainEnergyDensity");
798 mater_name =
"StrainEnergyDensity";
800 InputParameters params = _factory.getValidParams(mater_type_name);
803 params.set<std::vector<SubdomainName>>(
"block") = {
_blocks};
804 _problem->addMaterial(mater_type_name, mater_name, params);
806 std::string mater_name2;
807 const std::string mater_type_name2(
"EshelbyTensor");
808 mater_name2 =
"EshelbyTensor";
810 InputParameters params2 = _factory.getValidParams(mater_type_name2);
811 _displacements = getParam<std::vector<VariableName>>(
"displacements");
812 params2.set<std::vector<VariableName>>(
"displacements") =
_displacements;
813 params2.set<std::vector<SubdomainName>>(
"block") = {
_blocks};
816 params2.set<std::vector<VariableName>>(
"temperature") = {
_temp};
818 _problem->addMaterial(mater_type_name2, mater_name2, params2);
826 unsigned int num_points = 0;
829 std::vector<BoundaryID> bids = _mesh->getBoundaryIDs(
_boundary_names,
true);
830 std::set<unsigned int> nodes;
832 ConstBndNodeRange & bnd_nodes = *_mesh->getBoundaryNodeRange();
833 for (ConstBndNodeRange::const_iterator nd = bnd_nodes.begin(); nd != bnd_nodes.end(); ++nd)
835 const BndNode * bnode = *nd;
836 BoundaryID boundary_id = bnode->_bnd_id;
838 for (
unsigned int ibid = 0; ibid < bids.size(); ++ibid)
840 if (boundary_id == bids[ibid])
842 nodes.insert(bnode->_node->id());
847 num_points = nodes.size();
852 num_points = getParam<unsigned int>(
"number_points_from_provider");
854 mooseError(
"Must define either 'boundary' or 'crack_front_points'");