From 8008eea25707354fc2eacb1f99e57ddcb4b5679b Mon Sep 17 00:00:00 2001 From: Nicholas Hannah Date: Wed, 22 Jul 2015 12:59:53 -0700 Subject: [PATCH] Move calls to update grid for z remapping of diagnostics out of continuity(). It is not necessary to pass the diag mediator structure into calls to continuity(). #62 --- src/core/MOM_continuity.F90 | 5 ++--- src/core/MOM_continuity_PPM.F90 | 9 ++------- src/core/MOM_dynamics_legacy_split.F90 | 24 +++++++++++++++--------- src/core/MOM_dynamics_split_RK2.F90 | 11 +++++++---- src/core/MOM_dynamics_unsplit.F90 | 11 +++++++---- src/core/MOM_dynamics_unsplit_RK2.F90 | 6 +++--- 6 files changed, 36 insertions(+), 30 deletions(-) diff --git a/src/core/MOM_continuity.F90 b/src/core/MOM_continuity.F90 index 0f62976a4f..b0556eaf06 100644 --- a/src/core/MOM_continuity.F90 +++ b/src/core/MOM_continuity.F90 @@ -72,7 +72,7 @@ module MOM_continuity contains -subroutine continuity(u, v, hin, h, uh, vh, dt, G, CS, diag_cs, uhbt, vhbt, OBC, & +subroutine continuity(u, v, hin, h, uh, vh, dt, G, CS, uhbt, vhbt, OBC, & visc_rem_u, visc_rem_v, u_cor, v_cor, & uhbt_aux, vhbt_aux, u_cor_aux, v_cor_aux, BT_cont) real, intent(in), dimension(NIMEMB_,NJMEM_,NKMEM_) :: u @@ -84,7 +84,6 @@ subroutine continuity(u, v, hin, h, uh, vh, dt, G, CS, diag_cs, uhbt, vhbt, OBC, real, intent(in) :: dt type(ocean_grid_type), intent(inout) :: G type(continuity_CS), pointer :: CS - type(diag_ctrl), intent(inout) :: diag_cs real, intent(in), optional, dimension(NIMEMB_,NJMEM_) :: uhbt real, intent(in), optional, dimension(NIMEM_,NJMEMB_) :: vhbt type(ocean_OBC_type), pointer, optional :: OBC @@ -151,7 +150,7 @@ subroutine continuity(u, v, hin, h, uh, vh, dt, G, CS, diag_cs, uhbt, vhbt, OBC, " or neither.") if (CS%continuity_scheme == PPM_SCHEME) then - call continuity_PPM(u, v, hin, h, uh, vh, dt, G, CS%PPM_CSp, diag_cs, uhbt, vhbt, OBC, & + call continuity_PPM(u, v, hin, h, uh, vh, dt, G, CS%PPM_CSp, uhbt, vhbt, OBC, & visc_rem_u, visc_rem_v, u_cor, v_cor, & uhbt_aux, vhbt_aux, u_cor_aux, v_cor_aux, BT_cont) else diff --git a/src/core/MOM_continuity_PPM.F90 b/src/core/MOM_continuity_PPM.F90 index 552aff2aad..949173d072 100644 --- a/src/core/MOM_continuity_PPM.F90 +++ b/src/core/MOM_continuity_PPM.F90 @@ -44,7 +44,7 @@ module MOM_continuity_PPM !********+*********+*********+*********+*********+*********+*********+** use MOM_cpu_clock, only : cpu_clock_id, cpu_clock_begin, cpu_clock_end, CLOCK_ROUTINE -use MOM_diag_mediator, only : time_type, diag_ctrl, diag_update_target_grids +use MOM_diag_mediator, only : time_type, diag_ctrl use MOM_error_handler, only : MOM_error, FATAL, WARNING, is_root_pe use MOM_file_parser, only : get_param, log_version, param_file_type use MOM_grid, only : ocean_grid_type @@ -103,7 +103,7 @@ module MOM_continuity_PPM contains -subroutine continuity_PPM(u, v, hin, h, uh, vh, dt, G, CS, diag_cs, uhbt, vhbt, OBC, & +subroutine continuity_PPM(u, v, hin, h, uh, vh, dt, G, CS, uhbt, vhbt, OBC, & visc_rem_u, visc_rem_v, u_cor, v_cor, & uhbt_aux, vhbt_aux, u_cor_aux, v_cor_aux, BT_cont) real, dimension(NIMEMB_,NJMEM_,NKMEM_), intent(in) :: u @@ -115,7 +115,6 @@ subroutine continuity_PPM(u, v, hin, h, uh, vh, dt, G, CS, diag_cs, uhbt, vhbt, real, intent(in) :: dt type(ocean_grid_type), intent(inout) :: G type(continuity_PPM_CS), pointer :: CS - type(diag_ctrl), intent(inout) :: diag_cs real, dimension(NIMEMB_,NJMEM_), intent(in), optional :: uhbt real, dimension(NIMEM_,NJMEMB_), intent(in), optional :: vhbt type(ocean_OBC_type), pointer, optional :: OBC @@ -317,10 +316,6 @@ subroutine continuity_PPM(u, v, hin, h, uh, vh, dt, G, CS, diag_cs, uhbt, vhbt, endif endif - ! Whenever thickness changes let the diag manager know, target grids - ! for vertical remapping may need to be regenerated. - call diag_update_target_grids(diag_cs) - end subroutine continuity_PPM subroutine zonal_mass_flux(u, h_in, uh, dt, G, CS, LB, uhbt, OBC, & diff --git a/src/core/MOM_dynamics_legacy_split.F90 b/src/core/MOM_dynamics_legacy_split.F90 index 20ddf14572..533c8c9248 100644 --- a/src/core/MOM_dynamics_legacy_split.F90 +++ b/src/core/MOM_dynamics_legacy_split.F90 @@ -78,7 +78,7 @@ module MOM_dynamics_legacy_split use MOM_diag_mediator, only : diag_mediator_init, enable_averaging use MOM_diag_mediator, only : disable_averaging, post_data, safe_alloc_ptr use MOM_diag_mediator, only : register_diag_field, register_static_field -use MOM_diag_mediator, only : set_diag_mediator_grid, diag_ctrl +use MOM_diag_mediator, only : set_diag_mediator_grid, diag_ctrl, diag_update_target_grids use MOM_domains, only : MOM_domains_init, pass_var, pass_vector use MOM_domains, only : pass_var_start, pass_var_complete use MOM_domains, only : pass_vector_start, pass_vector_complete @@ -588,7 +588,7 @@ subroutine step_MOM_dyn_legacy_split(u, v, h, tv, visc, & if (CS%readjust_velocity) then ! Adjust the input velocites so that their transports match uhbt_out & vhbt_out. call continuity(u, v, h, hp, uh_in, vh_in, dt, G, & - CS%continuity_CSp, CS%diag, uhbt_in, vhbt_in, CS%OBC, & + CS%continuity_CSp, uhbt_in, vhbt_in, CS%OBC, & CS%visc_rem_u, CS%visc_rem_v, u_adj, v_adj, & BT_cont=CS%BT_cont) u_init => u_adj ; v_init => v_adj @@ -601,7 +601,7 @@ subroutine step_MOM_dyn_legacy_split(u, v, h, tv, visc, & CS%readjust_velocity = .false. else call continuity(u, v, h, hp, uh_in, vh_in, dt, G, & - CS%continuity_CSp, CS%diag, OBC=CS%OBC, BT_cont=CS%BT_cont) + CS%continuity_CSp, OBC=CS%OBC, BT_cont=CS%BT_cont) !### call continuity(u, v, h, hp, uh_in, vh_in, dt, G, & !### CS%continuity_CSp, OBC=CS%OBC, visc_rem_u=CS%visc_rem_u, & !### visc_rem_v=CS%visc_rem_v, BT_cont=CS%BT_cont) @@ -631,7 +631,7 @@ subroutine step_MOM_dyn_legacy_split(u, v, h, tv, visc, & if (associated(CS%BT_cont) .or. CS%BT_use_layer_fluxes) then call cpu_clock_begin(id_clock_continuity) call continuity(u, v, h, hp, uh_in, vh_in, dt, G, & - CS%continuity_CSp, CS%diag, OBC=CS%OBC, & + CS%continuity_CSp, OBC=CS%OBC, & visc_rem_u=CS%visc_rem_u, visc_rem_v=CS%visc_rem_v, & BT_cont=CS%BT_cont) call cpu_clock_end(id_clock_continuity) @@ -717,7 +717,7 @@ subroutine step_MOM_dyn_legacy_split(u, v, h, tv, visc, & ! hp = h + dt * div . uh call cpu_clock_begin(id_clock_continuity) call continuity(up, vp, h, hp, uh, vh, dt, G, CS%continuity_CSp, & - CS%diag, CS%uhbt, CS%vhbt, CS%OBC, CS%visc_rem_u, & + CS%uhbt, CS%vhbt, CS%OBC, CS%visc_rem_u, & CS%visc_rem_v, u_av, v_av, BT_cont=CS%BT_cont) call cpu_clock_end(id_clock_continuity) @@ -928,10 +928,13 @@ subroutine step_MOM_dyn_legacy_split(u, v, h, tv, visc, & enddo ; enddo ; enddo ; endif call cpu_clock_begin(id_clock_continuity) call continuity(u, v, h, h, uh, vh, dt, G, & - CS%continuity_CSp, CS%diag, CS%uhbt, CS%vhbt, CS%OBC, & + CS%continuity_CSp, CS%uhbt, CS%vhbt, CS%OBC, & CS%visc_rem_u, CS%visc_rem_v, u_av, v_av, & uhbt_out, vhbt_out, u, v) call cpu_clock_end(id_clock_continuity) + ! Whenever thickness changes let the diag manager know, target grids + ! for vertical remapping may need to be regenerated. + call diag_update_target_grids(CS%diag) if (G%nonblocking_updates) then call cpu_clock_begin(id_clock_pass) pid_h = pass_var_start(h, G%Domain) @@ -967,9 +970,12 @@ subroutine step_MOM_dyn_legacy_split(u, v, h, tv, visc, & ! u_av and v_av adjusted so their mass transports match uhbt and vhbt. call cpu_clock_begin(id_clock_continuity) call continuity(u, v, h, h, uh, vh, dt, G, & - CS%continuity_CSp, CS%diag, CS%uhbt, CS%vhbt, CS%OBC, & + CS%continuity_CSp, CS%uhbt, CS%vhbt, CS%OBC, & CS%visc_rem_u, CS%visc_rem_v, u_av, v_av) call cpu_clock_end(id_clock_continuity) + ! Whenever thickness changes let the diag manager know, target grids + ! for vertical remapping may need to be regenerated. + call diag_update_target_grids(CS%diag) call cpu_clock_begin(id_clock_pass) call pass_var(h, G%Domain) call cpu_clock_end(id_clock_pass) @@ -1067,7 +1073,7 @@ subroutine adjustments_dyn_legacy_split(u, v, h, dt, G, CS) if (CS%readjust_BT_trans) then call cpu_clock_begin(id_clock_continuity) call continuity(u, v, h, h_temp, uh_temp, vh_temp, dt, G, & - CS%continuity_CSp, CS%diag, OBC=CS%OBC) + CS%continuity_CSp, OBC=CS%OBC) call cpu_clock_end(id_clock_continuity) !$OMP parallel default(none) shared(is,ie,js,je,nz,CS,uh_temp,vh_temp) !$OMP do @@ -1407,7 +1413,7 @@ subroutine initialize_dyn_legacy_split(u, v, h, uh, vh, eta, Time, G, param_file if (.not. query_initialized(uh,"uh",restart_CS) .or. & .not. query_initialized(vh,"vh",restart_CS)) then h_tmp(:,:,:) = h(:,:,:) - call continuity(u, v, h, h_tmp, uh, vh, dt, G, CS%continuity_CSp, CS%diag, OBC=CS%OBC) + call continuity(u, v, h, h_tmp, uh, vh, dt, G, CS%continuity_CSp, OBC=CS%OBC) call cpu_clock_begin(id_clock_pass_init) call pass_var(h_tmp, G%Domain) call cpu_clock_end(id_clock_pass_init) diff --git a/src/core/MOM_dynamics_split_RK2.F90 b/src/core/MOM_dynamics_split_RK2.F90 index 39f9d86e3b..e23c97382f 100644 --- a/src/core/MOM_dynamics_split_RK2.F90 +++ b/src/core/MOM_dynamics_split_RK2.F90 @@ -605,7 +605,7 @@ subroutine step_MOM_dyn_split_RK2(u, v, h, tv, visc, & if (associated(CS%BT_cont) .or. CS%BT_use_layer_fluxes) then call cpu_clock_begin(id_clock_continuity) call continuity(u, v, h, hp, uh_in, vh_in, dt, G, & - CS%continuity_CSp, CS%diag, OBC=CS%OBC, visc_rem_u=CS%visc_rem_u, & + CS%continuity_CSp, OBC=CS%OBC, visc_rem_u=CS%visc_rem_u, & visc_rem_v=CS%visc_rem_v, BT_cont=CS%BT_cont) call cpu_clock_end(id_clock_continuity) if (BT_cont_BT_thick) then @@ -695,7 +695,7 @@ subroutine step_MOM_dyn_split_RK2(u, v, h, tv, visc, & ! uh = u_av * h ! hp = h + dt * div . uh call cpu_clock_begin(id_clock_continuity) - call continuity(up, vp, h, hp, uh, vh, dt, G, CS%continuity_CSp, CS%diag, & + call continuity(up, vp, h, hp, uh, vh, dt, G, CS%continuity_CSp, & CS%uhbt, CS%vhbt, CS%OBC, CS%visc_rem_u, CS%visc_rem_v, & u_av, v_av, BT_cont=CS%BT_cont) call cpu_clock_end(id_clock_continuity) @@ -901,9 +901,12 @@ subroutine step_MOM_dyn_split_RK2(u, v, h, tv, visc, & ! u_av and v_av adjusted so their mass transports match uhbt and vhbt. call cpu_clock_begin(id_clock_continuity) call continuity(u, v, h, h, uh, vh, dt, G, & - CS%continuity_CSp, CS%diag, CS%uhbt, CS%vhbt, CS%OBC, & + CS%continuity_CSp, CS%uhbt, CS%vhbt, CS%OBC, & CS%visc_rem_u, CS%visc_rem_v, u_av, v_av) call cpu_clock_end(id_clock_continuity) + ! Whenever thickness changes let the diag manager know, target grids + ! for vertical remapping may need to be regenerated. + call diag_update_target_grids(CS%diag) call cpu_clock_begin(id_clock_pass) call do_group_pass(CS%pass_h, G%Domain) call cpu_clock_end(id_clock_pass) @@ -1258,7 +1261,7 @@ subroutine initialize_dyn_split_RK2(u, v, h, uh, vh, eta, Time, G, param_file, & if (.not. query_initialized(uh,"uh",restart_CS) .or. & .not. query_initialized(vh,"vh",restart_CS)) then h_tmp(:,:,:) = h(:,:,:) - call continuity(u, v, h, h_tmp, uh, vh, dt, G, CS%continuity_CSp, CS%diag, OBC=CS%OBC) + call continuity(u, v, h, h_tmp, uh, vh, dt, G, CS%continuity_CSp, OBC=CS%OBC) call cpu_clock_begin(id_clock_pass_init) call create_group_pass(pass_h_tmp, h_tmp, G%Domain) call do_group_pass(pass_h_tmp, G%Domain) diff --git a/src/core/MOM_dynamics_unsplit.F90 b/src/core/MOM_dynamics_unsplit.F90 index 9c51432819..ff911873f6 100644 --- a/src/core/MOM_dynamics_unsplit.F90 +++ b/src/core/MOM_dynamics_unsplit.F90 @@ -78,7 +78,7 @@ module MOM_dynamics_unsplit use MOM_diag_mediator, only : diag_mediator_init, enable_averaging use MOM_diag_mediator, only : disable_averaging, post_data, safe_alloc_ptr use MOM_diag_mediator, only : register_diag_field, register_static_field -use MOM_diag_mediator, only : set_diag_mediator_grid, diag_ctrl +use MOM_diag_mediator, only : set_diag_mediator_grid, diag_ctrl, diag_update_target_grids use MOM_domains, only : MOM_domains_init, pass_var, pass_vector use MOM_domains, only : pass_var_start, pass_var_complete use MOM_domains, only : pass_vector_start, pass_vector_complete @@ -268,7 +268,7 @@ subroutine step_MOM_dyn_unsplit(u, v, h, tv, visc, Time_local, dt, fluxes, & ! uh = u*h ! hp = h + dt/2 div . uh call cpu_clock_begin(id_clock_continuity) - call continuity(u, v, h, hp, uh, vh, dt*0.5, G, CS%continuity_CSp, CS%diag, & + call continuity(u, v, h, hp, uh, vh, dt*0.5, G, CS%continuity_CSp, & OBC=CS%OBC) call cpu_clock_end(id_clock_continuity) call cpu_clock_begin(id_clock_pass) @@ -378,7 +378,7 @@ subroutine step_MOM_dyn_unsplit(u, v, h, tv, visc, Time_local, dt, fluxes, & ! h_av = hp + dt/2 div . uh call cpu_clock_begin(id_clock_continuity) call continuity(up, vp, hp, h_av, uh, vh, & - (0.5*dt), G, CS%continuity_CSp, CS%diag, OBC=CS%OBC) + (0.5*dt), G, CS%continuity_CSp, OBC=CS%OBC) call cpu_clock_end(id_clock_continuity) call cpu_clock_begin(id_clock_pass) call pass_var(h_av, G%Domain) @@ -437,8 +437,11 @@ subroutine step_MOM_dyn_unsplit(u, v, h, tv, visc, Time_local, dt, fluxes, & ! h = hp + dt/2 div . uh call cpu_clock_begin(id_clock_continuity) call continuity(upp, vpp, hp, h, uh, vh, & - (dt*0.5), G, CS%continuity_CSp, CS%diag, OBC=CS%OBC) + (dt*0.5), G, CS%continuity_CSp, OBC=CS%OBC) call cpu_clock_end(id_clock_continuity) + ! Whenever thickness changes let the diag manager know, target grids + ! for vertical remapping may need to be regenerated. + call diag_update_target_grids(CS%diag) call cpu_clock_begin(id_clock_pass) call pass_var(h, G%Domain) call pass_vector(uh, vh, G%Domain) diff --git a/src/core/MOM_dynamics_unsplit_RK2.F90 b/src/core/MOM_dynamics_unsplit_RK2.F90 index 87a8b2052f..53ca73f4a0 100644 --- a/src/core/MOM_dynamics_unsplit_RK2.F90 +++ b/src/core/MOM_dynamics_unsplit_RK2.F90 @@ -283,7 +283,7 @@ subroutine step_MOM_dyn_unsplit_RK2(u_in, v_in, h_in, tv, visc, Time_local, dt, ! This is a duplicate caclulation of the last continuity from the previous step ! and could/should be optimized out. -AJA call continuity(u_in, v_in, h_in, hp, uh, vh, dt_pred, G, CS%continuity_CSp, & - CS%diag, OBC=CS%OBC) + OBC=CS%OBC) call cpu_clock_end(id_clock_continuity) call cpu_clock_begin(id_clock_pass) call pass_var(hp, G%Domain) @@ -370,7 +370,7 @@ subroutine step_MOM_dyn_unsplit_RK2(u_in, v_in, h_in, tv, visc, Time_local, dt, ! h_av = h + dt div . uh call cpu_clock_begin(id_clock_continuity) call continuity(up, vp, h_in, hp, uh, vh, & - dt, G, CS%continuity_CSp, CS%diag, OBC=CS%OBC) + dt, G, CS%continuity_CSp, OBC=CS%OBC) call cpu_clock_end(id_clock_continuity) call cpu_clock_begin(id_clock_pass) call pass_var(hp, G%Domain) @@ -427,7 +427,7 @@ subroutine step_MOM_dyn_unsplit_RK2(u_in, v_in, h_in, tv, visc, Time_local, dt, ! h[n+1] = h[n] + dt div . uh call cpu_clock_begin(id_clock_continuity) call continuity(up, vp, h_in, h_in, uh, vh, & - dt, G, CS%continuity_CSp, CS%diag, OBC=CS%OBC) + dt, G, CS%continuity_CSp, OBC=CS%OBC) call cpu_clock_end(id_clock_continuity) call cpu_clock_begin(id_clock_pass) call pass_var(h_in, G%Domain)