From ef8f11b52922ff0030dca908c80a39dbce049302 Mon Sep 17 00:00:00 2001 From: Abishek Gopal Date: Mon, 20 Jul 2026 16:26:22 -0600 Subject: [PATCH 1/2] Add timers --- src/core_atmosphere/dynamics/mpas_atm_time_integration.F | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F index 227fbde862..5e42f79aef 100644 --- a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F +++ b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F @@ -4156,7 +4156,7 @@ subroutine atm_divergence_damping_3d( state, diag, mesh, configs, dts, edgeStart nCellsSolve = nCellsSolve_ptr nVertLevels = nVertLevels_ptr - + call mpas_timer_start('atm_divergence_damping_3d_4160') !$acc parallel default(present) !$acc loop gang worker do iEdge=edgeStart,edgeEnd ! MGD do we really just need edges touching owned cells? @@ -4187,7 +4187,7 @@ subroutine atm_divergence_damping_3d( state, diag, mesh, configs, dts, edgeStart end if ! edges for block-owned cells end do ! end loop over edges !$acc end parallel - + call mpas_timer_stop('atm_divergence_damping_3d_4160') end subroutine atm_divergence_damping_3d From 694e5d8f62eb2b543c37c572ed25e2bbc034d601 Mon Sep 17 00:00:00 2001 From: Pranay-Reddy-Kommera Date: Tue, 21 Jul 2026 15:50:23 -0600 Subject: [PATCH 2/2] Opt 1 - Rearrange loops and collapse --- .../dynamics/mpas_atm_time_integration.F | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F index 5e42f79aef..29891fc64c 100644 --- a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F +++ b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F @@ -4158,18 +4158,17 @@ subroutine atm_divergence_damping_3d( state, diag, mesh, configs, dts, edgeStart call mpas_timer_start('atm_divergence_damping_3d_4160') !$acc parallel default(present) - !$acc loop gang worker + !$acc loop gang worker vector collapse(2) do iEdge=edgeStart,edgeEnd ! MGD do we really just need edges touching owned cells? +!DIR$ IVDEP + do k=1,nVertLevels cell1 = cellsOnEdge(1,iEdge) cell2 = cellsOnEdge(2,iEdge) ! update edges for block-owned cells if (cell1 <= nCellsSolve .or. cell2 <= nCellsSolve ) then - -!DIR$ IVDEP - !$acc loop vector - do k=1,nVertLevels + !! unscaled 3d divergence damping !! divCell1 = -(rtheta_pp(k,cell1)-rtheta_pp_old(k,cell1))*rdts @@ -4183,8 +4182,9 @@ subroutine atm_divergence_damping_3d( state, diag, mesh, configs, dts, edgeStart ru_p(k,iEdge) = ru_p(k,iEdge) + coef_divdamp*(divCell2-divCell1)*(1.0_RKIND - specZoneMaskEdge(iEdge)) & /(theta_m(k,cell1)+theta_m(k,cell2)) - end do - end if ! edges for block-owned cells + + end if ! edges for block-owned cells + end do end do ! end loop over edges !$acc end parallel call mpas_timer_stop('atm_divergence_damping_3d_4160')