diff --git a/Src/Amr/AMReX_Amr.H b/Src/Amr/AMReX_Amr.H index a6fdeeb2350..aa6dcc42122 100644 --- a/Src/Amr/AMReX_Amr.H +++ b/Src/Amr/AMReX_Amr.H @@ -456,6 +456,7 @@ protected: LevelBld* levelbld; bool abort_on_stream_retry_failure; int stream_max_tries; + int regrid_level0_int; int loadbalance_with_workestimates; int loadbalance_level0_int; Real loadbalance_max_fac; diff --git a/Src/Amr/AMReX_Amr.cpp b/Src/Amr/AMReX_Amr.cpp index 82116d7ee0f..06df077c463 100644 --- a/Src/Amr/AMReX_Amr.cpp +++ b/Src/Amr/AMReX_Amr.cpp @@ -501,6 +501,9 @@ Amr::InitAmr () #undef STRIP } + regrid_level0_int = -1; + pp.query("regrid_level0_int", regrid_level0_int); + loadbalance_with_workestimates = 0; pp.query("loadbalance_with_workestimates", loadbalance_with_workestimates); @@ -1935,16 +1938,13 @@ Amr::timeStep (int level, // Update so that by default, we don't force a post-step regrid. amr_level[level]->setPostStepRegrid(0); - if(max_level==0 && force_regrid_level_zero){ - regrid_level_0_on_restart(); - } - // // Allow regridding of level 0 calculation on restart. // - if (max_level == 0 && regrid_on_restart) + if (max_level == 0 && (regrid_on_restart || force_regrid_level_zero)) { regrid_level_0_on_restart(); + level_count[0] = 0; } else { @@ -1994,6 +1994,15 @@ Amr::timeStep (int level, } } + if (max_level == 0 && regrid_level0_int > 0) + { + if (level_count[0] >= regrid_level0_int) + { + regrid_level_0_on_restart(); + level_count[0] = 0; + } + } + if (max_level == 0 && loadbalance_level0_int > 0 && loadbalance_with_workestimates) { if (level_steps[0] == 1 || level_count[0] >= loadbalance_level0_int) {