From c5b1e012413f4989bcda9fa9cd4cb799e96f4c05 Mon Sep 17 00:00:00 2001 From: Abishek Gopal Date: Mon, 6 Jul 2026 13:35:48 -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..7c31cacbe4 100644 --- a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F +++ b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F @@ -7399,7 +7399,7 @@ subroutine atm_compute_solve_diagnostics_work(nCells, nEdges, nVertices, & !$OMP BARRIER - + call mpas_timer_start('atm_compute_solve_diag_7418') ! ! Modify PV edge with upstream bias. ! @@ -7429,7 +7429,7 @@ subroutine atm_compute_solve_diagnostics_work(nCells, nEdges, nVertices, & end do end do !$acc end parallel - + call mpas_timer_stop('atm_compute_solve_diag_7418') end if ! apvm upwinding From 5368541194941fd2ecb4c53a0fb2469ec63915dd Mon Sep 17 00:00:00 2001 From: Abishek Gopal Date: Mon, 6 Jul 2026 15:35:54 -0600 Subject: [PATCH 2/2] Opt 1 - move r1 and r2 to inner loop and collapse loops --- src/core_atmosphere/dynamics/mpas_atm_time_integration.F | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F index 7c31cacbe4..ef66faf3c5 100644 --- a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F +++ b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F @@ -7416,13 +7416,12 @@ subroutine atm_compute_solve_diagnostics_work(nCells, nEdges, nVertices, & ! r = config_apvm_upwinding * dt !$acc parallel default(present) - !$acc loop gang + !$acc loop gang worker vector collapse(2) do iEdge = edgeStart,edgeEnd - r1 = 1.0_RKIND * invDvEdge(iEdge) - r2 = 1.0_RKIND * invDcEdge(iEdge) !DIR$ IVDEP - !$acc loop vector do k = 1,nVertLevels + r1 = 1.0_RKIND * invDvEdge(iEdge) + r2 = 1.0_RKIND * invDcEdge(iEdge) gradPVt(k,iEdge) = (pv_vertex(k,verticesOnEdge(2,iEdge)) - pv_vertex(k,verticesOnEdge(1,iEdge))) * r1 gradPVn(k,iEdge) = (pv_cell(k,cellsOnEdge(2,iEdge)) - pv_cell(k,cellsOnEdge(1,iEdge))) * r2 pv_edge(k,iEdge) = pv_edge(k,iEdge) - r * (v(k,iEdge) * gradPVt(k,iEdge) + u(k,iEdge) * gradPVn(k,iEdge))