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);