11 #include "AddBCAction.h"
12 #include "AddDiracKernelAction.h"
13 #include "AddKernelAction.h"
14 #include "AddMaterialAction.h"
15 #include "AddPostprocessorAction.h"
16 #include "AddUserObjectAction.h"
18 #include "ActionWarehouse.h"
19 #include "ActionFactory.h"
20 #include "FEProblem.h"
21 #include "MooseObjectAction.h"
22 #include "Conversion.h"
30 InputParameters params = validParams<Action>();
31 params.addClassDescription(
32 "Makes sure that the correct nodal and/or qp materials are added for each property");
49 auto actions = _awh.getActions<AddMaterialAction>();
51 for (
auto & action : actions)
56 InputParameters & pars = material->getObjectParams();
59 if (pars.isParamValid(
"pf_material_type"))
61 const std::string pf_material_type = pars.get<std::string>(
"pf_material_type");
65 if (pf_material_type !=
"joiner")
74 if (!pars.isParamSetByUser(
"at_nodes"))
76 bool qp_material_required =
false;
81 const bool at_nodes =
true;
87 pars.set<
bool>(
"at_nodes") = !at_nodes;
88 qp_material_required =
true;
99 if (!qp_material_required)
100 pars.set<
bool>(
"at_nodes") = at_nodes;
114 auto kernels = _awh.getActions<AddKernelAction>();
115 for (
auto & kernel : kernels)
120 for (
auto & action : actions)
124 auto auxkernels = _awh.getActions<AddKernelAction>();
125 for (
auto & auxkernel : auxkernels)
129 auto postprocessors = _awh.getActions<AddPostprocessorAction>();
130 for (
auto & postprocessor : postprocessors)
134 auto userobjects = _awh.getActions<AddUserObjectAction>();
135 for (
auto & userobject : userobjects)
139 auto bcs = _awh.getActions<AddBCAction>();
140 for (
auto & bc : bcs)
144 auto diracs = _awh.getActions<AddDiracKernelAction>();
145 for (
auto & dirac : diracs)
152 const std::string nodal_ext = at_nodes ?
"_nodal" :
"_qp";
155 bool required =
false;
158 required =
_deps.dependsOn(item, pf_material_type + nodal_ext);
169 bool is_present =
false;
175 if (ama_material->name() != material->name() &&
176 ama_material->getMooseObjectType() == material->getMooseObjectType())
178 InputParameters & mat_params = ama_material->getObjectParams();
179 const bool mat_at_nodes = mat_params.get<
bool>(
"at_nodes");
181 InputParameters & pars = material->getObjectParams();
185 if (mat_at_nodes == at_nodes && !pars.isParamValid(
"phase"))
191 if (pars.isParamValid(
"phase"))
193 const unsigned int phase = pars.get<
unsigned int>(
"phase");
195 if (mat_params.isParamValid(
"phase") && mat_params.get<
unsigned int>(
"phase") == phase)
201 if (mat_params.get<std::vector<SubdomainName>>(
"block") !=
202 pars.get<std::vector<SubdomainName>>(
"block"))
213 const std::string nodal_ext = at_nodes ?
"_nodal" :
"_qp";
216 InputParameters & pars = material->getObjectParams();
219 const std::string pf_material_type = pars.get<std::string>(
"pf_material_type");
220 const std::string moose_object_type = material->getMooseObjectType();
223 std::string phase_str;
224 if (pars.isParamValid(
"phase"))
226 unsigned int phase = pars.get<
unsigned int>(
"phase");
227 phase_str =
"_phase" + Moose::stringify(phase);
231 InputParameters action_params = _action_factory.getValidParams(
"AddMaterialAction");
232 action_params.set<ActionWarehouse *>(
"awh") = &_awh;
235 action_params.set<std::string>(
"type") = moose_object_type;
237 const std::string material_name = material->name() + phase_str + nodal_ext;
239 auto action = MooseSharedNamespace::dynamic_pointer_cast<MooseObjectAction>(
240 _action_factory.create(
"AddMaterialAction", material_name, action_params));
242 action->getObjectParams().applyParameters(pars);
243 action->getObjectParams().set<
bool>(
"at_nodes") = at_nodes;
245 _awh.addActionBlock(action);