From cc3c08d3c183fea5562f0062572900534553ffb9 Mon Sep 17 00:00:00 2001 From: Dave Gill Date: Sun, 21 Mar 2021 22:20:11 -0600 Subject: [PATCH] Promote wwE and wwI to "i1" variables for performance The memory-sized local variable wwE and wwI were allocated on the stack for rk_tendency, and for each of the multiple calls to rk_scalar_tend. These are each called for every RK time step. The mods allocate the space in the solver once per model time step, and since the variables are "i1", they are not kept during a nested domain. Changes to be committed: modified: Registry/Registry.EM_COMMON modified: dyn_em/module_em.F modified: dyn_em/solve_em.F --- Registry/Registry.EM_COMMON | 2 ++ dyn_em/module_em.F | 4 ++-- dyn_em/solve_em.F | 14 +++++++------- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index 6d0ff8d014..665932aa93 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -209,6 +209,8 @@ state real w ikjb dyn_em 2 Z \ state real ww ikj dyn_em 1 Z r "ww" "mu-coupled eta-dot" "Pa s-1" state real rw ikj dyn_em 1 Z - "rw" "mu-coupled w" "Pa m s-1" i1 real ww1 ikj dyn_em 1 Z +i1 real wwE ikj dyn_em 1 Z - "wwE" "Explicit vertical velocity" "Pa s-1" +i1 real wwI ikj dyn_em 1 Z - "wwI" "Implicit vertical velocity" "Pa s-1" state real ww_m ikj dyn_em 1 Z r "ww_m" "time-avg mu-coupled eta-dot" "Pa s-1" i1 real wwp ikj dyn_em 1 Z i1 real rw_tend ikj dyn_em 1 Z diff --git a/dyn_em/module_em.F b/dyn_em/module_em.F index ad1aad94be..9ece769532 100644 --- a/dyn_em/module_em.F +++ b/dyn_em/module_em.F @@ -192,7 +192,7 @@ SUBROUTINE rk_tendency ( config_flags, rk_step, & ru_tendf, rv_tendf, rw_tendf, ph_tendf, t_tendf, & mu_tend, u_save, v_save, w_save, ph_save, & t_save, mu_save, RTHFTEN, & - ru, rv, rw, ww, & + ru, rv, rw, ww, wwE, wwI, & u, v, w, t, ph, & u_old, v_old, w_old, t_old, ph_old, & h_diabatic, phb,t_init, & @@ -1096,7 +1096,7 @@ END SUBROUTINE rk_addtend_dry SUBROUTINE rk_scalar_tend ( scs, sce, config_flags, & tenddec, & rk_step, dt_step, & - ru, rv, ww, & + ru, rv, ww, wwE, wwI, & u_old, v_old, & mut, mub, mu_old, & c1h, c2h, c1f, c2f, alt, & diff --git a/dyn_em/solve_em.F b/dyn_em/solve_em.F index acb9f5569f..ca6930464c 100644 --- a/dyn_em/solve_em.F +++ b/dyn_em/solve_em.F @@ -256,7 +256,7 @@ SUBROUTINE solve_em ( grid , config_flags & f_flux = config_flags%do_avgflx_cugd .EQ. 1 ! Compute these starting and stopping locations for each tile and number of tiles. -! See: http://www.mmm.ucar.edu/wrf/WG2/topics/settiles +! See: https://www2.mmm.ucar.edu/wrf/WG2/topics/settiles CALL set_tiles ( ZONE_SOLVE_EM, grid , ids , ide , jds , jde , ips , ipe , jps , jpe ) ! CALL set_tiles ( grid , ids , ide , jds , jde , ips , ipe , jps , jpe ) @@ -806,7 +806,7 @@ SUBROUTINE solve_em ( grid , config_flags & ,ru_tendf, rv_tendf, rw_tendf, ph_tendf, t_tendf & ,mu_tend, grid%u_save, grid%v_save, w_save, ph_save & ,grid%t_save, mu_save, grid%rthften & - ,grid%ru, grid%rv, grid%rw, grid%ww & + ,grid%ru, grid%rv, grid%rw, grid%ww, wwE, wwI & ,grid%u_2, grid%v_2, grid%w_2, grid%t_2, grid%ph_2 & ,grid%u_1, grid%v_1, grid%w_1, grid%t_1, grid%ph_1 & ,grid%h_diabatic, grid%phb, grid%t_init & @@ -2137,7 +2137,7 @@ SUBROUTINE solve_em ( grid , config_flags & BENCH_START(rk_scalar_tend_tim) CALL rk_scalar_tend ( im, im, config_flags, tenddec, & rk_step, dt_rk, & - grid%ru_m, grid%rv_m, grid%ww_m, & + grid%ru_m, grid%rv_m, grid%ww_m, wwE, wwI, & grid%u_1, grid%v_1, & grid%muts, grid%mub, grid%mu_1, & grid%c1h, grid%c2h, grid%c1f, grid%c2f, & @@ -2306,7 +2306,7 @@ SUBROUTINE solve_em ( grid , config_flags & tenddec = .false. CALL rk_scalar_tend ( 1, 1, config_flags, tenddec, & rk_step, dt_rk, & - grid%ru_m, grid%rv_m, grid%ww_m, & + grid%ru_m, grid%rv_m, grid%ww_m, wwE, wwI, & grid%u_1, grid%v_1, & grid%muts, grid%mub, grid%mu_1, & grid%c1h, grid%c2h, grid%c1f, grid%c2f, & @@ -2399,7 +2399,7 @@ SUBROUTINE solve_em ( grid , config_flags & ( adv_ct_indices(ic) >= PARAM_FIRST_SCALAR )) CALL rk_scalar_tend ( ic, ic, config_flags, tenddec, & rk_step, dt_rk, & - grid%ru_m, grid%rv_m, grid%ww_m, & + grid%ru_m, grid%rv_m, grid%ww_m, wwE, wwI, & grid%u_1, grid%v_1, & grid%muts, grid%mub, grid%mu_1, & grid%c1h, grid%c2h, grid%c1f, grid%c2f, & @@ -2561,7 +2561,7 @@ SUBROUTINE solve_em ( grid , config_flags & tenddec = .false. CALL rk_scalar_tend ( ic, ic, config_flags, tenddec, & rk_step, dt_rk, & - grid%ru_m, grid%rv_m, grid%ww_m, & + grid%ru_m, grid%rv_m, grid%ww_m, wwE, wwI, & grid%u_1, grid%v_1, & grid%muts, grid%mub, grid%mu_1, & grid%c1h, grid%c2h, grid%c1f, grid%c2f, & @@ -2703,7 +2703,7 @@ SUBROUTINE solve_em ( grid , config_flags & tenddec = .false. CALL rk_scalar_tend ( is, is, config_flags, tenddec, & rk_step, dt_rk, & - grid%ru_m, grid%rv_m, grid%ww_m, & + grid%ru_m, grid%rv_m, grid%ww_m, wwE, wwI, & grid%u_1, grid%v_1, & grid%muts, grid%mub, grid%mu_1, & grid%c1h, grid%c2h, grid%c1f, grid%c2f, &