88{
89
91 const bool newton = getParam<MooseEnum>("method") == "newton";
92 const std::string residual =
p +
"_residual";
93 const PostprocessorName result = getParam<PostprocessorName>("result_postprocessor");
94
96 {
98 ps.
set<std::vector<FileName>>(
"input_files") = {getParam<FileName>(
"forward_input")};
99
100
102 _problem->addMultiApp(
"TransientMultiApp",
p +
"_forward", ps);
103 }
105 {
107 t1.
set<MultiAppName>(
"to_multi_app") =
p +
"_forward";
108 t1.set<PostprocessorName>(
"from_postprocessor") =
p +
"_param";
109 t1.set<PostprocessorName>("to_postprocessor") =
110 getParam<PostprocessorName>("sub_parameter_postprocessor");
111 _problem->addTransfer(
"MultiAppPostprocessorTransfer",
p +
"_to_forward", t1);
112
114 t2.
set<MultiAppName>(
"from_multi_app") =
p +
"_forward";
115 t2.set<PostprocessorName>("from_postprocessor") =
116 getParam<PostprocessorName>("sub_output_postprocessor");
117 t2.set<PostprocessorName>(
"to_postprocessor") =
p +
"_output";
118 t2.set<
MooseEnum>(
"reduction_type") =
"average";
119 _problem->addTransfer(
"MultiAppPostprocessorTransfer",
p +
"_from_forward", t2);
120 }
122 {
123 const std::vector<OutputName> none = {"none"};
124
125
127 pp.
set<
Real>(
"default") = getParam<Real>(
"initial_parameter");
128 pp.set<std::vector<OutputName>>("outputs") = none;
129 _problem->addPostprocessor(
"Receiver",
p +
"_param", pp);
130
131
133 po.
set<std::vector<OutputName>>(
"outputs") = none;
134 _problem->addPostprocessor(
"Receiver",
p +
"_output", po);
135
136
139 _problem->addPostprocessor(
"Receiver", result, pr);
140
141
142
144 pres.
set<
Real>(
"default") = 1e30;
145 pres.set<std::vector<OutputName>>("outputs") = none;
146 _problem->addPostprocessor(
"Receiver", residual, pres);
147 }
149 {
151 pc.
set<PostprocessorName>(
"postprocessor") = residual;
152 pc.set<
Real>(
"tolerance") = 1.0;
153 pc.set<unsigned int>("max_iterations") = getParam<unsigned int>("max_iterations");
154 pc.set<bool>("converge_at_max_iterations") = getParam<bool>("accept_on_max_iterations");
155 pc.set<bool>("verbose") = getParam<bool>("verbose");
156 _problem->addConvergence(
"PostprocessorConvergence",
p +
"_convergence", pc);
157 }
159 {
160
161
162
163
164 const std::string conv_name =
p +
"_convergence";
165 if (!
_problem->hasSetMultiAppFixedPointConvergenceName() ||
166 _problem->getMultiAppFixedPointConvergenceName() != conv_name)
167 {
168
169
170
171
172
173
174 std::string current;
175 if (!
_problem->hasSetMultiAppFixedPointConvergenceName())
176
177
178 current = "It is currently not set.";
179 else if (
_problem->needToAddDefaultMultiAppFixedPointConvergence())
180 current = "No 'multiapp_fixed_point_convergence' was given, so MOOSE created a default "
181 "one instead.";
182 else
183 current =
184 "It is currently set to '" +
_problem->getMultiAppFixedPointConvergenceName() +
"'.";
185
188 "] requires the executioner to use its generated convergence to enable and drive "
189 "the fixed-point loop. Add\n\n multiapp_fixed_point_convergence = ",
190 conv_name,
191 "\n\nto the [Executioner] block. ",
192 current);
193 }
194
195 const std::string ctype = newton ? "NewtonInversionControl" : "SecantInversionControl";
197 pctl.
set<PostprocessorName>(
"output_postprocessor") =
p +
"_output";
198 pctl.set<PostprocessorName>(
"parameter_postprocessor") =
p +
"_param";
199 pctl.set<PostprocessorName>("converged_parameter_postprocessor") = result;
200 pctl.set<PostprocessorName>("residual_postprocessor") = residual;
201 pctl.set<FunctionName>("target_function") = getParam<FunctionName>("target_function");
202 pctl.set<
Real>(
"absolute_tolerance") = getParam<Real>(
"absolute_tolerance");
203 pctl.set<
Real>(
"relative_tolerance") = getParam<Real>(
"relative_tolerance");
204 if (newton)
205 pctl.set<
Real>(
"parameter_delta") = getParam<Real>(
"perturbation");
206 else
207 pctl.set<
Real>(
"initial_delta") = getParam<Real>(
"perturbation");
208
211 _problem->getControlWarehouse().addObject(control);
212 }
213}
const ExecFlagType EXEC_TIMESTEP_BEGIN
std::shared_ptr< FEProblemBase > & _problem
const std::string & _current_task
std::shared_ptr< MooseObject > create(const std::string &obj_name, const std::string &name, const InputParameters ¶meters, THREAD_ID tid=0, bool print_deprecated=true)
InputParameters getValidParams(const std::string &name) const
const std::string & name() const
void mooseError(Args &&... args) const
std::string camelCaseToUnderscore(const std::string &camel_case_name)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real