10 #ifdef MOOSE_KOKKOS_ENABLED 129 #include "libmesh/exodusII_io.h" 130 #include "libmesh/quadrature.h" 131 #include "libmesh/coupling_matrix.h" 132 #include "libmesh/nonlinear_solver.h" 133 #include "libmesh/sparse_matrix.h" 134 #include "libmesh/string_to_enum.h" 135 #include "libmesh/fe_interface.h" 136 #include "libmesh/enum_norm_type.h" 137 #include "libmesh/petsc_solver_exception.h" 139 #include "metaphysicl/dualnumber.h" 165 params.
addParam<
unsigned int>(
"null_space_dimension", 0,
"The dimension of the nullspace");
167 "transpose_null_space_dimension", 0,
"The dimension of the transpose nullspace");
169 "near_null_space_dimension", 0,
"The dimension of the near nullspace");
172 "Whether or not to actually solve the Nonlinear system. " 173 "This is handy in the case that all you want to do is " 174 "execute AuxKernels, Transfers, etc. without actually " 176 params.
addParam<
bool>(
"use_nonlinear",
178 "Determines whether to use a Nonlinear vs a " 179 "Eigenvalue system (Automatically determined based " 181 params.
addParam<
bool>(
"error_on_jacobian_nonzero_reallocation",
182 "This causes PETSc to error if it had to reallocate memory in the Jacobian " 183 "matrix due to not having enough nonzeros");
184 params.
addParam<
bool>(
"ignore_zeros_in_jacobian",
186 "Do not explicitly store zero values in " 187 "the Jacobian matrix if true");
188 params.
addParam<
bool>(
"force_restart",
190 "EXPERIMENTAL: If true, a sub_app may use a " 191 "restart file instead of using of using the master " 195 "True to skip additional data in equation system for restart.",
196 "This parameter is no longer used, as we do not load additional " 197 "vectors by default with restart");
198 params.
addParam<
bool>(
"skip_nl_system_check",
200 "True to skip the NonlinearSystem check for work to do (e.g. Make sure " 201 "that there are variables to solve for).");
202 params.
addParam<
bool>(
"allow_initial_conditions_with_restart",
204 "True to allow the user to specify initial conditions when restarting. " 205 "Initial conditions can override any restarted field");
207 auto coverage_check_description = [](std::string scope, std::string list_param_name)
209 return "Controls, if and how a " + scope +
210 " subdomain coverage check is performed. " 211 "With 'TRUE' or 'ON' all subdomains are checked (the default). Setting 'FALSE' or 'OFF' " 212 "will disable the check for all subdomains. " 213 "To exclude a predefined set of subdomains 'SKIP_LIST' is to " 214 "be used, while the subdomains to skip are to be defined in the parameter '" +
216 "'. To limit the check to a list of subdomains, 'ONLY_LIST' is to " 217 "be used (again, using the parameter '" +
218 list_param_name +
"').";
221 params.
addParam<std::vector<SubdomainName>>(
224 "List of subdomains for kernel coverage and material coverage checks. Setting this parameter " 225 "is equivalent to setting 'kernel_coverage_block_list' and 'material_coverage_block_list' as " 226 "well as using 'ONLY_LIST' as the coverage check mode.");
228 MooseEnum kernel_coverage_check_modes(
"FALSE TRUE OFF ON SKIP_LIST ONLY_LIST",
"TRUE");
230 kernel_coverage_check_modes,
231 coverage_check_description(
"kernel",
"kernel_coverage_block_list"));
232 params.
addParam<std::vector<SubdomainName>>(
233 "kernel_coverage_block_list",
235 "List of subdomains for kernel coverage check. The meaning of this list is controlled by the " 236 "parameter 'kernel_coverage_check' (whether this is the list of subdomains to be checked, " 237 "not to be checked or not taken into account).");
239 "boundary_restricted_node_integrity_check",
241 "Set to false to disable checking of boundary restricted nodal object variable dependencies, " 242 "e.g. are the variable dependencies defined on the selected boundaries?");
243 params.
addParam<
bool>(
"boundary_restricted_elem_integrity_check",
245 "Set to false to disable checking of boundary restricted elemental object " 246 "variable dependencies, e.g. are the variable dependencies defined on the " 247 "selected boundaries?");
249 "side_uo_interface_mat_prop_integrity_check",
251 "Set to false to disable checking that side user objects do not consume material " 252 "properties declared by interface materials on the same boundary.");
253 MooseEnum material_coverage_check_modes(
"FALSE TRUE OFF ON SKIP_LIST ONLY_LIST",
"TRUE");
255 "material_coverage_check",
256 material_coverage_check_modes,
257 coverage_check_description(
"material",
"material_coverage_block_list"));
258 params.
addParam<std::vector<SubdomainName>>(
259 "material_coverage_block_list",
261 "List of subdomains for material coverage check. The meaning of this list is controlled by " 262 "the parameter 'material_coverage_check' (whether this is the list of subdomains to be " 263 "checked, not to be checked or not taken into account).");
265 params.
addParam<
bool>(
"fv_bcs_integrity_check",
267 "Set to false to disable checking of overlapping Dirichlet and Flux BCs " 268 "and/or multiple DirichletBCs per sideset");
271 "material_dependency_check",
true,
"Set to false to disable material dependency check");
272 params.
addParam<
bool>(
"parallel_barrier_messaging",
274 "Displays messaging from parallel " 275 "barrier notifications when executing " 276 "or transferring to/from Multiapps " 279 MooseEnum verbosity(
"false true extra",
"false");
282 "Set to 'true' to have the problem report on any object created. Set " 283 "to 'extra' to also display all parameters.");
284 params.
addParam<
bool>(
"verbose_multiapps",
286 "Set to True to enable verbose screen printing related to MultiApps");
290 "Set to True to enable verbose screen printing related to solution restoration");
292 params.
addParam<FileNameNoExtension>(
"restart_file_base",
293 "File base name used for restart (e.g. " 294 "<path>/<filebase> or <path>/LATEST to " 295 "grab the latest file available)");
297 params.
addParam<std::vector<std::vector<TagName>>>(
300 "Extra vectors to add to the system that can be filled by objects which compute residuals " 301 "and Jacobians (Kernels, BCs, etc.) by setting tags on them. The outer index is for which " 302 "nonlinear system the extra tag vectors should be added for");
304 params.
addParam<std::vector<std::vector<TagName>>>(
305 "not_zeroed_tag_vectors",
307 "Extra vector tags which the sytem will not zero when other vector tags are zeroed. " 308 "The outer index is for which nonlinear system the extra tag vectors should be added for");
310 params.
addParam<std::vector<std::vector<TagName>>>(
311 "extra_tag_matrices",
313 "Extra matrices to add to the system that can be filled " 314 "by objects which compute residuals and Jacobians " 315 "(Kernels, BCs, etc.) by setting tags on them. The outer index is for which " 316 "nonlinear system the extra tag vectors should be added for");
318 params.
addParam<std::vector<TagName>>(
319 "extra_tag_solutions",
321 "Extra solution vectors to add to the system that can be used by " 322 "objects for coupling variable values stored in them.");
324 params.
addParam<
bool>(
"previous_nl_solution_required",
326 "True to indicate that this calculation requires a solution vector for " 327 "storing the previous nonlinear iteration.");
329 params.
addParam<std::vector<NonlinearSystemName>>(
330 "nl_sys_names", std::vector<NonlinearSystemName>{
"nl0"},
"The nonlinear system names");
332 params.
addParam<std::vector<LinearSystemName>>(
"linear_sys_names", {},
"The linear system names");
334 params.
addParam<
bool>(
"check_uo_aux_state",
336 "True to turn on a check that no state presents during the evaluation of " 337 "user objects and aux kernels");
344 "allow_invalid_solution",
346 "Set to true to allow convergence even though the solution has been marked as 'invalid'");
347 params.
addParam<
bool>(
"show_invalid_solution_console",
349 "Set to true to show the invalid solution occurrence summary in console");
350 params.
addParam<
bool>(
"immediately_print_invalid_solution",
352 "Whether or not to report invalid solution warnings at the time the " 353 "warning is produced instead of after the calculation");
356 "identify_variable_groups_in_nl",
358 "Whether to identify variable groups in nonlinear systems. This affects dof ordering");
361 "regard_general_exceptions_as_errors",
363 "If we catch an exception during residual/Jacobian evaluaton for which we don't have " 364 "specific handling, immediately error instead of allowing the time step to be cut");
366 params.
addParam<
bool>(
"use_hash_table_matrix_assembly",
368 "Whether to assemble matrices using hash tables instead of preallocating " 369 "matrix memory. This can be a good option if the sparsity pattern changes " 370 "throughout the course of the simulation.");
372 "restore_original_nonzero_pattern",
373 "Whether we should reset matrix memory for every Jacobian evaluation. This option is useful " 374 "if the sparsity pattern is constantly changing and you are using hash table assembly or if " 375 "you wish to continually restore the matrix to the originally preallocated sparsity pattern " 376 "computed by relationship managers.");
379 "skip_nl_system_check kernel_coverage_check kernel_coverage_block_list " 380 "boundary_restricted_node_integrity_check " 381 "boundary_restricted_elem_integrity_check " 382 "side_uo_interface_mat_prop_integrity_check material_coverage_check " 383 "material_coverage_block_list fv_bcs_integrity_check " 384 "material_dependency_check check_uo_aux_state error_on_jacobian_nonzero_reallocation",
385 "Simulation checks");
387 "ignore_zeros_in_jacobian identify_variable_groups_in_nl " 388 "use_hash_table_matrix_assembly restore_original_nonzero_pattern",
389 "Nonlinear system(s)");
391 "restart_file_base force_restart allow_initial_conditions_with_restart",
"Restart");
393 "verbose_setup verbose_multiapps verbose_restore parallel_barrier_messaging",
"Verbosity");
395 "null_space_dimension transpose_null_space_dimension near_null_space_dimension",
396 "Null space removal");
398 "extra_tag_vectors extra_tag_matrices extra_tag_solutions not_zeroed_tag_vectors",
399 "Contribution to tagged field data");
401 "allow_invalid_solution show_invalid_solution_console immediately_print_invalid_solution",
402 "Solution validity control");
410 _mesh(*getCheckedPointerParam<
MooseMesh *>(
"mesh")),
412 "equation_systems", nullptr, _mesh)),
414 _solve(getParam<bool>(
"solve")),
416 _time(declareRestartableData<
Real>(
"time")),
417 _time_old(declareRestartableData<
Real>(
"time_old")),
418 _t_step(declareRecoverableData<
int>(
"t_step")),
419 _dt(declareRestartableData<
Real>(
"dt")),
420 _dt_old(declareRestartableData<
Real>(
"dt_old")),
421 _need_to_add_default_nonlinear_convergence(false),
422 _need_to_add_default_multiapp_fixed_point_convergence(false),
423 _need_to_add_default_steady_state_convergence(false),
424 _linear_sys_names(getParam<
std::vector<LinearSystemName>>(
"linear_sys_names")),
425 _num_linear_sys(_linear_sys_names.size()),
426 _linear_systems(_num_linear_sys, nullptr),
427 _current_linear_sys(nullptr),
428 _using_default_nl(!isParamSetByUser(
"nl_sys_names")),
429 _nl_sys_names(!_using_default_nl || (_using_default_nl && !_linear_sys_names.size())
430 ? getParam<
std::vector<NonlinearSystemName>>(
"nl_sys_names")
431 :
std::vector<NonlinearSystemName>()),
432 _num_nl_sys(_nl_sys_names.size()),
433 _nl(_num_nl_sys, nullptr),
434 _current_nl_sys(nullptr),
435 _solver_systems(_num_nl_sys + _num_linear_sys, nullptr),
438 #ifdef MOOSE_KOKKOS_ENABLED
439 _kokkos_assembly(*this),
441 _mesh_divisions(true),
443 "material_props", &_mesh, _material_prop_registry, *this)),
445 "bnd_material_props", &_mesh, _material_prop_registry, *this)),
447 "neighbor_material_props", &_mesh, _material_prop_registry, *this)),
448 #ifdef MOOSE_KOKKOS_ENABLED
449 _kokkos_material_props(
451 "kokkos_material_props", &_mesh, _material_prop_registry, *this)),
452 _kokkos_bnd_material_props(
454 "kokkos_bnd_material_props", &_mesh, _material_prop_registry, *this)),
455 _kokkos_neighbor_material_props(
457 "kokkos_neighbor_material_props", &_mesh, _material_prop_registry, *this)),
459 _reporter_data(_app),
460 _multi_apps(_app.getExecuteOnEnum()),
461 _transient_multi_apps(_app.getExecuteOnEnum()),
462 _transfers(_app.getExecuteOnEnum(), false),
463 _to_multi_app_transfers(_app.getExecuteOnEnum(), false),
464 _from_multi_app_transfers(_app.getExecuteOnEnum(), false),
465 _between_multi_app_transfers(_app.getExecuteOnEnum(), false),
466 #ifdef LIBMESH_ENABLE_AMR
468 _cycles_completed(0),
470 _displaced_mesh(nullptr),
471 _geometric_search_data(*this, _mesh),
473 _reinit_displaced_elem(false),
474 _reinit_displaced_face(false),
475 _reinit_displaced_neighbor(false),
476 _input_file_saved(false),
478 _has_constraints(false),
479 _snesmf_reuse_base(true),
480 _skip_exception_check(false),
481 _snesmf_reuse_base_set_by_user(false),
482 _has_initialized_stateful(false),
483 _const_jacobian(false),
484 _has_jacobian(false),
485 _needs_old_newton_iter(false),
486 _previous_nl_solution_required(getParam<bool>(
"previous_nl_solution_required")),
487 _previous_multiapp_fp_nl_solution_required(_num_nl_sys + _num_linear_sys, false),
488 _previous_multiapp_fp_aux_solution_required(false),
489 _previous_multisystem_fp_nl_solution_required(_num_nl_sys + _num_linear_sys, false),
490 _previous_multisystem_fp_aux_solution_required(false),
491 _has_nonlocal_coupling(false),
492 _calculate_jacobian_in_uo(false),
493 _kernel_coverage_check(
495 _kernel_coverage_blocks(getParam<
std::vector<SubdomainName>>(
"kernel_coverage_block_list")),
496 _boundary_restricted_node_integrity_check(
497 getParam<bool>(
"boundary_restricted_node_integrity_check")),
498 _boundary_restricted_elem_integrity_check(
499 getParam<bool>(
"boundary_restricted_elem_integrity_check")),
500 _side_uo_interface_mat_prop_integrity_check(
501 getParam<bool>(
"side_uo_interface_mat_prop_integrity_check")),
502 _material_coverage_check(
504 _material_coverage_blocks(getParam<
std::vector<SubdomainName>>(
"material_coverage_block_list")),
505 _fv_bcs_integrity_check(getParam<bool>(
"fv_bcs_integrity_check")),
506 _material_dependency_check(getParam<bool>(
"material_dependency_check")),
507 _uo_aux_state_check(getParam<bool>(
"check_uo_aux_state")),
509 _check_residual_for_nans(false),
511 _max_qps(
std::numeric_limits<unsigned
int>::
max()),
513 _has_time_integrator(false),
514 _has_exception(false),
515 _parallel_barrier_messaging(getParam<bool>(
"parallel_barrier_messaging")),
516 _verbose_setup(getParam<
MooseEnum>(
"verbose_setup")),
517 _verbose_multiapps(getParam<bool>(
"verbose_multiapps")),
518 _verbose_restore(getParam<bool>(
"verbose_restore")),
520 _control_warehouse(_app.getExecuteOnEnum(), false),
521 _is_petsc_options_inserted(false),
522 _line_search(nullptr),
523 _using_ad_mat_props(false),
524 _current_ic_state(0),
525 _use_hash_table_matrix_assembly(getParam<bool>(
"use_hash_table_matrix_assembly")),
526 _error_on_jacobian_nonzero_reallocation(
527 isParamValid(
"error_on_jacobian_nonzero_reallocation")
528 ? getParam<bool>(
"error_on_jacobian_nonzero_reallocation")
529 : _app.errorOnJacobianNonzeroReallocation()),
530 _restore_original_nonzero_pattern(isParamValid(
"restore_original_nonzero_pattern")
531 ? getParam<bool>(
"restore_original_nonzero_pattern")
532 : _use_hash_table_matrix_assembly),
533 _ignore_zeros_in_jacobian(getParam<bool>(
"ignore_zeros_in_jacobian")),
534 _preserve_matrix_sparsity_pattern(true),
535 _force_restart(getParam<bool>(
"force_restart")),
536 _allow_ics_during_restart(getParam<bool>(
"allow_initial_conditions_with_restart")),
537 _skip_nl_system_check(getParam<bool>(
"skip_nl_system_check")),
538 _fail_next_system_convergence_check(false),
539 _allow_invalid_solution(getParam<bool>(
"allow_invalid_solution")),
540 _show_invalid_solution_console(getParam<bool>(
"show_invalid_solution_console")),
541 _immediately_print_invalid_solution(getParam<bool>(
"immediately_print_invalid_solution")),
542 _started_initial_setup(false),
543 _has_internal_edge_residual_objects(false),
544 _u_dot_requested(false),
545 _u_dotdot_requested(false),
546 _u_dot_old_requested(false),
547 _u_dotdot_old_requested(false),
550 _print_execution_on(),
551 _identify_variable_groups_in_nl(getParam<bool>(
"identify_variable_groups_in_nl")),
552 _regard_general_exceptions_as_errors(getParam<bool>(
"regard_general_exceptions_as_errors")),
553 _requires_nonlocal_coupling(false)
555 auto checkCoverageCheckConflict =
556 [
this](
const std::string & coverage_check,
558 const std::vector<SubdomainName> & coverage_blocks) ->
void 562 if (coverage_blocks.size() > 1)
563 if (
std::find(coverage_blocks.begin(), coverage_blocks.end(),
"ANY_BLOCK_ID") !=
564 coverage_blocks.end())
566 "The list of blocks used for ",
568 " cannot contain 'ANY_BLOCK_ID' along with other blocks. ");
571 checkCoverageCheckConflict(
573 checkCoverageCheckConflict(
579 ADReal::do_derivatives =
true;
643 std::string restart_file_base = getParam<FileNameNoExtension>(
"restart_file_base");
650 if (restart_file_base.size())
668 #if !PETSC_RELEASE_LESS_THAN(3, 12, 0) 687 mooseWarning(
"Displaced mesh was requested but the displaced problem does not exist. " 688 "Regular mesh will be returned");
696 mooseWarning(
"Displaced mesh was requested but the displaced problem does not exist. " 697 "Regular mesh will be returned");
705 auto & vectors = getParam<std::vector<std::vector<TagName>>>(
"extra_tag_vectors");
707 for (
auto & vector : vectors[sys_num])
713 auto & not_zeroed_vectors = getParam<std::vector<std::vector<TagName>>>(
"not_zeroed_tag_vectors");
714 for (
const auto sys_num :
index_range(not_zeroed_vectors))
715 for (
auto & vector : not_zeroed_vectors[sys_num])
726 auto & matrices = getParam<std::vector<std::vector<TagName>>>(
"extra_tag_matrices");
728 for (
auto & matrix : matrices[sys_num])
735 sys->sizeVariableMatrixData();
736 _aux->sizeVariableMatrixData();
742 for (
auto & vector :
getParam<std::vector<TagName>>(
"extra_tag_solutions"))
761 sys->associateVectorToTag(*sys->system().current_local_solution.get(), tag);
762 _aux->associateVectorToTag(*
_aux->system().current_local_solution.get(), tag);
769 sys->needSolutionState(state, iteration_type);
770 _aux->needSolutionState(state, iteration_type);
777 bool has_solution_state =
false;
779 has_solution_state |= sys->hasSolutionState(state, iteration_type);
780 has_solution_state |=
_aux->hasSolutionState(state, iteration_type);
781 return has_solution_state;
792 _assembly[i].resize(solver_systems.size());
794 _assembly[i][j] = std::make_unique<Assembly>(*solver_systems[j], i);
800 std::vector<std::shared_ptr<NonlinearSystemBase>> & nls)
802 TIME_SECTION(
"initNullSpaceVectors", 5,
"Initializing Null Space Vectors");
804 unsigned int dimNullSpace =
parameters.
get<
unsigned int>(
"null_space_dimension");
805 unsigned int dimTransposeNullSpace =
806 parameters.
get<
unsigned int>(
"transpose_null_space_dimension");
807 unsigned int dimNearNullSpace =
parameters.
get<
unsigned int>(
"near_null_space_dimension");
808 for (
unsigned int i = 0; i < dimNullSpace; ++i)
810 std::ostringstream oss;
814 for (
auto & nl : nls)
818 for (
unsigned int i = 0; i < dimTransposeNullSpace; ++i)
820 std::ostringstream oss;
824 for (
auto & nl : nls)
828 for (
unsigned int i = 0; i < dimNearNullSpace; ++i)
830 std::ostringstream oss;
834 for (
auto & nl : nls)
849 for (
unsigned int i = 0; i <
n_threads; i++)
865 #if !PETSC_RELEASE_LESS_THAN(3, 12, 0) 870 CHKERRABORT(this->
comm().
get(), ierr);
879 TIME_SECTION(
"setCoordSystem", 5,
"Setting Coordinate System");
894 std::vector<const DofMap *> dof_maps(
es().n_systems());
898 dof_maps[i] = &sys.get_dof_map();
901 std::make_unique<ConstElemRange>(
_mesh.
getMesh().multi_evaluable_elements_begin(dof_maps),
902 _mesh.
getMesh().multi_evaluable_elements_end(dof_maps));
912 std::vector<const DofMap *> dof_maps(
_nl.size());
914 dof_maps[i] = &
_nl[i]->dofMap();
916 std::make_unique<ConstElemRange>(
_mesh.
getMesh().multi_evaluable_elements_begin(dof_maps),
917 _mesh.
getMesh().multi_evaluable_elements_end(dof_maps));
926 TIME_SECTION(
"initialSetup", 2,
"Performing Initial Setup");
931 mooseError(
"Checkpoint recovery and restart and exodus restart are all mutually exclusive.");
934 mooseWarning(
"MOOSE may fail to catch an exception when the \"skip_exception_check\" parameter " 935 "is used. If you receive a terse MPI error during execution, remove this " 936 "parameter and rerun your simulation");
951 _aux->initSolutionState();
964 TIME_SECTION(
"computingMaxDofs", 3,
"Computing Max Dofs Per Element");
968 max_var_n_dofs_per_elem = mvndpe.
max();
973 max_var_n_dofs_per_node = mvndpn.
max();
975 global_max_var_n_dofs_per_elem =
976 std::max(global_max_var_n_dofs_per_elem, max_var_n_dofs_per_elem);
980 TIME_SECTION(
"assignMaxDofs", 5,
"Assigning Maximum Dofs Per Elem");
982 sys.assignMaxVarNDofsPerElem(max_var_n_dofs_per_elem);
985 displaced_problem->solverSys(i).assignMaxVarNDofsPerElem(max_var_n_dofs_per_elem);
987 sys.assignMaxVarNDofsPerNode(max_var_n_dofs_per_node);
989 displaced_problem->solverSys(i).assignMaxVarNDofsPerNode(max_var_n_dofs_per_node);
994 TIME_SECTION(
"resizingVarValues", 5,
"Resizing Variable Values");
998 _phi_zero[tid].resize(global_max_var_n_dofs_per_elem, std::vector<Real>(
getMaxQps(), 0.));
1019 props->setRecovering();
1021 #ifdef MOOSE_KOKKOS_ENABLED 1024 props->setRecovering();
1028 TIME_SECTION(
"restore", 3,
"Restoring from backup");
1055 TIME_SECTION(
"copyingFromExodus", 3,
"Copying Variables From Exodus");
1058 sys->copyVars(*reader);
1059 _aux->copyVars(*reader);
1064 mooseError(
"Need Exodus reader to restart variables but the reader is not available\n" 1065 "Use either FileMesh with an Exodus mesh file or FileMeshGenerator with an " 1066 "Exodus mesh file and with use_for_exodus_restart equal to true");
1082 mooseError(
"Stateful neighbor material properties do not work with mesh adaptivity");
1098 "Doing extra refinements when restarting is NOT supported for sub-apps of a MultiApp");
1108 TIME_SECTION(
"convergenceInitialSetup", 5,
"Initializing Convergence objects");
1116 std::set<std::string> depend_objects_aux =
_aux->getDependObjects();
1118 std::map<int, std::vector<UserObjectBase *>> group_userobjs;
1122 std::vector<UserObjectBase *> userobjs;
1127 for (
auto obj : userobjs)
1128 group_userobjs[obj->getParam<
int>(
"execution_order_group")].push_back(obj);
1130 #ifdef MOOSE_KOKKOS_ENABLED 1134 std::vector<UserObjectBase *> userobjs;
1139 for (
auto obj : userobjs)
1140 group_userobjs[obj->getParam<
int>(
"execution_order_group")].push_back(obj);
1144 for (
auto & [group, objs] : group_userobjs)
1145 for (
auto obj : objs)
1146 obj->initialSetup();
1158 TIME_SECTION(
"initializingFunctions", 5,
"Initializing Functions");
1168 #ifdef MOOSE_KOKKOS_ENABLED 1174 TIME_SECTION(
"initializingRandomObjects", 5,
"Initializing Random Objects");
1186 TIME_SECTION(
"ICinitialSetup", 5,
"Setting Up Initial Conditions");
1203 TIME_SECTION(
"materialInitialSetup", 3,
"Setting Up Materials");
1224 #ifdef MOOSE_KOKKOS_ENABLED 1229 TIME_SECTION(
"computingInitialStatefulProps", 3,
"Computing Initial Material Values");
1236 #ifdef MOOSE_KOKKOS_ENABLED 1251 props->setRestartInPlace();
1252 props->setRecovering();
1263 #ifdef LIBMESH_ENABLE_AMR 1269 mooseError(
"Cannot perform initial adaptivity during restart on sub-apps of a MultiApp!");
1274 #endif // LIBMESH_ENABLE_AMR 1285 unsigned short ic_state_max = 0;
1287 auto findMax = [&ic_state_max](
const auto & obj_list)
1289 for (
auto ic : obj_list.getActiveObjects())
1290 ic_state_max =
std::max(ic_state_max, ic->getState());
1297 if (ic_state_max > 0)
1301 std::vector<std::unique_ptr<NumericVector<Real>>> state0_sys_buffers(
_solver_systems.size());
1302 std::unique_ptr<NumericVector<Real>> state0_aux_buffer;
1308 state0_aux_buffer =
_aux->solutionState(0).clone();
1329 _aux->solutionState(0) = *state0_aux_buffer;
1330 _aux->solutionState(0).close();
1343 sys->initialSetup();
1346 _aux->initialSetup();
1353 sys->setSolution(*(sys->system().current_local_solution.get()));
1383 const auto & tis = sys->getTimeIntegrators();
1386 TIME_SECTION(
"timeIntegratorInitialSetup", 5,
"Initializing Time Integrator");
1387 for (
auto & ti : tis)
1398 TIME_SECTION(
"initialSetupMultiApps", 2,
"Initializing MultiApps",
false);
1404 TIME_SECTION(
"initialSetupTransfers", 2,
"Initializing Transfers");
1410 for (
const auto & transfer : to_multi_app_objects)
1412 transfer->setCurrentDirection(Transfer::DIRECTION::TO_MULTIAPP);
1413 transfer->initialSetup();
1418 for (
const auto & transfer : from_multi_app_objects)
1420 transfer->setCurrentDirection(Transfer::DIRECTION::FROM_MULTIAPP);
1421 transfer->initialSetup();
1426 for (
const auto & transfer : between_multi_app_objects)
1428 transfer->setCurrentDirection(Transfer::DIRECTION::BETWEEN_MULTIAPP);
1429 transfer->initialSetup();
1435 TIME_SECTION(
"BoundaryRestrictedNodeIntegrityCheck", 5);
1440 Threads::parallel_reduce(bnd_nodes, bnict);
1443 for (
auto & nl :
_nl)
1445 const auto & nodal_bcs = nl->getNodalBCWarehouse();
1446 if (!nodal_bcs.hasBoundaryObjects())
1449 for (
const auto & bnode : bnd_nodes)
1451 const auto boundary_id = bnode->_bnd_id;
1452 const Node *
const node = bnode->_node;
1460 if (!nodal_bcs.hasBoundaryObjects(boundary_id))
1463 const auto & bnd_objects = nodal_bcs.getBoundaryObjects(boundary_id);
1464 for (
const auto & bnd_object : bnd_objects)
1466 const auto & bnd_variable = bnd_object->variable();
1471 if (!bnd_object->requiresGeometricSearch() &&
1472 bnd_object->checkVariableBoundaryIntegrity() &&
1473 node->
n_dofs(nl->number(), bnd_variable.number()))
1475 std::set<MooseVariableFieldBase *> vars_to_omit = {
1480 *bnd_object, bnd_object->checkAllVariables(*node, vars_to_omit), bnd_name);
1489 TIME_SECTION(
"BoundaryRestrictedElemIntegrityCheck", 5);
1494 Threads::parallel_reduce(bnd_elems, beict);
1503 mooseError(
"failed to converge initial MultiApp");
1536 TIME_SECTION(
"computeMaterials", 2,
"Computing Initial Material Properties");
1540 #ifdef MOOSE_KOKKOS_ENABLED 1545 TIME_SECTION(
"computeMaterials", 2,
"Computing Initial Material Properties");
1557 for (
unsigned int tid = 0; tid <
n_threads; tid++)
1575 TIME_SECTION(
"lineSearchInitialSetup", 5,
"Initializing Line Search");
1597 "\" has the same name as a scalar variable in the system.");
1608 std::unique_ptr<libMesh::MeshRefinement> displaced_mesh_refinement(
nullptr);
1610 displaced_mesh_refinement = std::make_unique<libMesh::MeshRefinement>(*_displaced_mesh);
1626 displaced_mesh_refinement->uniformly_coarsen();
1675 #ifdef MOOSE_KOKKOS_ENABLED 1679 _aux->timestepSetup();
1681 sys->timestepSetup();
1694 std::vector<UserObject *> userobjs;
1696 for (
auto obj : userobjs)
1697 obj->timestepSetup();
1699 #ifdef MOOSE_KOKKOS_ENABLED 1701 std::vector<UserObjectBase *> userobjs;
1703 for (
auto obj : userobjs)
1704 obj->timestepSetup();
1733 TIME_SECTION(
"checkNonlocalCoupling", 5,
"Checking Nonlocal Coupling");
1736 for (
auto & nl :
_nl)
1738 const auto & all_kernels = nl->getKernelWarehouse();
1739 const auto & kernels = all_kernels.getObjects(tid);
1740 for (
const auto & kernel : kernels)
1742 std::shared_ptr<NonlocalKernel> nonlocal_kernel =
1744 if (nonlocal_kernel)
1752 nl->getIntegratedBCWarehouse();
1753 const auto & integrated_bcs = all_integrated_bcs.
getObjects(tid);
1754 for (
const auto & integrated_bc : integrated_bcs)
1756 std::shared_ptr<NonlocalIntegratedBC> nonlocal_integrated_bc =
1758 if (nonlocal_integrated_bc)
1771 std::set<const MooseVariableFEBase *> uo_jacobian_moose_vars;
1773 std::vector<ShapeElementUserObject *> objs;
1777 .condition<AttribThread>(tid)
1780 for (
const auto & uo : objs)
1783 const auto & mv_deps = uo->jacobianMooseVariables();
1784 uo_jacobian_moose_vars.insert(mv_deps.begin(), mv_deps.end());
1788 std::vector<ShapeSideUserObject *> objs;
1792 .condition<AttribThread>(tid)
1794 for (
const auto & uo : objs)
1797 const auto & mv_deps = uo->jacobianMooseVariables();
1798 uo_jacobian_moose_vars.insert(mv_deps.begin(), mv_deps.end());
1810 for (
unsigned int i = 0; i < moose_vars.size(); ++i)
1812 VariableName var_name = moose_vars[i]->name();
1814 sys->setVariableGlobalDoFs(var_name);
1832 _assembly[tid][i]->prepareJacobianBlock();
1855 for (
auto & nl :
_nl)
1856 nl->prepareFace(tid,
true);
1857 _aux->prepareFace(tid,
false);
1867 const std::vector<dof_id_type> & dof_indices,
1873 _nl[i]->prepare(tid);
1878 _assembly[tid][current_nl_sys_num]->prepareBlock(ivar, jvar, dof_indices);
1883 _assembly[tid][current_nl_sys_num]->prepareBlockNonlocal(
1905 _assembly[tid][i]->setCurrentSubdomainID(did);
1918 _assembly[tid][i]->setCurrentNeighborSubdomainID(did);
1931 _assembly[tid][i]->setCurrentNeighborSubdomainID(did);
2035 std::vector<VectorTag> extra_residual_vector_tags;
2040 if (vector_tag._id != time_tag && vector_tag._id != non_time_tag)
2041 extra_residual_vector_tags.push_back(vector_tag);
2048 extra_residual_vector_tags);
2158 std::vector<dof_id_type> & dof_indices,
2159 const std::set<TagID> & tags,
2182 _displaced_problem->addJacobianBlockTags(jacobian, ivar, jvar, dof_map, dof_indices, tags, tid);
2188 jacobian, ivar, jvar, dof_map, dof_indices, jv.
allDofIndices(), tags, tid);
2198 std::vector<dof_id_type> & dof_indices,
2199 std::vector<dof_id_type> & neighbor_dof_indices,
2200 const std::set<TagID> & tags,
2208 neighbor_dof_indices,
2213 jacobian, ivar, jvar, dof_map, dof_indices, neighbor_dof_indices, tags, tid);
2252 TIME_SECTION(
"ghostGhostedBoundaries", 3,
"Ghosting Ghosted Boundaries");
2264 "This function is deprecated and no longer performs any function. Please do not call it."));
2272 unsigned int n_points = points.size();
2289 _zero[tid].resize(max_qpts, 0);
2299 _assembly[tid][i]->reinitAtPhysical(elem, points);
2300 _nl[i]->prepare(tid);
2311 bool have_points = n_points > 0;
2326 sys->reinitElem(elem, tid);
2327 _aux->reinitElem(elem, tid);
2335 const std::vector<Point> & phys_points_in_elem,
2339 "Are you calling this method with a displaced mesh element?");
2343 _assembly[tid][i]->reinitAtPhysical(elem, phys_points_in_elem);
2356 const unsigned int side,
2361 "reinitElemFace with a BoundaryID argument is deprecated because the boundary id was never " 2362 "used. Please call reinitElemFace without the BoundaryID argument instead");
2375 _aux->reinitElemFace(elem, side, tid);
2384 const std::vector<Point> *
const pts,
2385 const std::vector<Real> *
const weights)
2403 _nl[i]->reinitNode(node, tid);
2405 _aux->reinitNode(node, tid);
2417 _nl[i]->reinitNodeFace(node, bnd_id, tid);
2419 _aux->reinitNodeFace(node, bnd_id, tid);
2428 for (
auto & nl :
_nl)
2429 nl->reinitNodes(nodes, tid);
2430 _aux->reinitNodes(nodes, tid);
2439 for (
auto & nl :
_nl)
2440 nl->reinitNodesNeighbor(nodes, tid);
2441 _aux->reinitNodesNeighbor(nodes, tid);
2447 TIME_SECTION(
"reinitScalars", 3,
"Reinitializing Scalar Variables");
2452 for (
auto & nl :
_nl)
2453 nl->reinitScalars(tid, reinit_for_derivative_reordering);
2454 _aux->reinitScalars(tid, reinit_for_derivative_reordering);
2479 _assembly[tid][i]->reinitElemAndNeighbor(elem, side, neighbor, neighbor_side);
2480 _nl[i]->prepareNeighbor(tid);
2484 _aux->prepareNeighbor(tid);
2486 for (
auto & nl :
_nl)
2488 nl->reinitElemFace(elem, side, tid);
2489 nl->reinitNeighborFace(neighbor, neighbor_side, tid);
2491 _aux->reinitElemFace(elem, side, tid);
2492 _aux->reinitNeighborFace(neighbor, neighbor_side, tid);
2501 const auto & displaced_ref_pts =
_assembly[tid][0]->qRuleNeighbor()->get_points();
2521 auto & neighbor =
_assembly[tid][0]->neighbor();
2522 auto & neighbor_side =
_assembly[tid][0]->neighborSide();
2524 if (lower_d_elem_neighbor &&
2527 auto qps =
_assembly[tid][0]->qPointsFaceNeighbor().stdVector();
2528 std::vector<Point> reference_points;
2530 lower_d_elem_neighbor->
dim(), lower_d_elem_neighbor, qps, reference_points);
2542 unsigned int neighbor_side,
2543 const std::vector<Point> & physical_points,
2547 "Are you calling this method with a displaced mesh element?");
2552 _assembly[tid][i]->reinitNeighborAtPhysical(neighbor, neighbor_side, physical_points);
2555 _nl[i]->prepareNeighbor(tid);
2557 _aux->prepareNeighbor(tid);
2563 for (
auto & nl :
_nl)
2564 nl->reinitNeighborFace(neighbor, neighbor_side, tid);
2565 _aux->reinitNeighborFace(neighbor, neighbor_side, tid);
2570 const std::vector<Point> & physical_points,
2574 "Are you calling this method with a displaced mesh element?");
2579 _assembly[tid][i]->reinitNeighborAtPhysical(neighbor, physical_points);
2582 _nl[i]->prepareNeighbor(tid);
2584 _aux->prepareNeighbor(tid);
2590 for (
auto & nl :
_nl)
2591 nl->reinitNeighbor(neighbor, tid);
2592 _aux->reinitNeighbor(neighbor, tid);
2603 std::set<const Elem *> displaced_elements;
2608 for (
const auto & elem : displaced_elements)
2631 for (
auto & nl :
_nl)
2632 nl->subdomainSetup(subdomain, tid);
2646 const std::string & name,
2649 parallel_object_only();
2666 mooseError(
"Unrecognized function functor type");
2672 const std::string & name,
2675 parallel_object_only();
2687 const std::string class_name =
"DefaultNonlinearConvergence";
2691 params.
set<
bool>(
"added_as_default") =
true;
2699 const std::string class_name =
"DefaultMultiAppFixedPointConvergence";
2703 params.
set<
bool>(
"added_as_default") =
true;
2710 const std::string class_name =
"DefaultSteadyStateConvergence";
2714 params.
set<
bool>(
"added_as_default") =
true;
2734 std::istringstream ss(
name);
2738 if (ss >> real_value && ss.eof())
2741 params.
set<
Real>(
"value") = real_value;
2742 addFunction(
"ConstantFunction", ss.str(), params);
2747 std::string
vars =
"x,y,z,t,NaN,pi,e";
2752 params.
set<std::string>(
"expression") =
name;
2760 mooseAssert(
getMooseApp().actionWarehouse().isTaskComplete(
"add_function"),
2761 "getFunction() was called before Functions have been constructed. The requested " 2763 name +
"' may exist in the input file, but Functions are not available yet.");
2787 mooseError(
"The Convergence object '",
name,
"' does not exist.");
2792 const std::vector<std::shared_ptr<Convergence>> &
2800 const std::string & name,
2803 parallel_object_only();
2818 mooseError(
"No MeshDivision object named ",
name,
" of appropriate type");
2831 mooseDeprecated(
"FEProblemBase::getNonlinearSystem() is deprecated, please use " 2832 "FEProblemBase::getNonlinearSystemBase() \n");
2834 mooseAssert(sys_num <
_nl.size(),
"System number greater than the number of nonlinear systems");
2845 const std::string & name,
2855 std::vector<Distribution *> objs;
2859 .condition<AttribName>(
name)
2861 return !objs.empty();
2867 std::vector<Distribution *> objs;
2871 .condition<AttribName>(
name)
2875 mooseAssert(
getMooseApp().actionWarehouse().isTaskComplete(
"add_distribution"),
2876 "A Distribution getter was called before Distributions have been constructed. " 2877 "If you are attempting to access this object in the constructor of another object " 2878 "then make sure that the Distribution is constructed before the object using it.");
2879 mooseError(
"Unable to find Distribution with name '" +
name +
"'");
2886 const std::string & name,
2890 for (
auto & sampler : samplers)
2897 std::vector<Sampler *> objs;
2901 .condition<AttribThread>(tid)
2906 mooseAssert(
getMooseApp().actionWarehouse().isTaskComplete(
"add_sampler"),
2907 "A Sampler getter was called before Samplers have been constructed. " 2908 "If you are attempting to access this object in the constructor of another object " 2909 "then make sure that the Sampler is constructed before the object using it.");
2912 "Unable to find Sampler with name '" +
name +
2913 "', if you are attempting to access this object in the constructor of another object then " 2914 "make sure that the Sampler is constructed before the object using it.");
2923 const std::set<SubdomainID> *
const active_subdomains)
2925 std::set<SubdomainID> subdomainIDs;
2926 if (active_subdomains->size() == 0)
2929 subdomainIDs.insert(subdomains.begin(), subdomains.end());
2932 subdomainIDs.insert(active_subdomains->begin(), active_subdomains->end());
2938 std::string error_prefix =
"";
2941 curr_sys_ptr =
_aux.get();
2942 other_sys_ptr = sys.get();
2943 error_prefix =
"aux";
2947 mooseError(
"Cannot have an auxiliary variable and a solver variable with the same name: ",
2958 const auto stringifyType = [](
FEType t)
2961 mooseError(
"Mismatching types are specified for ",
2963 "variable with name '",
2966 stringifyType(var.
type()),
2968 stringifyType(
type),
2976 std::set<SubdomainID> varSubdomainIDs;
2977 if (varActiveSubdomains.size() == 0)
2980 varSubdomainIDs.insert(subdomains.begin(), subdomains.end());
2983 varSubdomainIDs.insert(varActiveSubdomains.begin(), varActiveSubdomains.end());
2987 const auto isSubset = std::includes(varSubdomainIDs.begin(),
2988 varSubdomainIDs.end(),
2989 subdomainIDs.begin(),
2990 subdomainIDs.end());
2995 const auto stringifySubdomains = [
this](std::set<SubdomainID> subdomainIDs)
2997 std::stringstream s;
2998 for (
auto const i : subdomainIDs)
3006 if (subdomainName.empty())
3009 s << subdomainName <<
" (" << i <<
")";
3014 const std::string msg =
"Mismatching block-restrictions are specified for " +
3015 error_prefix +
"variable with name '" + var_name +
"': {" +
3016 stringifySubdomains(varSubdomainIDs) +
"} and {" +
3017 stringifySubdomains(subdomainIDs) +
"}";
3032 const std::string & var_name,
3035 parallel_object_only();
3037 const auto order = Utility::string_to_enum<Order>(params.
get<
MooseEnum>(
"order"));
3038 const auto family = Utility::string_to_enum<FEFamily>(params.
get<
MooseEnum>(
"family"));
3039 const auto fe_type =
FEType(order, family);
3041 const auto active_subdomains_vector =
3043 const std::set<SubdomainID> active_subdomains(active_subdomains_vector.begin(),
3044 active_subdomains_vector.end());
3051 SolverSystemName sys_name = params.
get<SolverSystemName>(
"solver_sys");
3053 const auto solver_system_number =
solverSysNum(sys_name);
3054 logAdd(
"Variable", var_name, var_type, params);
3055 _solver_systems[solver_system_number]->addVariable(var_type, var_name, params);
3067 std::pair<bool, unsigned int>
3069 const bool error_if_not_found)
const 3076 "If the variable is in our FEProblem solver system map, then it must be in the " 3077 "solver system we expect");
3078 else if (error_if_not_found)
3080 if (
_aux->hasVariable(var_name) ||
_aux->hasScalarVariable(var_name))
3083 " found. Did you specify an auxiliary variable when you meant to specify a " 3084 "solver variable?");
3088 "'. It does not exist in the solver system(s) or auxiliary system");
3096 const std::string & name,
3098 const unsigned int nl_sys_num,
3099 const std::string & base_name,
3100 bool & reinit_displaced)
3106 reinit_displaced =
true;
3129 const std::string & name,
3131 const std::string & base_name)
3138 if (!
parameters.
get<std::vector<BoundaryName>>(
"boundary").empty())
3165 const std::string & name,
3168 parallel_object_only();
3171 mooseError(
"You are trying to add a Kernel to a linear variable/system, which is not " 3172 "supported at the moment!");
3181 const std::string & name,
3184 parallel_object_only();
3187 mooseError(
"You are trying to add a HDGKernel to a linear variable/system, which is not " 3188 "supported at the moment!");
3197 const std::string & name,
3200 parallel_object_only();
3230 const std::string & name,
3233 parallel_object_only();
3237 mooseError(
"You are trying to add a ScalarKernel to a linear variable/system, which is not " 3238 "supported at the moment!");
3267 const std::string & name,
3270 parallel_object_only();
3275 "You are trying to add a BoundaryCondition to a linear variable/system, which is not " 3276 "supported at the moment!");
3285 const std::string & name,
3288 parallel_object_only();
3292 auto determine_var_param_name = [&
parameters,
this]()
3301 if (!has_secondary_var && !has_primary_var)
3303 "Either a 'secondary_variable' or 'primary_variable' parameter must be supplied for '",
3306 return has_secondary_var ?
"secondary_variable" :
"primary_variable";
3310 const auto nl_sys_num =
3313 mooseError(
"You are trying to add a Constraint to a linear variable/system, which is not " 3314 "supported at the moment!");
3338 const std::string & var_name,
3341 parallel_object_only();
3343 const auto order = Utility::string_to_enum<Order>(params.
get<
MooseEnum>(
"order"));
3344 const auto family = Utility::string_to_enum<FEFamily>(params.
get<
MooseEnum>(
"family"));
3345 const auto fe_type =
FEType(order, family);
3347 const auto active_subdomains_vector =
3349 const std::set<SubdomainID> active_subdomains(active_subdomains_vector.begin(),
3350 active_subdomains_vector.end());
3358 logAdd(
"AuxVariable", var_name, var_type, params);
3359 _aux->addVariable(var_type, var_name, params);
3371 const std::string & var_name,
3380 const std::set<SubdomainID> *
const active_subdomains)
3382 parallel_object_only();
3384 mooseDeprecated(
"Please use the addAuxVariable(var_type, var_name, params) API instead");
3389 std::string var_type;
3391 var_type =
"MooseVariableConstMonomial";
3393 var_type =
"MooseVariableScalar";
3395 var_type =
"VectorMooseVariable";
3397 var_type =
"MooseVariable";
3405 if (active_subdomains)
3409 logAdd(
"AuxVariable", var_name, var_type, params);
3410 _aux->addVariable(var_type, var_name, params);
3422 unsigned int components,
3423 const std::set<SubdomainID> *
const active_subdomains)
3425 parallel_object_only();
3427 mooseDeprecated(
"Please use the addAuxVariable(var_type, var_name, params) API instead");
3437 params.
set<
unsigned int>(
"components") = components;
3439 if (active_subdomains)
3443 logAdd(
"Variable", var_name,
"ArrayMooseVariable", params);
3444 _aux->addVariable(
"ArrayMooseVariable", var_name, params);
3457 const std::set<SubdomainID> *
const active_subdomains)
3459 parallel_object_only();
3461 mooseDeprecated(
"Please use the addAuxVariable(var_type, var_name, params) API instead");
3476 params.
set<std::vector<Real>>(
"scaling") = std::vector<Real>{1};
3477 if (active_subdomains)
3481 logAdd(
"ScalarVariable", var_name,
"MooseVariableScalar", params);
3482 _aux->addVariable(
"MooseVariableScalar", var_name, params);
3489 const std::string & name,
3492 parallel_object_only();
3501 const std::string & name,
3504 parallel_object_only();
3533 const std::string & name,
3536 parallel_object_only();
3540 mooseError(
"You are trying to add a DiracKernel to a linear variable/system, which is not " 3541 "supported at the moment!");
3573 const std::string & name,
3576 parallel_object_only();
3580 mooseError(
"You are trying to add a DGKernel to a linear variable/system, which is not " 3581 "supported at the moment!");
3613 const std::string & name,
3627 const std::string & name,
3635 const std::string & name,
3640 addObject<FVInterfaceKernel>(
3646 const std::string & name,
3654 const std::string & name,
3664 const std::string & name,
3667 parallel_object_only();
3671 mooseError(
"You are trying to add a InterfaceKernel to a linear variable/system, which is not " 3672 "supported at the moment!");
3704 const std::string & name,
3705 const VariableName & var_name)
3709 std::string restart_method =
"";
3712 "a checkpoint restart, by IC object '" + ic_name +
"' for variable '" +
name +
"'";
3718 restarted_vars.insert(restarted_vars.end(), nodal_vars.begin(), nodal_vars.end());
3719 restarted_vars.insert(restarted_vars.end(), global_vars.begin(), global_vars.end());
3721 if (
std::find(restarted_vars.begin(), restarted_vars.end(), var_name) != restarted_vars.end())
3722 restart_method =
"an Exodus restart, by IC object '" + ic_name +
"' for variable '" +
name +
3723 "' that is also being restarted";
3725 if (!restart_method.empty())
3727 "Initial conditions have been specified during ",
3729 ".\nThis is only allowed if you specify 'allow_initial_conditions_with_restart' to " 3730 "the [Problem], as initial conditions can override restarted fields");
3736 const std::string & name,
3739 parallel_object_only();
3743 const std::string & var_name =
parameters.
get<VariableName>(
"variable");
3758 std::shared_ptr<InitialConditionBase> ic;
3759 if (dynamic_cast<MooseVariable *>(&var))
3761 else if (dynamic_cast<VectorMooseVariable *>(&var))
3763 else if (dynamic_cast<ArrayMooseVariable *>(&var))
3765 else if (dynamic_cast<MooseVariableFVReal *>(&var))
3767 else if (dynamic_cast<MooseLinearVariableFVReal *>(&var))
3770 mooseError(
"Your FE variable in initial condition ",
3772 " must be either of scalar or vector type");
3783 std::shared_ptr<ScalarInitialCondition> ic =
3791 "Variable '", var_name,
"' requested in initial condition '",
name,
"' does not exist.");
3796 const std::string & name,
3799 parallel_object_only();
3803 const std::string & var_name =
parameters.
get<VariableName>(
"variable");
3818 std::shared_ptr<FVInitialConditionBase> ic;
3823 "Your variable for an FVInitialCondition needs to be an a finite volume variable!");
3830 "' requested in finite volume initial condition '",
3832 "' does not exist.");
3838 TIME_SECTION(
"projectSolution", 2,
"Projecting Initial Solutions")
3851 Threads::parallel_reduce(elem_info_range, cfvic);
3855 for (
auto & nl :
_nl)
3856 nl->solution().close();
3857 _aux->solution().close();
3863 for (
auto & nl :
_nl)
3864 nl->solution().close();
3865 _aux->solution().close();
3873 for (
const auto & ic : ics)
3881 const unsigned int n_scalar_dofs = var.
dofIndices().size();
3882 for (
unsigned int i = 0; i < n_scalar_dofs; i++)
3884 const auto global_index = var.
dofIndices()[i];
3893 sys->solution().close();
3894 sys->solution().localize(*sys->system().current_local_solution, sys->dofMap().get_send_list());
3897 _aux->solution().close();
3898 _aux->solution().localize(*
_aux->sys().current_local_solution,
_aux->dofMap().get_send_list());
3905 const std::optional<std::set<VariableName>> & target_vars)
3910 Threads::parallel_reduce(elem_range, cic);
3915 Threads::parallel_reduce(elem_range, cic);
3919 for (
auto & nl :
_nl)
3920 nl->solution().close();
3921 _aux->solution().close();
3926 Threads::parallel_reduce(bnd_nodes, cbic);
3931 Threads::parallel_reduce(bnd_nodes, cbic);
3934 for (
auto & nl :
_nl)
3935 nl->solution().close();
3936 _aux->solution().close();
3944 for (
const auto & ic : ics)
3948 if (target_vars && !target_vars->count(var.
name()))
3956 const unsigned int n_scalar_dofs = var.
dofIndices().size();
3957 for (
unsigned int i = 0; i < n_scalar_dofs; i++)
3959 const auto global_index = var.
dofIndices()[i];
3966 for (
auto & nl :
_nl)
3968 nl->solution().close();
3969 nl->solution().localize(*nl->system().current_local_solution, nl->dofMap().get_send_list());
3972 _aux->solution().close();
3973 _aux->solution().localize(*
_aux->sys().current_local_solution,
_aux->dofMap().get_send_list());
3978 Number (*func)(
const Point &,
3980 const std::string &,
3981 const std::string &),
3984 const std::string &,
3985 const std::string &),
3987 const std::vector<VariableName> & target_vars)
3989 mooseAssert(!Threads::in_threads,
3990 "We're performing a projection based on data from just the thread 0 variable, so any " 3991 "modifications to the variable solution must have been thread joined already");
3993 std::unordered_map<unsigned int, std::vector<unsigned int>> sys_to_var_nums;
3995 for (
const auto & target_var : target_vars)
3999 sys_to_var_nums[sn].push_back(var.number());
4002 for (
const auto & [sys_num, var_nums] : sys_to_var_nums)
4005 libmesh_sys.
project_solution(func, func_grad, params, elem_range, var_nums);
4009 std::shared_ptr<MaterialBase>
4018 name +=
"_neighbor";
4031 "), but its compute flag is set to true. This indicates that MOOSE is " 4032 "computing this property which may not be desired and produce un-expected " 4061 mooseError(
"FEProblemBase::getMaterialData(): Invalid MaterialDataType ",
type);
4064 const std::set<const MooseObject *> &
4079 mooseError(
"FEProblemBase::getMaterialPropertyStorageConsumers(): Invalid MaterialDataType ",
4088 "ignore_zeros_in_jacobian",
4089 "We likely cannot preserve the sparsity pattern if ignoring zeros in the Jacobian, which " 4090 "leads to removing those entries from the Jacobian sparsity pattern");
4103 const std::string & name,
4106 parallel_object_only();
4108 auto add_functor_materials = [&](
const auto &
parameters,
const auto &
name)
4113 std::shared_ptr<MaterialBase> material =
4127 add_functor_materials(disp_params,
name +
"_displaced");
4133 const std::string & name,
4141 const std::string & name,
4149 const std::string & mat_name,
4150 const std::string & name,
4153 parallel_object_only();
4177 #ifdef MOOSE_KOKKOS_ENABLED 4185 std::shared_ptr<MaterialBase> material =
4188 bool discrete = !material->getParam<
bool>(
"compute");
4192 if (material->boundaryRestricted() ||
dynamic_cast<FunctorMaterial *
>(material.get()))
4198 for (
auto && warehouse : warehouses)
4199 warehouse->addObject(material, tid);
4211 std::string object_name;
4220 object_name =
name +
"_face";
4221 std::shared_ptr<MaterialBase> face_material =
4227 current_parameters.set<
bool>(
"_neighbor") =
true;
4228 object_name =
name +
"_neighbor";
4229 std::shared_ptr<MaterialBase> neighbor_material =
4238 for (
auto && warehouse : warehouses)
4239 warehouse->addObjects(material, neighbor_material, face_material, tid);
4244 const auto param_names =
4249 for (
const auto & p_name : param_names)
4252 p_name.parameter());
4254 p_name.parameter());
4256 p_name.parameter());
4258 primary_name, face_name,
false);
4260 primary_name, neighbor_name,
false);
4271 std::set<MooseVariableFEBase *> needed_moose_vars;
4272 std::unordered_set<unsigned int> needed_mat_props;
4281 for (
const auto id : ids)
4288 needed_moose_vars.insert(current_active_elemental_moose_variables.begin(),
4289 current_active_elemental_moose_variables.end());
4291 needed_mat_props.insert(consumer_needed_mat_props.begin(), consumer_needed_mat_props.end());
4302 auto && elem =
_assembly[tid][0]->elem();
4303 unsigned int n_points =
_assembly[tid][0]->qRule()->n_points();
4306 material_data.
resize(n_points);
4310 material_data.swap(*elem);
4323 const bool swap_stateful,
4324 const std::deque<MaterialBase *> *
const reinit_mats)
4330 auto && elem =
_assembly[tid][0]->elem();
4331 unsigned int side =
_assembly[tid][0]->side();
4332 unsigned int n_points =
_assembly[tid][0]->qRuleFace()->n_points();
4335 bnd_material_data.
resize(n_points);
4337 if (swap_stateful && !bnd_material_data.isSwapped())
4338 bnd_material_data.swap(*elem, side);
4341 bnd_material_data.reset(
4345 bnd_material_data.reinit(*reinit_mats);
4347 bnd_material_data.reinit(
4356 const bool swap_stateful,
4357 const std::deque<MaterialBase *> *
const reinit_mats)
4363 const auto *
const elem =
_assembly[tid][0]->elem();
4364 unsigned int side =
_assembly[tid][0]->side();
4365 unsigned int n_points =
_assembly[tid][0]->qRuleFace()->n_points();
4368 bnd_material_data.
resize(n_points);
4370 if (swap_stateful && !bnd_material_data.isSwapped())
4371 bnd_material_data.swap(*elem, side);
4374 bnd_material_data.reset(
4378 bnd_material_data.reinit(*reinit_mats);
4380 bnd_material_data.reinit(
4390 const bool swap_stateful,
4391 const std::deque<MaterialBase *> *
const reinit_mats)
4405 const bool swap_stateful,
4406 const std::deque<MaterialBase *> *
const reinit_mats)
4416 mooseAssert(neighbor,
"neighbor should be non-null");
4418 "The provided blk_id " << blk_id <<
" and neighbor subdomain ID " 4421 unsigned int n_points =
_assembly[tid][0]->qRuleNeighbor()->n_points();
4424 neighbor_material_data.
resize(n_points);
4428 neighbor_material_data.swap(*neighbor, neighbor_side);
4431 neighbor_material_data.reset(
4435 neighbor_material_data.reinit(*reinit_mats);
4437 neighbor_material_data.reinit(
4445 const bool swap_stateful,
4446 const std::deque<MaterialBase *> *
const reinit_mats)
4450 auto && elem =
_assembly[tid][0]->elem();
4451 unsigned int side =
_assembly[tid][0]->side();
4452 unsigned int n_points =
_assembly[tid][0]->qRuleFace()->n_points();
4455 bnd_material_data.
resize(n_points);
4457 if (swap_stateful && !bnd_material_data.isSwapped())
4458 bnd_material_data.swap(*elem, side);
4464 bnd_material_data.reinit(*reinit_mats);
4478 unsigned int side =
_assembly[tid][0]->side();
4479 unsigned int n_points =
_assembly[tid][0]->qRuleFace()->n_points();
4482 bnd_material_data.
resize(n_points);
4484 if (swap_stateful && !bnd_material_data.isSwapped())
4485 bnd_material_data.swap(*elem, side);
4495 auto && elem =
_assembly[tid][0]->elem();
4502 auto && elem =
_assembly[tid][0]->elem();
4503 unsigned int side =
_assembly[tid][0]->side();
4512 unsigned int neighbor_side =
4526 neighbor_side =
_assembly[tid][0]->side();
4527 mooseAssert(neighbor,
"We should have an appropriate value for elem coming from Assembly");
4538 const std::string & name,
4539 const std::string & type,
4543 _console <<
"[DBG] Adding " << system <<
" '" <<
name <<
"' of type " <<
type << std::endl;
4550 const std::string & object_name,
4551 const std::string & var_param_name)
4557 unsigned int sys_num = 0;
4566 const auto var_sys_num = sys_num;
4569 mooseError(
"We dont support setting 'variable' to a variable that is not set to the same " 4570 "system as the 'solver_sys' parameter");
4577 if (sys_num ==
_aux->number())
4593 if (sys_num ==
_aux->number())
4602 const std::string & type)
const 4607 " already exists. You may not add a ",
4609 " by the same name.");
4611 #ifdef MOOSE_KOKKOS_ENABLED 4615 " already exists. You may not add a ",
4617 " by the same name.");
4623 const std::string & name,
4633 const std::string & name,
4643 const std::string & name,
4651 std::vector<std::shared_ptr<UserObject>>
4653 const std::string & name,
4656 parallel_object_only();
4658 std::vector<std::shared_ptr<UserObject>> uos;
4666 std::shared_ptr<UserObject> user_object =
4669 uos.push_back(user_object);
4672 user_object->setPrimaryThreadCopy(uos[0].
get());
4698 if (euo || nuo || duo)
4700 if (suo || duo || isuo || iuo)
4702 if (iuo || duo || isuo)
4707 if ((guo && !tguo) || muo)
4716 const decltype(uos)::size_type uo_index = uos.front()->needThreadedCopy() ? tid : 0;
4730 const std::string & name,
4733 parallel_object_only();
4748 std::vector<UserObject *> objs;
4752 .condition<AttribThread>(tid)
4757 mooseAssert(
getMooseApp().actionWarehouse().isTaskComplete(
"add_user_object"),
4758 "A UserObject getter was called before UserObjects have been constructed. The " 4759 "requested UserObject '" +
4760 name +
"' may exist in the input file, but UserObjects are not available yet.");
4762 mooseError(
"Unable to find user object with name '" +
name +
"'");
4764 mooseAssert(objs.size() == 1,
"Should only find one UO");
4771 std::vector<Positions *> objs;
4775 .condition<AttribName>(
name)
4778 mooseError(
"Unable to find Positions object with name '" +
name +
"'");
4779 mooseAssert(objs.size() == 1,
"Should only find one Positions");
4786 std::vector<UserObject *> objs;
4790 .condition<AttribThread>(0)
4793 return !objs.empty();
4800 std::vector<FVInterpolationMethod *> methods;
4804 .condition<AttribThread>(tid)
4806 .queryInto(methods);
4808 if (methods.empty())
4810 mooseAssert(
getMooseApp().actionWarehouse().isTaskComplete(
"add_interpolation_method"),
4811 "An FVInterpolationMethod getter was called before FVInterpolationMethods have " 4812 "been constructed. If you are attempting to access this object in the constructor " 4813 "of another object then make sure that the FVInterpolationMethod is constructed " 4814 "before the object using it.");
4816 mooseError(
"Unable to find FVInterpolationMethod with name '",
name,
"'");
4819 mooseAssert(methods.size() == 1,
"Expected a single FVInterpolationMethod per thread");
4820 return *(methods[0]);
4835 ") is not a scalar face interpolation method.");
4837 return *face_method;
4847 if (!advected_method)
4852 ") is not an advected interpolation method.");
4854 return *advected_method;
4860 std::vector<FVInterpolationMethod *> methods;
4864 .condition<AttribThread>(0)
4866 .queryInto(methods);
4867 return !methods.empty();
4880 std::vector<Postprocessor *> objs;
4884 .condition<AttribThread>(tid)
4889 mooseError(
"Unable to find Postprocessor with name '", object_name,
"'");
4890 mooseAssert(objs.size() == 1,
4891 "We shouldn't find more than one postprocessor object for a given name");
4897 std::size_t t_index)
const 4906 std::size_t t_index)
4915 mooseDeprecated(
"FEProblemBase::hasPostprocssor is being removed; use " 4916 "hasPostprocessorValueByName instead.");
4922 const std::string & vector_name,
4923 std::size_t t_index)
const 4931 const std::string & vector_name,
4933 std::size_t t_index)
4943 std::vector<VectorPostprocessor *> objs;
4947 .condition<AttribThread>(tid)
4954 getMooseApp().actionWarehouse().isTaskComplete(
"add_vector_postprocessor"),
4955 "A VectorPostprocessor getter was called before VectorPostprocessors have been " 4956 "constructed. The requested VectorPostprocessor '" +
4958 "' may exist in the input file, but VectorPostprocessors are not available yet.");
4960 mooseError(
"Unable to find VectorPostprocessor with name '", object_name,
"'");
4962 mooseAssert(objs.size() == 1,
4963 "We shouldn't find more than one vector postprocessor object for a given name");
4972 const auto & objects = it.second.getActiveObjects();
4973 for (
const auto & obj : objects)
4974 obj->parentOutputPositionChanged();
4991 TIME_SECTION(
"computeIndicators", 1,
"Computing Indicators");
4995 const auto old_do_derivatives = ADReal::do_derivatives;
4996 ADReal::do_derivatives =
false;
4998 std::vector<std::string>
fields;
5002 for (
const auto & indicator : indicators)
5003 fields.push_back(indicator->name());
5007 for (
const auto & internal_indicator : internal_indicators)
5008 fields.push_back(internal_indicator->name());
5015 _aux->solution().close();
5020 _aux->solution().close();
5023 ADReal::do_derivatives = old_do_derivatives;
5032 TIME_SECTION(
"computeMarkers", 1,
"Computing Markers");
5034 std::vector<std::string>
fields;
5038 for (
const auto & marker : markers)
5039 fields.push_back(marker->name());
5048 for (
const auto & marker : markers)
5049 marker->markerSetup();
5055 _aux->solution().close();
5092 #ifdef MOOSE_KOKKOS_ENABLED 5096 _aux->customSetup(exec_type);
5097 for (
auto & nl :
_nl)
5098 nl->customSetup(exec_type);
5110 std::vector<UserObject *> userobjs;
5112 for (
auto obj : userobjs)
5113 obj->customSetup(exec_type);
5115 #ifdef MOOSE_KOKKOS_ENABLED 5117 std::vector<UserObjectBase *> userobjs;
5119 for (
auto obj : userobjs)
5120 obj->customSetup(exec_type);
5168 std::unique_ptr<NumericVector<Number>> x =
_aux->currentSolution()->clone();
5176 const Real check_tol = 1e-8;
5178 const Real xnorm = x->l2_norm();
5179 *x -= *
_aux->currentSolution();
5180 if (x->l2_norm() > check_tol * xnorm)
5182 const auto & sys =
_aux->system();
5183 const unsigned int n_vars = sys.n_vars();
5184 std::multimap<Real, std::string, std::greater<Real>> ordered_map;
5188 ordered_map.emplace(vnorm, sys.variable_name(i));
5191 std::ostringstream oss;
5192 for (
const auto & [error_norm, var_name] : ordered_map)
5193 oss <<
" {" << var_name <<
", " << error_norm <<
"},\n";
5195 mooseError(
"Aux kernels, user objects appear to have states for aux variables on ",
5197 ".\nVariable error norms in descending order:\n",
5202 if (pp_values.
size() != new_pp_values.
size())
5203 mooseError(
"Second execution for uo/aux state check should not change the number of " 5204 "real reporter values");
5207 pp_values -= new_pp_values;
5208 if (pp_values.
l2_norm() > check_tol * ppnorm)
5211 std::multimap<Real, std::string, std::greater<Real>> ordered_map;
5213 ordered_map.emplace(
std::abs(pp_values(i)), pp_names[i]);
5215 std::ostringstream oss;
5216 for (
const auto & [error_norm, pp_name] : ordered_map)
5217 oss <<
" {" << pp_name <<
", " << error_norm <<
"},\n";
5219 mooseError(
"Aux kernels, user objects appear to have states for real reporter values on ",
5221 ".\nErrors of real reporter values in descending order:\n",
5231 std::vector<UserObject *> objs;
5232 query.queryInto(objs);
5237 for (
auto obj : objs)
5238 if (obj->primaryThreadCopy())
5239 obj->primaryThreadCopy()->threadJoin(*obj);
5245 for (
auto obj : objs)
5247 if (isgen && dynamic_cast<ThreadedGeneralUserObject *>(obj))
5253 _console <<
"[DBG] Initializing, executing & finalizing general UO '" << obj->name()
5278 auto reporter =
dynamic_cast<Reporter *
>(obj);
5304 std::set<int> & execution_groups)
const 5306 std::vector<UserObjectBase *> uos;
5307 query.queryIntoUnsorted(uos);
5308 for (
const auto & uo : uos)
5309 execution_groups.insert(uo->getParam<
int>(
"execution_order_group"));
5315 const std::string & name)
5320 std::set<int> execution_groups;
5322 #ifdef MOOSE_KOKKOS_ENABLED 5331 for (
const auto execution_group : execution_groups)
5333 #ifdef MOOSE_KOKKOS_ENABLED 5348 std::set<int> execution_groups;
5350 #ifdef MOOSE_KOKKOS_ENABLED 5358 for (
const auto execution_group : execution_groups)
5360 #ifdef MOOSE_KOKKOS_ENABLED 5375 TIME_SECTION(
"computeUserObjects", 1,
"Computing User Objects");
5377 std::vector<GeneralUserObject *> genobjs;
5380 std::vector<UserObject *> userobjs;
5385 .queryInto(userobjs);
5387 std::vector<UserObject *> tgobjs;
5392 std::vector<UserObject *> nodal;
5395 std::vector<MortarUserObject *> mortar;
5398 if (userobjs.empty() && genobjs.empty() && tgobjs.empty() && nodal.empty() && mortar.empty())
5407 for (
auto obj : userobjs)
5408 obj->residualSetup();
5409 for (
auto obj : nodal)
5410 obj->residualSetup();
5411 for (
auto obj : mortar)
5412 obj->residualSetup();
5413 for (
auto obj : tgobjs)
5414 obj->residualSetup();
5415 for (
auto obj : genobjs)
5416 obj->residualSetup();
5420 for (
auto obj : userobjs)
5421 obj->jacobianSetup();
5422 for (
auto obj : nodal)
5423 obj->jacobianSetup();
5424 for (
auto obj : mortar)
5425 obj->jacobianSetup();
5426 for (
auto obj : tgobjs)
5427 obj->jacobianSetup();
5428 for (
auto obj : genobjs)
5429 obj->jacobianSetup();
5432 for (
auto obj : userobjs)
5436 if (!userobjs.empty())
5455 for (
const auto & uo : userobjs)
5456 if (
auto euo = dynamic_cast<const ElementUserObject *>(uo);
5457 euo && euo->hasWritableCoupledVariables())
5459 _aux->solution().close();
5460 _aux->system().update();
5468 for (
auto obj : nodal)
5478 for (
const auto & uo : nodal)
5479 if (
auto nuo = dynamic_cast<const NodalUserObject *>(uo);
5480 nuo && nuo->hasWritableCoupledVariables())
5482 _aux->solution().close();
5483 _aux->system().update();
5489 for (
auto obj : mortar)
5491 if (!mortar.empty())
5493 auto create_and_run_mortar_functors = [
this,
type, &mortar](
const bool displaced)
5497 for (
const auto & [primary_secondary_boundary_pair, interface_config] : mortar_interfaces)
5499 auto mortar_uos_to_execute =
5501 primary_secondary_boundary_pair.second,
5505 auto *
const subproblem = displaced
5507 : static_cast<SubProblem *>(
this);
5509 *interface_config.amg,
5513 subproblem->assembly(0, 0));
5519 create_and_run_mortar_functors(
false);
5521 create_and_run_mortar_functors(
true);
5523 for (
auto obj : mortar)
5528 for (
auto obj : tgobjs)
5530 std::vector<GeneralUserObject *> tguos_zero;
5534 .queryInto(tguos_zero);
5535 for (
auto obj : tguos_zero)
5537 std::vector<GeneralUserObject *> tguos;
5538 auto q =
query.clone()
5567 TIME_SECTION(
"executeControls", 1,
"Executing Controls");
5573 for (
const auto & it : controls_wh.getActiveObjects())
5578 std::vector<std::string> & dependent_controls = it->getDependencies();
5579 for (
const auto & depend_name : dependent_controls)
5581 if (controls_wh.hasActiveObject(depend_name))
5583 auto dep_control = controls_wh.getActiveObject(depend_name);
5584 resolver.
addEdge(dep_control, it);
5589 "\" was not created, did you make a " 5590 "spelling mistake or forget to include it " 5591 "in your input file?");
5597 if (!ordered_controls.empty())
5604 for (
const auto & control : ordered_controls)
5617 std::vector<Sampler *> objects;
5621 .condition<AttribThread>(tid)
5623 .queryInto(objects);
5625 if (!objects.empty())
5627 TIME_SECTION(
"executeSamplers", 1,
"Executing Samplers");
5628 FEProblemBase::objectSetupHelper<Sampler>(objects, exec_type);
5629 FEProblemBase::objectExecuteHelper<Sampler>(objects);
5637 TIME_SECTION(
"updateActiveObjects", 5,
"Updating Active Objects");
5641 for (
auto & nl :
_nl)
5642 nl->updateActive(tid);
5643 _aux->updateActive(tid);
5660 #ifdef MOOSE_KOKKOS_ENABLED 5674 TIME_SECTION(
"reinitBecauseOfGhostingOrNewGeomObjects",
5676 "Reinitializing Because of Geometric Search Objects");
5685 (
_mortar_data->hasDisplacedObjects() && mortar_changed)));
5700 const std::string & name,
5703 parallel_object_only();
5705 const auto nl_sys_num =
5711 mooseError(
"You are trying to add a DGKernel to a linear variable/system, which is not " 5712 "supported at the moment!");
5725 for (
auto & nl :
_nl)
5731 const std::string & name,
5734 parallel_object_only();
5760 std::shared_ptr<Indicator> indicator =
5763 std::shared_ptr<InternalSideIndicatorBase> isi =
5774 const std::string & name,
5777 parallel_object_only();
5811 const std::string & name,
5814 parallel_object_only();
5842 multi_app->setupPositions();
5847 std::shared_ptr<TransientMultiApp> trans_multi_app =
5849 if (trans_multi_app)
5865 std::shared_ptr<MultiApp>
5869 mooseAssert(
getMooseApp().actionWarehouse().isTaskComplete(
"add_multi_app"),
5870 "A MultiApp getter was called before MultiApps have been constructed. " 5871 "If you are attempting to access this object in the constructor of another object " 5872 "then make sure that the MultiApp is constructed before the object using it.");
5882 std::string string_direction;
5884 string_direction =
" To ";
5885 else if (from_multiapp)
5886 string_direction =
" From ";
5888 string_direction =
" Between ";
5896 TIME_SECTION(
"execMultiAppTransfers", 1,
"Executing Transfers");
5903 <<
"MultiApps" << COLOR_DEFAULT <<
":" << std::endl;
5906 {
"Name",
"Type",
"From",
"To"});
5909 for (
const auto & transfer : transfers)
5913 table.addRow(multiapp_transfer->name(),
5914 multiapp_transfer->type(),
5915 multiapp_transfer->getFromName(),
5916 multiapp_transfer->getToName());
5923 for (
const auto & transfer : transfers)
5926 transfer->execute();
5933 << COLOR_DEFAULT << std::endl;
5940 << COLOR_DEFAULT << std::endl;
5944 std::vector<std::shared_ptr<Transfer>>
5955 std::vector<std::shared_ptr<Transfer>>
5981 const std::vector<MooseSharedPointer<MultiApp>> & multi_apps =
5985 for (
const auto & multi_app : multi_apps)
5986 multi_app->preTransfer(
_dt,
_time);
5995 if (multi_apps.size())
5997 TIME_SECTION(
"execMultiApps", 1,
"Executing MultiApps",
false);
6001 << COLOR_DEFAULT << std::endl;
6003 bool success =
true;
6005 for (
const auto & multi_app : multi_apps)
6007 success = multi_app->solveStep(
_dt,
_time, auto_advance);
6022 << COLOR_DEFAULT << std::endl;
6037 for (
const auto & multi_app : multi_apps)
6038 multi_app->finalize();
6046 for (
const auto & multi_app : multi_apps)
6047 multi_app->postExecute();
6055 if (multi_apps.size())
6056 for (
const auto & multi_app : multi_apps)
6057 multi_app->incrementTStep(
_time);
6065 if (multi_apps.size())
6068 _console << COLOR_CYAN <<
"\nAdvancing MultiApps on " <<
type.name() << COLOR_DEFAULT
6071 for (
const auto & multi_app : multi_apps)
6072 multi_app->finishStep(recurse_through_multiapp_levels);
6077 _console << COLOR_CYAN <<
"Finished Advancing MultiApps on " <<
type.name() <<
"\n" 6078 << COLOR_DEFAULT << std::endl;
6087 if (multi_apps.size())
6089 TIME_SECTION(
"backupMultiApps", 5,
"Backing Up MultiApp");
6092 _console << COLOR_CYAN <<
"\nBacking Up MultiApps on " <<
type.name() << COLOR_DEFAULT
6095 for (
const auto & multi_app : multi_apps)
6096 multi_app->backup();
6101 _console << COLOR_CYAN <<
"Finished Backing Up MultiApps on " <<
type.name() <<
"\n" 6102 << COLOR_DEFAULT << std::endl;
6111 if (multi_apps.size())
6116 _console << COLOR_CYAN <<
"\nRestoring Multiapps on " <<
type.name()
6117 <<
" because of solve failure!" << COLOR_DEFAULT << std::endl;
6119 _console << COLOR_CYAN <<
"\nRestoring MultiApps on " <<
type.name() << COLOR_DEFAULT
6123 for (
const auto & multi_app : multi_apps)
6124 multi_app->restore(force);
6129 _console << COLOR_CYAN <<
"Finished Restoring MultiApps on " <<
type.name() <<
"\n" 6130 << COLOR_DEFAULT << std::endl;
6141 for (
const auto & multi_app : multi_apps)
6142 smallest_dt =
std::min(smallest_dt, multi_app->computeDT());
6152 TIME_SECTION(
"execTransfers", 3,
"Executing Transfers");
6156 for (
const auto & transfer : transfers)
6157 transfer->execute();
6163 const std::string & name,
6166 parallel_object_only();
6197 std::shared_ptr<MultiApp> multiapp;
6210 exec_enum = multiapp->getParam<
ExecFlagEnum>(
"execute_on");
6218 std::shared_ptr<MultiAppTransfer> multi_app_transfer =
6220 if (multi_app_transfer)
6237 if (sys->hasVariable(var_name))
6239 if (
_aux->hasVariable(var_name))
6249 if (sys->hasVariable(var_name))
6257 const std::string & var_name,
6269 if (sys->hasVariable(var_name))
6270 return sys->getFieldVariable<
Real>(tid, var_name);
6271 if (
_aux->hasVariable(var_name))
6272 return _aux->getFieldVariable<
Real>(tid, var_name);
6281 if (sys->hasVariable(var_name))
6282 return sys->getActualFieldVariable<
Real>(tid, var_name);
6283 if (
_aux->hasVariable(var_name))
6284 return _aux->getActualFieldVariable<
Real>(tid, var_name);
6293 if (sys->hasVariable(var_name))
6295 if (
_aux->hasVariable(var_name))
6305 if (sys->hasVariable(var_name))
6307 if (
_aux->hasVariable(var_name))
6317 if (sys->hasScalarVariable(var_name))
6319 if (
_aux->hasScalarVariable(var_name))
6329 if (sys->hasScalarVariable(var_name))
6330 return sys->getScalarVariable(tid, var_name);
6331 if (
_aux->hasScalarVariable(var_name))
6332 return _aux->getScalarVariable(tid, var_name);
6343 else if (
_aux->hasVariable(var_name) ||
_aux->hasScalarVariable(var_name))
6344 return _aux->system();
6346 mooseError(
"Unable to find a system containing the variable " + var_name);
6454 mat->setActiveProperties(mat_prop_ids);
6456 mat->setActiveProperties(mat_prop_ids);
6458 mat->setActiveProperties(mat_prop_ids);
6478 #ifdef LIBMESH_ENABLE_AMR 6488 const std::string & redistributer_name,
6489 const bool use_displaced_mesh)
6493 redistribute_params.
set<std::string>(
"for_whom") = this->
name();
6497 redistribute_params.
set<
bool>(
"use_displaced_mesh") = use_displaced_mesh;
6500 std::shared_ptr<RedistributeProperties> redistributer =
6502 "RedistributeProperties", redistributer_name, redistribute_params);
6516 add_redistributer(
_mesh,
"mesh_property_redistributer",
false);
6518 add_redistributer(
_displaced_problem->mesh(),
"displaced_mesh_property_redistributer",
true);
6520 #endif // LIBMESH_ENABLE_AMR 6540 mooseError(
"Max quadrature points per element assumptions made in some code (e.g. Coupleable ",
6541 "and MaterialPropertyInterface classes) have been violated.\n",
6542 "Complain to Moose developers to have constMaxQpsPerElem increased from ",
6550 _zero[tid].resize(max_qpts, 0);
6593 const bool allow_negative_qweights)
6602 if (order < _aux->getMinQuadratureOrder())
6603 order =
_aux->getMinQuadratureOrder();
6607 volume_order = order;
6615 type, order, volume_order, face_order, block, allow_negative_qweights);
6619 type, order, volume_order, face_order, block, allow_negative_qweights);
6630 mooseError(
"Someone told us (the FEProblemBase) to trust the user coupling matrix, but we " 6631 "haven't been provided a coupling matrix!");
6652 _cm[i] = std::move(cm);
6659 mooseError(
"Someone told us (the FEProblemBase) to trust the user coupling matrix, but we " 6660 "haven't been provided a coupling matrix!");
6668 TIME_SECTION(
"setNonlocalCouplingMatrix", 5,
"Setting Nonlocal Coupling Matrix");
6671 mooseError(
"Nonlocal kernels are weirdly stored on the FEProblem so we don't currently support " 6672 "multiple nonlinear systems with nonlocal kernels.");
6676 auto & nl =
_nl[nl_sys_num];
6678 unsigned int n_vars = nl->nVariables();
6679 nonlocal_cm.resize(
n_vars);
6680 const auto &
vars = nl->getVariables(0);
6683 for (
const auto & ivar :
vars)
6685 for (
const auto & kernel : nonlocal_kernel)
6687 for (
unsigned int i = ivar->number(); i < ivar->number() + ivar->count(); ++i)
6688 if (i == kernel->variable().number())
6689 for (
const auto & jvar :
vars)
6694 unsigned int j = jvar->number();
6695 nonlocal_cm(i, j) = 1;
6699 for (
const auto & integrated_bc : nonlocal_integrated_bc)
6701 for (
unsigned int i = ivar->number(); i < ivar->number() + ivar->count(); ++i)
6702 if (i == integrated_bc->variable().number())
6703 for (
const auto & jvar :
vars)
6708 unsigned int j = jvar->number();
6709 nonlocal_cm(i, j) = 1;
6719 const unsigned int jvar,
6720 const unsigned int nl_sys)
const 6722 return (*
_cm[nl_sys])(ivar, jvar);
6725 std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *>> &
6728 return _assembly[tid][nl_sys]->couplingEntries();
6731 std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *>> &
6734 return _assembly[tid][nl_sys]->nonlocalCouplingEntries();
6743 TIME_SECTION(
"init", 2,
"Initializing");
6759 unsigned int n_vars = nl->nVariables();
6761 TIME_SECTION(
"fillCouplingMatrix", 3,
"Filling Coupling Matrix");
6766 cm = std::make_unique<CouplingMatrix>(
n_vars);
6767 for (
unsigned int i = 0; i <
n_vars; i++)
6773 cm = std::make_unique<CouplingMatrix>(
n_vars);
6774 for (
unsigned int i = 0; i <
n_vars; i++)
6775 for (
unsigned int j = 0; j <
n_vars; j++)
6785 nl->dofMap()._dof_coupling = cm.get();
6791 nl->dofMap()._dof_coupling =
nullptr;
6793 nl->dofMap().attach_extra_sparsity_function(&
extraSparsity, nl.get());
6794 nl->dofMap().attach_extra_send_list_function(&
extraSendList, nl.get());
6798 mooseError(
"No variables specified in nonlinear system '", nl->name(),
"'.");
6820 for (
auto & nl :
_nl)
6822 nl->turnOffJacobian();
6840 TIME_SECTION(
"EquationSystems::Init", 2,
"Initializing Equation Systems");
6862 "Coupling matrix not set for system " 6864 <<
". This should only happen if a preconditioner was not setup for this system");
6871 #ifdef MOOSE_KOKKOS_ENABLED 6882 std::istringstream ss(nl_sys_name);
6883 unsigned int nl_sys_num;
6884 if (!(ss >> nl_sys_num) || !ss.eof())
6893 std::istringstream ss(linear_sys_name);
6894 unsigned int linear_sys_num;
6895 if (!(ss >> linear_sys_num) || !ss.eof())
6898 return linear_sys_num;
6904 std::istringstream ss(solver_sys_name);
6905 unsigned int solver_sys_num;
6906 if (!(ss >> solver_sys_num) || !ss.eof())
6910 mooseError(
"The solver system number was requested for system '" + solver_sys_name,
6911 "' but this system does not exist in the Problem. Systems can be added to the " 6912 "problem using the 'nl_sys_names'/'linear_sys_names' parameter.\nSystems in the " 6915 solver_sys_num = search->second;
6918 return solver_sys_num;
6925 if (solver_sys->hasVariable(variable_name))
6926 return solver_sys->number();
6927 mooseAssert(
_aux,
"Should have an auxiliary system");
6928 if (
_aux->hasVariable(variable_name))
6929 return _aux->number();
6933 "' was not found in any solver (nonlinear/linear) or auxiliary system");
6939 TIME_SECTION(
"solve", 1,
"Solving",
false);
6953 #if PETSC_RELEASE_LESS_THAN(3, 12, 0) 6992 #if !PETSC_RELEASE_LESS_THAN(3, 12, 0) 6994 LibmeshPetscCall(PetscOptionsPop());
7011 TIME_SECTION(
"checkExceptionAndStopSolve", 5);
7032 <<
"To recover, the solution will fail and then be re-attempted with a reduced time " 7047 _aux->solution().close();
7061 mooseError(
"The following parallel-communicated exception was detected during " +
7064 "\nBecause this did not occur during residual evaluation, there" 7065 " is no way to handle this, so the solution is aborting.\n");
7073 ADReal::do_derivatives =
true;
7098 TIME_SECTION(
"solve", 1,
"Solving",
false);
7108 #if PETSC_RELEASE_LESS_THAN(3, 12, 0) 7110 options, solver_params));
7128 #if !PETSC_RELEASE_LESS_THAN(3, 12, 0) 7130 LibmeshPetscCall(PetscOptionsPop());
7146 return _nl[nl_sys_num]->nNonlinearIterations();
7152 return _nl[nl_sys_num]->nLinearIterations();
7158 return _nl[nl_sys_num]->finalNonlinearResidual();
7164 return _nl[nl_sys_num]->computingPreSMOResidual();
7170 TIME_SECTION(
"copySolutionsBackwards", 3,
"Copying Solutions Backward");
7173 sys->copySolutionsBackwards();
7174 _aux->copySolutionsBackwards();
7181 sys->skipNextSolutionToOldCopy();
7182 _aux->skipNextSolutionToOldCopy();
7188 TIME_SECTION(
"advanceState", 5,
"Advancing State");
7191 sys->copyOldSolutions();
7192 _aux->copyOldSolutions();
7214 #ifdef MOOSE_KOKKOS_ENABLED 7229 TIME_SECTION(
"restoreSolutions", 5,
"Restoring Solutions");
7233 "There is currently no way to restore not-zeroed vectors.");
7238 _console <<
"Restoring solutions on system " << sys->name() <<
"..." << std::endl;
7239 sys->restoreSolutions();
7243 _console <<
"Restoring solutions on Auxiliary system..." << std::endl;
7244 _aux->restoreSolutions();
7247 _console <<
"Restoring postprocessor, vector-postprocessor, and reporter data..." << std::endl;
7257 TIME_SECTION(
"saveOldSolutions", 5,
"Saving Old Solutions");
7260 sys->saveOldSolutions();
7261 _aux->saveOldSolutions();
7267 TIME_SECTION(
"restoreOldSolutions", 5,
"Restoring Old Solutions");
7270 sys->restoreOldSolutions();
7271 _aux->restoreOldSolutions();
7277 TIME_SECTION(
"outputStep", 1,
"Outputting");
7314 TIME_SECTION(
"onTimestepBegin", 2);
7316 for (
auto & nl :
_nl)
7317 nl->onTimestepBegin();
7333 switch (state.
state)
7342 mooseError(
"Unhandled state ", state.
state,
" in FEProblemBase::getTimeFromStateArg");
7348 const std::string & name,
7351 parallel_object_only();
7363 _aux->addDotVectors();
7364 for (
auto & nl :
_nl)
7366 nl->addDotVectors();
7368 auto tag_udot = nl->getTimeIntegrators()[0]->uDotFactorTag();
7369 if (!nl->hasVector(tag_udot))
7370 nl->associateVectorToTag(*nl->solutionUDot(), tag_udot);
7371 auto tag_udotdot = nl->getTimeIntegrators()[0]->uDotDotFactorTag();
7373 nl->associateVectorToTag(*nl->solutionUDotDot(), tag_udotdot);
7383 const std::string & name,
7386 parallel_object_only();
7389 mooseError(
"Vector bounds cannot be used with LinearSystems!");
7395 for (
auto & nl :
_nl)
7396 nl->setPredictor(predictor);
7420 residual->scale(-1.0);
7422 return residual->l2_norm();
7428 TIME_SECTION(
"computeResidualL2Norm", 2,
"Computing L2 Norm of Residual");
7432 for (
auto sys :
_nl)
7452 parallel_object_only();
7454 TIME_SECTION(
"computeResidualSys", 5);
7474 const unsigned int nl_sys_num)
7483 mooseAssert(
_fe_vector_tags.empty(),
"This should be empty indicating a clean starting state");
7506 "This should be empty indicating a clean starting state");
7518 for (
auto & tag : tags)
7536 for (
auto index :
make_range(matrix.row_start(), matrix.row_stop()))
7537 matrix.add(index, index, 0);
7540 _aux->zeroVariablesForResidual();
7564 for (
unsigned int tid = 0; tid <
n_threads; tid++)
7569 _aux->residualSetup();
7585 #ifdef MOOSE_KOKKOS_ENABLED 7650 mooseError(
"An unhandled MooseException was raised during residual computation. Please " 7651 "contact the MOOSE team for assistance.");
7658 const std::set<TagID> & tags)
7660 parallel_object_only();
7662 TIME_SECTION(
"computeResidualInternal", 1);
7683 mooseError(
"An unhandled MooseException was raised during residual computation. Please " 7684 "contact the MOOSE team for assistance.");
7693 TIME_SECTION(
"computeResidualType", 5);
7714 mooseError(
"An unhandled MooseException was raised during residual computation. Please " 7715 "contact the MOOSE team for assistance.");
7722 auto create_exception_message =
7723 [&calling_method](
const std::string & exception_type,
const auto & exception)
7725 return std::string(
"A " + exception_type +
" was raised during FEProblemBase::" +
7726 calling_method +
"\n" + std::string(exception.what()));
7735 setException(create_exception_message(
"MooseException", e));
7737 catch (
const MetaPhysicL::LogicError & e)
7753 mooseError(create_exception_message(
"libMesh::PetscSolverException", e));
7755 catch (
const std::exception & e)
7758 if (strstr(e.what(),
"Jacobian") || strstr(e.what(),
"singular") ||
7759 strstr(e.what(),
"det != 0"))
7760 setException(create_exception_message(
"libMesh DegenerateMap", e));
7763 const auto message = create_exception_message(
"std::exception", e);
7777 parallel_object_only();
7783 TIME_SECTION(
"computeResidualTags", 5,
"Computing Residual");
7785 ADReal::do_derivatives =
false;
7789 _aux->zeroVariablesForResidual();
7803 for (
unsigned int tid = 0; tid <
n_threads; tid++)
7808 _aux->residualSetup();
7824 #ifdef MOOSE_KOKKOS_ENABLED 7885 const unsigned int nl_sys_num)
7892 for (
auto & tag : tags)
7901 const std::set<TagID> & tags)
7903 TIME_SECTION(
"computeJacobianInternal", 1);
7923 TIME_SECTION(
"computeJacobianTags", 5,
"Computing Jacobian");
7925 for (
auto tag : tags)
7937 for (
auto index :
make_range(matrix.row_start(), matrix.row_stop()))
7938 matrix.add(index, index, 0);
7941 _aux->zeroVariablesForJacobian();
7957 for (
unsigned int tid = 0; tid <
n_threads; tid++)
7962 _aux->jacobianSetup();
7977 for (
unsigned int tid = 0; tid <
n_threads; tid++)
7983 #ifdef MOOSE_KOKKOS_ENABLED 8028 const unsigned int nl_sys_num)
8030 TIME_SECTION(
"computeTransientImplicitJacobian", 2);
8052 JacobianBlock jac_block(precond_system, jacobian, ivar, jvar);
8053 std::vector<JacobianBlock *>
blocks = {&jac_block};
8068 "I expect these system numbers to be the same");
8073 TIME_SECTION(
"computeBounds", 1,
"Computing Bounds");
8082 _aux->residualSetup();
8106 const bool compute_gradients)
8108 TIME_SECTION(
"computeLinearSystemSys", 5);
8141 const std::set<TagID> & vector_tags,
8142 const std::set<TagID> & matrix_tags,
8143 const bool compute_gradients)
8145 TIME_SECTION(
"computeLinearSystemTags", 5,
"Computing Linear System");
8149 for (
auto tag : matrix_tags)
8168 _aux->jacobianSetup();
8175 #ifdef MOOSE_KOKKOS_ENABLED 8185 _console <<
"\nA MooseException was raised during Auxiliary variable computation.\n" 8186 <<
"The next solve will fail, the timestep will be reduced, and we will try again.\n" 8216 "I expect these system numbers to be the same");
8219 for (
unsigned int i = 0; i <
subspaceDim(
"NearNullSpace"); ++i)
8221 std::stringstream postfix;
8222 postfix <<
"_" << i;
8223 std::string modename =
"NearNullSpace" + postfix.str();
8233 "I expect these system numbers to be the same");
8235 for (
unsigned int i = 0; i <
subspaceDim(
"NullSpace"); ++i)
8237 std::stringstream postfix;
8238 postfix <<
"_" << i;
8248 "I expect these system numbers to be the same");
8250 for (
unsigned int i = 0; i <
subspaceDim(
"TransposeNullSpace"); ++i)
8252 std::stringstream postfix;
8253 postfix <<
"_" << i;
8263 bool & changed_search_direction,
8264 bool & changed_new_soln)
8267 "I expect these system numbers to be the same");
8278 TIME_SECTION(
"computePostCheck", 2,
"Computing Post Check");
8293 std::unique_ptr<NumericVector<Number>> ghosted_solution =
8295 ghosted_search_direction =
8299 *ghosted_solution = new_soln;
8300 *ghosted_search_direction = search_direction;
8311 new_soln = old_soln;
8312 new_soln.
add(-damping, search_direction);
8313 changed_new_soln =
true;
8320 if (changed_new_soln)
8321 *ghosted_solution = new_soln;
8323 bool updated_solution =
updateSolution(new_soln, *ghosted_solution);
8324 if (updated_solution)
8325 changed_new_soln =
true;
8332 _aux->copyCurrentIntoPreviousNL();
8336 changed_search_direction =
false;
8350 TIME_SECTION(
"computeDamping", 1,
"Computing Damping");
8391 parallel_object_only();
8400 TIME_SECTION(
"updateGeometricSearch", 3,
"Updating Geometric Search");
8411 TIME_SECTION(
"updateMortarMesh", 5,
"Updating Mortar Mesh");
8420 const std::pair<BoundaryID, BoundaryID> & primary_secondary_boundary_pair,
8421 const std::pair<SubdomainID, SubdomainID> & primary_secondary_subdomain_pair,
8425 const bool correct_edge_dropping,
8426 const Real minimum_projection_angle,
8427 const Mortar3DSubpatchPlane mortar_3d_subpatch_plane,
8429 const bool triangulate_triangles,
8430 const Mortar3DQuadraturePointMapping mortar_3d_qp_mapping)
8435 return _mortar_data->createMortarInterface(primary_secondary_boundary_pair,
8436 primary_secondary_subdomain_pair,
8441 correct_edge_dropping,
8442 minimum_projection_angle,
8443 mortar_3d_subpatch_plane,
8445 triangulate_triangles,
8446 mortar_3d_qp_mapping);
8448 return _mortar_data->createMortarInterface(primary_secondary_boundary_pair,
8449 primary_secondary_subdomain_pair,
8454 correct_edge_dropping,
8455 minimum_projection_angle,
8456 mortar_3d_subpatch_plane,
8458 triangulate_triangles,
8459 mortar_3d_qp_mapping);
8464 const std::pair<BoundaryID, BoundaryID> & primary_secondary_boundary_pair,
8465 const std::pair<SubdomainID, SubdomainID> & primary_secondary_subdomain_pair,
8466 bool on_displaced)
const 8469 primary_secondary_boundary_pair, primary_secondary_subdomain_pair, on_displaced);
8474 const std::pair<BoundaryID, BoundaryID> & primary_secondary_boundary_pair,
8475 const std::pair<SubdomainID, SubdomainID> & primary_secondary_subdomain_pair,
8479 primary_secondary_boundary_pair, primary_secondary_subdomain_pair, on_displaced);
8487 TIME_SECTION(
"possiblyRebuildGeomSearchPatches", 5,
"Rebuilding Geometric Search Patches");
8521 libmesh_fallthrough();
8527 _console <<
"\n\nUpdating geometric search patches\n" << std::endl;
8543 #ifdef LIBMESH_ENABLE_AMR 8552 mooseError(
"HFEM does not support mesh adaptivity currently.");
8554 TIME_SECTION(
"initialAdaptMesh", 2,
"Performing Initial Adaptivity");
8556 for (
unsigned int i = 0; i < n; i++)
8573 _console <<
"Mesh unchanged, skipping remaining steps..." << std::endl;
8589 TIME_SECTION(
"adaptMesh", 3,
"Adapting Mesh");
8593 bool mesh_changed =
false;
8595 for (
unsigned int i = 0; i < cycles_per_step; ++i)
8598 mooseError(
"HFEM does not support mesh adaptivity currently.");
8604 bool mesh_changed_this_step;
8607 if (mesh_changed_this_step)
8609 mesh_changed =
true;
8622 _console <<
"Mesh unchanged, skipping remaining steps..." << std::endl;
8638 return mesh_changed;
8640 #endif // LIBMESH_ENABLE_AMR 8654 data[tid] = &storage.getMaterialData(tid);
8661 for (
unsigned int i = 0; i <
n_threads; ++i)
8673 TIME_SECTION(
"updateMeshXFEM", 5,
"Updating XFEM");
8675 bool updated =
false;
8678 if (
_xfem->updateHeal())
8683 false,
true,
false);
8689 false,
true,
false);
8692 _console <<
"\nXFEM update complete: Mesh modified" << std::endl;
8695 _console <<
"\nXFEM update complete: Mesh not modified" << std::endl;
8702 const bool contract_mesh,
8703 const bool clean_refinement_flags)
8705 TIME_SECTION(
"meshChanged", 3,
"Handling Mesh Changes");
8725 if (intermediate_change)
8733 if (clean_refinement_flags)
8741 if (!intermediate_change)
8791 for (
auto & nl_sys :
_nl)
8792 nl_sys->reinitMortarFunctors();
8809 Threads::parallel_reduce(range, pmp);
8817 for (
const auto & elem : range)
8830 Threads::parallel_reduce(range, pmp);
8834 for (
const auto & elem : range)
8837 for (
auto && child : coarsened_children)
8873 mdi->meshDisplaced();
8882 Threads::parallel_reduce(elem_range, cmt);
8884 cmt(elem_range,
true);
8886 #ifdef MOOSE_KOKKOS_ENABLED 8895 TIME_SECTION(
"checkProblemIntegrity", 5);
8898 const auto & subdomain_names = getParam<std::vector<SubdomainName>>(
"block");
8900 std::set<SubdomainID> mesh_subdomains(mesh_subdomains_vec.begin(), mesh_subdomains_vec.end());
8906 std::set<SubdomainID>
blocks;
8909 blocks = mesh_subdomains;
8912 blocks = mesh_subdomains;
8920 "\" not found in mesh.");
8932 "\" not found in mesh.");
8936 for (
auto & nl :
_nl)
8937 nl->checkKernelCoverage(
blocks);
8942 #ifdef LIBMESH_ENABLE_AMR 8947 _console <<
"Using EXPERIMENTAL Stateful Material Property projection with Adaptivity!\n" 8952 std::set<SubdomainID> local_mesh_subs(mesh_subdomains);
8961 bool check_material_coverage =
false;
8963 for (
const auto &
id : ids)
8965 local_mesh_subs.erase(
id);
8966 check_material_coverage =
true;
8977 "Subdomain \"" + subdomain_name +
"\" not found in mesh.");
8978 local_mesh_subs.erase(
id);
8983 std::set<SubdomainID>
blocks(local_mesh_subs);
8989 "Subdomain \"" + subdomain_name +
"\" not found in mesh.");
8992 for (
const auto id :
blocks)
8993 local_mesh_subs.erase(
id);
8997 auto && mortar_subdomain_ids =
_mortar_data->getMortarSubdomainIDs();
8998 for (
auto subdomain_id : mortar_subdomain_ids)
8999 local_mesh_subs.erase(subdomain_id);
9002 if (check_material_coverage && !local_mesh_subs.empty())
9004 std::stringstream extra_subdomain_ids;
9006 std::copy(local_mesh_subs.begin(),
9007 local_mesh_subs.end(),
9008 std::ostream_iterator<unsigned int>(extra_subdomain_ids,
" "));
9010 std::vector<SubdomainID> local_mesh_subs_vec(local_mesh_subs.begin(),
9011 local_mesh_subs.end());
9013 mooseError(
"The following blocks from your input mesh do not contain an active material: " +
9014 extra_subdomain_ids.str() +
9016 ")\nWhen ANY mesh block contains a Material object, " 9017 "all blocks must contain a Material object.\n");
9027 for (
const auto & material : materials)
9028 material->checkStatefulSanity();
9048 mooseError(
"Coordinate transformation parameters, listed below, are only to be used in the " 9049 "context of application to application field transfers at this time. The mesh is " 9050 "not modified by these parameters within an application.\n" 9051 "You should likely use a 'TransformGenerator' in the [Mesh] block to achieve the " 9052 "desired mesh modification.\n\n",
9069 bool mesh_has_second_order_elements =
false;
9075 mesh_has_second_order_elements =
true;
9085 if (mesh_has_second_order_elements)
9087 const std::vector<std::string> & displacement_variables =
9090 for (
const auto & var_name : displacement_variables)
9098 mooseError(
"Error: mesh has SECOND order elements, so all displacement variables must be " 9110 std::set<SubdomainID> user_objects_blocks;
9114 std::set<std::string> names;
9116 std::vector<UserObjectBase *> objects;
9119 for (
const auto & obj : objects)
9120 names.insert(obj->name());
9123 std::set<SubdomainID> difference;
9124 std::set_difference(user_objects_blocks.begin(),
9125 user_objects_blocks.end(),
9126 mesh_subdomains.begin(),
9127 mesh_subdomains.end(),
9128 std::inserter(difference, difference.end()));
9130 if (!difference.empty())
9132 std::ostringstream oss;
9133 oss <<
"One or more UserObjects is referencing a nonexistent block:\n";
9134 for (
const auto &
id : difference)
9142 const std::map<
SubdomainID, std::vector<std::shared_ptr<MaterialBase>>> & materials_map)
9144 for (
const auto & it : materials_map)
9147 std::set<std::string> block_depend_props, block_supplied_props;
9149 for (
const auto & mat1 : it.second)
9151 auto & alldeps = mat1->getMatPropDependencies();
9152 for (
auto & dep : alldeps)
9156 for (
const auto & mat2 : it.second)
9158 const std::set<std::string> & supplied_props = mat2->MaterialBase::getSuppliedItems();
9159 block_supplied_props.insert(supplied_props.begin(), supplied_props.end());
9168 std::set<std::string> difference;
9169 std::set_difference(block_depend_props.begin(),
9170 block_depend_props.end(),
9171 block_supplied_props.begin(),
9172 block_supplied_props.end(),
9173 std::inserter(difference, difference.end()));
9175 if (!difference.empty())
9177 std::ostringstream oss;
9178 oss <<
"One or more Material Properties were not supplied on block ";
9180 if (subdomain_name.length() > 0)
9181 oss << subdomain_name <<
" (" << it.first <<
")";
9185 for (
const auto &
name : difference)
9186 oss <<
name <<
"\n";
9192 for (
const auto & it : materials_map)
9194 const auto & materials = it.second;
9195 std::set<std::string> inner_supplied, outer_supplied;
9197 for (
const auto & outer_mat : materials)
9200 outer_supplied = outer_mat->getSuppliedItems();
9201 inner_supplied.clear();
9204 std::map<std::string, std::set<std::string>> prop_to_mat;
9205 for (
const auto &
name : outer_supplied)
9206 prop_to_mat[
name].insert(outer_mat->name());
9208 for (
const auto & inner_mat : materials)
9210 if (outer_mat == inner_mat)
9214 auto outer_mat_type = outer_mat->type();
9215 auto inner_mat_type = inner_mat->type();
9220 if (outer_mat_type == inner_mat_type && outer_mat_type != outer_mat->type() &&
9221 inner_mat_type != inner_mat->type())
9224 inner_supplied.insert(inner_mat->getSuppliedItems().begin(),
9225 inner_mat->getSuppliedItems().end());
9227 for (
const auto & inner_supplied_name : inner_supplied)
9228 prop_to_mat[inner_supplied_name].insert(inner_mat->name());
9232 std::set<std::string> intersection;
9233 std::set_intersection(outer_supplied.begin(),
9234 outer_supplied.end(),
9235 inner_supplied.begin(),
9236 inner_supplied.end(),
9237 std::inserter(intersection, intersection.end()));
9239 if (!intersection.empty())
9241 std::ostringstream oss;
9242 oss <<
"The following material properties are declared on block " << it.first
9243 <<
" by multiple materials:\n";
9245 <<
"Material Objects\n";
9246 for (
const auto & outer_name : intersection)
9249 for (
const auto & inner_name : prop_to_mat[outer_name])
9250 oss << inner_name <<
" ";
9272 mooseInfo(
"Restart file ", file_name,
" is NOT being used since we are performing recovery.");
9278 mooseInfo(
"Using ", file_name,
" for restart.");
9282 std::vector<VariableName>
9285 std::vector<VariableName> names;
9289 const std::vector<VariableName> & var_names = sys->getVariableNames();
9290 names.insert(names.end(), var_names.begin(), var_names.end());
9293 const std::vector<VariableName> & aux_var_names =
_aux->getVariableNames();
9294 names.insert(names.end(), aux_var_names.begin(), aux_var_names.end());
9303 "Solver system number '" << solver_sys_num <<
"' is out of bounds. We have '" 9320 auto random_data_ptr = insert_pair.first->second.get();
9330 bnd_mat_side_cache =
false;
9333 if (
_aux->needMaterialOnSide(bnd_id))
9335 bnd_mat_side_cache =
true;
9338 for (
auto & nl :
_nl)
9339 if (nl->needBoundaryMaterialOnSide(bnd_id, tid))
9341 bnd_mat_side_cache =
true;
9355 bnd_mat_side_cache =
true;
9369 interface_mat_side_cache =
false;
9372 for (
auto & nl :
_nl)
9373 if (nl->needInterfaceMaterialOnSide(bnd_id, tid))
9375 interface_mat_side_cache =
true;
9388 interface_mat_side_cache =
true;
9393 interface_mat_side_cache =
true;
9407 for (
auto & nl :
_nl)
9408 if (nl->needInternalNeighborSideMaterial(subdomain_id, tid))
9441 mooseError(
"Previous nonlinear solution is required but not added through " 9442 "Problem/previous_nl_solution_required=true");
9447 const unsigned int solver_sys_num)
9454 const unsigned int solver_sys_num)
const 9473 bool needed,
const unsigned int solver_sys_num)
9480 const unsigned int solver_sys_num)
const 9511 const std::string & object_name,
9514 parallel_object_only();
9521 mooseError(
"The name '", object_name,
"' is a reserved name for output objects");
9525 if (output_warehouse.
hasOutput(object_name))
9526 mooseError(
"An output object named '", object_name,
"' already exists");
9532 if (object_type ==
"Console" &&
_app.
getParam<
bool>(
"show_input") &&
9543 if (object_type ==
"XDR")
9545 else if (object_type ==
"XDA")
9549 if (object_name ==
"auto_recovery_checkpoint")
9581 else if (sys_name ==
"aux0")
9584 mooseError(
"System '" + sys_name +
"' was requested from problem but does not exist.");
9599 mooseAssert(sys_num <
_nl.size(),
"System number greater than the number of nonlinear systems");
9600 return *
_nl[sys_num];
9606 mooseAssert(sys_num <
_nl.size(),
"System number greater than the number of nonlinear systems");
9607 return *
_nl[sys_num];
9614 "System number greater than the number of linear systems");
9622 "System number greater than the number of linear systems");
9630 "System number greater than the number of solver systems");
9638 "System number greater than the number of solver systems");
9657 parallel_object_only();
9701 const std::vector<Point> *
const pts,
9702 const std::vector<Real> *
const weights,
9714 unsigned int neighbor_side,
9716 const std::vector<Point> *
const pts,
9717 const std::vector<Real> *
const weights,
9730 std::vector<std::shared_ptr<MaterialBase>> & face_materials,
9731 std::vector<std::shared_ptr<MaterialBase>> & neighbor_materials,
9732 std::set<MooseVariableFieldBase *> & variables,
9737 auto & this_face_mats =
9739 for (std::shared_ptr<MaterialBase> face_mat : this_face_mats)
9740 if (face_mat->ghostable())
9742 face_materials.push_back(face_mat);
9743 auto & var_deps = face_mat->getMooseVariableDependencies();
9744 for (
auto * var : var_deps)
9748 "Ghostable materials should only have finite volume variables coupled into them.");
9749 else if (face_mat->hasStatefulProperties())
9750 mooseError(
"Finite volume materials do not currently support stateful properties.");
9751 variables.insert(var);
9758 auto & this_neighbor_mats =
9760 for (std::shared_ptr<MaterialBase> neighbor_mat : this_neighbor_mats)
9761 if (neighbor_mat->ghostable())
9763 neighbor_materials.push_back(neighbor_mat);
9765 auto & var_deps = neighbor_mat->getMooseVariableDependencies();
9766 for (
auto * var : var_deps)
9770 "Ghostable materials should only have finite volume variables coupled into them.");
9771 else if (neighbor_mat->hasStatefulProperties())
9772 mooseError(
"Finite volume materials do not currently support stateful properties.");
9773 auto pr = variables.insert(var);
9774 mooseAssert(!pr.second,
9775 "We should not have inserted any new variables dependencies from our " 9776 "neighbor materials that didn't exist for our face materials");
9785 const unsigned int nqp,
9796 "There must be one convergence object per nonlinear system");
9812 const std::vector<ConvergenceName> &
9817 mooseError(
"The nonlinear system convergence name(s) have not been set.");
9832 paramError(
"linear_convergence",
"There must be one convergence object per linear system");
9836 const std::vector<ConvergenceName> &
9841 mooseError(
"The linear convergence name(s) have not been set.");
9844 const ConvergenceName &
9850 mooseError(
"The fixed point convergence name has not been set.");
9853 const ConvergenceName &
9859 mooseError(
"The steady convergence name has not been set.");
9870 _nl[i]->residualSetup();
9884 _nl[i]->jacobianSetup();
9904 return current_nl_sys_num;
9915 return current_linear_sys_num;
9932 std::vector<MortarUserObject *>
9935 const bool displaced,
9936 const std::vector<MortarUserObject *> & mortar_uo_superset)
9938 std::vector<MortarUserObject *> mortar_uos;
9940 : static_cast<SubProblem *>(
this);
9941 for (
auto *
const obj : mortar_uo_superset)
9942 if (obj->onInterface(primary_boundary_id, secondary_boundary_id) &&
9943 (&obj->getSubProblem() == subproblem))
9944 mortar_uos.push_back(obj);
9949 std::vector<MortarUserObject *>
9952 const bool displaced)
9954 std::vector<MortarUserObject *> mortar_uos;
9958 .queryInto(mortar_uos);
9959 return getMortarUserObjects(primary_boundary_id, secondary_boundary_id, displaced, mortar_uos);
9965 const bool displaced)
9967 const auto mortar_uos =
9969 for (
auto *
const mortar_uo : mortar_uos)
9971 mortar_uo->setNormals();
9972 mortar_uo->reinit();
10004 mooseAssert(nl_sys_num <
_nl.size(),
10005 "System number greater than the number of nonlinear systems");
10014 "System number greater than the number of linear systems");
10027 solver_sys->compute(
type);
10109 return solver_params;
10127 return _mortar_data->getMortarInterfaces(on_displaced);
bool _reinit_displaced_elem
Whether to call DisplacedProblem::reinitElem when this->reinitElem is called.
This class determines the maximum number of Quadrature Points and Shape Functions used for a given si...
virtual void addInterfaceMaterial(const std::string &material_name, const std::string &name, InputParameters ¶meters)
std::map< NonlinearSystemName, unsigned int > _nl_sys_name_to_num
Map from nonlinear system name to number.
void setCurrentAlgebraicElementRange(libMesh::ConstElemRange *range)
These functions allow setting custom ranges for the algebraic elements, nodes, and boundary nodes tha...
std::string indent(unsigned int spaces)
Create empty string for indenting.
std::vector< Point > _point_zero
Interface for objects that need parallel consistent random numbers without patterns over the course o...
void updateVariableDependency(std::set< MooseVariableFieldBase *> &needed_moose_vars, THREAD_ID tid=0) const
Update variable dependency vector.
virtual void addCachedResidual(const THREAD_ID tid)
virtual void computeJacobianTag(const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian, TagID tag)
Form a Jacobian matrix for a given tag.
void addObject(std::shared_ptr< T > object, THREAD_ID tid=0, bool recurse=true) override
Adds an object to the storage structure.
unsigned short getCurrentICState()
Retrieves the current initial condition state.
virtual void addFVInitialCondition(const std::string &ic_name, const std::string &name, InputParameters ¶meters)
Add an initial condition for a finite volume variables.
bool adaptMesh(std::string marker_name=std::string())
Adapts the mesh based on the error estimator used.
void sort(THREAD_ID tid=0)
Sort the objects using the DependencyResolver.
virtual void addMaterialHelper(std::vector< MaterialWarehouse *> warehouse, const std::string &material_name, const std::string &name, InputParameters ¶meters)
bool initialAdaptMesh()
Used during initial adaptivity.
virtual void residualSetup(THREAD_ID tid=0) const
virtual bool hasVariable(const std::string &var_name) const override
Whether or not this problem has the variable.
virtual void stopSolve(const ExecFlagType &exec_flag, const std::set< TagID > &vector_tags_to_close) override
Quit the current solve as soon as possible.
bool hasInvalidSolutionError() const
Whether or not an invalid solution was encountered that was an error.
void mooseInfo(Args &&... args) const
void setActiveMaterialProperties(const std::unordered_set< unsigned int > &mat_prop_ids, const THREAD_ID tid)
Record and set the material properties required by the current computing thread.
const bool _regard_general_exceptions_as_errors
If we catch an exception during residual/Jacobian evaluaton for which we don't have specific handling...
const std::size_t _num_nl_sys
The number of nonlinear systems.
void setVariableAllDoFMap(const std::vector< const MooseVariableFEBase *> &moose_vars)
void computeJacobianBlocks(std::vector< JacobianBlock *> &blocks)
Computes several Jacobian blocks simultaneously, summing their contributions into smaller preconditio...
virtual void initPetscOutputAndSomeSolverSettings()
Reinitialize PETSc output for proper linear/nonlinear iteration display.
const std::vector< ConvergenceName > & getNonlinearConvergenceNames() const
Gets the nonlinear system convergence object name(s).
MetaPhysicL::DualNumber< V, D, asd > abs(const MetaPhysicL::DualNumber< V, D, asd > &a)
void timestepSetup() override
virtual void addSampler(const std::string &type, const std::string &name, InputParameters ¶meters)
The following functions will enable MOOSE to have the capability to import Samplers.
bool _skip_exception_check
If or not skip 'exception and stop solve'.
const std::vector< std::string > & get_global_var_names()
bool isFiniteVolumeInfoDirty() const
Helper class for holding the preconditioning blocks to fill.
virtual void restore_original_nonzero_pattern()
bool _reinit_displaced_neighbor
Whether to call DisplacedProblem::reinitNeighbor when this->reinitNeighbor is called.
virtual void clearActiveFEVariableCoupleableMatrixTags(const THREAD_ID tid)
void outputStep(ExecFlagType type)
Calls the outputStep method for each output object.
virtual void meshChanged()
Deprecated.
virtual void addDamper(const std::string &damper_name, const std::string &name, InputParameters ¶meters)
std::map< LinearSystemName, unsigned int > _linear_sys_name_to_num
Map from linear system name to number.
virtual void clearActiveFEVariableCoupleableVectorTags(const THREAD_ID tid)
void getFVMatsAndDependencies(SubdomainID block_id, std::vector< std::shared_ptr< MaterialBase >> &face_materials, std::vector< std::shared_ptr< MaterialBase >> &neighbor_materials, std::set< MooseVariableFieldBase *> &variables, const THREAD_ID tid)
Get the materials and variables potentially needed for FV.
std::vector< MooseArray< ADRealTensorValue > > _ad_second_zero
bool _have_ad_objects
AD flag indicating whether any AD objects have been added.
void shift()
Shift the material properties in time.
virtual void prepareFace(const Elem *elem, const THREAD_ID tid) override
Base class for function objects.
void setPreserveMatrixSparsityPattern(bool preserve)
Set whether the sparsity pattern of the matrices being formed during the solve (usually the Jacobian)...
void reinitBecauseOfGhostingOrNewGeomObjects(bool mortar_changed=false)
Call when it is possible that the needs for ghosted elements has changed.
void fill_data(std::map< processor_id_type, std::vector< std::set< unsigned int >>> &data, int M)
virtual void addTransfer(const std::string &transfer_name, const std::string &name, InputParameters ¶meters)
Add a Transfer to the problem.
KOKKOS_INLINE_FUNCTION const T * find(const T &target, const T *const begin, const T *const end)
Find a value in an array.
virtual libMesh::System & getSystem(const std::string &var_name) override
Returns the equation system containing the variable provided.
virtual void setActiveScalarVariableCoupleableMatrixTags(std::set< TagID > &mtags, const THREAD_ID tid)
static const std::string app_param
The name of the parameter that contains the MooseApp.
A MultiMooseEnum object to hold "execute_on" flags.
static SolverParams makeLinearSolverParams()
Make basic solver params for linear solves.
void needsPreviousMultiSystemFixedPointIterationSolution(bool needed, const unsigned int solver_sys_num)
Set a flag that indicates that user requires values for the previous multi-system fixed point iterate...
bool _parallel_barrier_messaging
Whether or not information about how many transfers have completed is printed.
MooseVariableFieldBase & getVariableHelper(const THREAD_ID tid, const std::string &var_name, Moose::VarKindType expected_var_type, Moose::VarFieldType expected_var_field_type, const std::vector< T > &nls, const SystemBase &aux) const
Helper function called by getVariable that handles the logic for checking whether Variables of the re...
virtual void addResidualLower(const THREAD_ID tid) override
A class for creating restricted objects.
bool isUltimateMaster() const
Whether or not this app is the ultimate master app.
virtual void addJacobianLowerD(const THREAD_ID tid) override
Factory & _factory
The Factory for building objects.
virtual void clearActiveScalarVariableCoupleableVectorTags(const THREAD_ID tid) override
MaterialPropertyStorage & _bnd_material_props
virtual void addGhostedElem(dof_id_type elem_id) override
Will make sure that all dofs connected to elem_id are ghosted to this processor.
void setNonlocalCouplingMatrix()
Set custom coupling matrix for variables requiring nonlocal contribution.
Threads::spin_mutex get_function_mutex
void initialSetup()
Calls the initialSetup function for each of the output objects.
virtual Real & time() const
virtual const char * what() const
Get out the error message.
const Variable & variable(unsigned int var) const
void checkDependMaterialsHelper(const std::map< SubdomainID, std::vector< std::shared_ptr< MaterialBase >>> &materials_map)
Helper method for checking Material object dependency.
void extraSparsity(libMesh::SparsityPattern::Graph &sparsity, std::vector< dof_id_type > &n_nz, std::vector< dof_id_type > &n_oz, void *context)
Free function used for a libMesh callback.
std::vector< bool > _previous_multisystem_fp_nl_solution_required
Indicates we need to save the previous multi-system fixed-point iteration solver variable values...
virtual void cacheResidualNeighbor(const THREAD_ID tid) override
ExecFlagType _current_execute_on_flag
Current execute_on flag.
const std::set< SubdomainID > & interiorLowerDBlocks() const
void clearCurrentResidualVectorTags()
Clear the current residual vector tag data structure.
bool hasActiveBlockObjects(THREAD_ID tid=0) const
QueryCache is a convenient way to construct and pass around (possible partially constructed) warehous...
std::shared_ptr< DisplacedProblem > displaced_problem
const unsigned int invalid_uint
virtual void reinitLowerDElem(const Elem *lower_d_elem, const THREAD_ID tid, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)
RelationshipManagerType
Main types of Relationship Managers.
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
virtual void checkExceptionAndStopSolve(bool print_message=true)
Check to see if an exception has occurred on any processor and, if possible, force the solve to fail...
virtual void meshDisplaced()
Update data after a mesh displaced.
const std::set< BoundaryID > & getSubdomainBoundaryIds(const SubdomainID subdomain_id) const
Get the list of boundary ids associated with the given subdomain id.
std::optional< ConvergenceName > _multiapp_fixed_point_convergence_name
MultiApp fixed point convergence name.
const std::string & name() const
MooseAppCoordTransform & coordTransform()
virtual void setActiveFEVariableCoupleableMatrixTags(std::set< TagID > &mtags, const THREAD_ID tid) override
void setCurrentAlgebraicNodeRange(libMesh::ConstNodeRange *range)
void projectFunctionOnCustomRange(ConstElemRange &elem_range, Number(*func)(const Point &, const libMesh::Parameters &, const std::string &, const std::string &), Gradient(*func_grad)(const Point &, const libMesh::Parameters &, const std::string &, const std::string &), const libMesh::Parameters ¶ms, const std::vector< VariableName > &target_vars)
Project a function onto a range of elements for a given variable.
void paramError(const std::string ¶m, Args... args) const
Emits an error prefixed with the file and line number of the given param (from the input file) along ...
const std::map< SubdomainID, std::vector< std::shared_ptr< T > > > & getActiveBlockObjects(THREAD_ID tid=0) const
Real computeDamping(const NumericVector< Number > &solution, const NumericVector< Number > &update)
Compute damping.
const T & getParam(const std::string &name) const
Retrieve a parameter for the object.
virtual void reinitNode(const Node *node, const THREAD_ID tid) override
virtual std::size_t numNonlinearSystems() const override
Base class for implementing interface user objects.
virtual void setPreviousNewtonSolution(const NumericVector< Number > &soln)
virtual void predictorCleanup(NumericVector< libMesh::Number > &ghosted_solution)
Perform cleanup tasks after application of predictor to solution vector.
virtual void prepare(const Elem *elem, const THREAD_ID tid) override
TagID rightHandSideVectorTag() const
virtual Elem * elemPtr(const dof_id_type i)
TagID systemMatrixTag() const override
Return the Matrix Tag ID for System.
NumericVector< Number > & solution()
bool hasObjects(THREAD_ID tid=0) const
Convenience functions for determining if objects exist.
bool _has_jacobian
Indicates if the Jacobian was computed.
virtual bool haveFV() const override
returns true if this problem includes/needs finite volume functionality.
Interface for objects acting when the mesh has been displaced.
static void uniformRefine(MooseMesh *mesh, unsigned int level=libMesh::invalid_uint)
Performs uniform refinement of the passed Mesh object.
bool _has_dampers
Whether or not this system has any Dampers associated with it.
MooseObjectWarehouse< InternalSideIndicatorBase > _internal_side_indicators
void shift()
Shift current, old, and older material property data storages.
std::vector< SubdomainName > _kernel_coverage_blocks
virtual Distribution & getDistribution(const std::string &name)
void swapBack(const Elem &elem, unsigned int side=0)
material properties for given element (and possible side)
void needsPreviousMultiAppFixedPointIterationSolution(bool needed, const unsigned int solver_sys_num)
Set a flag that indicated that user required values for the previous multiapp fixed point iterate for...
bool _has_nonlocal_coupling
Indicates if nonlocal coupling is required/exists.
bool needsPreviousMultiSystemFixedPointIterationAuxiliary() const
Check to see whether we need to compute the variable values of the previous multi-system fixed point ...
void setCurrentAlgebraicBndNodeRange(ConstBndNodeRange *range)
This is the base class for Samplers as used within the Stochastic Tools module.
Base class for predictors.
bool areCoupled(const unsigned int ivar, const unsigned int jvar, const unsigned int nl_sys_num) const
Moose::LineSearchType _line_search
const T & get() const
Get the restartable value.
void setPostprocessorValueByName(const PostprocessorName &name, const PostprocessorValue &value, std::size_t t_index=0)
Set the value of a PostprocessorValue.
virtual void jacobianSetup(THREAD_ID tid=0) const override
virtual void clearActiveScalarVariableCoupleableMatrixTags(const THREAD_ID tid) override
virtual void postExecute()
Method called at the end of the simulation.
void reinit(bool reinit_for_derivative_reordering=false)
Fill out the VariableValue arrays from the system solution vector.
unsigned int number() const
Get variable number coming from libMesh.
void eraseProperty(const Elem *elem)
Remove the property storage and element pointer from internal data structures Use this when elements ...
bool isSolverSystemNonlinear(const unsigned int sys_num)
Check if the solver system is nonlinear.
void petscSetDefaults(FEProblemBase &problem)
Sets the default options for PETSc.
std::unordered_set< TagID > _not_zeroed_tagged_vectors
the list of vector tags that will not be zeroed when all other tags are
void joinAndFinalize(TheWarehouse::Query query, bool isgen=false)
bool hasInitialBackup() const
std::vector< MooseArray< ADRealVectorValue > > _ad_grad_zero
std::vector< SolverParams > _solver_params
InputParameterWarehouse & getInputParameterWarehouse()
Get the InputParameterWarehouse for MooseObjects.
ExecuteMooseObjectWarehouse< Control > _control_warehouse
The control logic warehouse.
void reinitMaterialsFaceOnBoundary(const BoundaryID boundary_id, const SubdomainID blk_id, const THREAD_ID tid, const bool swap_stateful=true, const std::deque< MaterialBase *> *const reinit_mats=nullptr)
reinit materials on element faces on a boundary (internal or external) This specific routine helps us...
void updateActive(THREAD_ID tid=0) override
Updates the active objects storage.
virtual std::pair< bool, unsigned int > determineSolverSystem(const std::string &var_name, bool error_if_not_found=false) const override
Determine what solver system the provided variable name lies in.
std::unique_ptr< libMesh::ConstNodeRange > _current_algebraic_node_range
virtual void setActiveScalarVariableCoupleableMatrixTags(std::set< TagID > &mtags, const THREAD_ID tid) override
void setCoupling(Moose::CouplingType type)
Set the coupling between variables TODO: allow user-defined coupling.
constexpr std::size_t constMaxQpsPerElem
This is used for places where we initialize some qp-sized data structures that would end up being siz...
const ExecFlagType & getCurrentExecuteOnFlag() const
Return/set the current execution flag.
unsigned int _cycles_completed
bool _currently_computing_jacobian
Flag to determine whether the problem is currently computing Jacobian.
virtual void reinitScalars(const THREAD_ID tid, bool reinit_for_derivative_reordering=false) override
fills the VariableValue arrays for scalar variables from the solution vector
const ExecFlagEnum & getExecuteOnEnum() const
Return the app level ExecFlagEnum, this contains all the available flags for the app.
virtual void init() override
void add(std::shared_ptr< MooseObject > obj)
add adds a new object to the warehouse and stores attributes/metadata about it for running queries/fi...
void translateMetaPhysicLError(const MetaPhysicL::LogicError &)
emit a relatively clear error message when we catch a MetaPhysicL logic error
virtual void getDiracElements(std::set< const Elem *> &elems) override
Fills "elems" with the elements that should be looped over for Dirac Kernels.
virtual void setActiveElementalMooseVariables(const std::set< MooseVariableFieldBase *> &moose_vars, const THREAD_ID tid)
Set the MOOSE variables to be reinited on each element.
void parentOutputPositionChanged()
Calls parentOutputPositionChanged() on all sub apps.
void setupDM()
Setup the PETSc DM object (when appropriate)
virtual void setCurrentBoundaryID(BoundaryID bid, const THREAD_ID tid)
sets the current boundary ID in assembly
virtual void addInterfaceKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
virtual void neighborSubdomainSetup(THREAD_ID tid=0) const
libMesh::LinearImplicitSystem & linearImplicitSystem()
Return a reference to the stored linear implicit system.
bool _is_petsc_options_inserted
If or not PETSc options have been added to database.
void setCurrentlyComputingResidual(bool currently_computing_residual) final
Set whether or not the problem is in the process of computing the residual.
virtual void addMaterial(const std::string &material_name, const std::string &name, InputParameters ¶meters)
virtual void lineSearch()
execute MOOSE line search
const std::vector< T > & getSortedValues()
This function also returns dependency resolved values but with a simpler single vector interface...
unsigned int getCyclesPerStep() const
Pull out the number of cycles_per_step previously set through the AdaptivityAction.
virtual void setCurrentLowerDElem(const Elem *const lower_d_elem, const THREAD_ID tid)
Set the current lower dimensional element.
const Elem * getLowerDElem(const Elem *, unsigned short int) const
Returns a const pointer to a lower dimensional element that corresponds to a side of a higher dimensi...
NonlocalIntegratedBC is used for solving integral terms in integro-differential equations.
virtual bool checkNonlocalCouplingRequirement() const override
virtual bool uDotDotRequested()
Get boolean flag to check whether solution second time derivative needs to be stored.
bool _has_kokkos_objects
Whether we have any Kokkos objects.
void updateErrorVectors()
Update the ErrorVectors that have been requested through calls to getErrorVector().
const InputParameters & parameters() const
Get the parameters of the object.
unsigned short _current_ic_state
virtual void reinitNeighborPhys(const Elem *neighbor, unsigned int neighbor_side, const std::vector< Point > &physical_points, const THREAD_ID tid) override
virtual TagID addVectorTag(const TagName &tag_name, const Moose::VectorTagType type=Moose::VECTOR_TAG_RESIDUAL)
Create a Tag.
std::vector< MeshDisplacedInterface * > _notify_when_mesh_displaces
Objects to be notified when the mesh displaces.
std::vector< T * > & queryInto(std::vector< T *> &results, Args &&... args)
queryInto executes the query and stores the results in the given vector.
void trustUserCouplingMatrix()
Whether to trust the user coupling matrix even if we want to do things like be paranoid and create a ...
virtual void newAssemblyArray(std::vector< std::shared_ptr< SolverSystem >> &solver_systems)
const bool _uo_aux_state_check
Whether or not checking the state of uo/aux evaluation.
virtual const std::set< MooseVariableFieldBase * > & getActiveElementalMooseVariables(const THREAD_ID tid) const
Get the MOOSE variables to be reinited on each element.
This is a template class that implements the workhorse compute and computeNodal methods.
virtual void timestepSetup(THREAD_ID tid=0) const override
virtual void addMeshDivision(const std::string &type, const std::string &name, InputParameters ¶ms)
Add a MeshDivision.
const ExecFlagType EXEC_NONE
A struct for storing the various types of petsc options and values.
virtual void computeMarkers()
void reportMooseObjectDependency(MooseObject *a, MooseObject *b)
Register a MOOSE object dependency so we can either order operations properly or report when we canno...
void residualSetup() override
MaterialDataType
MaterialData types.
TagID nonTimeVectorTag() const override
A class for "pretty printing" a table of data.
virtual void addCachedJacobian(const THREAD_ID tid)
void cacheChangedLists()
Cache information about what elements were refined and coarsened in the previous step.
virtual void residualSetup()
Positions objects are under the hood Reporters.
void reinitMortarUserObjects(BoundaryID primary_boundary_id, BoundaryID secondary_boundary_id, bool displaced)
Call reinit on mortar user objects with matching primary boundary ID, secondary boundary ID...
virtual TagID systemMatrixTag() const override
Return the Matrix Tag ID for System.
virtual void associateVectorToTag(NumericVector< Number > &vec, TagID tag)
Associate a vector for a given tag.
virtual void reinitNodes(const std::vector< dof_id_type > &nodes, const THREAD_ID tid) override
virtual void updateActiveObjects()
Update the active objects in the warehouses.
Stores the stateful material properties computed by materials.
const RestartableEquationSystems & getRestartableEquationSystems() const
Get the RestartableEquationSystems object.
void markMeshChangedForBackup()
Mark this app as requiring mesh topology data in its next Backup object.
virtual void computeIndicatorsAndMarkers()
void reinitMaterialsBoundary(BoundaryID boundary_id, const THREAD_ID tid, bool swap_stateful=true, const std::deque< MaterialBase *> *reinit_mats=nullptr)
reinit materials on a boundary
virtual void addJacobianOffDiagScalar(unsigned int ivar, const THREAD_ID tid=0)
virtual void setException(const std::string &message)
Set an exception, which is stored at this point by toggling a member variable in this class...
virtual void addJacobian(const THREAD_ID tid) override
void addFunctor(const std::string &name, const Moose::FunctorBase< T > &functor, const THREAD_ID tid)
add a functor to the problem functor container
virtual libMesh::System & system()=0
Get the reference to the libMesh system.
std::filesystem::path restartFolderBase(const std::filesystem::path &folder_base) const
The file suffix for restartable data.
const std::string & getBoundaryName(const BoundaryID boundary_id) const
Return the name of the boundary given the id.
virtual void addAuxScalarKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
virtual void customSetup(const ExecFlagType &exec_type, THREAD_ID tid=0) const
bool isReservedName(const std::string &name)
Test if the given name is reserved.
bool globalADIndexing()
Whether we are using global AD indexing.
bool hasOutput(const std::string &name) const
Returns true if the output object exists.
Interface for interpolation methods that provide matrix and RHS contributions for advected face value...
Base class for MOOSE-based applications.
void disable_refine_in_reinit()
PetscOptions _petsc_option_data_base
bool needBoundaryMaterialOnSide(BoundaryID bnd_id, const THREAD_ID tid)
These methods are used to determine whether stateful material properties need to be stored on interna...
virtual const std::vector< VectorTag > & currentResidualVectorTags() const override
Return the residual vector tags we are currently computing.
processor_id_type rank() const
std::vector< SubdomainName > _material_coverage_blocks
bool computingScalingJacobian() const
Whether we are computing an initial Jacobian for automatic variable scaling.
TODO: delete this later - it is a temporary hack for dealing with inter-system dependencies.
NumericVector< Number > * rhs
void setSteadyStateConvergenceName(const ConvergenceName &convergence_name)
Sets the steady-state detection convergence object name if there is one.
bool _previous_multisystem_fp_aux_solution_required
Indicates we need to save the previous multi-system fixed-point iteration auxiliary variable values...
virtual void addAuxScalarVariable(const std::string &var_name, libMesh::Order order, Real scale_factor=1., const std::set< SubdomainID > *const active_subdomains=NULL)
virtual const SystemBase & systemBaseLinear(unsigned int sys_num) const override
Get a constant base class reference to a linear system.
const Parallel::Communicator & comm() const
void logAdd(const std::string &system, const std::string &name, const std::string &type, const InputParameters ¶ms) const
Output information about the object just added to the problem.
virtual bool hasScalarVariable(const std::string &var_name) const override
Returns a Boolean indicating whether any system contains a variable with the name provided...
void setSolution(const NumericVector< Number > &soln)
Set the solution to a given vector.
MultiApp Implementation for Transient Apps.
Solving a linear problem.
void resizeMaterialData(Moose::MaterialDataType data_type, unsigned int nqp, const THREAD_ID tid)
Resize material data.
void finishMultiAppStep(ExecFlagType type, bool recurse_through_multiapp_levels=false)
Finish the MultiApp time step (endStep, postStep) associated with the ExecFlagType.
virtual void addFunctorMaterial(const std::string &functor_material_name, const std::string &name, InputParameters ¶meters)
Registered base class for linear FV interpolation objects.
std::vector< VariableSecond > _second_zero
void clean_refinement_flags()
std::map< SolverVariableName, unsigned int > _solver_var_to_sys_num
Map connecting variable names with their respective solver systems.
virtual std::unique_ptr< NumericVector< T > > clone() const=0
std::vector< MooseArray< ADReal > > _ad_zero
virtual void prepareAssemblyNeighbor(const THREAD_ID tid)
Begin a fresh neighbor accumulation phase by sizing and zeroing the neighbor blocks.
void customSetup(const ExecFlagType &exec_type)
Calls the setup function for each of the output objects.
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
bool _requires_nonlocal_coupling
nonlocal coupling requirement flag
virtual void onTimestepEnd() override
virtual void computeNearNullSpace(libMesh::NonlinearImplicitSystem &sys, std::vector< NumericVector< libMesh::Number > *> &sp)
virtual void addNodalKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
std::vector< std::shared_ptr< SolverSystem > > _solver_systems
Combined container to base pointer of every solver system.
All Distributions should inherit from this class.
void setCurrentDirection(const int direction)
Set this Transfer to be executed in a given direction.
std::unique_ptr< T_DEST, T_DELETER > dynamic_pointer_cast(std::unique_ptr< T_SRC, T_DELETER > &src)
These are reworked from https://stackoverflow.com/a/11003103.
ConstElemPointerRange * refinedElementRange() const
Return a range that is suitable for threaded execution over elements that were just refined...
MaterialWarehouse _kokkos_materials
bool hasKokkosUserObject(const std::string &name) const
Check if there if a Kokkos user object of given name.
std::vector< VectorVariableCurl > _vector_curl_zero
static void selectVectorTagsFromSystem(const SystemBase &system, const std::vector< VectorTag > &input_vector_tags, std::set< TagID > &selected_tags)
Select the vector tags which belong to a specific system.
Base class for user objects executed one or more sidesets, which may be on the outer boundary of the ...
bool _has_exception
Whether or not an exception has occurred.
unsigned int _num_grid_steps
Number of steps in a grid sequence.
virtual void associateMatrixToTag(libMesh::SparseMatrix< Number > &matrix, TagID tag)
Associate a matrix to a tag.
bool haveXFEM()
Find out whether the current analysis is using XFEM.
virtual void addJacobianBlockTags(libMesh::SparseMatrix< libMesh::Number > &jacobian, unsigned int ivar, unsigned int jvar, const DofMap &dof_map, std::vector< dof_id_type > &dof_indices, const std::set< TagID > &tags, const THREAD_ID tid)
void registerRandomInterface(RandomInterface &random_interface, const std::string &name)
bool _has_time_integrator
Indicates whether or not this executioner has a time integrator (during setup)
void computeUserObjectsInternal(const ExecFlagType &type, TheWarehouse::Query &query)
This class provides an interface for common operations on field variables of both FE and FV types wit...
const Parallel::Communicator & _communicator
virtual void addAuxKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
MaterialPropertyRegistry _material_prop_registry
virtual void jacobianSetup()
void clearActiveMaterialProperties(const THREAD_ID tid)
Clear the active material properties.
virtual unsigned int nLinearIterations(const unsigned int nl_sys_num) const override
bool has_static_condensation() const
std::vector< subdomain_id_type > getSubdomainIDs(const libMesh::MeshBase &mesh, const std::vector< SubdomainName > &subdomain_name)
Get the associated subdomainIDs for the subdomain names that are passed in.
ExecuteMooseObjectWarehouse< TransientMultiApp > _transient_multi_apps
Storage for TransientMultiApps (only needed for calling 'computeDT')
bool hasUserObject(const std::string &name) const
Check if there if a user object of given name.
MaterialWarehouse _interface_materials
Real getStartTime() const
Thread to compute threaded general user objects.
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
bool _ignore_zeros_in_jacobian
Whether to ignore zeros in the Jacobian, thereby leading to a reduced sparsity pattern.
const libMesh::ConstElemRange & getCurrentAlgebraicElementRange()
These are the element and nodes that contribute to the jacobian and residual for this local processor...
void setup(const ExecFlagType &exec_flag, THREAD_ID tid=0) const
void setCurrentExecuteOnFlag(const ExecFlagType &)
virtual void computeResidualInternal(const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual, const std::set< TagID > &tags)
Form a residual vector for a set of tags.
void copyValuesBack()
Copies current chain control data values into old values.
void initElementStatefulProps(const libMesh::ConstElemRange &elem_range, const bool threaded)
Initialize stateful properties for elements in a specific elem_range This is needed when elements/bou...
const libMesh::ConstNodeRange & getCurrentAlgebraicNodeRange()
void setCurrentlyComputingResidualAndJacobian(bool currently_computing_residual_and_jacobian)
Set whether or not the problem is in the process of computing the Jacobian.
ExecuteMooseObjectWarehouse< Transfer > _from_multi_app_transfers
Transfers executed just after MultiApps to transfer data from them.
virtual void addKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
libMesh::TensorValue< ADReal > ADRealTensorValue
Base class for a system (of equations)
const ExecFlagType EXEC_ALWAYS
SparseMatrix< Number > & getSystemMatrix()
Fetching the system matrix from the libmesh system.
This user object allows related evaluations on elements, boundaries, internal sides, interfaces in one single place.
virtual void addAuxVariable(const std::string &var_type, const std::string &var_name, InputParameters ¶ms)
Canonical method for adding an auxiliary variable.
std::pair< typename M::iterator, bool > moose_try_emplace(M &m, const typename M::key_type &k, Args &&... args)
Function to mirror the behavior of the C++17 std::map::try_emplace() method (no hint).
const T_sys & get_system(std::string_view name) const
std::optional< ConvergenceName > _steady_state_convergence_name
Steady-state detection convergence name.
Base class for MeshDivision objects.
std::vector< bool > _previous_multiapp_fp_nl_solution_required
Indicates we need to save the previous multiapp fixed-point iteration solver variable values...
MooseObjectWarehouse< Moose::FunctionBase > _kokkos_functions
bool computingNonlinearResid() const
Returns true if the problem is in the process of computing the nonlinear residual.
virtual void addFVInterfaceKernel(const std::string &fv_ik_name, const std::string &name, InputParameters ¶meters)
MeshDivision & getMeshDivision(const std::string &name, const THREAD_ID tid=0) const
Get a MeshDivision.
bool isRestarting() const
Whether or not this is a "restart" calculation.
Base class for creating new nodally-based mortar user objects.
Reporter objects allow for the declaration of arbitrary data types that are aggregate values for a si...
libMesh::ConstNodeRange * getLocalNodeRange()
const Positions & getPositionsObject(const std::string &name) const
Get the Positions object by its name.
std::map< SolverSystemName, unsigned int > _solver_sys_name_to_num
Map connecting solver system names with their respective systems.
FEProblemBase(const InputParameters ¶meters)
bool restoredInitialBackupMesh() const
Whether this app has restored mesh topology from its initial Backup object.
void addEdge(const T &a, const T &b)
Add an edge between nodes 'a' and 'b'.
std::string convertLatestCheckpoint(std::string orig)
bool isOn()
Is adaptivity on?
void computeResidualTags(const std::set< TagID > &tags)
Form multiple tag-associated residual vectors for all the given tags.
virtual void cacheJacobianNeighbor(const THREAD_ID tid) override
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
virtual void clearActiveElementalMooseVariables(const THREAD_ID tid)
Clear the active elemental MooseVariableFieldBase.
std::vector< std::unordered_map< BoundaryID, bool > > _bnd_mat_side_cache
Cache for calculating materials on side.
bool hasLinearConvergenceObjects() const
Whether we have linear convergence objects.
virtual const Node & nodeRef(const dof_id_type i) const
std::set< dof_id_type > _ghosted_elems
Elements that should have Dofs ghosted to the local processor.
ExecFlagEnum _print_execution_on
When to print the execution of loops.
bool needsPreviousMultiAppFixedPointIterationAuxiliary() const
Check to see whether we need to compute the variable values of the previous multiapp fixed point iter...
std::vector< SubdomainID > getSubdomainIDs(const std::vector< SubdomainName > &subdomain_names) const
Get the associated subdomainIDs for the subdomain names that are passed in.
void clearAllDofIndices()
Clear dof indices from variables in nl and aux systems.
virtual void setResidual(NumericVector< libMesh::Number > &residual, const THREAD_ID tid) override
virtual void solve(const unsigned int nl_sys_num)
virtual void setCurrentLowerDElem(const Elem *const lower_d_elem, const THREAD_ID tid) override
Set the current lower dimensional element.
std::set< TagID > _linear_matrix_tags
Temporary storage for filtered matrix tags for linear systems.
void bumpAllQRuleOrder(libMesh::Order order, SubdomainID block)
MooseApp & getMooseApp() const
Get the MooseApp this class is associated with.
Real computeMultiAppsDT(ExecFlagType type)
Find the smallest timestep over all MultiApps.
const std::string & getSubdomainName(SubdomainID subdomain_id) const
Return the name of a block given an id.
virtual void reinitNeighborFaceRef(const Elem *neighbor_elem, unsigned int neighbor_side, Real tolerance, const std::vector< Point > *const pts, const std::vector< Real > *const weights=nullptr, const THREAD_ID tid=0)
reinitialize FE objects on a given neighbor element on a given side at a given set of reference point...
virtual const MooseVariableFieldBase & getVariable(const THREAD_ID tid, const std::string &var_name, Moose::VarKindType expected_var_type=Moose::VarKindType::VAR_ANY, Moose::VarFieldType expected_var_field_type=Moose::VarFieldType::VAR_FIELD_ANY) const override
Returns the variable reference for requested variable which must be of the expected_var_type (Nonline...
void reinitMaterialsFace(SubdomainID blk_id, const THREAD_ID tid, bool swap_stateful=true, const std::deque< MaterialBase *> *reinit_mats=nullptr)
reinit materials on element faces
std::unique_ptr< libMesh::ConstElemRange > _nl_evaluable_local_elem_range
virtual void disassociateMatrixFromTag(libMesh::SparseMatrix< Number > &matrix, TagID tag)
Disassociate a matrix from a tag.
Scope guard for starting and stopping Floating Point Exception Trapping.
virtual void computeResidualTags(const std::set< TagID > &tags)
Form multiple residual vectors and each is associated with one tag.
void forceOutput()
Indicates that the next call to outputStep should be forced This is private, users should utilize FEP...
virtual void computeJacobianSys(libMesh::NonlinearImplicitSystem &sys, const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian)
Form a Jacobian matrix.
void skipNextForwardSolutionCopyToOld()
Prevents the copy of the solution vector to the old solution vector in each system.
auto max(const L &left, const R &right)
std::shared_ptr< MultiApp > getMultiApp(const std::string &multi_app_name) const
Get a MultiApp object by name.
virtual void reinitElemNeighborAndLowerD(const Elem *elem, unsigned int side, const THREAD_ID tid) override
bool hasSolverVariable(const std::string &var_name) const
void preparePRefinement()
Prepare DofMap and Assembly classes with our p-refinement information.
AuxGroup
Flag for AuxKernel related execution type.
void removeSubstring(std::string &main, const std::string &sub)
virtual Elem * queryElemPtr(const dof_id_type i)
virtual void addMarker(const std::string &marker_name, const std::string &name, InputParameters ¶meters)
Per-mortar-interface configuration.
void updateGhostedElems()
Updates the list of ghosted elements at the start of each time step for the nonlinear iteration patch...
unsigned int subspaceDim(const std::string &prefix) const
Dimension of the subspace spanned by vectors with a given prefix.
elem_info_iterator ownedElemInfoBegin()
Iterators to owned faceInfo objects.
void setCurrentlyComputingJacobian(const bool currently_computing_jacobian)
Set whether or not the problem is in the process of computing the Jacobian.
unsigned int variable_number(std::string_view var) const
A ReporterName that represents a VectorPostprocessor.
bool needsPreviousNewtonIteration() const
Check to see whether we need to compute the variable values of the previous Newton iterate...
virtual void addBoundaryCondition(const std::string &bc_name, const std::string &name, InputParameters ¶meters)
bool _computing_nonlinear_residual
Whether the non-linear residual is being evaluated.
virtual bool computingPreSMOResidual(const unsigned int nl_sys_num) const override
Returns true if the problem is in the process of computing it's initial residual. ...
void update()
Update the system (doing libMesh magic)
This class is a container/interface for the objects involved in automatic generation of mortar spaces...
virtual Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num) override
void createTagMatrices(CreateTaggedMatrixKey)
const bool _skip_nl_system_check
virtual void resetState()
Reset state of this object in preparation for the next evaluation.
void jacobianSetup()
Calls the jacobianSetup function for each of the output objects.
virtual void addInitialCondition(const std::string &ic_name, const std::string &name, InputParameters ¶meters)
virtual void addCachedResidualDirectly(NumericVector< libMesh::Number > &residual, const THREAD_ID tid)
Allows for all the residual contributions that are currently cached to be added directly into the vec...
void resetIterationOccurences()
Reset the number of solution invalid occurrences back to zero.
bool hasActiveBoundaryObjects(THREAD_ID tid=0) const
const SubdomainID INVALID_BLOCK_ID
ScalarInitialConditionWarehouse _scalar_ics
virtual void computeLinearSystemSys(libMesh::LinearImplicitSystem &sys, libMesh::SparseMatrix< libMesh::Number > &system_matrix, NumericVector< libMesh::Number > &rhs, const bool compute_gradients=true)
Assemble both the right hand side and the system matrix of a given linear system. ...
Nonlinear system to be solved.
bool getExodusFileRestart() const
Whether or not we need to use a separate Exodus reader to read the mesh BEFORE we create the mesh...
virtual void swapBackMaterialsFace(const THREAD_ID tid)
virtual void addDistribution(const std::string &type, const std::string &name, InputParameters ¶meters)
The following functions will enable MOOSE to have the capability to import distributions.
virtual void advanceState()
Advance all of the state holding vectors / datastructures so that we can move to the next timestep...
A user object that runs over all the nodes and does an aggregation step to compute a single value...
ExecuteMooseObjectWarehouse< Transfer > _transfers
Normal Transfers.
void checkUserObjectNameCollision(const std::string &name, const std::string &type) const
Check for name collision between different user objects.
void setAuxKernelParamsAndLog(const std::string &ak_name, const std::string &name, InputParameters ¶meters, const std::string &base_name)
Set the subproblem and system parameters for auxiliary kernels and log their addition.
virtual void customSetup(const ExecFlagType &exec_type)
virtual void checkBoundaryMatProps()
Checks boundary material properties integrity.
std::map< std::string, std::vector< dof_id_type > > _var_dof_map
unsigned int n_dofs(const unsigned int s, const unsigned int var=libMesh::invalid_uint) const
Based class for output objects.
const VectorPostprocessorValue & getVectorPostprocessorValueByName(const std::string &object_name, const std::string &vector_name, std::size_t t_index=0) const
Get a read-only reference to the vector value associated with the VectorPostprocessor.
virtual void addPredictor(const std::string &type, const std::string &name, InputParameters ¶meters)
virtual Function & getFunction(const std::string &name, const THREAD_ID tid=0)
virtual void computeJacobianBlocks(std::vector< JacobianBlock *> &blocks, const unsigned int nl_sys_num)
Computes several Jacobian blocks simultaneously, summing their contributions into smaller preconditio...
virtual void copySolutionsBackwards()
const ConstBndNodeRange & getCurrentAlgebraicBndNodeRange()
bool _calculate_jacobian_in_uo
TODO: delete this later - it is a temporary hack for dealing with inter-system dependencies.
virtual void reinitElemFaceRef(const Elem *elem, unsigned int side, Real tolerance, const std::vector< Point > *const pts, const std::vector< Real > *const weights=nullptr, const THREAD_ID tid=0) override
reinitialize FE objects on a given element on a given side at a given set of reference points and the...
virtual void setActiveScalarVariableCoupleableVectorTags(std::set< TagID > &vtags, const THREAD_ID tid)
virtual void prepareFaceShapes(unsigned int var, const THREAD_ID tid) override
virtual void addPostprocessor(const std::string &pp_name, const std::string &name, InputParameters ¶meters)
virtual Real finalNonlinearResidual(const unsigned int nl_sys_num) const override
void addItem(const T &value)
Add an independent item to the set.
std::vector< std::shared_ptr< NonlinearSystemBase > > _nl
The nonlinear systems.
bool automaticScaling() const
Automatic scaling getter.
virtual void computeUserObjects(const ExecFlagType &type, const Moose::AuxGroup &group)
Call compute methods on UserObjects.
virtual void setActiveElementalMooseVariables(const std::set< MooseVariableFEBase *> &moose_vars, const THREAD_ID tid) override
Set the MOOSE variables to be reinited on each element.
virtual void reinit_systems()
std::map< std::pair< BoundaryID, BoundaryID >, NearestNodeLocator * > _nearest_node_locators
std::vector< VariablePhiGradient > _grad_phi_zero
void mooseWarning(Args &&... args) const
void initialSetup(THREAD_ID tid)
Initial setup.
bool hasJacobian() const
Returns _has_jacobian.
void notifyWhenMeshDisplaces(MeshDisplacedInterface *mdi)
Register an object that derives from MeshDisplacedInterface to be notified when the displaced mesh ge...
void createTagSolutions()
Create extra tagged solution vectors.
std::vector< SolverSystemName > _solver_sys_names
The union of nonlinear and linear system names.
virtual void execute(const ExecFlagType &exec_type)
Convenience function for performing execution of MOOSE systems.
bool _verbose_restore
Whether or not to be verbose on solution restoration post a failed time step.
bool _previous_nl_solution_required
Indicates we need to save the previous NL iteration variable values.
processor_id_type n_processors() const
bool _trust_user_coupling_matrix
Whether to trust the user coupling matrix no matter what.
void setRestartRecoverFileBase(const std::string &file_base)
mutator for recover_base (set by RecoverBaseAction)
unsigned int number() const
const ConvergenceName & getSteadyStateConvergenceName() const
Gets the steady-state detection convergence object name.
void computeResidualAndJacobianTags(const std::set< TagID > &vector_tags, const std::set< TagID > &matrix_tags)
Form possibly multiple tag-associated vectors and matrices.
void handleException(const std::string &calling_method)
Handle exceptions.
virtual std::vector< VariableName > getVariableNames()
Returns a list of all the variables in the problem (both from the NL and Aux systems.
ReporterData _reporter_data
const std::string & name() const
Get the name of the class.
void uniformRefine()
uniformly refine the problem mesh(es).
virtual void computeResidualSys(libMesh::NonlinearImplicitSystem &sys, const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual)
This function is called by Libmesh to form a residual.
const ReporterData & getReporterData() const
Provides const access the ReporterData object.
virtual const libMesh::CouplingMatrix & nonlocalCouplingMatrix(const unsigned i) const override
std::unique_ptr< libMesh::ConstElemRange > _current_algebraic_elem_range
FunctorMaterials compute functor material properties.
std::vector< std::shared_ptr< Transfer > > getTransfers(ExecFlagType type, Transfer::DIRECTION direction) const
Get Transfers by ExecFlagType and direction.
virtual void addConvergence(const std::string &type, const std::string &name, InputParameters ¶meters)
Adds a Convergence object.
MultiPointMap & getPoints()
Returns a writeable reference to the _points container.
bool shouldPrintExecution(const THREAD_ID tid) const
Check whether the problem should output execution orders at this time.
const std::vector< std::shared_ptr< T > > & getActiveObjects(THREAD_ID tid=0) const
Retrieve complete vector to the active all/block/boundary restricted objects for a given thread...
const std::set< subdomain_id_type > & active_subdomains() const
bool havePRefinement() const
Query whether p-refinement has been requested at any point during the simulation. ...
virtual Real l2_norm() const=0
bool getRecomputeMarkersFlag() const
Pull out the _recompute_markers_during_cycles flag previously set through the AdaptivityAction.
const bool & _solve
Whether or not to actually solve the nonlinear system.
virtual const SystemBase & systemBaseSolver(const unsigned int sys_num) const override
Return the solver system object as a base class reference given the system number.
DenseVector< Real > getAllRealReporterValues() const
Get all real reporter values including postprocessor and vector postprocessor values into a dense vec...
ExecuteMooseObjectWarehouse< Transfer > _to_multi_app_transfers
Transfers executed just before MultiApps to transfer data to them.
std::set< SubdomainID > getActiveBlocks(THREAD_ID tid=0) const
Return a set of active SubdomainsIDs.
NonlinearSystemBase * _current_nl_sys
The current nonlinear system that we are solving.
MooseObjectWarehouse< Convergence > _convergences
convergence warehouse
Interface for notifications that the mesh has changed.
void sort(THREAD_ID tid=0, bool sort_all_objects=false)
By default, this method only sorts block and boundary-wise object storages that are used by the MOOSE...
virtual std::unique_ptr< Base > create()=0
void setCurrentNonlinearSystem(const unsigned int nl_sys_num)
std::shared_ptr< T > getActiveObject(const std::string &name, THREAD_ID tid=0) const
const std::vector< std::shared_ptr< T > > & getObjects(THREAD_ID tid=0) const
Retrieve complete vector to the all/block/boundary restricted objects for a given thread...
virtual const NumericVector< Number > *const & currentSolution() const override final
The solution vector that is currently being operated on.
void initialSetup()
Initial setup.
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
Base class for convergence criteria.
MeshBase & getMesh()
Accessor for the underlying libMesh Mesh object.
bool hasFVInterpolationMethod(const InterpolationMethodName &name) const
Check if an FV interpolation method with a given name exists.
void min(const T &r, T &o, Request &req) const
virtual void reinitElem(const Elem *elem, const THREAD_ID tid) override
const T & getReporterValue(const ReporterName &reporter_name, const MooseObject &consumer, const ReporterMode &mode, const std::size_t time_index=0) const
Method for returning read only references to Reporter values.
virtual Convergence & getConvergence(const std::string &name, const THREAD_ID tid=0) const
Gets a Convergence object.
TheWarehouse & theWarehouse() const
void createTagVectors()
Create extra tagged vectors and matrices.
virtual void createQRules(libMesh::QuadratureType type, libMesh::Order order, libMesh::Order volume_order=libMesh::INVALID_ORDER, libMesh::Order face_order=libMesh::INVALID_ORDER, SubdomainID block=Moose::ANY_BLOCK_ID, bool allow_negative_qweights=true)
void reinitMaterialsNeighbor(SubdomainID blk_id, const THREAD_ID tid, bool swap_stateful=true, const std::deque< MaterialBase *> *reinit_mats=nullptr)
reinit materials on the neighboring element face
void setMultiAppFixedPointConvergenceName(const ConvergenceName &convergence_name)
Sets the MultiApp fixed point convergence object name if there is one.
void computeKokkosUserObjectsInternal(const ExecFlagType &type, TheWarehouse::Query &query)
Moose::CouplingType _coupling
Type of variable coupling.
Every object that can be built by the factory should be derived from this class.
virtual bool shouldUpdateSolution()
Check to see whether the problem should update the solution.
const FVInterpolationMethod & getFVInterpolationMethod(const InterpolationMethodName &name, const THREAD_ID tid=0) const
Retrieve an FV interpolation method.
virtual void setActiveFEVariableCoupleableVectorTags(std::set< TagID > &vtags, const THREAD_ID tid)
void extraSendList(std::vector< dof_id_type > &send_list, void *context)
///< Type of coordinate system
void addObjects(std::shared_ptr< MaterialBase > block, std::shared_ptr< MaterialBase > neighbor, std::shared_ptr< MaterialBase > face, THREAD_ID tid=0)
A special method unique to this class for adding Block, Neighbor, and Face material objects...
const ConvergenceName & getMultiAppFixedPointConvergenceName() const
Gets the MultiApp fixed point convergence object name.
std::vector< std::string > getAllRealReporterFullNames() const
Get full names of all real reporter values Note: For a postprocessor, the full name is the postproces...
virtual void clearActiveScalarVariableCoupleableVectorTags(const THREAD_ID tid)
Real getTimeFromStateArg(const Moose::StateArg &state) const
Returns the time associated with the requested state.
virtual std::string solverTypeString(unsigned int solver_sys_num=0)
Return solver type as a human readable string.
const ExecFlagType EXEC_TIMESTEP_BEGIN
std::shared_ptr< T > getObject(const std::string &name, THREAD_ID tid=0) const
void executeSamplers(const ExecFlagType &exec_type)
Performs setup and execute calls for Sampler objects.
unsigned int which_neighbor_am_i(const Elem *e) const
virtual void computeJacobianInternal(const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian, const std::set< TagID > &tags)
Form a Jacobian matrix for multiple tags.
bool _safe_access_tagged_vectors
Is it safe to retrieve data from tagged vectors.
virtual void computeJacobian(const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian, const unsigned int nl_sys_num)
Form a Jacobian matrix with the default tag (system).
void reinitMaterialsNeighborOnBoundary(const BoundaryID boundary_id, const SubdomainID blk_id, const THREAD_ID tid, const bool swap_stateful=true, const std::deque< MaterialBase *> *const reinit_mats=nullptr)
reinit materials on neighbor element (usually faces) on a boundary (internal or external) This specif...
void getUOExecutionGroups(TheWarehouse::Query &query, std::set< int > &execution_groups) const
void addOutput(const std::string &, const std::string &, InputParameters &)
Adds an Output object.
SolutionIterationType iteration_type
The solution iteration type, e.g. time or nonlinear.
boundary_id_type BoundaryID
void boundaryIntegrityCheckError(const MooseObject &object, const std::set< MooseVariableFieldBase *> &variables, const BoundaryName &boundary_name)
Compose boundary restricted error message for the provided object, variables, and boundary_name if th...
const bool _allow_ics_during_restart
bool constJacobian() const
Returns _const_jacobian (whether a MOOSE object has specified that the Jacobian is the same as the pr...
virtual void clearActiveFEVariableCoupleableMatrixTags(const THREAD_ID tid) override
void computeJacobianTags(const std::set< TagID > &tags)
Computes multiple (tag associated) Jacobian matricese.
SolutionInvalidity & solutionInvalidity()
Get the SolutionInvalidity for this app.
std::vector< MeshChangedInterface * > _notify_when_mesh_changes
Objects to be notified when the mesh changes.
virtual void timestepSetup(THREAD_ID tid=0) const
void checkNonlocalCoupling()
VarKindType
Framework-wide stuff.
void addDefaultSteadyStateConvergence(const InputParameters ¶ms)
Adds the default steady-state detection Convergence.
NonlinearSystemBase & currentNonlinearSystem()
SimpleRange< IndexType > as_range(const std::pair< IndexType, IndexType > &p)
Jacobian-Free Newton Krylov.
void groupUserObjects(TheWarehouse &w, AuxiliarySystem &aux, const ExecFlagEnum &execute_flags, const std::vector< T *> &objs, const std::set< std::string > &ic_deps)
void checkDisplacementOrders()
Verify that SECOND order mesh uses SECOND order displacements.
virtual void addFunction(const std::string &type, const std::string &name, InputParameters ¶meters)
Real PostprocessorValue
various MOOSE typedefs
void uniformly_coarsen(unsigned int n=1)
virtual void addJacobianNeighbor(const THREAD_ID tid) override
virtual TagID addMatrixTag(TagName tag_name)
Create a Tag.
virtual libMesh::EquationSystems & es() override
std::vector< std::unordered_map< SubdomainID, bool > > _block_mat_side_cache
Cache for calculating materials on side.
std::shared_ptr< AuxiliarySystem > _aux
The auxiliary system.
void setRestart(bool value)
Sets the restart/recover flags.
AttribBoundaries tracks all boundary IDs associated with an object.
void setValue(unsigned int i, Number value)
Set the nodal value for this variable (to keep everything up to date.
virtual void reinitElemFaceRef(const Elem *elem, unsigned int side, Real tolerance, const std::vector< Point > *const pts, const std::vector< Real > *const weights=nullptr, const THREAD_ID tid=0)
reinitialize FE objects on a given element on a given side at a given set of reference points and the...
virtual void addVectorPostprocessor(const std::string &pp_name, const std::string &name, InputParameters ¶meters)
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
virtual bool converged(const unsigned int sys_num)
Eventually we want to convert this virtual over to taking a solver system number argument.
virtual unsigned int currentNlSysNum() const override
virtual void computeIndicators()
virtual MooseVariableScalar & getScalarVariable(const THREAD_ID tid, const std::string &var_name) override
Returns the scalar variable reference from whichever system contains it.
const bool _boundary_restricted_node_integrity_check
whether to perform checking of boundary restricted nodal object variable dependencies, e.g.
virtual void setActiveScalarVariableCoupleableVectorTags(std::set< TagID > &vtags, const THREAD_ID tid) override
virtual bool updateMeshXFEM()
Update the mesh due to changing XFEM cuts.
virtual const SystemBase & systemBaseNonlinear(const unsigned int sys_num) const override
Return the nonlinear system object as a base class reference given the system number.
std::vector< MortarUserObject * > getMortarUserObjects(BoundaryID primary_boundary_id, BoundaryID secondary_boundary_id, bool displaced, const std::vector< MortarUserObject *> &mortar_uo_superset)
Helper for getting mortar objects corresponding to primary boundary ID, secondary boundary ID...
virtual void restoreSolutions()
virtual bool hasConvergence(const std::string &name, const THREAD_ID tid=0) const
Returns true if the problem has a Convergence object of the given name.
void markFamilyPRefinement(const InputParameters ¶ms)
Mark a variable family for either disabling or enabling p-refinement with valid parameters of a varia...
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.
void addAnyRedistributers()
void mooseDeprecated(Args &&... args) const
const std::string & type() const
Get the type of this class.
bool hasPostprocessorValueByName(const PostprocessorName &name) const
Whether or not a Postprocessor value exists by a given name.
virtual void checkBlockMatProps()
Checks block material properties integrity.
void restoreFromInitialBackup(const bool for_restart)
Restores from a "initial" backup, that is, one set in _initial_backup.
void setAxisymmetricCoordAxis(const MooseEnum &rz_coord_axis)
void initialSetup() override
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
void reinit()
Completely redo all geometric search objects.
std::vector< VectorTag > getVectorTags(const std::set< TagID > &tag_ids) const
bool allowInvalidSolution() const
Whether to accept / allow an invalid solution.
bool needInternalNeighborSideMaterial(SubdomainID subdomain_id, const THREAD_ID tid)
virtual const SystemBase & systemBaseAuxiliary() const override
Return the auxiliary system object as a base class reference.
void setLinearConvergenceNames(const std::vector< ConvergenceName > &convergence_names)
Sets the linear convergence object name(s) if there is one.
void checkUserObjectJacobianRequirement(THREAD_ID tid)
MooseVariableFieldBase & getActualFieldVariable(const THREAD_ID tid, const std::string &var_name) override
Returns the variable reference for requested MooseVariableField which may be in any system...
void finalize(const std::string &object_name)
Helper function for performing post calculation actions via the ReporterContext objects.
void addObject(std::shared_ptr< InitialConditionBase > object, THREAD_ID tid, bool recurse=true)
Add object to the warehouse.
virtual bool hasDistribution(const std::string &name) const
virtual void disassociateVectorFromTag(NumericVector< Number > &vec, TagID tag)
Disassociate a given vector from a given tag.
virtual void computeNullSpace(libMesh::NonlinearImplicitSystem &sys, std::vector< NumericVector< libMesh::Number > *> &sp)
virtual void addTimeIntegrator(const std::string &type, const std::string &name, InputParameters ¶meters)
LinearSystem * _current_linear_sys
The current linear system that we are solving.
virtual void cacheResidual(const THREAD_ID tid) override
virtual void computeResidualType(const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual, TagID tag)
Form a residual vector for a given tag and "residual" tag.
const bool _force_restart
void checkCoordinateSystems()
Performs a sanity check for every element in the mesh.
QueryCache clone() const
clone creates and returns an independent copy of the query in its current state.
void forceOutput()
Indicates that the next call to outputStep should be forced.
const VectorPostprocessor & getVectorPostprocessorObjectByName(const std::string &object_name, const THREAD_ID tid=0) const
Return the VPP object given the name.
std::vector< VariablePhiSecond > _second_phi_zero
StoredRange< std::vector< GeneralUserObject * >::iterator, GeneralUserObject * > GeneralUserObjectRange
bool _started_initial_setup
At or beyond initialSteup stage.
std::map< std::string, std::unique_ptr< RandomData > > _random_data_objects
A map of objects that consume random numbers.
virtual bool vectorTagExists(const TagID tag_id) const
Check to see if a particular Tag exists.
std::unique_ptr< ConstBndNodeRange > _current_algebraic_bnd_node_range
virtual void addResidual(const THREAD_ID tid) override
virtual void addResidualNeighbor(const THREAD_ID tid) override
virtual void reinitNeighborFaceRef(const Elem *neighbor_elem, unsigned int neighbor_side, Real tolerance, const std::vector< Point > *const pts, const std::vector< Real > *const weights=nullptr, const THREAD_ID tid=0) override
reinitialize FE objects on a given neighbor element on a given side at a given set of reference point...
void setCoordSystem(const std::vector< SubdomainName > &blocks, const MultiMooseEnum &coord_sys)
Set the coordinate system for the provided blocks to coord_sys.
Base class for all Postprocessors.
libMesh::ExodusII_IO * getExReaderForRestart() const
Get the Exodus reader to restart variables from an Exodus mesh file.
void needSolutionState(unsigned int oldest_needed, Moose::SolutionIterationType iteration_type)
Declare that we need up to old (1) or older (2) solution states for a given type of iteration...
void clearPoints()
Remove all of the current points and elements.
std::string typeAndName() const
Get the class's combined type and name; useful in error handling.
MooseApp & _app
The MOOSE application this is associated with.
virtual void clearActiveFEVariableCoupleableVectorTags(const THREAD_ID tid) override
void maxloc(T &r, unsigned int &max_id) const
bool isValueSet(const std::string &value) const
Methods for seeing if a value is set in the MultiMooseEnum.
void setCouplingMatrix(std::unique_ptr< libMesh::CouplingMatrix > cm, const unsigned int nl_sys_num)
Set custom coupling matrix.
unsigned int number() const
Gets the number of this system.
virtual void addDefaultNonlinearConvergence(const InputParameters ¶ms)
Adds the default nonlinear Convergence associated with the problem.
virtual void solve() override
Solve the system (using libMesh magic)
void setNonlinearConvergenceNames(const std::vector< ConvergenceName > &convergence_names)
Sets the nonlinear convergence object name(s) if there is one.
unsigned int uniformRefineLevel() const
Returns the level of uniform refinement requested (zero if AMR is disabled).
const ExecFlagType EXEC_LINEAR
TODO: delete this later - it is a temporary hack for dealing with inter-system dependencies.
virtual bool solverSystemConverged(const unsigned int solver_sys_num) override
std::string stringify(const T &t)
conversion to string
std::string _exception_message
The error message to go with an exception.
const std::set< SubdomainID > & boundaryLowerDBlocks() const
std::vector< SubdomainName > getSubdomainNames(const std::vector< SubdomainID > &subdomain_ids) const
Get the associated subdomainNames for the subdomain ids that are passed in.
virtual void checkProblemIntegrity()
Method called to perform a series of sanity checks before a simulation is run.
void setReporterValue(const ReporterName &reporter_name, const T &value, const std::size_t time_index=0)
Method for setting Reporter values that already exist.
Class for storing and utilizing output objects.
void project_solution(FunctionBase< Number > *f, FunctionBase< Gradient > *g=nullptr, std::optional< ConstElemRange > active_local_range=std::nullopt, std::optional< std::vector< unsigned int >> variable_numbers=std::nullopt) const
AuxiliarySystem & getAuxiliarySystem()
virtual void initialSetup(THREAD_ID tid=0) const
Convenience methods for calling object setup methods.
virtual void updateGeomSearch(GeometricSearchData::GeometricSearchType type=GeometricSearchData::ALL) override
Update this object's geometric search data as well as the displaced problem's if it exists...
void petscSetOptions(const PetscOptions &po, const SolverParams &solver_params, FEProblemBase *const problem=nullptr)
A function for setting the PETSc options in PETSc from the options supplied to MOOSE.
MooseObjectWarehouse< MeshDivision > _mesh_divisions
Warehouse to store mesh divisions NOTE: this could probably be moved to the MooseMesh instead of the ...
virtual void addConstraint(const std::string &c_name, const std::string &name, InputParameters ¶meters)
void buildRefinementAndCoarseningMaps(Assembly *assembly)
Create the refinement and coarsening maps necessary for projection of stateful material properties wh...
MooseObjectWarehouse< Indicator > _indicators
virtual void addMultiApp(const std::string &multi_app_name, const std::string &name, InputParameters ¶meters)
Add a MultiApp to the problem.
virtual void prepareAssembly(const THREAD_ID tid) override
bool haveADObjects() const
Method for reading wehther we have any ad objects.
unsigned int systemNumForVariable(const VariableName &variable_name) const
bool _checking_uo_aux_state
Flag used to indicate whether we are doing the uo/aux state check in execute.
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > & couplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num)
const PostprocessorValue & getPostprocessorValueByName(const PostprocessorName &name, std::size_t t_index=0) const
Get a read-only reference to the value associated with a Postprocessor that exists.
MeshBase::element_iterator activeLocalElementsBegin()
Calls active_local_nodes_begin/end() on the underlying libMesh mesh object.
InitialConditions are objects that set the initial value of variables.
Base class for user objects executed on all element sides internal to one or more blocks...
virtual void clearActiveScalarVariableCoupleableMatrixTags(const THREAD_ID tid)
virtual std::map< TagName, TagID > & getMatrixTags()
Return all matrix tags in the system, where a tag is represented by a map from name to ID...
virtual void initNullSpaceVectors(const InputParameters ¶meters, std::vector< std::shared_ptr< NonlinearSystemBase >> &nl)
virtual bool hasVariable(const std::string &var_name) const
Query a system for a variable.
Executioner * getExecutioner() const
Retrieve the Executioner for this App.
virtual void setCurrentSubdomainID(const Elem *elem, const THREAD_ID tid) override
MaterialData & getMaterialData(Moose::MaterialDataType type, const THREAD_ID tid=0, const MooseObject *object=nullptr) const
void broadcast(T &data, const unsigned int root_id=0, const bool identical_sizes=false) const
virtual void clearDiracInfo() override
Gets called before Dirac Kernels are asked to add the points they are supposed to be evaluated in...
virtual void addIndicator(const std::string &indicator_name, const std::string &name, InputParameters ¶meters)
virtual void reinitNodesNeighbor(const std::vector< dof_id_type > &nodes, const THREAD_ID tid) override
bool duplicateVariableCheck(const std::string &var_name, const libMesh::FEType &type, bool is_aux, const std::set< SubdomainID > *const active_subdomains)
Helper to check for duplicate variable names across systems or within a single system.
virtual void solve() override=0
Solve the system (using libMesh magic)
GeometricSearchType
Used to select groups of geometric search objects to update.
void backupMultiApps(ExecFlagType type)
Backup the MultiApps associated with the ExecFlagType.
A ReporterName that represents a Postprocessor.
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters ¶ms)
Canonical method for adding a non-linear variable.
bool doingPRefinement() const
ExecuteMooseObjectWarehouse< MultiApp > _multi_apps
MultiApp Warehouse.
virtual void jacobianSetup(THREAD_ID tid=0) const
void initialSetup(THREAD_ID tid)
Initial setup.
void uniformRefineWithProjection()
Performs uniform refinement on the meshes in the current object.
void updateBlockMatPropDependency(SubdomainID id, std::unordered_set< unsigned int > &needed_mat_props, THREAD_ID tid=0, const bool producer_only=false) const
TagID residualVectorTag() const override
std::vector< std::vector< std::unique_ptr< Assembly > > > _assembly
The Assembly objects.
virtual void addDisplacedProblem(std::shared_ptr< DisplacedProblem > displaced_problem)
const std::map< BoundaryID, std::vector< std::shared_ptr< T > > > & getActiveBoundaryObjects(THREAD_ID tid=0) const
void computeResidual(libMesh::NonlinearImplicitSystem &sys, const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual)
This function is called by Libmesh to form a residual.
virtual void cacheJacobianNeighbor(const THREAD_ID tid)
void updateBoundaryMatPropDependency(std::unordered_set< unsigned int > &needed_mat_props, THREAD_ID tid=0, const bool producer_only=false) const
void setResidualObjectParamsAndLog(const std::string &ro_name, const std::string &name, InputParameters ¶meters, const unsigned int nl_sys_num, const std::string &base_name, bool &reinit_displaced)
Set the subproblem and system parameters for residual objects and log their addition.
void setVectorPostprocessorValueByName(const std::string &object_name, const std::string &vector_name, const VectorPostprocessorValue &value, std::size_t t_index=0)
Set the value of a VectorPostprocessor vector.
virtual MooseVariable & getStandardVariable(const THREAD_ID tid, const std::string &var_name) override
Returns the variable reference for requested MooseVariable which may be in any system.
void setCoordSystem(const std::vector< SubdomainName > &blocks, const MultiMooseEnum &coord_sys)
virtual void swapBackMaterialsNeighbor(const THREAD_ID tid)
virtual void addLinearFVKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
bool hasStatefulProperties() const
void residualSetup()
Calls the residualSetup function for each of the output objects.
virtual void residualSetup(THREAD_ID tid=0) const override
virtual void subdomainSetup(THREAD_ID tid=0) const override
virtual NonlinearSystem & getNonlinearSystem(const unsigned int sys_num)
void solveSetup()
Calls the timestepSetup function for each of the output objects.
virtual bool reinitDirac(const Elem *elem, const THREAD_ID tid) override
Returns true if the Problem has Dirac kernels it needs to compute on elem.
MooseAppCoordTransform & coordTransform()
virtual void cacheResidual(const THREAD_ID tid)
virtual void timestepSetup()
libMesh::Order order() const
Get the order of this variable Note: Order enum can be implicitly converted to unsigned int...
const ExecFlagType EXEC_PRE_DISPLACE
const std::vector< NonlinearSystemName > _nl_sys_names
The nonlinear system names.
const ExecFlagType EXEC_POSTCHECK
PetscErrorCode PetscInt const PetscInt fields[]
const ExecFlagType EXEC_NONLINEAR
const FVAdvectedInterpolationMethod & getFVAdvectedInterpolationMethod(const InterpolationMethodName &name, const THREAD_ID tid=0) const
Retrieve an advected interpolation method.
std::vector< Real > VectorPostprocessorValue
virtual void updateMortarMesh()
void copyValuesBack()
At the end of a timestep this method is called to copy the values back in time in preparation for the...
const std::vector< const Elem * > & coarsenedElementChildren(const Elem *elem) const
Get the newly removed children element ids for an element that was just coarsened.
void restore(const std::filesystem::path &folder_base, const bool for_restart)
Restore an application from file.
TheWarehouse::Query getUOQuery(const std::string &system, const ExecFlagType &type, const Moose::AuxGroup &group) const
void addDefaultMultiAppFixedPointConvergence(const InputParameters ¶ms)
Adds the default fixed point Convergence associated with the problem.
std::set< TagID > _fe_matrix_tags
Moose::Kokkos::MaterialPropertyStorage & _kokkos_material_props
virtual NumericVector< Number > & RHS()=0
virtual void addAuxArrayVariable(const std::string &var_name, const libMesh::FEType &type, unsigned int components, const std::set< SubdomainID > *const active_subdomains=NULL)
const ExecuteMooseObjectWarehouse< Transfer > & getMultiAppTransferWarehouse(Transfer::DIRECTION direction) const
Return the complete warehouse for MultiAppTransfer object for the given direction.
virtual const SystemBase & getSystemBase(const unsigned int sys_num) const
Get constant reference to a system in this problem.
const Elem * neighbor_ptr(unsigned int i) const
virtual void reinitLowerDElem(const Elem *lower_d_elem, const THREAD_ID tid, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr) override
Provides a way for users to bail out of the current solve.
virtual void addReporter(const std::string &type, const std::string &name, InputParameters ¶meters)
Add a Reporter object to the simulation.
virtual void swapBackMaterials(const THREAD_ID tid)
std::vector< VariablePhiValue > _phi_zero
InitialConditionWarehouse _ics
std::vector< unsigned char > _has_active_material_properties
Whether there are active material properties on each thread.
MaterialWarehouse _discrete_materials
bool _reinit_displaced_face
Whether to call DisplacedProblem::reinitElemFace when this->reinitElemFace is called.
void setSinglePetscOption(const std::string &name, const std::string &value="", FEProblemBase *const problem=nullptr)
A wrapper function for dealing with different versions of PetscOptionsSetValue.
virtual void initialSetup()
NumericVector< Number > & getRightHandSideVector()
Fetching the right hand side vector from the libmesh system.
std::unique_ptr< MortarInterfaceWarehouse > _mortar_data
virtual void addDGKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
virtual void setCurrentBoundaryID(BoundaryID bid, const THREAD_ID tid) override
sets the current boundary ID in assembly
SolverSystem * _current_solver_sys
The current solver system.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual std::shared_ptr< const DisplacedProblem > getDisplacedProblem() const
virtual bool contract()=0
std::optional< std::vector< ConvergenceName > > _nonlinear_convergence_names
Nonlinear system(s) convergence name(s)
Generic class for solving transient nonlinear problems.
virtual void preProblemInit()
Perform initializations during executing actions right before init_problem task.
void updateActiveSemiLocalNodeRange(std::set< dof_id_type > &ghosted_elems)
Clears the "semi-local" node list and rebuilds it.
subdomain_id_type subdomain_id() const
virtual void stopSolve(const ExecFlagType &exec_flag, const std::set< TagID > &vector_tags_to_close)=0
Quit the current solve as soon as possible.
const libMesh::ConstElemRange * getActiveLocalElementRange()
Return pointers to range objects for various types of ranges (local nodes, boundary elems...
const Postprocessor & getPostprocessorObjectByName(const PostprocessorName &object_name, const THREAD_ID tid=0) const
Return the Postprocessor object registered under the supplied object name.
const InputParameters * getCommonParameters() const
Get a reference to the common output parameters.
TagID timeVectorTag() const override
Ideally, we should not need this API.
std::map< SubdomainID, std::set< MaterialPropertyName > > _zero_block_material_props
Set of properties returned as zero properties.
void createMortarInterface(const std::pair< BoundaryID, BoundaryID > &primary_secondary_boundary_pair, const std::pair< SubdomainID, SubdomainID > &primary_secondary_subdomain_pair, bool on_displaced, bool periodic, const bool debug, const bool correct_edge_dropping, const Real minimum_projection_angle, const Mortar3DSubpatchPlane mortar_3d_subpatch_plane, const MooseEnum &triangulation, const bool triangulate_triangles, const Mortar3DQuadraturePointMapping mortar_3d_qp_mapping=Mortar3DQuadraturePointMapping::NORMAL_PROJECTION)
Class for containing MooseEnum item information.
unsigned int solverSysNum(const SolverSystemName &solver_sys_name) const override
std::shared_ptr< MaterialBase > getMaterial(std::string name, Moose::MaterialDataType type, const THREAD_ID tid=0, bool no_warn=false)
Return a pointer to a MaterialBase object.
virtual void swap(NumericVector< T > &v)
bool hasActiveObject(const std::string &name, THREAD_ID tid=0) const
Convenience functions for checking/getting specific objects.
std::vector< VariableGradient > _grad_zero
bool hasActiveObjects(THREAD_ID tid=0) const
void clearCurrentJacobianMatrixTags()
Clear the current Jacobian matrix tag data structure ...
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sqrt(_arg)) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tanh
virtual void subdomainSetup(SubdomainID subdomain, const THREAD_ID tid)
virtual void restoreOldSolutions()
Restore old solutions from the backup vectors and deallocate them.
unsigned int getInitialSteps() const
Pull out the number of initial steps previously set by calling init()
void max(const T &r, T &o, Request &req) const
void reinitMaterials(SubdomainID blk_id, const THREAD_ID tid, bool swap_stateful=true)
virtual unsigned short dim() const=0
const AutomaticMortarGeneration & getMortarInterface(const std::pair< BoundaryID, BoundaryID > &primary_secondary_boundary_pair, const std::pair< SubdomainID, SubdomainID > &primary_secondary_subdomain_pair, bool on_displaced) const
Return the undisplaced or displaced mortar generation object associated with the provided boundaries ...
bool acceptInvalidSolution() const
Whether or not to accept the solution based on its invalidity.
void setLoadAllVectors(const bool load_all_vectors)
Sets whether or not all vectors are to be loaded.
Class for threaded computation of UserObjects.
const bool _restore_original_nonzero_pattern
Whether we should restore the original nonzero pattern for every Jacobian evaluation.
void setRandomDataPointer(RandomData *random_data)
Base class for all MultiAppTransfer objects.
virtual libMesh::SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
void execMultiAppTransfers(ExecFlagType type, Transfer::DIRECTION direction)
Execute MultiAppTransfers associated with execution flag and direction.
T & set(const std::string &)
Wrapper class that owns a libMesh EquationSystem and adds advanced restart capability to it...
void restoreMultiApps(ExecFlagType type, bool force=false)
Restore the MultiApps associated with the ExecFlagType.
virtual void addLinearFVBC(const std::string &fv_bc_name, const std::string &name, InputParameters ¶meters)
void subdomainSetup()
Calls the subdomainSetup function for each of the output objects.
const std::string & getName(const unsigned int id) const
const std::vector< dof_id_type > & allDofIndices() const
Get all global dofindices for the variable.
const std::vector< std::string > & get_elem_var_names()
void addMaterialPropertyStorage(MaterialPropertyStorage &mat_props)
Pushes the given pair ( mat_data , mat_props ) onto our list of _materials data to redistribute each ...
SparseMatrix< Number > * matrix
void customSetup(const ExecFlagType &exec_type) override
void setRestartFile(const std::string &file_name)
Communicate to the Resurector the name of the restart filer.
void setCurrentLinearSystem(unsigned int sys_num)
Set the current linear system pointer.
void initNonlocalCoupling()
Create pair of variables requiring nonlocal jacobian contributions.
void executeControls(const ExecFlagType &exec_type)
Performs setup and execute calls for Control objects.
virtual std::vector< std::shared_ptr< UserObject > > addUserObject(const std::string &user_object_name, const std::string &name, InputParameters ¶meters)
Query query()
query creates and returns an initialized a query object for querying objects from the warehouse...
void allowOutput(bool state)
Ability to enable/disable output calls This is private, users should utilize FEProblemBase::allowOutp...
bool hasStartTime() const
virtual void onTimestepBegin() override
virtual void computeBounds(libMesh::NonlinearImplicitSystem &sys, NumericVector< libMesh::Number > &lower, NumericVector< libMesh::Number > &upper)
Nonlinear system to be solved.
void initKokkos()
Construct Kokkos assembly and systems and allocate Kokkos material property storages.
virtual void computePostCheck(libMesh::NonlinearImplicitSystem &sys, const NumericVector< libMesh::Number > &old_soln, NumericVector< libMesh::Number > &search_direction, NumericVector< libMesh::Number > &new_soln, bool &changed_search_direction, bool &changed_new_soln)
void checkDuplicatePostprocessorVariableNames()
void addConsumer(Moose::MaterialDataType type, const MooseObject *object)
Add object as the consumer of storage of type type.
void setAxisymmetricCoordAxis(const MooseEnum &rz_coord_axis)
For axisymmetric simulations, set the symmetry coordinate axis.
void addOutput(std::shared_ptr< Output > output)
Adds an existing output object to the warehouse.
void computeResidualAndJacobian(const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual, libMesh::SparseMatrix< libMesh::Number > &jacobian)
Form a residual and Jacobian with default tags.
static void selectMatrixTagsFromSystem(const SystemBase &system, const std::map< TagName, TagID > &input_matrix_tags, std::set< TagID > &selected_tags)
Select the matrix tags which belong to a specific system.
std::vector< VariableValue > _scalar_zero
virtual Real computeResidualL2Norm()
Computes the residual using whatever is sitting in the current solution vector then returns the L2 no...
void update(GeometricSearchType type=ALL)
Update all of the search objects.
const std::vector< LinearSystemName > _linear_sys_names
The linear system names.
virtual void initialSetup(THREAD_ID tid=0) const override
Convenience methods for calling object setup methods that handle the extra neighbor and face objects...
void incrementMultiAppTStep(ExecFlagType type)
Advance the MultiApps t_step (incrementStepOrReject) associated with the ExecFlagType.
Class for scalar variables (they are different).
IntRange< T > make_range(T beg, T end)
void computeLinearSystemTags(const NumericVector< libMesh::Number > &soln, const std::set< TagID > &vector_tags, const std::set< TagID > &matrix_tags, const bool compute_gradients=true)
Assemble the current linear system given a set of vector and matrix tags.
void bumpVolumeQRuleOrder(libMesh::Order order, SubdomainID block)
Increases the element/volume quadrature order for the specified mesh block if and only if the current...
const bool _material_dependency_check
Determines whether a check to verify material dependencies on every subdomain.
std::vector< std::vector< const MooseVariableFEBase * > > _uo_jacobian_moose_vars
virtual MooseMesh & mesh() override
NonlocalKernel is used for solving integral terms in integro-differential equations.
std::vector< VariableValue > _zero
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type and optionally a file path to the top-level block p...
const ExecFlagType EXEC_SAME_AS_MULTIAPP
unsigned int linearSysNum(const LinearSystemName &linear_sys_name) const override
LinearSystem & currentLinearSystem()
Get a non-constant reference to the current linear system.
virtual void updateActive(THREAD_ID tid=0) override
Update the active status of Kernels.
std::set< TagID > _fe_vector_tags
const std::set< const MooseObject * > & getConsumers(Moose::MaterialDataType type) const
const std::set< const MooseObject * > & getMaterialPropertyStorageConsumers(Moose::MaterialDataType type) const
void addObjectParamsHelper(InputParameters ¶ms, const std::string &object_name, const std::string &var_param_name="variable")
Helper for setting the "_subproblem" and "_sys" parameters in addObject() and in addUserObject().
virtual unsigned int size() const override final
SolverParams & solverParams(unsigned int solver_sys_num=0)
Get the solver parameters.
virtual void saveOldSolutions()
Allocate vectors and save old solutions into them.
std::unique_ptr< NumericVector< Number > > current_local_solution
ADRealVectorValue ADRealGradient
virtual void setActiveFEVariableCoupleableMatrixTags(std::set< TagID > &mtags, const THREAD_ID tid)
void mooseConsole()
Send current output buffer to Console output objects.
std::set< std::string > getDependObjects() const
Get a list of dependent UserObjects for this exec type.
virtual void computeTransposeNullSpace(libMesh::NonlinearImplicitSystem &sys, std::vector< NumericVector< libMesh::Number > *> &sp)
bool hasPostprocessor(const std::string &name) const
Deprecated.
virtual bool updateSolution(NumericVector< libMesh::Number > &vec_solution, NumericVector< libMesh::Number > &ghosted_solution)
Update the solution.
ChainControlDataSystem & getChainControlDataSystem()
Gets the system that manages the ChainControls.
bool _previous_multiapp_fp_aux_solution_required
Indicates we need to save the previous multiapp fixed-point iteration auxiliary variable values...
std::shared_ptr< DisplacedProblem > _displaced_problem
GeometricSearchData _geometric_search_data
State argument for evaluating functors.
void setCurrentResidualVectorTags(const std::set< TagID > &vector_tags)
Set the current residual vector tag data structure based on the passed in tag IDs.
MooseObjectWarehouse< Function > _functions
functions
virtual void addObject(std::shared_ptr< T > object, THREAD_ID tid=0, bool recurse=true)
Adds an object to the storage structure.
virtual Real & timeOld() const
Proxy for accessing MaterialPropertyStorage.
std::vector< VectorVariableValue > _vector_zero
bool hasMultiApp(const std::string &name) const
std::vector< std::unique_ptr< libMesh::CouplingMatrix > > _cm
Coupling matrix for variables.
bool needInterfaceMaterialOnSide(BoundaryID bnd_id, const THREAD_ID tid)
void reinitElemFace(const Elem *elem, unsigned int side, BoundaryID, const THREAD_ID tid)
virtual void cacheResidualNeighbor(const THREAD_ID tid)
Linear system to be solved.
bool hasReporterValue(const ReporterName &reporter_name) const
Return True if a Reporter value with the given type and name have been created.
std::optional< std::vector< ConvergenceName > > _linear_convergence_names
Linear system(s) convergence name(s) (if any)
bool _has_initialized_stateful
Whether nor not stateful materials have been initialized.
void checkICRestartError(const std::string &ic_name, const std::string &name, const VariableName &var_name)
Checks if the variable of the initial condition is getting restarted and errors for specific cases...
virtual void setResidualNeighbor(NumericVector< libMesh::Number > &residual, const THREAD_ID tid) override
QueryCache & condition(Args &&... args)
Adds a new condition to the query.
const TagName SOLUTION_TAG
unsigned int _max_qps
Maximum number of quadrature points used in the problem.
A class for storing an input parameter name.
static InputParameters validParams()
virtual void addFVInterpolationMethod(const std::string &method_type, const std::string &name, InputParameters ¶meters)
Add an FV interpolation method.
Eigen::Matrix< Real, Eigen::Dynamic, 1 > RealEigenVector
virtual void addScalarKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
elem_info_iterator ownedElemInfoEnd()
std::set< const Elem * > & getElements()
Returns a writeable reference to the _elements container.
virtual void set(const numeric_index_type i, const T value)=0
void addGhostedBoundary(BoundaryID boundary_id)
This will add the boundary ids to be ghosted to this processor.
bool _preserve_matrix_sparsity_pattern
Whether to preserve the system matrix / Jacobian sparsity pattern, using 0-valued entries usually...
virtual unsigned int nNonlinearIterations(const unsigned int nl_sys_num) const override
CoverageCheckMode _material_coverage_check
Determines whether and which subdomains are to be checked to ensure that they have an active material...
bool isAdaptivityDue()
Query if an adaptivity step should be performed at the current time / time step.
virtual std::size_t numLinearSystems() const override
MaterialPropertyStorage & _neighbor_material_props
std::unique_ptr< Backup > finalizeRestore()
Finalizes (closes) the restoration process done in restore().
libMesh::StoredRange< MooseMesh::const_bnd_elem_iterator, const BndElement * > * getBoundaryElementRange()
bool isParamValid(const std::string &name) const
Test if the supplied parameter is valid.
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
const ConsoleStream _console
An instance of helper class to write streams to the Console objects.
const std::size_t _num_linear_sys
The number of linear systems.
std::map< std::string, unsigned int > _subspace_dim
Dimension of the subspace spanned by the vectors with a given prefix.
const libMesh::ConstElemRange & getEvaluableElementRange()
In general, {evaluable elements} >= {local elements} U {algebraic ghosting elements}.
static InputParameters validParams()
bool _currently_computing_residual
Whether the residual is being evaluated.
const UserObject & getUserObjectBase(const std::string &name, const THREAD_ID tid=0) const
Get the user object by its name.
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type...
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
bool _has_internal_edge_residual_objects
Whether the problem has dgkernels or interface kernels.
bool execMultiApps(ExecFlagType type, bool auto_advance=true)
Execute the MultiApps associated with the ExecFlagType.
const std::string & name() const
void paramWarning(const std::string ¶m, Args... args) const
virtual ArrayMooseVariable & getArrayVariable(const THREAD_ID tid, const std::string &var_name) override
Returns the variable reference for requested ArrayMooseVariable which may be in any system...
const ExecFlagType EXEC_SUBDOMAIN
bool _has_constraints
Whether or not this system has any Constraints.
virtual bool isTransient() const override
bool hasMultiApps() const
Returns whether or not the current simulation has any multiapps.
virtual void reinitNeighbor(const Elem *elem, unsigned int side, const THREAD_ID tid) override
const MaterialData & getMaterialData(const THREAD_ID tid) const
void doingPRefinement(bool doing_p_refinement)
Indicate whether the kind of adaptivity we're doing includes p-refinement.
const bool & currentlyComputingJacobian() const
Returns true if the problem is in the process of computing the Jacobian.
void notifyWhenMeshChanges(MeshChangedInterface *mci)
Register an object that derives from MeshChangedInterface to be notified when the mesh changes...
ConstElemPointerRange * coarsenedElementRange() const
Return a range that is suitable for threaded execution over elements that were just coarsened...
std::unique_ptr< libMesh::ConstElemRange > _evaluable_local_elem_range
const Moose::PatchUpdateType & getPatchUpdateStrategy() const
Get the current patch update strategy.
const FVFaceInterpolationMethod & getFVFaceInterpolationMethod(const InterpolationMethodName &name, const THREAD_ID tid=0) const
Retrieve a scalar face interpolation method.
virtual void executeAllObjects(const ExecFlagType &exec_type)
CoverageCheckMode _kernel_coverage_check
Determines whether and which subdomains are to be checked to ensure that they have an active kernel...
virtual void setActiveFEVariableCoupleableVectorTags(std::set< TagID > &vtags, const THREAD_ID tid) override
void check() const
Perform integrity check for get/declare calls.
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > & nonlocalCouplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num)
std::set< std::string > getPostprocessorNames() const
Return a list of all postprocessor names.
bool _fail_next_system_convergence_check
void ghostGhostedBoundaries()
Actually do the ghosting of boundaries that need to be ghosted to this processor. ...
std::vector< std::shared_ptr< LinearSystem > > _linear_systems
The vector of linear systems.
const hit::Node * getHitNode() const
std::shared_ptr< XFEMInterface > _xfem
Pointer to XFEM controller.
virtual void prepareShapes(unsigned int var, const THREAD_ID tid) override
const bool _boundary_restricted_elem_integrity_check
whether to perform checking of boundary restricted elemental object variable dependencies, e.g.
void reinitMaterialsInterface(BoundaryID boundary_id, const THREAD_ID tid, bool swap_stateful=true)
bool _const_jacobian
true if the Jacobian is constant
virtual void computeJacobianBlock(libMesh::SparseMatrix< libMesh::Number > &jacobian, libMesh::System &precond_system, unsigned int ivar, unsigned int jvar)
Really not a good idea to use this.
virtual void solveLinearSystem(const unsigned int linear_sys_num, const Moose::PetscSupport::PetscOptions *po=nullptr)
Build and solve a linear system.
virtual void computeUserObjectByName(const ExecFlagType &type, const Moose::AuxGroup &group, const std::string &name)
Compute an user object with the given name.
virtual void possiblyRebuildGeomSearchPatches()
virtual void add(const numeric_index_type i, const T value)=0
bool _safe_access_tagged_matrices
Is it safe to retrieve data from tagged matrices.
std::set< TagID > _linear_vector_tags
Temporary storage for filtered vector tags for linear systems.
Class that represents the dependecy as a graph.
Moose::Kokkos::MaterialPropertyStorage & _kokkos_bnd_material_props
DiracKernelInfo _dirac_kernel_info
Abstract base class for interpolation methods that produce a scalar face value from adjacent cell val...
A MultiApp represents one or more MOOSE applications that are running simultaneously.
const TagName PREVIOUS_NL_SOLUTION_TAG
void updateBoundaryVariableDependency(std::set< MooseVariableFieldBase *> &needed_moose_vars, THREAD_ID tid=0) const
processor_id_type processor_id() const
void addObject(std::shared_ptr< FVInitialConditionBase > object, THREAD_ID tid, bool recurse=true)
Add object to the warehouse.
const libMesh::ConstElemRange & getNonlinearEvaluableElementRange()
A class for storing the names of MooseObject by tag and object name.
MaterialPropertyStorage & _material_props
Base class for Postprocessors that produce a vector of values.
virtual Order default_order() const=0
void prepareMaterials(const std::unordered_set< unsigned int > &consumer_needed_mat_props, const SubdomainID blk_id, const THREAD_ID tid)
Add the MooseVariables and the material properties that the current materials depend on to the depend...
virtual void addFVKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
virtual void addFVBC(const std::string &fv_bc_name, const std::string &name, InputParameters ¶meters)
libMesh::Order _max_scalar_order
Maximum scalar variable order.
virtual void addGhostedBoundary(BoundaryID boundary_id) override
Will make sure that all necessary elements from boundary_id are ghosted to this processor.
virtual bool hasFunction(const std::string &name, const THREAD_ID tid=0)
Adaptivity & adaptivity()
bool hasActiveMaterialProperties(const THREAD_ID tid) const
Method to check whether or not a list of active material roperties has been set.
ExecuteMooseObjectWarehouse< Transfer > _between_multi_app_transfers
Transfers executed just before MultiApps to transfer data between them.
bool isRecovering() const
Whether or not this is a "recover" calculation.
SystemBase & sys()
Get the system this variable is part of.
virtual void cacheJacobian(const THREAD_ID tid) override
auto min(const L &left, const R &right)
void jacobianSetup() override
virtual std::size_t numSolverSystems() const override
virtual void addHDGKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Restartable::ManagedValue< RestartableEquationSystems > _req
The EquationSystems object, wrapped for restart.
virtual unsigned int currentLinearSysNum() const override
std::vector< libMesh::CouplingMatrix > _nonlocal_cm
nonlocal coupling matrix
virtual void reinitNodeFace(const Node *node, BoundaryID bnd_id, const THREAD_ID tid) override
virtual void reinitOffDiagScalars(const THREAD_ID tid) override
processor_id_type processor_id() const
virtual void reinitElemPhys(const Elem *elem, const std::vector< Point > &phys_points_in_elem, const THREAD_ID tid) override
std::vector< std::unordered_map< BoundaryID, bool > > _interface_mat_side_cache
Cache for calculating materials on interface.
virtual void addObject(std::shared_ptr< T > object, THREAD_ID tid=0, bool recurse=true) override
Adds an object to the storage structure.
void initKokkosStatefulProps()
const std::vector< std::string > & get_nodal_var_names()
std::string getRestartRecoverFileBase() const
The file_base for the recovery file.
virtual void addJacobianNeighborLowerD(const THREAD_ID tid) override
virtual void prepareNeighborShapes(unsigned int var, const THREAD_ID tid) override
bool hasSolutionState(unsigned int state, Moose::SolutionIterationType iteration_type) const
Whether we need up to old (1) or older (2) solution states for a given type of iteration.
MooseObjectWarehouse< Marker > _markers
FVInitialConditionWarehouse _fv_ics
void setVerboseProblem(bool verbose)
Make the problem be verbose.
virtual void setNeighborSubdomainID(const Elem *elem, unsigned int side, const THREAD_ID tid) override
virtual const VectorTag & getVectorTag(const TagID tag_id) const
Get a VectorTag from a TagID.
MaterialBases compute MaterialProperties.
virtual void initialAdaptMesh()
void updatePointLocator(const MooseMesh &mesh)
Called during FEProblemBase::meshChanged() to update the PointLocator object used by the DiracKernels...
virtual void addResidualScalar(const THREAD_ID tid=0)
Moose::Kokkos::MaterialPropertyStorage & _kokkos_neighbor_material_props
This is a template class that implements the workhorse compute and computeNodal methods.
MaterialWarehouse _all_materials
const MeshBase::element_iterator activeLocalElementsEnd()
virtual void addCachedResidual(const THREAD_ID tid) override
for(PetscInt i=0;i< nvars;++i)
void clearNearestNodeLocators()
Clear out the Penetration Locators so they will redo the search.
Moose::PetscSupport::PetscOptions _petsc_options
PETSc option storage.
libMesh::StoredRange< MooseMesh::const_bnd_node_iterator, const BndNode * > * getBoundaryNodeRange()
virtual const std::vector< std::shared_ptr< Convergence > > & getConvergenceObjects(const THREAD_ID tid=0) const
Gets the Convergence objects.
void ErrorVector unsigned int
virtual void clearActiveElementalMooseVariables(const THREAD_ID tid) override
Clear the active elemental MooseVariableFEBase.
auto index_range(const T &sizable)
Base class for user-specific data.
void timestepSetup()
Calls the timestepSetup function for each of the output objects.
void allowOutput(bool state)
Ability to enable/disable all output calls.
virtual void cacheJacobian(const THREAD_ID tid)
virtual Sampler & getSampler(const std::string &name, const THREAD_ID tid=0)
const std::string & _type
The type of this class.
virtual void outputStep(ExecFlagType type)
Output the current step.
void projectInitialConditionOnCustomRange(libMesh::ConstElemRange &elem_range, ConstBndNodeRange &bnd_node_range, const std::optional< std::set< VariableName >> &target_vars=std::nullopt)
Project initial conditions for custom elem_range and bnd_node_range This is needed when elements/boun...
virtual unsigned int nlSysNum(const NonlinearSystemName &nl_sys_name) const override
OutputWarehouse & getOutputWarehouse()
Get the OutputWarehouse objects.
virtual void updateActive(THREAD_ID tid=0) override
Update the active status of Kernels.
MooseEnum _verbose_setup
Whether or not to be verbose during setup.
static InputParameters validParams()
RedistributeProperties is used for its redistribute() callback, which ensures that any stateful prope...
unsigned int state
The state.
virtual void computeJacobianTags(const std::set< TagID > &tags)
Form multiple matrices, and each is associated with a tag.
void computeSystems(const ExecFlagType &type)
Do generic system computations.
MooseMesh * _displaced_mesh
void resize(unsigned int n_qpoints)
Resize the data to hold properties for n_qpoints quadrature points.
bool _has_mortar
Whether the simulation requires mortar coupling.
void computeLinearSystemTags(const std::set< TagID > &vector_tags, const std::set< TagID > &matrix_tags, const bool compute_gradients=true)
Compute the right hand side and the system matrix of the system for given tags.
libMesh::Order getMaxScalarOrder() const
void execTransfers(ExecFlagType type)
Execute the Transfers associated with the ExecFlagType.
void addNotZeroedVectorTag(const TagID tag)
Adds a vector tag to the list of vectors that will not be zeroed when other tagged vectors are...
void restoreState(bool verbose=false)
When a time step fails, this method is called to revert the current reporter values to their old stat...
void meshChanged()
Declares that the MooseMesh has changed, invalidates cached data and rebuilds caches.
void buildPRefinementAndCoarseningMaps(Assembly *assembly)
const std::unordered_map< std::pair< BoundaryID, BoundaryID >, MortarInterfaceConfig > & getMortarInterfaces(bool on_displaced) const
const std::vector< ConvergenceName > & getLinearConvergenceNames() const
Gets the linear convergence object name(s).
virtual void ghostGhostedBoundaries() override
Causes the boundaries added using addGhostedBoundary to actually be ghosted.
const ExecFlagType EXEC_POST_ADAPTIVITY
void add_ghosting_functor(GhostingFunctor &ghosting_functor)
MaterialWarehouse _materials
virtual void addJacobianScalar(const THREAD_ID tid=0)
virtual void addDiracKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
An instance of this object type has one copy per thread that runs on each thread. ...
MooseObjectWarehouse< IntegratedBCBase > _nonlocal_integrated_bcs
nonlocal integrated_bcs
virtual void computeResidualTag(const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual, TagID tag)
Form a residual vector for a given tag.
virtual VectorMooseVariable & getVectorVariable(const THREAD_ID tid, const std::string &var_name) override
Returns the variable reference for requested VectorMooseVariable which may be in any system...
std::shared_ptr< LineSearch > _line_search
void initXFEM(std::shared_ptr< XFEMInterface > xfem)
Create XFEM controller object.
const std::set< SubdomainID > & meshSubdomains() const
Returns a read-only reference to the set of subdomains currently present in the Mesh.
SubdomainID getSubdomainID(const SubdomainName &subdomain_name) const
Get the associated subdomain ID for the subdomain name.
const FEType & type() const
Base class for all Transfer objects.
virtual void addElementalFieldVariable(const std::string &var_type, const std::string &var_name, InputParameters ¶ms)
Add an elemental field variable for use in the adaptivity system.
void parallelBarrierNotify(const Parallel::Communicator &comm, bool messaging)
virtual void neighborSubdomainSetup(SubdomainID subdomain, const THREAD_ID tid)
void setupFiniteVolumeMeshData() const
Sets up the additional data needed for finite volume computations.
virtual void addCachedJacobian(const THREAD_ID tid) override
virtual void sizeZeroes(unsigned int size, const THREAD_ID tid)
virtual Real computeDamping(const NumericVector< libMesh::Number > &soln, const NumericVector< libMesh::Number > &update)
std::vector< Real > _real_zero
Convenience zeros.
MooseObjectWarehouse< KernelBase > _nonlocal_kernels
nonlocal kernels
void checkCoordinateSystems()
Verify that there are no element type/coordinate type conflicts.
unsigned int getMaxQps() const
const ExecFlagType EXEC_INITIAL
virtual libMesh::System & system() override
Get the reference to the libMesh system.
bool _verbose_multiapps
Whether or not to be verbose with multiapps.
Key structure for APIs manipulating global vectors/matrices.