diff --git a/framework/include/base/FEProblemBase.h b/framework/include/base/FEProblemBase.h index 01edbbce3222..7cd1baf60f46 100644 --- a/framework/include/base/FEProblemBase.h +++ b/framework/include/base/FEProblemBase.h @@ -825,10 +825,15 @@ class FEProblemBase : public SubProblem, public Restartable bool execMultiApps(ExecFlagType type, bool auto_advance = true); /** - * Advance the MultiApps t_step associated with the ExecFlagType + * Advance the MultiApps t_step (incrementStepOrReject) associated with the ExecFlagType */ void incrementMultiAppTStep(ExecFlagType type); + /** + * Finish the MultiApp time step (endStep, postStep) associated with the ExecFlagType + */ + void finishMultiAppStep(ExecFlagType type); + /** * Backup the MultiApps associated with the ExecFlagType */ diff --git a/framework/src/base/FEProblemBase.C b/framework/src/base/FEProblemBase.C index 78acc67f311b..3363e6b28dae 100644 --- a/framework/src/base/FEProblemBase.C +++ b/framework/src/base/FEProblemBase.C @@ -3289,6 +3289,20 @@ FEProblemBase::incrementMultiAppTStep(ExecFlagType type) } } +void +FEProblemBase::finishMultiAppStep(ExecFlagType type) +{ + const auto & multi_apps = _multi_apps[type].getActiveObjects(); + + if (multi_apps.size()) + { + for (const auto & multi_app : multi_apps) + multi_app->finishStep(); + + MooseUtils::parallelBarrierNotify(_communicator); + } +} + void FEProblemBase::backupMultiApps(ExecFlagType type) { diff --git a/framework/src/executioners/Transient.C b/framework/src/executioners/Transient.C index 2b51ba2dbbfb..a97d62a00fea 100644 --- a/framework/src/executioners/Transient.C +++ b/framework/src/executioners/Transient.C @@ -369,6 +369,11 @@ Transient::incrementStepOrReject() _problem.advanceState(); + if (_picard_max_its > 1) + { + _problem.finishMultiAppStep(EXEC_TIMESTEP_BEGIN); + _problem.finishMultiAppStep(EXEC_TIMESTEP_END); + } _problem.incrementMultiAppTStep(EXEC_TIMESTEP_BEGIN); _problem.incrementMultiAppTStep(EXEC_TIMESTEP_END); } diff --git a/framework/src/multiapps/TransientMultiApp.C b/framework/src/multiapps/TransientMultiApp.C index 0c10045c9553..7f618c7e4010 100644 --- a/framework/src/multiapps/TransientMultiApp.C +++ b/framework/src/multiapps/TransientMultiApp.C @@ -346,6 +346,9 @@ TransientMultiApp::solveStep(Real dt, Real target_time, bool auto_advance) if (auto_advance) { + ex->endStep(); + ex->postStep(); + if (!ex->lastSolveConverged()) { mooseWarning(name(), _first_local_app + i, " failed to converge!\n"); @@ -424,10 +427,7 @@ TransientMultiApp::incrementTStep() { for (unsigned int i = 0; i < _my_num_apps; i++) { - /*FEProblemBase * problem =*/appProblemBase(_first_local_app + i); Transient * ex = _transient_executioners[i]; - ex->endStep(); - ex->postStep(); ex->incrementStepOrReject(); } } @@ -440,7 +440,6 @@ TransientMultiApp::finishStep() { for (unsigned int i = 0; i < _my_num_apps; i++) { - /*FEProblemBase * problem =*/appProblemBase(_first_local_app + i); Transient * ex = _transient_executioners[i]; ex->endStep(); ex->postStep(); diff --git a/test/tests/multiapps/multiapp_iterative_adaptive/adaptiveDT.i b/test/tests/multiapps/loose_couple_time_adapt/adaptiveDT.i similarity index 97% rename from test/tests/multiapps/multiapp_iterative_adaptive/adaptiveDT.i rename to test/tests/multiapps/loose_couple_time_adapt/adaptiveDT.i index 4ce1d9477452..0a75843c232c 100644 --- a/test/tests/multiapps/multiapp_iterative_adaptive/adaptiveDT.i +++ b/test/tests/multiapps/loose_couple_time_adapt/adaptiveDT.i @@ -56,6 +56,5 @@ [] [Outputs] - file_base = out exodus = true [] diff --git a/test/tests/multiapps/loose_couple_time_adapt/gold/begin.e b/test/tests/multiapps/loose_couple_time_adapt/gold/begin.e new file mode 120000 index 000000000000..e8fb7953486d --- /dev/null +++ b/test/tests/multiapps/loose_couple_time_adapt/gold/begin.e @@ -0,0 +1 @@ +end.e \ No newline at end of file diff --git a/test/tests/multiapps/loose_couple_time_adapt/gold/end.e b/test/tests/multiapps/loose_couple_time_adapt/gold/end.e new file mode 100644 index 000000000000..667a7aaec9e1 Binary files /dev/null and b/test/tests/multiapps/loose_couple_time_adapt/gold/end.e differ diff --git a/test/tests/multiapps/loose_couple_time_adapt/gold/master_out_dummy0.e b/test/tests/multiapps/loose_couple_time_adapt/gold/master_out_dummy0.e new file mode 100644 index 000000000000..6cc82ddd63f3 Binary files /dev/null and b/test/tests/multiapps/loose_couple_time_adapt/gold/master_out_dummy0.e differ diff --git a/test/tests/multiapps/multiapp_iterative_adaptive/master.i b/test/tests/multiapps/loose_couple_time_adapt/master.i similarity index 85% rename from test/tests/multiapps/multiapp_iterative_adaptive/master.i rename to test/tests/multiapps/loose_couple_time_adapt/master.i index 89dff513aa5f..1a317cd87984 100644 --- a/test/tests/multiapps/multiapp_iterative_adaptive/master.i +++ b/test/tests/multiapps/loose_couple_time_adapt/master.i @@ -47,7 +47,7 @@ [./dummy] type = TransientMultiApp input_files = adaptiveDT.i - execute_on = timestep_begin + execute_on = timestep_end [../] [] @@ -57,12 +57,8 @@ end_time = 0.006 dt = 0.006 nl_abs_tol = 1.0e-8 - # picard_max_its = 10 - # picard_rel_tol = 1e-8 - # picard_abs_tol = 1e-8 [] [Outputs] - file_base = out exodus = true [] diff --git a/test/tests/multiapps/loose_couple_time_adapt/tests b/test/tests/multiapps/loose_couple_time_adapt/tests new file mode 100644 index 000000000000..7ee739b31f3f --- /dev/null +++ b/test/tests/multiapps/loose_couple_time_adapt/tests @@ -0,0 +1,14 @@ +[Tests] + [./begin] + type = 'Exodiff' + input = 'master.i' + exodiff = 'begin.e' + cli_args = 'MultiApps/dummy/execute_on=timestep_begin Outputs/file_base=begin' + [../] + [./end] + type = 'Exodiff' + input = 'master.i' + exodiff = 'end.e master_out_dummy0.e' + cli_args = 'Outputs/file_base=end' + [../] +[] diff --git a/test/tests/multiapps/multiapp_iterative_adaptive/constDT.i b/test/tests/multiapps/multiapp_iterative_adaptive/constDT.i deleted file mode 100644 index b610d13a091b..000000000000 --- a/test/tests/multiapps/multiapp_iterative_adaptive/constDT.i +++ /dev/null @@ -1,57 +0,0 @@ -[Mesh] - type = GeneratedMesh - dim = 2 - xmin = 0 - xmax = 1 - ymin = 0 - ymax = 1 -[] - -[Variables] - active = 'u' - - [./u] - order = FIRST - family = LAGRANGE - [../] -[] - -[Kernels] - active = 'diff' - - [./diff] - type = Diffusion - variable = u - [../] -[] - -[BCs] - active = 'left right' - - [./left] - type = DirichletBC - variable = u - boundary = 1 - value = 0 - [../] - - [./right] - type = DirichletBC - variable = u - boundary = 2 - value = 1 - [../] -[] - -[Executioner] - type = Transient - start_time = 0 - end_time = 0.006 - dt = 0.001 - nl_abs_tol = 1.0e-8 -[] - -[Outputs] - file_base = out - exodus = true -[]