diff --git a/Source/ERF.cpp b/Source/ERF.cpp index f3a30f987..cd9e9d404 100644 --- a/Source/ERF.cpp +++ b/Source/ERF.cpp @@ -2195,6 +2195,9 @@ ERF::restart () ReadCheckpointFile(); + // Force regrid on level 0 if more procs than boxes are requested + regrid_level_0_on_restart = ( regrid_level_0_on_restart || + grids[0].size() < ParallelDescriptor::NProcs() ); if (regrid_level_0_on_restart) { // // Coarsening before we split the grids ensures that each resulting diff --git a/Source/ERF_MakeNewArrays.cpp b/Source/ERF_MakeNewArrays.cpp index 2db92ae5f..723e2f038 100644 --- a/Source/ERF_MakeNewArrays.cpp +++ b/Source/ERF_MakeNewArrays.cpp @@ -801,6 +801,10 @@ ERF::remake_zphys (int lev, std::unique_ptr& temp_zphys_nd) std::swap(temp_zphys_nd, z_phys_nd[lev]); } // lev > 0 + else { + temp_zphys_nd->ParallelCopy(*z_phys_nd[lev], 0, 0, 1, z_phys_nd[lev]->nGrowVect(), z_phys_nd[lev]->nGrowVect()); + std::swap(temp_zphys_nd, z_phys_nd[lev]); + } } else { if (lev > 0) { @@ -819,6 +823,10 @@ ERF::remake_zphys (int lev, std::unique_ptr& temp_zphys_nd) std::swap(temp_zphys_nd, z_phys_nd[lev]); } // lev > 0 + else { + temp_zphys_nd->ParallelCopy(*z_phys_nd[lev], 0, 0, 1, z_phys_nd[lev]->nGrowVect(), z_phys_nd[lev]->nGrowVect()); + std::swap(temp_zphys_nd, z_phys_nd[lev]); + } } if (solverChoice.terrain_type == TerrainType::ImmersedForcing || diff --git a/Source/Utils/ERF_TerrainMetrics.cpp b/Source/Utils/ERF_TerrainMetrics.cpp index 0796e67d9..f9e6da6d4 100644 --- a/Source/Utils/ERF_TerrainMetrics.cpp +++ b/Source/Utils/ERF_TerrainMetrics.cpp @@ -639,7 +639,7 @@ make_zcc (const Geometry& geom, Array4 z_cc = z_phys_cc.array(mfi); ParallelFor(gbx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { z_cc(i, j, k) = Real(.125) * ( z_nd(i,j,k ) + z_nd(i+1,j,k ) + z_nd(i,j+1,k ) + z_nd(i+1,j+1,k ) - +z_nd(i,j,k+1) + z_nd(i+1,j,k+1) + z_nd(i,j+1,k+1) + z_nd(i+1,j+1,k+1) ); + + z_nd(i,j,k+1) + z_nd(i+1,j,k+1) + z_nd(i,j+1,k+1) + z_nd(i+1,j+1,k+1) ); }); } z_phys_cc.FillBoundary(geom.periodicity());