diff --git a/interfaces/jules_interface/source/algorithm/jules_exp_alg_mod.x90 b/interfaces/jules_interface/source/algorithm/jules_exp_alg_mod.x90 index 18e785d09..59624dbfa 100644 --- a/interfaces/jules_interface/source/algorithm/jules_exp_alg_mod.x90 +++ b/interfaces/jules_interface/source/algorithm/jules_exp_alg_mod.x90 @@ -229,7 +229,7 @@ contains type(xios_date) :: datetime integer(i_def), save :: day_of_year, second_of_day - if ( subroutine_timers ) call timer('jules_exp_alg') + if ( subroutine_timers ) call timer('jules.explicit') call log_event( 'slow_physics: Running explicit JULES layer', LOG_LEVEL_DEBUG ) @@ -455,7 +455,7 @@ contains ! Switch UM back to columns call um_sizes_init(1_i_def) - if ( subroutine_timers ) call timer('jules_exp_alg') + if ( subroutine_timers ) call timer('jules.explicit') ! output JULES diagnostics if (write_diag .and. use_xios_io) then diff --git a/interfaces/jules_interface/source/algorithm/jules_extra_alg_mod.x90 b/interfaces/jules_interface/source/algorithm/jules_extra_alg_mod.x90 index 3ee3d7829..943ca1cbe 100644 --- a/interfaces/jules_interface/source/algorithm/jules_extra_alg_mod.x90 +++ b/interfaces/jules_interface/source/algorithm/jules_extra_alg_mod.x90 @@ -149,7 +149,7 @@ contains type(mesh_type), pointer :: mesh => null() integer( kind=i_def ) :: ncells - if ( subroutine_timers ) call timer('jules_extra_alg') + if ( subroutine_timers ) call timer('jules.extra') ! Unpack precipitation fields call microphysics_fields%get_field('ls_rain', ls_rain) @@ -268,7 +268,7 @@ contains call um_sizes_init(1_i_def) - if ( subroutine_timers ) call timer('jules_extra_alg') + if ( subroutine_timers ) call timer('jules.extra') if (use_xios_io .and. write_diag) then diff --git a/interfaces/jules_interface/source/algorithm/jules_imp_alg_mod.x90 b/interfaces/jules_interface/source/algorithm/jules_imp_alg_mod.x90 index c3cbb3ca4..90ea2f880 100644 --- a/interfaces/jules_interface/source/algorithm/jules_imp_alg_mod.x90 +++ b/interfaces/jules_interface/source/algorithm/jules_imp_alg_mod.x90 @@ -167,7 +167,7 @@ contains type( mesh_type ), pointer :: mesh => null() integer(i_def) :: loop, ncells - if ( subroutine_timers ) call timer("jules_imp_alg") + if ( subroutine_timers ) call timer("jules.implicit") call log_event( 'Running implicit Jules', LOG_LEVEL_DEBUG ) @@ -305,7 +305,7 @@ contains ocn_cpl_point) ) - if ( subroutine_timers ) call timer("jules_imp_alg") + if ( subroutine_timers ) call timer("jules.implicit") ! Output the BL diagnostics if (use_xios_io .and. write_diag .and. outer == outer_iterations) then diff --git a/interfaces/jules_interface/source/algorithm/rad_tile_alg_mod.x90 b/interfaces/jules_interface/source/algorithm/rad_tile_alg_mod.x90 index 63bb8386e..ed919e07c 100644 --- a/interfaces/jules_interface/source/algorithm/rad_tile_alg_mod.x90 +++ b/interfaces/jules_interface/source/algorithm/rad_tile_alg_mod.x90 @@ -137,7 +137,7 @@ subroutine rad_tile_alg(tile_sw_direct_albedo, tile_sw_diffuse_albedo, & real( kind=r_def ) :: planet_lw_albedo - if ( subroutine_timers ) call timer('rad_tile_alg') + if ( subroutine_timers ) call timer('jules.radiation') vector_space => function_space_collection%get_fs( & twod_mesh, 0, 0, W3, n_sw_band * n_surf_tile ) @@ -306,7 +306,7 @@ subroutine rad_tile_alg(tile_sw_direct_albedo, tile_sw_diffuse_albedo, & call log_event( log_scratch_space, LOG_LEVEL_ERROR ) end if - if ( subroutine_timers ) call timer('rad_tile_alg') + if ( subroutine_timers ) call timer('jules.radiation') end subroutine rad_tile_alg end module rad_tile_alg_mod diff --git a/interfaces/jules_interface/source/diagnostics/jules_exp_diags_mod.f90 b/interfaces/jules_interface/source/diagnostics/jules_exp_diags_mod.f90 index 28c952446..6e5f813d6 100644 --- a/interfaces/jules_interface/source/diagnostics/jules_exp_diags_mod.f90 +++ b/interfaces/jules_interface/source/diagnostics/jules_exp_diags_mod.f90 @@ -40,13 +40,13 @@ subroutine initialise_diags_for_jules_exp(z0h_eff, gross_prim_prod, & type( field_type ), intent(inout) :: gross_prim_prod type( field_type ), intent(inout) :: soil_respiration - if ( subroutine_timers ) call timer("jules_exp_diags") + if ( subroutine_timers ) call timer("diags.jules_exp") z0h_eff_flag = init_diag(z0h_eff, 'surface__z0h_eff') gross_prim_prod_flag = init_diag(gross_prim_prod, 'surface__gross_prim_prod') soil_respiration_flag = init_diag(soil_respiration, 'surface__soil_respiration') - if ( subroutine_timers ) call timer("jules_exp_diags") + if ( subroutine_timers ) call timer("diags.jules_exp") end subroutine initialise_diags_for_jules_exp @@ -81,7 +81,7 @@ subroutine output_diags_for_jules_exp(z0h_eff, tile_fraction, z0m_tile, z0m, & type( field_type ), intent(in) :: dust_flux - if ( subroutine_timers ) call timer("jules_exp_diags") + if ( subroutine_timers ) call timer("diags.jules_exp") ! Prognostic fields from surface collection call tile_fraction%write_field('surface__tile_fraction') @@ -101,7 +101,7 @@ subroutine output_diags_for_jules_exp(z0h_eff, tile_fraction, z0m_tile, z0m, & if (gross_prim_prod_flag) call gross_prim_prod%write_field() if (soil_respiration_flag) call soil_respiration%write_field() - if ( subroutine_timers ) call timer("jules_exp_diags") + if ( subroutine_timers ) call timer("diags.jules_exp") end subroutine output_diags_for_jules_exp end module jules_exp_diags_mod diff --git a/interfaces/jules_interface/source/diagnostics/jules_imp_diags_mod.x90 b/interfaces/jules_interface/source/diagnostics/jules_imp_diags_mod.x90 index 5dc8ae284..257f605f5 100644 --- a/interfaces/jules_interface/source/diagnostics/jules_imp_diags_mod.x90 +++ b/interfaces/jules_interface/source/diagnostics/jules_imp_diags_mod.x90 @@ -261,7 +261,7 @@ contains type( field_type ) :: land_surface_temperature, grid_canopy_evap, & grid_surface_temperature, grid_latent_heat, grid_sublimation - if ( subroutine_timers ) call timer("jules_imp_diags") + if ( subroutine_timers ) call timer("diags.jules_imp") ! Output prognostic fields - always output these on 2nd loop if (loop == 2) then @@ -341,7 +341,7 @@ contains end if - if ( subroutine_timers ) call timer("jules_imp_diags") + if ( subroutine_timers ) call timer("diags.jules_imp") end subroutine output_diags_for_jules_imp end module jules_imp_diags_mod diff --git a/interfaces/jules_interface/source/diagnostics/jules_seaice_diags_mod.x90 b/interfaces/jules_interface/source/diagnostics/jules_seaice_diags_mod.x90 index b7b796462..7f8e52406 100644 --- a/interfaces/jules_interface/source/diagnostics/jules_seaice_diags_mod.x90 +++ b/interfaces/jules_interface/source/diagnostics/jules_seaice_diags_mod.x90 @@ -49,7 +49,7 @@ contains ! Diagnostics locally computed here from other fields type( field_type ) :: sea_ice_fraction - if ( subroutine_timers ) call timer("jules_seaice_diags") + if ( subroutine_timers ) call timer("diags.jules_seaice") ! Prognostic fields call sea_ice_thickness%write_field('seaice__sea_ice_thickness') @@ -65,7 +65,7 @@ contains first_sea_ice_tile, n_sea_ice_tile)) call sea_ice_fraction%write_field('seaice__sea_ice_fraction') - if ( subroutine_timers ) call timer("jules_seaice_diags") + if ( subroutine_timers ) call timer("diags.jules_seaice") end subroutine output_diags_for_jules_seaice end module jules_seaice_diags_mod diff --git a/interfaces/jules_interface/source/diagnostics/jules_snow_diags_mod.x90 b/interfaces/jules_interface/source/diagnostics/jules_snow_diags_mod.x90 index cc40f42a4..abb76d4b0 100644 --- a/interfaces/jules_interface/source/diagnostics/jules_snow_diags_mod.x90 +++ b/interfaces/jules_interface/source/diagnostics/jules_snow_diags_mod.x90 @@ -45,14 +45,14 @@ contains type( field_type ), intent(inout) :: grid_snow_mass type( field_type ), intent(inout) :: grid_snowmelt - if ( subroutine_timers ) call timer("jules_snow_diags") + if ( subroutine_timers ) call timer("diags.jules_snow") ! 2D fields grid_snow_mass_flag = init_diag(grid_snow_mass, 'snow__grid_snow_mass') if (grid_snow_mass_flag) call invoke( setval_c(grid_snow_mass, 0.0_r_def) ) grid_snowmelt_flag = init_diag(grid_snowmelt, 'snow__grid_snowmelt') - if ( subroutine_timers ) call timer("jules_snow_diags") + if ( subroutine_timers ) call timer("diags.jules_snow") end subroutine initialise_diags_for_jules_snow @@ -100,7 +100,7 @@ contains type( field_type ), intent(inout) :: grid_snowmelt - if ( subroutine_timers ) call timer("jules_snow_diags") + if ( subroutine_timers ) call timer("diags.jules_snow") ! Prognostic fields call tile_snow_mass%write_field('snow__snow_mass') @@ -126,7 +126,7 @@ contains call grid_snow_mass%write_field() end if - if ( subroutine_timers ) call timer("jules_snow_diags") + if ( subroutine_timers ) call timer("diags.jules_snow") end subroutine output_diags_for_jules_snow end module jules_snow_diags_mod diff --git a/interfaces/jules_interface/source/diagnostics/jules_soil_diags_mod.x90 b/interfaces/jules_interface/source/diagnostics/jules_soil_diags_mod.x90 index 47a01a7a2..e384fcb89 100644 --- a/interfaces/jules_interface/source/diagnostics/jules_soil_diags_mod.x90 +++ b/interfaces/jules_interface/source/diagnostics/jules_soil_diags_mod.x90 @@ -56,7 +56,7 @@ contains type( field_type ), intent(inout) :: throughfall type( field_type ), intent(inout) :: grid_throughfall - if ( subroutine_timers ) call timer("jules_soil_diags") + if ( subroutine_timers ) call timer("diags.jules_soil") ! 2D fields soil_moisture_content_flag = init_diag(soil_moisture_content, 'soil__soil_moisture_content') @@ -72,7 +72,7 @@ contains ! Initialise field to that sea and sea-ice tiles have zero values if (throughfall_flag) call invoke(setval_c(throughfall, 0.0_r_def)) - if ( subroutine_timers ) call timer("jules_soil_diags") + if ( subroutine_timers ) call timer("diags.jules_soil") end subroutine initialise_diags_for_jules_soil @@ -127,7 +127,7 @@ contains type( field_type ), intent(inout) :: grid_canopy_water type( field_type ), intent(inout) :: grid_throughfall - if ( subroutine_timers ) call timer("jules_soil_diags") + if ( subroutine_timers ) call timer("diags.jules_soil") ! Prognostic fields call canopy_water%write_field('surface__canopy_water') @@ -160,7 +160,7 @@ contains call surface_runoff%write_field('soil__surface_runoff') call sub_surface_runoff%write_field('soil__sub_surface_runoff') - if ( subroutine_timers ) call timer("jules_soil_diags") + if ( subroutine_timers ) call timer("diags.jules_soil") end subroutine output_diags_for_jules_soil end module jules_soil_diags_mod diff --git a/interfaces/physics_schemes_interface/source/algorithm/aerosol_ukca_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/aerosol_ukca_alg_mod.x90 index a1a52f0e5..77a5238c5 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/aerosol_ukca_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/aerosol_ukca_alg_mod.x90 @@ -467,7 +467,7 @@ contains type( field_type ) :: mr_ice - if ( subroutine_timers ) call timer('aerosol_ukca_alg') + if ( subroutine_timers ) call timer('ukca') call log_event( 'Running UKCA aerosol', LOG_LEVEL_DEBUG ) @@ -1457,7 +1457,10 @@ contains call log_field_minmax( LOG_LEVEL_DEBUG, ' CH4 Aft Chem ', ch4 ) end if + if ( subroutine_timers ) call timer('ukca') + if ( write_diag .and. use_xios_io ) then + if ( subroutine_timers ) call timer('diags.ukca') ! Diagnostic output ! Chemistry diagnostics @@ -1652,12 +1655,11 @@ contains call pvol_du_acc_ins%write_field('aerosol__pvol_du_acc_ins') call pvol_du_cor_ins%write_field('aerosol__pvol_du_cor_ins') + if ( subroutine_timers ) call timer('diags.ukca') end if ! write diag nullify( mesh ) - if ( subroutine_timers ) call timer('aerosol_ukca_alg') - end subroutine aerosol_ukca_alg end module aerosol_ukca_alg_mod diff --git a/interfaces/physics_schemes_interface/source/algorithm/bl_exp_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/bl_exp_alg_mod.x90 index a514beb49..0ea7960b2 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/bl_exp_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/bl_exp_alg_mod.x90 @@ -218,7 +218,7 @@ contains integer(i_def) :: ncells - if ( subroutine_timers ) call timer('bl_exp_alg') + if ( subroutine_timers ) call timer('bl.explicit') call log_event( 'slow_physics: Running explicit Boundary layer', LOG_LEVEL_DEBUG ) @@ -415,13 +415,13 @@ contains call um_sizes_init(1_i_def) if (formdrag == formdrag_dist_drag) then - if ( subroutine_timers ) call timer('bl_exp_alg') + if ( subroutine_timers ) call timer('bl.explicit') call theta%copy_field_properties(fd_tauz) call invoke(setval_c(fd_tauz, 0.0_r_def)) ! Calculate form drag stress in w2 call set_wind(fd_tau_w2,fd_taux,fd_tauy,fd_tauz) call invoke(inc_X_divideby_Y(fd_tau_w2, dA)) - if ( subroutine_timers ) call timer('bl_exp_alg') + if ( subroutine_timers ) call timer('bl.explicit') end if ! Calculate explicit momentum diffusion on cell faces @@ -453,7 +453,7 @@ contains sea_v_current_ptr) ) end if - if ( subroutine_timers ) call timer('bl_exp_alg') + if ( subroutine_timers ) call timer('bl.explicit') ! output BL diagnostics if (write_diag .and. use_xios_io) then diff --git a/interfaces/physics_schemes_interface/source/algorithm/bl_imp_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/bl_imp_alg_mod.x90 index db83e0d3d..c937039de 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/bl_imp_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/bl_imp_alg_mod.x90 @@ -221,7 +221,7 @@ contains integer(i_def) :: loop, ncells logical(l_def) :: diag_step, flag_blpert - if ( subroutine_timers ) call timer("bl_imp_alg") + if ( subroutine_timers ) call timer("bl.implicit") call log_event( 'Running implicit Boundary layer', LOG_LEVEL_DEBUG ) @@ -330,7 +330,7 @@ contains call u_physics%copy_field_properties(du_conv_w2) if ( cv_scheme == cv_scheme_gregory_rowntree .or. & cv_scheme == cv_scheme_comorph ) then - if ( subroutine_timers ) call timer("bl_imp_alg") + if ( subroutine_timers ) call timer("bl.implicit") call theta%copy_field_properties(dw_conv) call invoke(setval_c(dw_conv, 0.0_r_def) ) call set_wind(du_conv_w2, du_conv, dv_conv, dw_conv) @@ -338,7 +338,7 @@ contains ! Set wind provides output in dynamics quantites, need to remove ! dA scaling for physics call invoke(inc_X_divideby_Y(du_conv_w2, dA) ) - if ( subroutine_timers ) call timer("bl_imp_alg") + if ( subroutine_timers ) call timer("bl.implicit") else call invoke(setval_c(du_conv_w2, 0.0_r_def) ) end if @@ -476,7 +476,7 @@ contains setval_X(moist_flux_bl,fqw) ) end if - if ( subroutine_timers ) call timer("bl_imp_alg") + if ( subroutine_timers ) call timer("bl.implicit") ! Calculate and output fields on last iteration only if (use_xios_io .and. outer == outer_iterations) then diff --git a/interfaces/physics_schemes_interface/source/algorithm/blpert_main_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/blpert_main_alg_mod.x90 index 2159f6c56..d4c348970 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/blpert_main_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/blpert_main_alg_mod.x90 @@ -115,7 +115,7 @@ contains integer(i_def), parameter :: stencil_depth_buff = 1 real(r_def) :: dt, auto_corr_coeff, tfac - if ( subroutine_timers ) call timer("blpert_main_alg") + if ( subroutine_timers ) call timer("stoch_phys.blpert") nullify(vector_space, coarse_vector_space, mesh, coarse_mesh, & twod_mesh, coarse_twod_mesh, local_mesh, mesh_map, & @@ -308,15 +308,19 @@ contains theta_star_surf, qv_star_surf, blpert_rand_fld, & pert_lev_bot, pert_lev_top, tfac) ) + if ( subroutine_timers ) call timer("stoch_phys.blpert") + !----------------------------------------------------------------! ! Write fields to diagnostics if requested !----------------------------------------------------------------! if (write_diag .and. use_xios_io) then + if ( subroutine_timers ) call timer("diags.blpert") + call dtheta_base%write_field('stochastic__dtheta_base_blpert') call dmv_base%write_field('stochastic__dmv_base_blpert') - end if - if ( subroutine_timers ) call timer("blpert_main_alg") + if ( subroutine_timers ) call timer("diags.blpert") + end if end subroutine blpert_main_alg end module blpert_main_alg_mod diff --git a/interfaces/physics_schemes_interface/source/algorithm/bm_tau_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/bm_tau_alg_mod.x90 index eaaaa2814..902a1781c 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/bm_tau_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/bm_tau_alg_mod.x90 @@ -71,7 +71,7 @@ contains type( mesh_type ), pointer :: mesh => null() integer( kind=i_def ) :: ncells - if ( subroutine_timers ) call timer('bm_tau_alg') + if ( subroutine_timers ) call timer('cloud.bm_tau') call cloud_fields%get_field('frozen_fraction', cf_fro) call cloud_fields%get_field('tau_dec_bm', tau_dec_bm) @@ -102,7 +102,7 @@ contains call um_sizes_init(1_i_def) - if ( subroutine_timers ) call timer('bm_tau_alg') + if ( subroutine_timers ) call timer('cloud.bm_tau') end subroutine bm_tau_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/casim_activate_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/casim_activate_alg_mod.x90 index 743350347..b4c57bdd1 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/casim_activate_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/casim_activate_alg_mod.x90 @@ -70,7 +70,7 @@ contains type( mesh_type ), pointer :: mesh - if ( subroutine_timers ) call timer('casim_activate_alg') + if ( subroutine_timers ) call timer('microphysics.casim_activate') ! For fixed CDNC or if we want to initialise the CDNC if (casim_cdnc_opt == casim_cdnc_opt_fixed .or. initialise) then @@ -119,7 +119,7 @@ contains end if - if ( subroutine_timers ) call timer('casim_activate_alg') + if ( subroutine_timers ) call timer('microphysics.casim_activate') end subroutine casim_activate_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/casim_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/casim_alg_mod.x90 index 8ad8ae789..1cafe0192 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/casim_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/casim_alg_mod.x90 @@ -123,7 +123,7 @@ contains integer(kind=i_def) :: mesh_id, ncells - if ( subroutine_timers ) call timer("casim_alg") + if ( subroutine_timers ) call timer("microphysics.casim") call log_event( 'slow_physics: Running Microphysics', LOG_LEVEL_INFO ) @@ -216,11 +216,11 @@ contains call microphysics_fields%get_field('dmv_mphys', dmv_mphys) call invoke(setval_X(dmv_mphys, dmr_mphys(imr_v))) - if ( subroutine_timers ) call timer("casim_alg") + if ( subroutine_timers ) call timer("microphysics.casim") ! Output microphysics diagnostics if (write_diag .and. use_xios_io) then - if ( subroutine_timers ) call timer("casim_xios") + if ( subroutine_timers ) call timer("diags.casim") call output_diags_for_casim(ls_rain, ls_snow, ls_graup, & lsca_2d, refl_tot, refl_1km, & @@ -232,7 +232,7 @@ contains dmr_mphys(imr_g), dmr_mphys(imr_s), & superc_liq, superc_rain ) - if ( subroutine_timers ) call timer("casim_xios") + if ( subroutine_timers ) call timer("diags.casim") end if end subroutine casim_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/cld_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/cld_alg_mod.x90 index 33071d015..7c6f27ffc 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/cld_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/cld_alg_mod.x90 @@ -128,7 +128,7 @@ contains integer(i_def) :: i_mr, ncells character(str_def) :: name_ext - if ( subroutine_timers ) call timer('cld_alg') + if ( subroutine_timers ) call timer('cloud') call log_event( 'End-of-timestep cloud update', LOG_LEVEL_DEBUG ) @@ -263,7 +263,7 @@ contains end if end if - if ( subroutine_timers ) call timer('cld_alg') + if ( subroutine_timers ) call timer('cloud') if ( write_diag .and. use_xios_io .and. & mod(step,diagnostic_frequency) == 0 .and. & diff --git a/interfaces/physics_schemes_interface/source/algorithm/conv_comorph_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/conv_comorph_alg_mod.x90 index 8fc190807..5708b2d8f 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/conv_comorph_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/conv_comorph_alg_mod.x90 @@ -267,7 +267,7 @@ contains type( mesh_type ), pointer :: mesh integer(i_def) :: ncells - if ( subroutine_timers ) call timer("conv_comorph_alg") + if ( subroutine_timers ) call timer("convection.comorph") call log_event( 'Running Comorph convection scheme', LOG_LEVEL_DEBUG ) @@ -630,7 +630,7 @@ contains call um_sizes_init(1_i_def) - if ( subroutine_timers ) call timer("conv_comorph_alg") + if ( subroutine_timers ) call timer("convection.comorph") ! output diagnostics on last iteration only if (write_diag .and. use_xios_io .and. outer == outer_iterations) then diff --git a/interfaces/physics_schemes_interface/source/algorithm/conv_gr_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/conv_gr_alg_mod.x90 index fbb5a8969..d5cdd3c25 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/conv_gr_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/conv_gr_alg_mod.x90 @@ -268,7 +268,7 @@ contains type( mesh_type ), pointer :: mesh => null() - if ( subroutine_timers ) call timer("conv_gr_alg") + if ( subroutine_timers ) call timer("convection.gr") call log_event( 'Running GR convection scheme', LOG_LEVEL_DEBUG ) @@ -700,7 +700,7 @@ contains cca_unadjusted, dth_conv_noshal, dmv_conv_noshal ) & ) ! end of invoke - if ( subroutine_timers ) call timer("conv_gr_alg") + if ( subroutine_timers ) call timer("convection.gr") ! output diagnostics on last iteration only if (write_diag .and. use_xios_io .and. outer == outer_iterations) then diff --git a/interfaces/physics_schemes_interface/source/algorithm/conv_ll_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/conv_ll_alg_mod.x90 index eee4bb96c..0c6eeb3b6 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/conv_ll_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/conv_ll_alg_mod.x90 @@ -60,7 +60,7 @@ contains type( field_type ), pointer :: conv_rain => null() type( field_type ), pointer :: conv_snow => null() - if ( subroutine_timers ) call timer("conv_ll_alg") + if ( subroutine_timers ) call timer("convection.ll") call log_event( 'Running LL convection scheme', LOG_LEVEL_INFO ) @@ -82,15 +82,19 @@ contains ! bulk fraction change is just the liquid change setval_X(dbcf_conv,dcfl_conv) ) + if ( subroutine_timers ) call timer("convection.ll") + if (write_diag .and. use_xios_io .and. outer == outer_iterations) then + if ( subroutine_timers ) call timer("diags.convection") + call dt_conv%write_field('convection__dt_conv') call dmv_conv%write_field('convection__dmv_conv') call conv_rain%write_field('convection__conv_rain') call conv_snow%write_field('convection__conv_snow') - end if - if ( subroutine_timers ) call timer("conv_ll_alg") + if ( subroutine_timers ) call timer("diags.convection") + end if end subroutine conv_ll_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/flexchem_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/flexchem_alg_mod.x90 index 2668353ed..39a740755 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/flexchem_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/flexchem_alg_mod.x90 @@ -54,7 +54,7 @@ contains type( field_type ), pointer :: tio type( field_type ), pointer :: vo - if ( subroutine_timers ) call timer('flexchem_alg') + if ( subroutine_timers ) call timer('chemistry.flexchem') call log_event( 'Running flexible chemistry scheme', LOG_LEVEL_INFO ) @@ -81,6 +81,9 @@ contains ) ) end if + if ( subroutine_timers ) call timer('chemistry.flexchem') + + if ( subroutine_timers ) call timer('diags.flexchem') ! Diagnostics call h2o%write_field('chemistry__h2o') call co%write_field('chemistry__co') @@ -96,7 +99,7 @@ contains call tio%write_field('chemistry__tio') call vo%write_field('chemistry__vo') - if ( subroutine_timers ) call timer('flexchem_alg') + if ( subroutine_timers ) call timer('diags.flexchem') end subroutine flexchem_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/fsd_condensate_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/fsd_condensate_alg_mod.x90 index 48c93f5ed..e7b8cdee6 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/fsd_condensate_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/fsd_condensate_alg_mod.x90 @@ -53,7 +53,7 @@ contains type( mesh_type), pointer :: mesh - if ( subroutine_timers ) call timer("fsd_condensate_alg") + if ( subroutine_timers ) call timer("cloud.fsd_condensate") ! Unpack fields call cloud_fields%get_field('area_fraction', area_fraction) @@ -79,7 +79,7 @@ contains nullify( mesh ) - if ( subroutine_timers ) call timer("fsd_condensate_alg") + if ( subroutine_timers ) call timer("cloud.fsd_condensate") end subroutine fsd_condensate_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/glomap_aerosol_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/glomap_aerosol_alg_mod.x90 index e7ee279c9..15a587a71 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/glomap_aerosol_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/glomap_aerosol_alg_mod.x90 @@ -144,7 +144,7 @@ contains type( field_type ), target :: cf_bulk_coarse, cf_liquid_coarse, rh_crit_coarse, cloud_drop_no_conc_coarse type( field_type ) :: mr_ice - if ( subroutine_timers ) call timer('glomap_aerosol_alg') + if ( subroutine_timers ) call timer('aerosol.glomap_clim') ! Unpack fields from aerosol_fields call aerosol_fields%get_field('n_nuc_sol', n_nuc_sol) @@ -320,10 +320,10 @@ contains if ( coarse_rad_aerosol ) then call map_scalar_intermesh(cloud_drop_no_conc, cloud_drop_no_conc_aero, lowest_order_flag=lowest_order_aero_flag) end if - if ( subroutine_timers ) call timer('glomap_aerosol_alg') + if ( subroutine_timers ) call timer('aerosol.glomap_clim') if ( write_diag .and. use_xios_io ) then - if ( subroutine_timers ) call timer("glomap_aerosol_xios") + if ( subroutine_timers ) call timer("diags.glomap_clim") ! Diagnostic output call n_nuc_sol%write_field('aerosol__n_nuc_sol') @@ -377,7 +377,7 @@ contains call cloud_drop_no_conc_aero%write_field('aerosol__cloud_drop_no_conc') end if - if ( subroutine_timers ) call timer("glomap_aerosol_xios") + if ( subroutine_timers ) call timer("diags.glomap_clim") end if end subroutine glomap_aerosol_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/locate_tropopause_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/locate_tropopause_alg_mod.x90 index fa540d1c0..2a9311c72 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/locate_tropopause_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/locate_tropopause_alg_mod.x90 @@ -46,7 +46,7 @@ subroutine locate_tropopause_alg(trop_level, theta, exner_in_wth, twod_mesh) type(function_space_type), pointer :: vector_space => null() procedure(write_interface), pointer :: write_diag_behaviour => null() - if ( subroutine_timers ) call timer("locate_tropopause_alg") + if ( subroutine_timers ) call timer("locate_tropopause") height_wth => get_height_fv(Wtheta, theta%get_mesh_id()) @@ -56,14 +56,14 @@ subroutine locate_tropopause_alg(trop_level, theta, exner_in_wth, twod_mesh) call invoke( locate_tropopause_kernel_type( theta, exner_in_wth, & height_wth, trop_level ) ) - if ( subroutine_timers ) call timer("locate_tropopause_alg") + if ( subroutine_timers ) call timer("locate_tropopause") if (write_diag .and. use_xios_io) then - if ( subroutine_timers ) call timer("locate_tropopause_xios") + if ( subroutine_timers ) call timer("diags.locate_tropopause") write_diag_behaviour => write_field_generic call trop_level%set_write_behaviour(write_diag_behaviour) call trop_level%write_field('processed__trop_level') - if ( subroutine_timers ) call timer("locate_tropopause_xios") + if ( subroutine_timers ) call timer("diags.locate_tropopause") end if end subroutine locate_tropopause_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/methox_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/methox_alg_mod.x90 index 07759e221..cdbe2671c 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/methox_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/methox_alg_mod.x90 @@ -84,7 +84,7 @@ contains integer(kind=i_def) :: k real(kind=r_def) :: pressure, dt - if ( subroutine_timers ) call timer('methox_alg') + if ( subroutine_timers ) call timer('methane_oxidation') ! If required, calculate the rate coefficients ! (assumed to vary only with pressure) @@ -143,13 +143,15 @@ contains ! Calculate methane oxidation increment call invoke(methox_kernel_type(dmv_methox, mr(imr_v), dt)) + if ( subroutine_timers ) call timer('methane_oxidation') + ! Output diagnostic if requested if (write_diag .and. use_xios_io) then + if ( subroutine_timers ) call timer('diags.methane_oxidation') call dmv_methox%write_field('processed__dmv_methox') + if ( subroutine_timers ) call timer('diags.methane_oxidation') end if - if ( subroutine_timers ) call timer('methox_alg') - end subroutine methox_alg end module methox_alg_mod diff --git a/interfaces/physics_schemes_interface/source/algorithm/mphys_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/mphys_alg_mod.x90 index 37f37f856..910ef09ff 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/mphys_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/mphys_alg_mod.x90 @@ -140,7 +140,7 @@ contains type(mesh_type), pointer :: mesh => null() - if ( subroutine_timers ) call timer("mphys_alg") + if ( subroutine_timers ) call timer("microphysics.wb") call log_event( 'slow_physics: Running Microphysics', LOG_LEVEL_DEBUG ) @@ -260,7 +260,7 @@ contains call microphysics_fields%get_field('dmv_mphys', dmv_mphys) call invoke(setval_X(dmv_mphys, dmr_mphys(imr_v))) - if ( subroutine_timers ) call timer("mphys_alg") + if ( subroutine_timers ) call timer("microphysics.wb") ! Output microphysics diagnostics if (write_diag .and. use_xios_io) then diff --git a/interfaces/physics_schemes_interface/source/algorithm/orographic_drag_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/orographic_drag_alg_mod.x90 index 1f45816fe..d583c2f4b 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/orographic_drag_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/orographic_drag_alg_mod.x90 @@ -97,7 +97,7 @@ contains type( mesh_type ), pointer :: mesh => null() - if ( subroutine_timers ) call timer("orographic_drag_alg") + if ( subroutine_timers ) call timer("orographic_drag") call log_event( 'slow_physics: Running Orographic drag', LOG_LEVEL_DEBUG ) @@ -177,7 +177,7 @@ contains X_divideby_Y (dtheta_orographic_drag, dtemp_orographic_drag, & exner_in_wth) ) - if ( subroutine_timers ) call timer("orographic_drag_alg") + if ( subroutine_timers ) call timer("orographic_drag") if (write_diag .and. use_xios_io) then diff --git a/interfaces/physics_schemes_interface/source/algorithm/pc2_checks_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/pc2_checks_alg_mod.x90 index 9f2472624..5261a34a4 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/pc2_checks_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/pc2_checks_alg_mod.x90 @@ -81,7 +81,7 @@ contains type( field_type ), pointer :: frozen_fraction => null() type( field_type ), pointer :: bulk_fraction => null() - if ( subroutine_timers ) call timer("pc2_checks_alg") + if ( subroutine_timers ) call timer("cloud.pc2_checks") ! Unpack fields call derived_fields%get_field('exner_in_wth', exner_in_wth) @@ -118,10 +118,10 @@ contains dcff_pc2_inc, & dbcf_pc2_inc ) ) - if ( subroutine_timers ) call timer("pc2_checks_alg") + if ( subroutine_timers ) call timer("cloud.pc2_checks") if ( write_diag .and. use_xios_io ) then - if ( subroutine_timers ) call timer("pc2_checks_xios") + if ( subroutine_timers ) call timer("diags.pc2_checks") call dtheta_pc2_inc%write_field('cloud__dtheta_pc2_checks') call dmv_pc2_inc%write_field('cloud__dmv_pc2_checks') call dmcl_pc2_inc%write_field('cloud__dmcl_pc2_checks') @@ -130,7 +130,7 @@ contains call dcfl_pc2_inc%write_field('cloud__dcfl_pc2_checks') call dcff_pc2_inc%write_field('cloud__dcff_pc2_checks') call dbcf_pc2_inc%write_field('cloud__dbcf_pc2_checks') - if ( subroutine_timers ) call timer("pc2_checks_xios") + if ( subroutine_timers ) call timer("diags.pc2_checks") end if end subroutine pc2_checks_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/pc2_conv_coupling_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/pc2_conv_coupling_alg_mod.x90 index d18891bdd..a34652026 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/pc2_conv_coupling_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/pc2_conv_coupling_alg_mod.x90 @@ -74,7 +74,7 @@ contains type(mesh_type), pointer :: mesh => null() integer(i_def) :: ncells - if ( subroutine_timers ) call timer ("pc2_conv_coupling_alg") + if ( subroutine_timers ) call timer ("cloud.pc2_conv") call derived_fields%get_field('exner_in_wth', exner_wth) call derived_fields%get_field('theta_star', theta_star) @@ -133,10 +133,10 @@ contains call invoke(inc_X_plus_Y(mr(imr_s), dms_conv)) end if - if ( subroutine_timers ) call timer ("pc2_conv_coupling_alg") + if ( subroutine_timers ) call timer ("cloud.pc2_conv") if ( write_diag .and. use_xios_io ) then - if ( subroutine_timers ) call timer("pc2_conv_coupling_xios") + if ( subroutine_timers ) call timer("diags.pc2_conv") call dt_conv%write_field('cloud__dt_pc2_conv_coupling') call dmv_conv%write_field('cloud__dmv_pc2_conv_coupling') call dmcl_conv%write_field('cloud__dmcl_pc2_conv_coupling') @@ -144,7 +144,7 @@ contains call dcfl_conv%write_field('cloud__dcfl_pc2_conv_coupling') call dcff_conv%write_field('cloud__dcff_pc2_conv_coupling') call dbcf_conv%write_field('cloud__dbcf_pc2_conv_coupling') - if ( subroutine_timers ) call timer("pc2_conv_coupling_xios") + if ( subroutine_timers ) call timer("diags.pc2_conv") end if end subroutine pc2_conv_coupling_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/pc2_initiation_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/pc2_initiation_alg_mod.x90 index d6101365f..ec58f90b0 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/pc2_initiation_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/pc2_initiation_alg_mod.x90 @@ -117,7 +117,7 @@ contains type( mesh_type ), pointer :: mesh => null() integer( kind=i_def ) :: ncells - if ( subroutine_timers ) call timer("pc2_initiation_alg") + if ( subroutine_timers ) call timer("cloud.pc2_initiation") ! Unpack fields call derived_fields%get_field('exner_wth_n', exner_wth_n) @@ -218,10 +218,10 @@ contains call um_sizes_init(1_i_def) - if ( subroutine_timers ) call timer("pc2_initiation_alg") + if ( subroutine_timers ) call timer("cloud.pc2_initiation") if ( write_diag .and. use_xios_io ) then - if ( subroutine_timers ) call timer("pc2_initiation_xios") + if ( subroutine_timers ) call timer("diags.pc2_initiation") call dtheta_pc2_inc%write_field('cloud__dtheta_pc2_initiation'//trim(name_ext)) call dmv_pc2_inc%write_field('cloud__dmv_pc2_initiation'//trim(name_ext)) call dmcl_pc2_inc%write_field('cloud__dmcl_pc2_initiation'//trim(name_ext)) @@ -230,7 +230,7 @@ contains call dcfl_pc2_inc%write_field('cloud__dcfl_pc2_initiation'//trim(name_ext)) call dcff_pc2_inc%write_field('cloud__dcff_pc2_initiation'//trim(name_ext)) call dbcf_pc2_inc%write_field('cloud__dbcf_pc2_initiation'//trim(name_ext)) - if ( subroutine_timers ) call timer("pc2_initiation_xios") + if ( subroutine_timers ) call timer("diags.pc2_initiation") end if nullify( mesh ) diff --git a/interfaces/physics_schemes_interface/source/algorithm/pc2_pressure_forcing_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/pc2_pressure_forcing_alg_mod.x90 index ffc3f8865..477111f8e 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/pc2_pressure_forcing_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/pc2_pressure_forcing_alg_mod.x90 @@ -70,7 +70,7 @@ contains type( field_type ), pointer :: bulk_fraction => null() type( field_type ), pointer :: exner_after_slow_wth => null() - if ( subroutine_timers ) call timer("pc2_pressure_forcing_alg") + if ( subroutine_timers ) call timer("cloud.pc2_pressure") ! Unpack fields call cloud_fields%get_field('liquid_fraction', liquid_fraction) @@ -126,16 +126,16 @@ contains inc_X_plus_Y(liquid_fraction, dcfl_pc2_inc), & inc_X_plus_Y(bulk_fraction, dbcf_pc2_inc) ) - if ( subroutine_timers ) call timer("pc2_pressure_forcing_alg") + if ( subroutine_timers ) call timer("cloud.pc2_pressure") if ( write_diag .and. use_xios_io ) then - if ( subroutine_timers ) call timer("pc2_pressure_forcing_xios") + if ( subroutine_timers ) call timer("diags.pc2_pressure") call dtheta_pc2_inc%write_field('cloud__dtheta_pc2_pressure_change'//trim(name_ext)) call dmv_pc2_inc%write_field('cloud__dmv_pc2_pressure_change'//trim(name_ext)) call dmcl_pc2_inc%write_field('cloud__dmcl_pc2_pressure_change'//trim(name_ext)) call dcfl_pc2_inc%write_field('cloud__dcfl_pc2_pressure_change'//trim(name_ext)) call dbcf_pc2_inc%write_field('cloud__dbcf_pc2_pressure_change'//trim(name_ext)) - if ( subroutine_timers ) call timer("pc2_pressure_forcing_xios") + if ( subroutine_timers ) call timer("diags.pc2_pressure") end if end subroutine pc2_pressure_forcing_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/pc2_rad_response_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/pc2_rad_response_alg_mod.x90 index d6f83e560..07719a4f4 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/pc2_rad_response_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/pc2_rad_response_alg_mod.x90 @@ -81,7 +81,7 @@ contains type( field_type ), pointer :: frozen_fraction => null() type( field_type ), pointer :: bulk_fraction => null() - if ( subroutine_timers ) call timer("pc2_rad_response_alg") + if ( subroutine_timers ) call timer("cloud.pc2_radiation") ! Unpack fields call cloud_fields%get_field('liquid_fraction', liquid_fraction) @@ -124,16 +124,16 @@ contains ! N.B. We are not updating the variables that came in, just ! providing increments that need to be added on later. - if ( subroutine_timers ) call timer("pc2_rad_response_alg") + if ( subroutine_timers ) call timer("cloud.pc2_radiation") if ( write_diag .and. use_xios_io ) then - if ( subroutine_timers ) call timer("pc2_rad_response_xios") + if ( subroutine_timers ) call timer("diags.pc2_radiation") call dtheta_pc2_inc%write_field('cloud__dtheta_pc2_rad') call dmv_pc2_inc%write_field('cloud__dmv_pc2_rad') call dmcl_pc2_inc%write_field('cloud__dmcl_pc2_rad') call dcfl_pc2_inc%write_field('cloud__dcfl_pc2_rad') call dbcf_pc2_inc%write_field('cloud__dbcf_pc2_rad') - if ( subroutine_timers ) call timer("pc2_rad_response_xios") + if ( subroutine_timers ) call timer("diags.pc2_radiation") end if end subroutine pc2_rad_response_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/pmsl_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/pmsl_alg_mod.x90 index 27264d3ce..fef46a57e 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/pmsl_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/pmsl_alg_mod.x90 @@ -81,7 +81,7 @@ contains real(kind=r_def), parameter :: upperheight=2000.0_r_def integer(kind=i_def), parameter :: sten_size = 1 - if ( subroutine_timers ) call timer('pmsl_alg') + if ( subroutine_timers ) call timer('diags.pmsl') pmsl_flag = init_diag(pmsl, 'processed__pmsl') pmsl_unsmooth_flag = init_diag(pmsl_unsmooth, 'processed__pmsl_unsmooth', & @@ -151,7 +151,7 @@ contains end if - if ( subroutine_timers ) call timer('pmsl_alg') + if ( subroutine_timers ) call timer('diags.pmsl') end subroutine pmsl_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/pres_lev_diags_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/pres_lev_diags_alg_mod.x90 index 41d0188eb..3e8748212 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/pres_lev_diags_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/pres_lev_diags_alg_mod.x90 @@ -83,7 +83,7 @@ contains plev_mv_clim_flag, plev_qv_clim_flag, & plev_geopot_flag, plev_geopot_clim_flag, plev_thetaw_flag - if ( subroutine_timers ) call timer('pres_lev_diags_alg') + if ( subroutine_timers ) call timer('diags.pressure_lev') nplev = get_axis_dimension('pressure_levels') allocate(plevs(nplev)) @@ -279,7 +279,7 @@ contains deallocate(plevs) - if ( subroutine_timers ) call timer('pres_lev_diags_alg') + if ( subroutine_timers ) call timer('diags.pressure_lev') end subroutine pres_lev_diags_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/radaer_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/radaer_alg_mod.x90 index d1bf92aa4..4b7476c76 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/radaer_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/radaer_alg_mod.x90 @@ -206,11 +206,11 @@ contains type( field_type ) :: aod_ukca_cor_ins type( field_type ) :: aaod_ukca_cor_ins - if ( subroutine_timers ) call timer('radaer_alg') - ! Call on radiation time steps only if (mod(timestep-1_i_def, n_radaer_step*n_radstep) == 0) then + if ( subroutine_timers ) call timer('aerosol.radaer') + mesh => theta_in_wth%get_mesh() dz_in_wth => get_dz_at_wtheta(mesh%get_id()) @@ -476,6 +476,7 @@ contains source_mask=lit_fraction_rts_aero, & lowest_order_flag=lowest_order_aero_flag ) end if + if ( subroutine_timers ) call timer('aerosol.radaer') ! Diagnostic output if ( write_diag .and. use_xios_io ) then @@ -498,8 +499,6 @@ contains end if - if ( subroutine_timers ) call timer('radaer_alg') - end subroutine radaer_alg end module radaer_alg_mod diff --git a/interfaces/physics_schemes_interface/source/algorithm/skeb_main_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/skeb_main_alg_mod.x90 index b49ad7f82..ed41ff81b 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/skeb_main_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/skeb_main_alg_mod.x90 @@ -297,7 +297,7 @@ module skeb_main_alg_mod integer(i_def) :: m, n, n_row, stencil_extent !!!!!!!!!! END OF VARIABLE DEFINITION, START OF CODE !!!!!!!!!! - if ( subroutine_timers ) call timer("skeb_main_alg") + if ( subroutine_timers ) call timer("stoch_phys.skeb") ! create dissipation functions and psif_hat call rho%copy_field_properties(ndisp) @@ -639,8 +639,12 @@ module skeb_main_alg_mod call invoke( inc_X_plus_Y(du_stph, du_skeb) ) end if + if ( subroutine_timers ) call timer("stoch_phys.skeb") + ! Add diagnostics to iodef if (write_diag .and. use_xios_io) then + if ( subroutine_timers ) call timer("diags.skeb") + call fp_skeb%write_field('stochastic__fp_skeb') call ndisp%write_field('stochastic__ndisp') call cdisp%write_field('stochastic__cdisp') @@ -685,10 +689,9 @@ module skeb_main_alg_mod if (dv_tot_skeb_flag) call dv_tot_skeb%write_field('stochastic__dv_tot_skeb') end if + if ( subroutine_timers ) call timer("diags.skeb") end if ! end if write_diags and use_xios - if ( subroutine_timers ) call timer("skeb_main_alg") - end subroutine skeb_main_alg end module skeb_main_alg_mod diff --git a/interfaces/physics_schemes_interface/source/algorithm/skeb_ndisp_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/skeb_ndisp_alg_mod.x90 index 91a60f790..9b00bca0e 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/skeb_ndisp_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/skeb_ndisp_alg_mod.x90 @@ -127,7 +127,7 @@ module skeb_ndisp_alg_mod !!!!!!!!!! END OF VARIABLE DEFINITION, START OF CODE !!!!!!!!!! - if ( subroutine_timers ) call timer("skeb_ndisp_alg") + if ( subroutine_timers ) call timer("skeb.ndisp") !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! 1) Initialize feilds and operators !! @@ -242,8 +242,13 @@ module skeb_ndisp_alg_mod call invoke(inc_a_times_X(K_amp, ndisp) ) + if ( subroutine_timers ) call timer("skeb.ndisp") + if (write_diag .and. use_xios_io) then k_amp = delta_x**4 + ! Stop SKEB timer + if ( subroutine_timers ) call timer("stoch_phys.skeb") + if ( subroutine_timers ) call timer("diags.skeb") if (diagnostic_to_be_sampled('stochastic__norm_div')) then call invoke( inc_a_times_X(K_amp, norm_gu) ) call norm_gu%write_field('stochastic__norm_div') @@ -252,9 +257,10 @@ module skeb_ndisp_alg_mod call invoke( inc_a_times_X(K_amp, norm_xi) ) call norm_xi%write_field('stochastic__norm_xi') end if + if ( subroutine_timers ) call timer("diags.skeb") + ! Restart SKEB timer + if ( subroutine_timers ) call timer("stoch_phys.skeb") end if - if ( subroutine_timers ) call timer("skeb_ndisp_alg") - end subroutine skeb_ndisp_alg end module skeb_ndisp_alg_mod diff --git a/interfaces/physics_schemes_interface/source/algorithm/spectral_gwd_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/spectral_gwd_alg_mod.x90 index a640c58a8..154f8a735 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/spectral_gwd_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/spectral_gwd_alg_mod.x90 @@ -88,7 +88,7 @@ contains type( mesh_type ), pointer :: twod_mesh => null() integer( kind=i_def ) :: ncells - if ( subroutine_timers ) call timer("spectral_gwd_alg") + if ( subroutine_timers ) call timer("spectral_gwd") call log_event( 'slow_physics: Running spectral gravity wave drag', LOG_LEVEL_DEBUG ) @@ -146,7 +146,7 @@ contains call um_sizes_init(1_i_def) - if ( subroutine_timers ) call timer("spectral_gwd_alg") + if ( subroutine_timers ) call timer("spectral_gwd") if (write_diag .and. use_xios_io) then diff --git a/interfaces/physics_schemes_interface/source/algorithm/spt_main_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/spt_main_alg_mod.x90 index 0f61d1267..0fb20b1b6 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/spt_main_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/spt_main_alg_mod.x90 @@ -223,7 +223,7 @@ module spt_main_alg_mod ! iterators in for loops integer(i_def) :: n,n_row, m - if ( subroutine_timers ) call timer("spt_main_alg") + if ( subroutine_timers ) call timer("stoch_phys.spt") !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! 1) Create Forcing pattern || @@ -483,14 +483,18 @@ module spt_main_alg_mod inc_X_plus_Y(dmv_stph, dmv_spt) ) end if + if ( subroutine_timers ) call timer("stoch_phys.spt") + ! Write fields to diagnostics if requested if (write_diag .and. use_xios_io) then + if ( subroutine_timers ) call timer("diags.stoch_phys") + call fp_spt%write_field('stochastic__fp_spt') call dtheta_spt%write_field('stochastic__dtheta_spt') call dmv_spt%write_field('stochastic__dmv_spt') - end if - if ( subroutine_timers ) call timer("spt_main_alg") + if ( subroutine_timers ) call timer("diags.stoch_phys") + end if end subroutine spt_main_alg end module spt_main_alg_mod diff --git a/interfaces/physics_schemes_interface/source/algorithm/stph_fp_main_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/stph_fp_main_alg_mod.x90 index c0a1f2ff1..a27ba8ce9 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/stph_fp_main_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/stph_fp_main_alg_mod.x90 @@ -117,7 +117,7 @@ module stph_fp_main_alg_mod integer(i_def) :: fs_id ! iterators in for loops integer(kind=i_def) :: n, m, n_row, k - if ( subroutine_timers ) call timer("stph_fp_main_alg") + if ( subroutine_timers ) call timer("spt.forcing_pattern") !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! 1) Apply the First Auto-regressive process (1AR) !! @@ -203,7 +203,7 @@ module stph_fp_main_alg_mod level_bottom, level_top, & wavenumber_min, wavenumber_max) - if ( subroutine_timers ) call timer("stph_fp_main_alg") + if ( subroutine_timers ) call timer("spt.forcing_pattern") end subroutine stph_fp_main_alg diff --git a/interfaces/physics_schemes_interface/source/algorithm/stph_main_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/stph_main_alg_mod.x90 index 9d4cb3631..d7a6cf0df 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/stph_main_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/stph_main_alg_mod.x90 @@ -13,10 +13,6 @@ module stph_main_alg_mod use field_mod, only: field_type use clock_mod, only: clock_type use field_collection_mod, only: field_collection_type - ! xios output and timers - use io_config_mod, only: write_diag, use_xios_io, & - subroutine_timers - use timer_mod, only: timer implicit none @@ -78,8 +74,6 @@ module stph_main_alg_mod ! classes class(clock_type), intent(in) :: clock - if ( subroutine_timers ) call timer("stph_main_alg") - call invoke(setval_c(du_stph, 0.0_r_def), & setval_c(dtheta_stph, 0.0_r_def), & setval_c(dmv_stph, 0.0_r_def)) @@ -97,7 +91,5 @@ module stph_main_alg_mod call skeb_main_alg(du_stph, rho, u, convection_fields, derived_fields,clock) end if - if ( subroutine_timers ) call timer("stph_main_alg") - end subroutine stph_main_alg end module stph_main_alg_mod diff --git a/interfaces/physics_schemes_interface/source/algorithm/strat_aerosol_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/strat_aerosol_alg_mod.x90 index 277d9b22e..0ee67879d 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/strat_aerosol_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/strat_aerosol_alg_mod.x90 @@ -48,7 +48,7 @@ subroutine strat_aerosol_alg( aerosol_fields, trop_level, exner ) type(function_space_type), pointer :: wth_aero => null() type(mesh_type), pointer :: aerosol_mesh => null() - if ( subroutine_timers ) call timer("strat_aerosol_alg") + if ( subroutine_timers ) call timer("aerosol.stratosphere") if (coarse_rad_aerosol) then ! Initialise potentially coarse aerosol field @@ -63,7 +63,7 @@ subroutine strat_aerosol_alg( aerosol_fields, trop_level, exner ) call invoke( strat_aerosol_kernel_type( sulphuric, trop_level, exner ) ) end if - if ( subroutine_timers ) call timer("strat_aerosol_alg") + if ( subroutine_timers ) call timer("aerosol.stratosphere") end subroutine strat_aerosol_alg end module strat_aerosol_alg_mod diff --git a/interfaces/physics_schemes_interface/source/algorithm/surf_temp_forcing_alg_mod.x90 b/interfaces/physics_schemes_interface/source/algorithm/surf_temp_forcing_alg_mod.x90 index 7cdb2be82..1b0a2aef2 100644 --- a/interfaces/physics_schemes_interface/source/algorithm/surf_temp_forcing_alg_mod.x90 +++ b/interfaces/physics_schemes_interface/source/algorithm/surf_temp_forcing_alg_mod.x90 @@ -48,7 +48,7 @@ contains type( field_type ), pointer :: internal_flux type( field_type ), pointer :: tile_temperature - if ( subroutine_timers ) call timer('surf_temp_forcing_alg') + if ( subroutine_timers ) call timer('surf_temp_forcing') if (surf_temp_forcing /= surf_temp_forcing_none) then @@ -82,7 +82,7 @@ contains end select end if - if ( subroutine_timers ) call timer('surf_temp_forcing_alg') + if ( subroutine_timers ) call timer('surf_temp_forcing') end subroutine surf_temp_forcing_alg end module surf_temp_forcing_alg_mod diff --git a/interfaces/physics_schemes_interface/source/diagnostics/bl_exp_diags_mod.f90 b/interfaces/physics_schemes_interface/source/diagnostics/bl_exp_diags_mod.f90 index 610bfd7c8..99dbfd0d9 100644 --- a/interfaces/physics_schemes_interface/source/diagnostics/bl_exp_diags_mod.f90 +++ b/interfaces/physics_schemes_interface/source/diagnostics/bl_exp_diags_mod.f90 @@ -36,12 +36,12 @@ subroutine initialise_diags_for_bl_exp(zht, oblen) type( field_type ), intent(inout) :: zht type( field_type ), intent(inout) :: oblen - if ( subroutine_timers ) call timer("bl_exp_diags") + if ( subroutine_timers ) call timer("diags.bl_exp") zht_flag = init_diag(zht, 'turbulence__zht') oblen_flag = init_diag(oblen, 'turbulence__oblen') - if ( subroutine_timers ) call timer("bl_exp_diags") + if ( subroutine_timers ) call timer("diags.bl_exp") end subroutine initialise_diags_for_bl_exp @@ -92,7 +92,7 @@ subroutine output_diags_for_bl_exp(ntml, cumulus, bl_type_ind, & cumulus, bl_type_ind - if ( subroutine_timers ) call timer("bl_exp_diags") + if ( subroutine_timers ) call timer("diags.bl_exp") ! Prognostic fields from turbulence collection call ntml%write_field('turbulence__ntml') @@ -121,7 +121,7 @@ subroutine output_diags_for_bl_exp(ntml, cumulus, bl_type_ind, & if (zht_flag) call zht%write_field() if (oblen_flag) call oblen%write_field() - if ( subroutine_timers ) call timer("bl_exp_diags") + if ( subroutine_timers ) call timer("diags.bl_exp") end subroutine output_diags_for_bl_exp end module bl_exp_diags_mod diff --git a/interfaces/physics_schemes_interface/source/diagnostics/bl_imp_diags_mod.x90 b/interfaces/physics_schemes_interface/source/diagnostics/bl_imp_diags_mod.x90 index bc09f3632..1ce76c1ad 100644 --- a/interfaces/physics_schemes_interface/source/diagnostics/bl_imp_diags_mod.x90 +++ b/interfaces/physics_schemes_interface/source/diagnostics/bl_imp_diags_mod.x90 @@ -111,7 +111,7 @@ contains type( field_type ), intent(inout) :: taux, tauy type( field_type ), intent(inout) :: ustar_implicit - if ( subroutine_timers ) call timer("bl_imp_diags") + if ( subroutine_timers ) call timer("diags.bl_imp") ! Genuine turbulence diagnostics ! 3D fields in wtheta space @@ -147,7 +147,7 @@ contains tauy_flag = init_diag(tauy, 'turbulence__tauy', activate=.true.) ustar_implicit_flag = init_diag(ustar_implicit, 'surface__ustar_implicit', activate=.true.) - if ( subroutine_timers ) call timer("bl_imp_diags") + if ( subroutine_timers ) call timer("diags.bl_imp") end subroutine initialise_diags_for_bl_imp @@ -283,7 +283,7 @@ contains logical( l_def ) :: ignore - if ( subroutine_timers ) call timer("bl_imp_diags") + if ( subroutine_timers ) call timer("diags.bl_imp") ! Output prognostic fields if (samp_diag('aerosol__murk')) call murk%write_field('aerosol__murk') @@ -449,7 +449,7 @@ contains if (dew_point_land_flag) call dew_point_land%write_field() end if - if ( subroutine_timers ) call timer("bl_imp_diags") + if ( subroutine_timers ) call timer("diags.bl_imp") end subroutine output_diags_for_bl_imp end module bl_imp_diags_mod diff --git a/interfaces/physics_schemes_interface/source/diagnostics/casim_diagnostics_mod.x90 b/interfaces/physics_schemes_interface/source/diagnostics/casim_diagnostics_mod.x90 index 1ab0e890d..89b8e0983 100644 --- a/interfaces/physics_schemes_interface/source/diagnostics/casim_diagnostics_mod.x90 +++ b/interfaces/physics_schemes_interface/source/diagnostics/casim_diagnostics_mod.x90 @@ -55,7 +55,7 @@ contains type( field_type ), intent(inout) :: superc_rain type( field_type ), intent(inout) :: ls_graup_3d - if ( subroutine_timers ) call timer("casim_diagnostics") + if ( subroutine_timers ) call timer("diags.casim") refl_tot_flag = init_diag(refl_tot, 'microphysics__refl_tot') refl_1km_flag = init_diag(refl_1km, 'microphysics__refl_1km') @@ -63,7 +63,7 @@ contains superc_rain_flag = init_diag(superc_rain, 'microphysics__superc_rain') ls_graup_3d_flag = init_diag(ls_graup_3d, 'microphysics__ls_graup_3d') - if ( subroutine_timers ) call timer("casim_diagnostics") + if ( subroutine_timers ) call timer("diags.casim") end subroutine initialise_diags_for_casim @@ -99,7 +99,7 @@ contains !-------------------------------------- ! End of declarations !-------------------------------------- - if ( subroutine_timers ) call timer ("casim_diagnostics") + if ( subroutine_timers ) call timer ("diags.casim") !---------------------------------------------------- @@ -170,7 +170,7 @@ contains call ns_mphys%write_field('casim__ns_mphys') call ng_mphys%write_field('casim__ng_mphys') - if ( subroutine_timers ) call timer ("casim_diagnostics") + if ( subroutine_timers ) call timer ("diags.casim") end subroutine output_diags_for_casim diff --git a/interfaces/physics_schemes_interface/source/diagnostics/cld_diags_mod.x90 b/interfaces/physics_schemes_interface/source/diagnostics/cld_diags_mod.x90 index 295a1425d..275e95d5c 100644 --- a/interfaces/physics_schemes_interface/source/diagnostics/cld_diags_mod.x90 +++ b/interfaces/physics_schemes_interface/source/diagnostics/cld_diags_mod.x90 @@ -65,7 +65,7 @@ contains type( field_type ), intent(inout) :: sskew_bm, svar_bm, svar_tb logical(l_def), intent(in) :: call_b4_conv - if ( subroutine_timers ) call timer("cld_diags") + if ( subroutine_timers ) call timer("diags.cloud") if (call_b4_conv) then ! No diagnostics output in mid-timestep call @@ -79,7 +79,7 @@ contains svar_tb_flag = init_diag(svar_tb, 'cloud__svar_tb') end if - if ( subroutine_timers ) call timer("cld_diags") + if ( subroutine_timers ) call timer("diags.cloud") end subroutine initialise_diags_for_cld @@ -147,7 +147,7 @@ contains character(str_def) :: name logical( l_def ) :: ignore - if ( subroutine_timers ) call timer("cld_diags") + if ( subroutine_timers ) call timer("diags.cloud") ! 2D fields cld_amount_max_flag = init_diag(cld_amount_max, 'cloud__cloud_amount_max') @@ -366,7 +366,7 @@ contains if (cloud_fraction_below_1000feet_asl_flag) call & cloud_fraction_below_1000feet_asl%write_field() - if ( subroutine_timers ) call timer("cld_diags") + if ( subroutine_timers ) call timer("diags.cloud") end subroutine output_diags_for_cld end module cld_diags_mod diff --git a/interfaces/physics_schemes_interface/source/diagnostics/comorph_diags_mod.x90 b/interfaces/physics_schemes_interface/source/diagnostics/comorph_diags_mod.x90 index 29a6a8af8..330b034da 100644 --- a/interfaces/physics_schemes_interface/source/diagnostics/comorph_diags_mod.x90 +++ b/interfaces/physics_schemes_interface/source/diagnostics/comorph_diags_mod.x90 @@ -71,7 +71,7 @@ contains detrain_down, & massflux_up_half - if ( subroutine_timers ) call timer("comorph_diags") + if ( subroutine_timers ) call timer("diags.comorph") ! Convective diagnostics - 2d lowest_cv_base_flag = init_diag(lowest_cv_base, 'convection__lowest_cv_base') @@ -105,7 +105,7 @@ contains massflux_up_half_flag = init_diag(massflux_up_half, 'convection__massflux_up_half') - if ( subroutine_timers ) call timer("comorph_diags") + if ( subroutine_timers ) call timer("diags.comorph") end subroutine initialise_diags_for_comorph @@ -184,7 +184,7 @@ contains detrain_down, & massflux_up_half - if ( subroutine_timers ) call timer("comorph_diags") + if ( subroutine_timers ) call timer("diags.comorph") ! Prognostic fields call cca%write_field('convection__cca') @@ -230,7 +230,7 @@ contains if (detrain_down_flag) call detrain_down%write_field() if (massflux_up_half_flag) call massflux_up_half%write_field() - if ( subroutine_timers ) call timer("comorph_diags") + if ( subroutine_timers ) call timer("diags.comorph") end subroutine output_diags_for_comorph end module comorph_diags_mod diff --git a/interfaces/physics_schemes_interface/source/diagnostics/conv_diags_mod.x90 b/interfaces/physics_schemes_interface/source/diagnostics/conv_diags_mod.x90 index 28b637aa0..a1408197c 100644 --- a/interfaces/physics_schemes_interface/source/diagnostics/conv_diags_mod.x90 +++ b/interfaces/physics_schemes_interface/source/diagnostics/conv_diags_mod.x90 @@ -160,7 +160,7 @@ contains logical(l_def) :: ignore - if ( subroutine_timers ) call timer("conv_diags") + if ( subroutine_timers ) call timer("diags.conv") ! Convective diagnostics - 2d deep_in_col_flag = init_diag(deep_in_col, 'convection__deep_in_col') @@ -302,7 +302,7 @@ contains call invoke( setval_c(shallow_in_col, 0.0_r_def) ) end if - if ( subroutine_timers ) call timer("conv_diags") + if ( subroutine_timers ) call timer("diags.conv") end subroutine initialise_diags_for_conv @@ -435,7 +435,7 @@ contains dth_conv_noshal, & dmv_conv_noshal - if ( subroutine_timers ) call timer("conv_diags") + if ( subroutine_timers ) call timer("diags.conv") ! Prognostic fields call cca%write_field('convection__cca') @@ -507,7 +507,7 @@ contains if (dth_conv_noshal_flag) call dth_conv_noshal%write_field() if (dmv_conv_noshal_flag) call dmv_conv_noshal%write_field() - if ( subroutine_timers ) call timer("conv_diags") + if ( subroutine_timers ) call timer("diags.conv") end subroutine output_diags_for_conv end module conv_diags_mod diff --git a/interfaces/physics_schemes_interface/source/diagnostics/electric_main_diags_mod.x90 b/interfaces/physics_schemes_interface/source/diagnostics/electric_main_diags_mod.x90 index f40ea91a1..8aa45b30a 100644 --- a/interfaces/physics_schemes_interface/source/diagnostics/electric_main_diags_mod.x90 +++ b/interfaces/physics_schemes_interface/source/diagnostics/electric_main_diags_mod.x90 @@ -47,7 +47,7 @@ contains !---------------------------------------------------- ! End of declarations; start of subroutine execution !---------------------------------------------------- - if ( subroutine_timers ) call timer("electric_diags") + if ( subroutine_timers ) call timer("diags.electric") gwp_flag = init_diag(gwp, 'electric__gwp') tiwp_flag = init_diag(tiwp, 'electric__tiwp') @@ -56,7 +56,7 @@ contains fr2_mc_flag = init_diag(fr2_mc, 'electric__total_column_ice_flash_rate') storm_field_flag = init_diag(storm_field, 'electric__storm_field_indicator') - if ( subroutine_timers ) call timer("electric_diags") + if ( subroutine_timers ) call timer("diags.electric") end subroutine initialise_main_diags_for_electric @@ -88,7 +88,7 @@ contains !---------------------------------------------------- ! End of declarations; start of subroutine execution !---------------------------------------------------- - if ( subroutine_timers ) call timer("electric_diags") + if ( subroutine_timers ) call timer("diags.electric") call flash_potential%write_field('electric__flash_potential') call num_flashes%write_field('electric__num_lightning_flashes') @@ -100,6 +100,6 @@ contains if (fr2_mc_flag) call fr2_mc%write_field() if (storm_field_flag) call storm_field%write_field() - if ( subroutine_timers ) call timer("electric_diags") + if ( subroutine_timers ) call timer("diags.electric") end subroutine output_main_diags_for_electric end module electric_main_diags_mod diff --git a/interfaces/physics_schemes_interface/source/diagnostics/mphys_diagnostics_mod.x90 b/interfaces/physics_schemes_interface/source/diagnostics/mphys_diagnostics_mod.x90 index ef0c0386f..25ea873a1 100644 --- a/interfaces/physics_schemes_interface/source/diagnostics/mphys_diagnostics_mod.x90 +++ b/interfaces/physics_schemes_interface/source/diagnostics/mphys_diagnostics_mod.x90 @@ -61,7 +61,7 @@ contains type( field_type ), intent(inout) :: refl_tot type( field_type ), intent(inout) :: refl_1km - if ( subroutine_timers ) call timer("mphys_diagnostics") + if ( subroutine_timers ) call timer("diags.mphys") superc_liq_flag = init_diag(superc_liq, 'microphysics__superc_liq') superc_rain_flag = init_diag(superc_rain, 'microphysics__superc_rain') @@ -71,7 +71,7 @@ contains refl_tot_flag = init_diag(refl_tot, 'microphysics__refl_tot') refl_1km_flag = init_diag(refl_1km, 'microphysics__refl_1km') - if ( subroutine_timers ) call timer("mphys_diagnostics") + if ( subroutine_timers ) call timer("diags.mphys") end subroutine @@ -129,7 +129,7 @@ contains !-------------------------------------- ! End of declarations !-------------------------------------- - if ( subroutine_timers ) call timer ("mphys_diagnostics") + if ( subroutine_timers ) call timer ("diags.mphys") !-------------------------------------- ! Output locally computed 3D diagnostics @@ -194,7 +194,7 @@ contains call tnuc%write_field('microphysics__tnuc') - if ( subroutine_timers ) call timer ("mphys_diagnostics") + if ( subroutine_timers ) call timer ("diags.mphys") end subroutine output_diags_for_mphys diff --git a/interfaces/physics_schemes_interface/source/diagnostics/orographic_drag_diags_mod.x90 b/interfaces/physics_schemes_interface/source/diagnostics/orographic_drag_diags_mod.x90 index 943e49d6f..eec2eb820 100644 --- a/interfaces/physics_schemes_interface/source/diagnostics/orographic_drag_diags_mod.x90 +++ b/interfaces/physics_schemes_interface/source/diagnostics/orographic_drag_diags_mod.x90 @@ -49,7 +49,7 @@ contains taux_orog_blk, tauy_orog_blk, & taux_orog_gwd, tauy_orog_gwd - if ( subroutine_timers ) call timer("orographic_drag_diags") + if ( subroutine_timers ) call timer("diags.orog_gwd") ! 3D fields in wtheta space taux_orog_blk_flag = init_diag(taux_orog_blk, 'orographic_drag__taux_orog_blk') @@ -61,7 +61,7 @@ contains tauy_orog_gwd_flag = init_diag(tauy_orog_gwd, 'orographic_drag__tauy_orog_gwd') if (tauy_orog_gwd_flag) call invoke( setval_c(tauy_orog_gwd, 0.0_r_def) ) - if ( subroutine_timers ) call timer("orographic_drag_diags") + if ( subroutine_timers ) call timer("diags.orog_gwd") end subroutine initialise_diags_for_orographic_drag @@ -80,7 +80,7 @@ contains du_orog_gwd, dv_orog_gwd, dtemp_orog_gwd, & taux_orog_blk, tauy_orog_blk, taux_orog_gwd, tauy_orog_gwd - if ( subroutine_timers ) call timer("orographic_drag_diags") + if ( subroutine_timers ) call timer("diags.orog_gwd") ! Prognostic fields call du_orographic_drag%write_field('orographic_drag__du_orographic_drag') @@ -100,7 +100,7 @@ contains if (taux_orog_gwd_flag) call taux_orog_gwd%write_field() if (tauy_orog_gwd_flag) call tauy_orog_gwd%write_field() - if ( subroutine_timers ) call timer("orographic_drag_diags") + if ( subroutine_timers ) call timer("diags.orog_gwd") end subroutine output_diags_for_orographic_drag end module orographic_drag_diags_mod diff --git a/interfaces/physics_schemes_interface/source/diagnostics/radaer_diags_mod.x90 b/interfaces/physics_schemes_interface/source/diagnostics/radaer_diags_mod.x90 index f1afe99a3..dec67ccb9 100644 --- a/interfaces/physics_schemes_interface/source/diagnostics/radaer_diags_mod.x90 +++ b/interfaces/physics_schemes_interface/source/diagnostics/radaer_diags_mod.x90 @@ -82,7 +82,7 @@ contains !---------------------------------------------------- ! End of declarations; start of subroutine execution !---------------------------------------------------- - if ( subroutine_timers ) call timer("radaer_diags") + if ( subroutine_timers ) call timer("diags.radaer") ! Get 2D mesh from trop level field mesh => trop_level%get_mesh() @@ -183,7 +183,7 @@ contains call invoke(setval_c( aaod_ukca_cor_ins, 0.0_r_def)) end if - if ( subroutine_timers ) call timer("radaer_diags") + if ( subroutine_timers ) call timer("diags.radaer") end subroutine initialise_main_diags_for_radaer @@ -226,7 +226,7 @@ contains !---------------------------------------------------- ! End of declarations; start of subroutine execution !---------------------------------------------------- - if ( subroutine_timers ) call timer("radaer_diags") + if ( subroutine_timers ) call timer("diags.radaer") if (aod_ukca_ait_sol_flag) call aod_ukca_ait_sol%write_field() if (aaod_ukca_ait_sol_flag) call aaod_ukca_ait_sol%write_field() @@ -241,6 +241,6 @@ contains if (aod_ukca_cor_ins_flag) call aod_ukca_cor_ins%write_field() if (aaod_ukca_cor_ins_flag) call aaod_ukca_cor_ins%write_field() - if ( subroutine_timers ) call timer("radaer_diags") + if ( subroutine_timers ) call timer("diags.radaer") end subroutine output_main_diags_for_radaer end module radaer_main_diags_mod \ No newline at end of file diff --git a/interfaces/physics_schemes_interface/source/diagnostics/spectral_gwd_diags_mod.x90 b/interfaces/physics_schemes_interface/source/diagnostics/spectral_gwd_diags_mod.x90 index 4b44eb884..e8aedbe09 100644 --- a/interfaces/physics_schemes_interface/source/diagnostics/spectral_gwd_diags_mod.x90 +++ b/interfaces/physics_schemes_interface/source/diagnostics/spectral_gwd_diags_mod.x90 @@ -48,7 +48,7 @@ contains tau_east_spectral_gwd, tau_south_spectral_gwd, & tau_west_spectral_gwd, tau_north_spectral_gwd - if ( subroutine_timers ) call timer("spectral_gwd_diags") + if ( subroutine_timers ) call timer("diags.spectral_gwd") ! 3D fields in wtheta space tau_east_spectral_gwd_flag = init_diag(tau_east_spectral_gwd, 'spectral_gwd__tau_east_spectral_gwd') @@ -56,7 +56,7 @@ contains tau_west_spectral_gwd_flag = init_diag(tau_west_spectral_gwd, 'spectral_gwd__tau_west_spectral_gwd') tau_north_spectral_gwd_flag = init_diag(tau_north_spectral_gwd, 'spectral_gwd__tau_north_spectral_gwd') - if ( subroutine_timers ) call timer("spectral_gwd_diags") + if ( subroutine_timers ) call timer("diags.spectral_gwd") end subroutine initialise_diags_for_spectral_gwd @@ -75,7 +75,7 @@ contains tau_south_spectral_gwd, tau_west_spectral_gwd, & tau_north_spectral_gwd - if ( subroutine_timers ) call timer("spectral_gwd_diags") + if ( subroutine_timers ) call timer("diags.spectral_gwd") ! Prognostic fields call du_spectral_gwd%write_field('spectral_gwd__du_spectral_gwd') @@ -89,7 +89,7 @@ contains if (tau_west_spectral_gwd_flag) call tau_west_spectral_gwd%write_field() if (tau_north_spectral_gwd_flag) call tau_north_spectral_gwd%write_field() - if ( subroutine_timers ) call timer("spectral_gwd_diags") + if ( subroutine_timers ) call timer("diags.spectral_gwd") end subroutine output_diags_for_spectral_gwd end module spectral_gwd_diags_mod diff --git a/interfaces/socrates_interface/source/algorithm/cosp_alg_mod.x90 b/interfaces/socrates_interface/source/algorithm/cosp_alg_mod.x90 index 369cf04a5..c7e28a295 100644 --- a/interfaces/socrates_interface/source/algorithm/cosp_alg_mod.x90 +++ b/interfaces/socrates_interface/source/algorithm/cosp_alg_mod.x90 @@ -22,7 +22,7 @@ use microphysics_config_mod, only: microphysics_casim use mr_indices_mod, only: nummr, imr_v, imr_cl, imr_s, imr_ci use planet_config_mod, only: p_zero, kappa use timer_mod, only: timer -use log_mod, only: log_event, LOG_LEVEL_INFO +use log_mod, only: log_event, LOG_LEVEL_DEBUG use cosp_config_mod, only: n_subcol_gen use cosp_diags_mod, only: initialise_diags_for_cosp, output_diags_for_cosp @@ -122,7 +122,9 @@ subroutine cosp_alg(pressure_in_wth, temperature_in_wth, exner, mr, & cloud_thermal_absorptivity, cloud_solar_extinction - call log_event( 'slow_physics: Running COSP', LOG_LEVEL_INFO ) + call log_event( 'slow_physics: Running COSP', LOG_LEVEL_DEBUG ) + + if ( subroutine_timers ) call timer("cosp") ! Unpack fields from collections call derived_fields%get_field('rho_in_wth', rho_in_wth) @@ -189,7 +191,6 @@ subroutine cosp_alg(pressure_in_wth, temperature_in_wth, exner, mr, & cloud_thermal_absorptivity, cloud_solar_extinction) ! Run COSP - if ( subroutine_timers ) call timer("cosp") call invoke( cosp_kernel_type( & pressure_in_wth, temperature_in_wth, rho_in_wth, height_wth, & pressure_in_w3, height_w3, & diff --git a/interfaces/socrates_interface/source/algorithm/cosp_diags_mod.x90 b/interfaces/socrates_interface/source/algorithm/cosp_diags_mod.x90 index 59448ec4e..d77ea85ff 100644 --- a/interfaces/socrates_interface/source/algorithm/cosp_diags_mod.x90 +++ b/interfaces/socrates_interface/source/algorithm/cosp_diags_mod.x90 @@ -145,7 +145,7 @@ subroutine initialise_diags_for_cosp( & calipso_cf_40_lvls_mask, & cloud_thermal_absorptivity, cloud_solar_extinction - if ( subroutine_timers ) call timer("cosp_diags") + if ( subroutine_timers ) call timer("diags.cosp") sunlit_mask_flag = init_diag( sunlit_mask, & 'cosp__sunlit_mask' ) @@ -180,7 +180,7 @@ subroutine initialise_diags_for_cosp( & cloud_solar_extinction_flag = init_diag( cloud_solar_extinction, & 'cosp__cloud_solar_extinction' ) - if ( subroutine_timers ) call timer("cosp_diags") + if ( subroutine_timers ) call timer("diags.cosp") end subroutine initialise_diags_for_cosp @@ -232,7 +232,7 @@ subroutine output_diags_for_cosp( & calipso_cf_40_lvls_mask, & cloud_thermal_absorptivity, cloud_solar_extinction - if ( subroutine_timers ) call timer("cosp_diags") + if ( subroutine_timers ) call timer("diags.cosp") ! Diagnostics computed within the kernels if (sunlit_mask_flag) call & @@ -284,7 +284,7 @@ subroutine output_diags_for_cosp( & cloud_solar_extinction%write_field( & cloud_solar_extinction%get_name() ) - if ( subroutine_timers ) call timer("cosp_diags") + if ( subroutine_timers ) call timer("diags.cosp") end subroutine output_diags_for_cosp end module cosp_diags_mod diff --git a/interfaces/socrates_interface/source/algorithm/illuminate_alg_mod.x90 b/interfaces/socrates_interface/source/algorithm/illuminate_alg_mod.x90 index f7f2dce8c..d648be5a3 100644 --- a/interfaces/socrates_interface/source/algorithm/illuminate_alg_mod.x90 +++ b/interfaces/socrates_interface/source/algorithm/illuminate_alg_mod.x90 @@ -70,7 +70,7 @@ subroutine illuminate_alg(radiation_fields, timestep, dt) if (.not. first_call) then - if ( subroutine_timers ) call timer("illuminate_alg") + if ( subroutine_timers ) call timer("radiation.illuminate") call radiation_fields%get_field('cos_zenith_angle',cos_zenith_angle) call radiation_fields%get_field('lit_fraction',lit_fraction) @@ -107,11 +107,11 @@ subroutine illuminate_alg(radiation_fields, timestep, dt) latitude, longitude, timestep, dt, & current_year, day_of_year, second_of_day) ) - if ( subroutine_timers ) call timer("illuminate_alg") + if ( subroutine_timers ) call timer("radiation.illuminate") ! Output diagnostics if (write_diag .and. use_xios_io) then - if ( subroutine_timers ) call timer("illuminate_xios") + if ( subroutine_timers ) call timer("diags.illuminate") call sin_stellar_declination_rts%write_field(& 'radiation__sin_stellar_declination_rts') @@ -123,7 +123,7 @@ subroutine illuminate_alg(radiation_fields, timestep, dt) call horizon_aspect%write_field('radiation__horizon_aspect') call skyview%write_field('radiation__skyview') - if ( subroutine_timers ) call timer("illuminate_xios") + if ( subroutine_timers ) call timer("diags.illuminate") end if nullify( mesh ) diff --git a/interfaces/socrates_interface/source/algorithm/radiation_alg_mod.x90 b/interfaces/socrates_interface/source/algorithm/radiation_alg_mod.x90 index 3678847f0..8b1679df4 100644 --- a/interfaces/socrates_interface/source/algorithm/radiation_alg_mod.x90 +++ b/interfaces/socrates_interface/source/algorithm/radiation_alg_mod.x90 @@ -498,7 +498,7 @@ subroutine radiation_alg(dtheta_rad, theta, exner, mr, moist_dyn, & end if - if ( subroutine_timers ) call timer("sw_radiation") + if ( subroutine_timers ) call timer("radiation.sw") if (rad_this_tstep) then ! -------------------------------------------------- @@ -603,8 +603,8 @@ subroutine radiation_alg(dtheta_rad, theta, exner, mr, moist_dyn, & call log_field_alg( sw_up_tile, LOG_LEVEL_DEBUG ) call log_field_alg( sw_up_blue_tile, LOG_LEVEL_DEBUG ) - if ( subroutine_timers ) call timer("sw_radiation") - if ( subroutine_timers ) call timer("lw_radiation") + if ( subroutine_timers ) call timer("radiation.sw") + if ( subroutine_timers ) call timer("radiation.lw") if (rad_this_tstep) then ! -------------------------------------------------- @@ -686,7 +686,7 @@ subroutine radiation_alg(dtheta_rad, theta, exner, mr, moist_dyn, & call log_field_alg( lw_down_surf, LOG_LEVEL_DEBUG ) call log_field_alg( lw_up_tile, LOG_LEVEL_DEBUG ) - if ( subroutine_timers ) call timer("lw_radiation") + if ( subroutine_timers ) call timer("radiation.lw") ! first calculate the total temperature increment dt_again=dt diff --git a/science/adjoint/source/algorithm/core_dynamics/atl_rhs_alg_mod.x90 b/science/adjoint/source/algorithm/core_dynamics/atl_rhs_alg_mod.x90 index 0f8148790..0d35e6048 100644 --- a/science/adjoint/source/algorithm/core_dynamics/atl_rhs_alg_mod.x90 +++ b/science/adjoint/source/algorithm/core_dynamics/atl_rhs_alg_mod.x90 @@ -129,7 +129,7 @@ subroutine atl_rhs_alg(rhs, alpha_dt, base_state, state, moist_dyn, & type(function_space_type), pointer :: vector_space_w3_ptr type(field_type) :: dummy_w3 - if ( subroutine_timers ) call timer('atl_rhs_alg') + if ( subroutine_timers ) call timer('atl_dynamics.rhs_alg') mesh => base_state(igh_u)%get_mesh() @@ -298,7 +298,7 @@ subroutine atl_rhs_alg(rhs, alpha_dt, base_state, state, moist_dyn, & setval_c( rhs(igh_t), 0.0_r_def ) ) ! End of adjoint - if ( subroutine_timers ) call timer('atl_rhs_alg') + if ( subroutine_timers ) call timer('atl_dynamics.rhs_alg') end subroutine atl_rhs_alg diff --git a/science/adjoint/source/algorithm/solver/adj_mixed_operator_alg_mod.x90 b/science/adjoint/source/algorithm/solver/adj_mixed_operator_alg_mod.x90 index d4b2998e2..5cd323a2a 100644 --- a/science/adjoint/source/algorithm/solver/adj_mixed_operator_alg_mod.x90 +++ b/science/adjoint/source/algorithm/solver/adj_mixed_operator_alg_mod.x90 @@ -104,7 +104,7 @@ contains type(r_solver_field_vector_type) :: x_in integer(kind=i_def) :: state_size - if (subroutine_timers) call timer('adj_mixed_operator') + if (subroutine_timers) call timer('adj_mixed_solver.operator') ! Extract mesh ID select type (y) @@ -257,7 +257,7 @@ contains call log_event( "mixed_operator_alg_mod: incorrect vector_type argument x", LOG_LEVEL_ERROR ) end select - if (subroutine_timers) call timer('adj_mixed_operator') + if (subroutine_timers) call timer('adj_mixed_solver.operator') end subroutine apply_adj_mixed_operator diff --git a/science/adjoint/source/algorithm/solver/adj_mixed_schur_preconditioner_alg_mod.x90 b/science/adjoint/source/algorithm/solver/adj_mixed_schur_preconditioner_alg_mod.x90 index fa8308975..21c737b90 100644 --- a/science/adjoint/source/algorithm/solver/adj_mixed_schur_preconditioner_alg_mod.x90 +++ b/science/adjoint/source/algorithm/solver/adj_mixed_schur_preconditioner_alg_mod.x90 @@ -133,7 +133,7 @@ contains type(r_solver_field_type) :: pressure_b_field - if (subroutine_timers) call timer('adj_mixed_schur_preconditioner_alg') + if (subroutine_timers) call timer('adj_mixed_solver.schur_precon') select type(x) type is(r_solver_field_vector_type) @@ -169,9 +169,9 @@ contains ! Solve pressure system call log_event( 'Schur preconditioner pressure solve:', LOG_LEVEL_DEBUG ) - if (subroutine_timers) call timer('adj mixed_schur solve') + if (subroutine_timers) call timer('adj_schur_precon.pressure_solver') call self%adj_pressure_solver%apply( self%pressure_x, self%pressure_b ) - if (subroutine_timers) call timer('adj mixed_schur solve') + if (subroutine_timers) call timer('adj_schur_precon.pressure_solver') ! STEP 1: Build RHS for Helmholtz system @@ -193,7 +193,7 @@ contains call log_event( "mixed_schur_preconditioner_mod: incorrect vector_type argument x", LOG_LEVEL_ERROR ) end select - if (subroutine_timers) call timer('adj_mixed_schur_preconditioner_alg') + if (subroutine_timers) call timer('adj_mixed_solver.schur_precon') end subroutine apply_adj_mixed_schur_preconditioner @@ -217,7 +217,7 @@ contains type(integer_field_type), pointer :: face_selector_ew type(integer_field_type), pointer :: face_selector_ns - if (subroutine_timers) call timer('adj mixed_schur rhs') + if (subroutine_timers) call timer('adj_schur_precon.rhs') ! Options coded: ! element_order_h= 0 @@ -300,7 +300,7 @@ contains call log_event( "adj_build_pressure_rhs: .not. split_w not coded", LOG_LEVEL_ERROR ) end if - if (subroutine_timers) call timer('adj mixed_schur rhs') + if (subroutine_timers) call timer('adj_schur_precon.rhs') end subroutine adj_build_pressure_rhs @@ -323,7 +323,7 @@ contains type(integer_field_type), pointer :: face_selector_ew type(integer_field_type), pointer :: face_selector_ns - if (subroutine_timers) call timer('adj Schur back substitute') + if (subroutine_timers) call timer('adj_schur_precon.back_sub') exner_inc => self%pressure_x%get_field_from_position(1) @@ -370,7 +370,7 @@ contains Hb_lumped_inv ), & setval_c(u_inc, 0.0_r_solver) ) - if (subroutine_timers) call timer('adj Schur back substitute') + if (subroutine_timers) call timer('adj_schur_precon.back_sub') end subroutine adj_back_substitute diff --git a/science/adjoint/source/algorithm/solver/adj_pressure_operator_alg_mod.x90 b/science/adjoint/source/algorithm/solver/adj_pressure_operator_alg_mod.x90 index bc6116949..a70f28c7e 100644 --- a/science/adjoint/source/algorithm/solver/adj_pressure_operator_alg_mod.x90 +++ b/science/adjoint/source/algorithm/solver/adj_pressure_operator_alg_mod.x90 @@ -111,7 +111,7 @@ contains nullify( Helmholtz_operator, x_vec, y_vec, lookup_field, set_counts_field ) - if (subroutine_timers) call timer('adj helmholtz lhs') + if (subroutine_timers) call timer('adj_pressure_solver.helmholtz_lhs') select type (x) type is (r_solver_field_vector_type) @@ -155,7 +155,7 @@ contains call log_event( "apply_adj_pressure_operator: element_orders /= 0 not coded", LOG_LEVEL_ERROR ) end if - if (subroutine_timers) call timer('adj helmholtz lhs') + if (subroutine_timers) call timer('adj_pressure_solver.helmholtz_lhs') class default call log_event( "adj_pressure_operator_alg_mod: incorrect vector_type argument y", LOG_LEVEL_ERROR ) diff --git a/science/adjoint/source/algorithm/solver/adj_semi_implicit_solver_alg_mod.x90 b/science/adjoint/source/algorithm/solver/adj_semi_implicit_solver_alg_mod.x90 index c5da78977..6600ca9d5 100644 --- a/science/adjoint/source/algorithm/solver/adj_semi_implicit_solver_alg_mod.x90 +++ b/science/adjoint/source/algorithm/solver/adj_semi_implicit_solver_alg_mod.x90 @@ -319,7 +319,7 @@ contains type(mesh_type), pointer :: mesh integer(kind=i_def) :: p_h, p_v - if (subroutine_timers) call timer('adj_semi_implicit_solver_type%step') + if (subroutine_timers) call timer('adjoint.solver') ! Input fields are r_def fields so preliminary work uses field_types @@ -434,10 +434,10 @@ contains call vector_rhs%import_field( inc_exner_rsol, isol_p ) ! Solve the semi-implicit operator - if (subroutine_timers) call timer('adj_mixed_solver') + if (subroutine_timers) call timer('adj_solver.mixed_solver') call vector_inc%set_scalar(0.0_r_def) call self%adj_mixed_solver%apply( vector_inc, vector_rhs ) - if (subroutine_timers) call timer('adj_mixed_solver') + if (subroutine_timers) call timer('adj_solver.mixed_solver') call deconstruct_solver_state( vector_inc, rhs_rsol ) ! vector_inc(uv,w,p) IN, rhs_rsol(u,p) OUT, rhs_rsol(d,t) unaffected @@ -489,7 +489,7 @@ contains call invoke(inc_X_times_Y( rhs(igh_u), u_normalisation )) - if (subroutine_timers) call timer( 'adj_semi_implicit_solver_type%step' ) + if (subroutine_timers) call timer( 'adjoint.solver' ) end subroutine step diff --git a/science/adjoint/source/algorithm/timestepping/atl_si_timestep_alg_mod.x90 b/science/adjoint/source/algorithm/timestepping/atl_si_timestep_alg_mod.x90 index 04c466748..be684bdbf 100644 --- a/science/adjoint/source/algorithm/timestepping/atl_si_timestep_alg_mod.x90 +++ b/science/adjoint/source/algorithm/timestepping/atl_si_timestep_alg_mod.x90 @@ -322,7 +322,7 @@ contains type(mesh_type), pointer :: mesh character(len=str_def) :: prime_mesh_name - if (subroutine_timers) call timer('atl_si_timestep_type::step') + if (subroutine_timers) call timer('atl_semi_implicit_timestep') cast_dt = real( modeldb%clock%get_seconds_per_step(), r_def ) @@ -737,7 +737,7 @@ contains setval_X( rho, self%state(igh_d) ), & setval_X( exner, self%state(igh_p) ) ) - if (subroutine_timers) call timer('atl_si_timestep_type::step') + if (subroutine_timers) call timer('atl_semi_implicit_timestep') end subroutine step diff --git a/science/adjoint/source/algorithm/transport/mol/atl_mol_conservative_alg_mod.x90 b/science/adjoint/source/algorithm/transport/mol/atl_mol_conservative_alg_mod.x90 index b5ed18d7e..a16640c40 100644 --- a/science/adjoint/source/algorithm/transport/mol/atl_mol_conservative_alg_mod.x90 +++ b/science/adjoint/source/algorithm/transport/mol/atl_mol_conservative_alg_mod.x90 @@ -112,7 +112,7 @@ module atl_mol_conservative_alg_mod type(flux_precomputations_type), pointer :: ls_wind_flux_precomp type(flux_precomputations_type), pointer :: pert_wind_flux_precomp - if ( subroutine_timers ) call timer('atl_mol_conservative_alg') + if ( subroutine_timers ) call timer('atl_transport.mol_conservative') ! ------------------------------------------------------------------------ ! ! Extract transport objects and initialise temporary fields @@ -417,7 +417,7 @@ module atl_mol_conservative_alg_mod if ( allocated(rk_weights) ) deallocate(rk_weights) if ( allocated(stored_ls_field) ) deallocate(stored_ls_field) - if ( subroutine_timers ) call timer('atl_mol_conservative_alg') + if ( subroutine_timers ) call timer('atl_transport.mol_conservative') end subroutine atl_mol_conservative_alg diff --git a/science/gungho/source/algorithm/core_dynamics/derive_exner_from_eos_alg_mod.x90 b/science/gungho/source/algorithm/core_dynamics/derive_exner_from_eos_alg_mod.x90 index 522066e02..74e5d54dd 100644 --- a/science/gungho/source/algorithm/core_dynamics/derive_exner_from_eos_alg_mod.x90 +++ b/science/gungho/source/algorithm/core_dynamics/derive_exner_from_eos_alg_mod.x90 @@ -57,7 +57,7 @@ contains type( mesh_type ), pointer :: mesh => null() - if ( subroutine_timers ) call timer('exner_from_eos') + if ( subroutine_timers ) call timer('dynamics.exner_from_eos') mesh => state(igh_p)%get_mesh() @@ -83,7 +83,7 @@ contains nullify( m3_inv, chi, mesh, & panel_id, qr ) - if ( subroutine_timers ) call timer('exner_from_eos') + if ( subroutine_timers ) call timer('dynamics.exner_from_eos') end subroutine derive_exner_from_eos diff --git a/science/gungho/source/algorithm/core_dynamics/rhs_alg_mod.x90 b/science/gungho/source/algorithm/core_dynamics/rhs_alg_mod.x90 index f78729ba9..a5e1577f7 100644 --- a/science/gungho/source/algorithm/core_dynamics/rhs_alg_mod.x90 +++ b/science/gungho/source/algorithm/core_dynamics/rhs_alg_mod.x90 @@ -163,7 +163,7 @@ contains integer(kind=i_def), parameter :: req_stencil_depth = 1 integer(kind=i_def), parameter :: req_halo_depth = req_stencil_depth + 1 - if ( subroutine_timers ) call timer('rhs_alg') + if ( subroutine_timers ) call timer('dynamics.rhs_alg') mesh_id = base_state(igh_u)%get_mesh_id() @@ -233,7 +233,7 @@ contains geopotential, u, theta, rho, exner, & u_base, theta_base, rho_base ) - if ( subroutine_timers ) call timer('rhs_alg') + if ( subroutine_timers ) call timer('dynamics.rhs_alg') end subroutine rhs_default_alg diff --git a/science/gungho/source/algorithm/diagnostics/ageofair_alg_mod.x90 b/science/gungho/source/algorithm/diagnostics/ageofair_alg_mod.x90 index 24dfcc57e..f4ef2d656 100644 --- a/science/gungho/source/algorithm/diagnostics/ageofair_alg_mod.x90 +++ b/science/gungho/source/algorithm/diagnostics/ageofair_alg_mod.x90 @@ -51,7 +51,7 @@ contains type(field_type) :: ones real(r_def) :: dt - if ( subroutine_timers ) call timer( 'ageofair_advection_alg' ) + if ( subroutine_timers ) call timer( 'dynamics.ageofair' ) dt = real(clock%get_seconds_per_step(), r_def) @@ -62,7 +62,7 @@ contains ! Set levels nearest the surface to be zero in ageofair field ageofair_kernel_type(ageofair,ageofair_reset_level) ) - if ( subroutine_timers ) call timer( 'ageofair_advection_alg' ) + if ( subroutine_timers ) call timer( 'dynamics.ageofair' ) end subroutine ageofair_update diff --git a/science/gungho/source/algorithm/diagnostics/compute_total_energy_alg_mod.x90 b/science/gungho/source/algorithm/diagnostics/compute_total_energy_alg_mod.x90 index 4651e9a47..4d7b3e62b 100644 --- a/science/gungho/source/algorithm/diagnostics/compute_total_energy_alg_mod.x90 +++ b/science/gungho/source/algorithm/diagnostics/compute_total_energy_alg_mod.x90 @@ -123,7 +123,7 @@ contains integer(kind=i_def) :: nqp_h_exact, nqp_v_exact integer(kind=i_def) :: element_order_h, element_order_v - if ( subroutine_timers ) call timer( "compute_total_energy" ) + if ( subroutine_timers ) call timer( "diags.total_energy" ) geopotential => get_geopotential( mesh%get_id() ) surface_geopotential = planet_radius*gravity @@ -245,7 +245,7 @@ contains nullify( geopotential ) - if ( subroutine_timers ) call timer( "compute_total_energy" ) + if ( subroutine_timers ) call timer( "diags.total_energy" ) end subroutine compute_total_energy_alg diff --git a/science/gungho/source/algorithm/diagnostics/conservation_algorithm_mod.x90 b/science/gungho/source/algorithm/diagnostics/conservation_algorithm_mod.x90 index e9ba657e6..e4a97a857 100644 --- a/science/gungho/source/algorithm/diagnostics/conservation_algorithm_mod.x90 +++ b/science/gungho/source/algorithm/diagnostics/conservation_algorithm_mod.x90 @@ -93,7 +93,7 @@ contains procedure(write_interface), pointer :: write_behaviour => null() - if ( subroutine_timers ) call timer('conservation_alg') + if ( subroutine_timers ) call timer('diags.conservation') element_order_h = rho%get_element_order_h() element_order_v = rho%get_element_order_v() @@ -212,7 +212,7 @@ contains nullify( chi, panel_id, w3_fs, mesh ) nullify ( write_behaviour ) - if ( subroutine_timers ) call timer('conservation_alg') + if ( subroutine_timers ) call timer('diags.conservation') end subroutine conservation_algorithm diff --git a/science/gungho/source/algorithm/diagnostics/moisture_conservation_alg_mod.x90 b/science/gungho/source/algorithm/diagnostics/moisture_conservation_alg_mod.x90 index 31afc1291..3f7531237 100644 --- a/science/gungho/source/algorithm/diagnostics/moisture_conservation_alg_mod.x90 +++ b/science/gungho/source/algorithm/diagnostics/moisture_conservation_alg_mod.x90 @@ -77,7 +77,7 @@ contains type(mesh_type), pointer :: mesh => null() type(mesh_type), pointer :: shifted_mesh => null() - if ( subroutine_timers ) call timer('moisture_conservation_alg') + if ( subroutine_timers ) call timer('diags.moisture_conservation') element_order_h = rho_d%get_element_order_h() element_order_v = rho_d%get_element_order_v() @@ -126,7 +126,7 @@ contains nullify( chi, panel_id, w3_fs, w3_fs, mesh, shifted_mesh, chi_shifted ) - if ( subroutine_timers ) call timer('moisture_conservation_alg') + if ( subroutine_timers ) call timer('diags.moisture_conservation') end subroutine moisture_conservation_alg diff --git a/science/gungho/source/algorithm/diagnostics/moisture_fluxes_alg_mod.x90 b/science/gungho/source/algorithm/diagnostics/moisture_fluxes_alg_mod.x90 index 0a311f1dd..1192dba0c 100644 --- a/science/gungho/source/algorithm/diagnostics/moisture_fluxes_alg_mod.x90 +++ b/science/gungho/source/algorithm/diagnostics/moisture_fluxes_alg_mod.x90 @@ -79,7 +79,7 @@ contains integer(kind=i_def) :: mesh - if ( subroutine_timers ) call timer('moisture_fluxes_alg') + if ( subroutine_timers ) call timer('diags.moisture_fluxes') mesh = area%get_mesh_id() call microphysics_fields%get_field('ls_rain', ls_rain) @@ -164,7 +164,7 @@ contains nullify( fs_2d ) nullify( ls_rain, ls_snow, ls_graup, conv_rain, conv_snow, moist_flux_bl ) - if ( subroutine_timers ) call timer('moisture_fluxes_alg') + if ( subroutine_timers ) call timer('diags.moisture_fluxes') end subroutine moisture_fluxes_alg diff --git a/science/gungho/source/algorithm/diagnostics/si_diagnostics_mod.x90 b/science/gungho/source/algorithm/diagnostics/si_diagnostics_mod.x90 index a96fd0d99..56d37a910 100644 --- a/science/gungho/source/algorithm/diagnostics/si_diagnostics_mod.x90 +++ b/science/gungho/source/algorithm/diagnostics/si_diagnostics_mod.x90 @@ -79,7 +79,7 @@ contains logical(l_def) :: ignore - if ( subroutine_timers ) call timer ("si_diagnostics") + if ( subroutine_timers ) call timer ("diags.dynamics") ! Slow physics timestep theta increments ! Difference between state at time step n (X_n) and X_after_slow @@ -237,7 +237,7 @@ contains if (dw_solv_flag) call dw_solv%write_field() end if - if ( subroutine_timers ) call timer ("si_diagnostics") + if ( subroutine_timers ) call timer ("diags.dynamics") end subroutine output_diags_for_si diff --git a/science/gungho/source/algorithm/diffusion/leonard_term_alg_mod.x90 b/science/gungho/source/algorithm/diffusion/leonard_term_alg_mod.x90 index c9174a68e..119a6e758 100644 --- a/science/gungho/source/algorithm/diffusion/leonard_term_alg_mod.x90 +++ b/science/gungho/source/algorithm/diffusion/leonard_term_alg_mod.x90 @@ -103,7 +103,7 @@ subroutine leonard_term_alg(mt_inc_leonard, thetal_inc_leonard, & ! w increment type( field_type ) :: vel_w2v_inc_leonard - if ( subroutine_timers ) call timer("leonard_term_alg") + if ( subroutine_timers ) call timer("leonard_terms") mesh_id = theta%get_mesh_id() @@ -221,7 +221,7 @@ subroutine leonard_term_alg(mt_inc_leonard, thetal_inc_leonard, & nullify( height_w1, height_w2, height_w3, height_wth ) - if ( subroutine_timers ) call timer("leonard_term_alg") + if ( subroutine_timers ) call timer("leonard_terms") end subroutine leonard_term_alg diff --git a/science/gungho/source/algorithm/diffusion/smagorinsky_alg_mod.x90 b/science/gungho/source/algorithm/diffusion/smagorinsky_alg_mod.x90 index d40e14ab7..eae49f3f1 100644 --- a/science/gungho/source/algorithm/diffusion/smagorinsky_alg_mod.x90 +++ b/science/gungho/source/algorithm/diffusion/smagorinsky_alg_mod.x90 @@ -92,7 +92,7 @@ subroutine smagorinsky_alg(dtheta_io, du_io, mr, theta, u, & logical :: use_moisture real( r_def ) :: one_third - if ( subroutine_timers ) call timer("smagorinsky_alg") + if ( subroutine_timers ) call timer("smagorinsky") call log_event( 'Applying Smagorinsky mixing', LOG_LEVEL_INFO ) @@ -231,7 +231,7 @@ subroutine smagorinsky_alg(dtheta_io, du_io, mr, theta, u, & nullify( height_w1, height_w2 ) - if ( subroutine_timers ) call timer("smagorinsky_alg") + if ( subroutine_timers ) call timer("smagorinsky") end subroutine smagorinsky_alg diff --git a/science/gungho/source/algorithm/physics/calc_phys_predictors_alg_mod.x90 b/science/gungho/source/algorithm/physics/calc_phys_predictors_alg_mod.x90 index 9a5d3c211..8f7667854 100644 --- a/science/gungho/source/algorithm/physics/calc_phys_predictors_alg_mod.x90 +++ b/science/gungho/source/algorithm/physics/calc_phys_predictors_alg_mod.x90 @@ -77,7 +77,7 @@ subroutine calc_phys_predictors_alg( derived_fields, rhs_np1, rhs_adv, & type( field_type ) :: du, dtheta, rhsu_np1, w_in_w3_star - if ( subroutine_timers ) call timer("calc_phys_predictors") + if ( subroutine_timers ) call timer("dynamics.phys_predictors") call derived_fields%get_field('theta_star', theta_star) call derived_fields%get_field('u_star', u_star) @@ -137,7 +137,7 @@ subroutine calc_phys_predictors_alg( derived_fields, rhs_np1, rhs_adv, & u_star) call w_in_w3_star%field_final() - if ( subroutine_timers ) call timer("calc_phys_predictors") + if ( subroutine_timers ) call timer("dynamics.phys_predictors") end subroutine calc_phys_predictors_alg diff --git a/science/gungho/source/algorithm/physics/external_forcing_alg_mod.X90 b/science/gungho/source/algorithm/physics/external_forcing_alg_mod.X90 index 1a0eb304d..00f5578d2 100644 --- a/science/gungho/source/algorithm/physics/external_forcing_alg_mod.X90 +++ b/science/gungho/source/algorithm/physics/external_forcing_alg_mod.X90 @@ -154,7 +154,7 @@ contains type( mesh_type ), pointer :: mesh => null() procedure(write_interface), pointer :: write_behaviour => null() - if ( subroutine_timers ) call timer("external_forcing_alg") + if ( subroutine_timers ) call timer("external_forcing") mesh => theta%get_mesh() height_wth => get_height_fv( Wtheta, mesh%get_id() ) @@ -450,6 +450,7 @@ contains end if #endif + if ( subroutine_timers ) call timer("external_forcing") ! ! Write out diagnostics (if available) ! @@ -457,9 +458,6 @@ contains call write_forcing_diagnostics(du_forcing=du_forcing, output_wind_inc=wind_forcing_done) end if - - if ( subroutine_timers ) call timer("external_forcing_alg") - end subroutine external_forcing_alg end module external_forcing_alg_mod diff --git a/science/gungho/source/algorithm/physics/map_fd_to_prognostics_alg_mod.x90 b/science/gungho/source/algorithm/physics/map_fd_to_prognostics_alg_mod.x90 index 7c006b9f1..262c051b5 100644 --- a/science/gungho/source/algorithm/physics/map_fd_to_prognostics_alg_mod.x90 +++ b/science/gungho/source/algorithm/physics/map_fd_to_prognostics_alg_mod.x90 @@ -250,7 +250,7 @@ contains type( mesh_type ), pointer :: mesh - if ( subroutine_timers ) call timer("set_wind") + if ( subroutine_timers ) call timer("mappings.set_wind") mesh => u%get_mesh() @@ -326,7 +326,7 @@ contains call mass_matrix_solver_alg(u, r_u) end if - if ( subroutine_timers ) call timer("set_wind") + if ( subroutine_timers ) call timer("mappings.set_wind") end subroutine set_wind diff --git a/science/gungho/source/algorithm/physics/map_physics_fields_alg_mod.x90 b/science/gungho/source/algorithm/physics/map_physics_fields_alg_mod.x90 index af4f90412..099ee67a0 100644 --- a/science/gungho/source/algorithm/physics/map_physics_fields_alg_mod.x90 +++ b/science/gungho/source/algorithm/physics/map_physics_fields_alg_mod.x90 @@ -90,7 +90,7 @@ contains real(kind=r_def) :: l2 - if ( subroutine_timers ) call timer("map_physics_fields") + if ( subroutine_timers ) call timer("mappings.map_physics_fields") mesh => u%get_mesh() @@ -177,7 +177,7 @@ contains setval_X(v_in_w3_star, v_in_w3) ) end if - if ( subroutine_timers ) call timer("map_physics_fields") + if ( subroutine_timers ) call timer("mappings.map_physics_fields") end subroutine map_physics_fields_alg diff --git a/science/gungho/source/algorithm/runtime_constants/runtime_constants_mod.f90 b/science/gungho/source/algorithm/runtime_constants/runtime_constants_mod.f90 index b47d85b51..546575ee9 100644 --- a/science/gungho/source/algorithm/runtime_constants/runtime_constants_mod.f90 +++ b/science/gungho/source/algorithm/runtime_constants/runtime_constants_mod.f90 @@ -14,14 +14,12 @@ module runtime_constants_mod use base_mesh_config_mod, only: prime_mesh_name use constants_mod, only: i_def, l_def use formulation_config_mod, only: l_multigrid - use io_config_mod, only: subroutine_timers use log_mod, only: log_event, LOG_LEVEL_INFO, & LOG_LEVEL_ERROR use mesh_collection_mod, only: mesh_collection use mesh_mod, only: mesh_type use model_clock_mod, only: model_clock_type use multigrid_config_mod, only: chain_mesh_tags - use timer_mod, only: timer implicit none @@ -47,8 +45,6 @@ subroutine create_runtime_constants() integer(kind=i_def), allocatable :: mg_mesh_ids(:) integer(kind=i_def) :: num_mg_meshes - if ( subroutine_timers ) call timer('runtime_constants_alg') - !==========================================================================! ! Turn all the meshes and coordinate fields into lists !==========================================================================! @@ -81,8 +77,6 @@ subroutine create_runtime_constants() ! code structure call runge_kutta_init() - if ( subroutine_timers ) call timer('runtime_constants_alg') - end subroutine create_runtime_constants diff --git a/science/gungho/source/algorithm/solver/lam_rhs_alg_mod.x90 b/science/gungho/source/algorithm/solver/lam_rhs_alg_mod.x90 index 17342e738..f27419334 100644 --- a/science/gungho/source/algorithm/solver/lam_rhs_alg_mod.x90 +++ b/science/gungho/source/algorithm/solver/lam_rhs_alg_mod.x90 @@ -121,7 +121,7 @@ contains type(r_solver_field_type), pointer :: r_solver_rho_at_u => null() - if ( subroutine_timers ) call timer('rhs_lbc') + if ( subroutine_timers ) call timer('dynamics.rhs_lbc') mesh_id = rhs(igh_u)%get_mesh_id() @@ -190,7 +190,7 @@ contains nullify ( div, mt_lumped_inv, m2_diag, mm_vel ) nullify ( r_solver_rho_at_u ) - if ( subroutine_timers ) call timer('rhs_lbc') + if ( subroutine_timers ) call timer('dynamics.rhs_lbc') end subroutine calc_rhs_lbc diff --git a/science/gungho/source/algorithm/solver/mixed_operator_alg_mod.x90 b/science/gungho/source/algorithm/solver/mixed_operator_alg_mod.x90 index 72454b170..45f69b119 100644 --- a/science/gungho/source/algorithm/solver/mixed_operator_alg_mod.x90 +++ b/science/gungho/source/algorithm/solver/mixed_operator_alg_mod.x90 @@ -173,7 +173,7 @@ contains type(integer_field_type), pointer :: face_selector_ew type(integer_field_type), pointer :: face_selector_ns - if ( subroutine_timers ) call timer('mixed_operator') + if ( subroutine_timers ) call timer('mixed_solver.operator') ! Extract mesh ID select type (y) @@ -359,7 +359,7 @@ contains call log_event(log_scratch_space, LOG_LEVEL_ERROR) end select - if ( subroutine_timers ) call timer('mixed_operator') + if ( subroutine_timers ) call timer('mixed_solver.operator') end subroutine apply_mixed_operator diff --git a/science/gungho/source/algorithm/solver/mixed_schur_preconditioner_alg_mod.x90 b/science/gungho/source/algorithm/solver/mixed_schur_preconditioner_alg_mod.x90 index e9f613b8c..40c7567e4 100644 --- a/science/gungho/source/algorithm/solver/mixed_schur_preconditioner_alg_mod.x90 +++ b/science/gungho/source/algorithm/solver/mixed_schur_preconditioner_alg_mod.x90 @@ -249,7 +249,7 @@ contains class(abstract_vector_type), intent(in) :: x class(abstract_vector_type), intent(inout) :: y - if ( subroutine_timers ) call timer('mixed_schur_preconditioner_alg') + if ( subroutine_timers ) call timer('mixed_solver.schur_precon') select type(x) type is(r_solver_field_vector_type) @@ -260,7 +260,7 @@ contains ! STEP 2: Solve Helmholtz system ! Krylov solver to obtain pressure increment - if ( subroutine_timers ) call timer('mixed_schur solve') + if ( subroutine_timers ) call timer('schur_precon.pressure_solver') ! Set initial guess to pressure incremenet to 0 call self%pressure_x%set_scalar(0.0_r_def) @@ -269,7 +269,7 @@ contains call log_event('Schur preconditioner pressure solve:', LOG_LEVEL_DEBUG) call self%pressure_solver%apply(self%pressure_x, self%pressure_b) - if ( subroutine_timers ) call timer('mixed_schur solve') + if ( subroutine_timers ) call timer('schur_precon.pressure_solver') ! STEP 3: Back substitute to obtain other fields call self%back_substitute(y) @@ -285,7 +285,7 @@ contains call log_event(log_scratch_space, LOG_LEVEL_ERROR) end select - if ( subroutine_timers ) call timer('mixed_schur_preconditioner_alg') + if ( subroutine_timers ) call timer('mixed_solver.schur_precon') end subroutine apply_mixed_schur_preconditioner @@ -337,7 +337,7 @@ contains type(integer_field_type), pointer :: face_selector_ew type(integer_field_type), pointer :: face_selector_ns - if ( subroutine_timers ) call timer('mixed_schur rhs') + if ( subroutine_timers ) call timer('schur_precon.rhs') rhs => self%pressure_b%get_field_from_position(1) @@ -414,7 +414,7 @@ contains call invoke( inc_X_times_Y(rhs, h_diag) ) end if - if ( subroutine_timers ) call timer('mixed_schur rhs') + if ( subroutine_timers ) call timer('schur_precon.rhs') end subroutine build_pressure_rhs @@ -453,7 +453,7 @@ contains type(r_solver_field_type), target :: dummy_field - if ( subroutine_timers ) call timer('Schur back substitute') + if ( subroutine_timers ) call timer('schur_precon.back_sub') exner_inc => self%pressure_x%get_field_from_position(1) @@ -502,7 +502,7 @@ contains state_p => state%get_field_from_position(isol_p) call invoke( setval_X(state_p, exner_inc) ) - if ( subroutine_timers ) call timer('Schur back substitute') + if ( subroutine_timers ) call timer('schur_precon.back_sub') end subroutine back_substitute diff --git a/science/gungho/source/algorithm/solver/pressure_operator_alg_mod.x90 b/science/gungho/source/algorithm/solver/pressure_operator_alg_mod.x90 index cbc33df07..abdbb61ab 100644 --- a/science/gungho/source/algorithm/solver/pressure_operator_alg_mod.x90 +++ b/science/gungho/source/algorithm/solver/pressure_operator_alg_mod.x90 @@ -166,7 +166,7 @@ contains integer(kind=i_def) :: mesh_id logical(kind=l_def) :: lam_mesh - if ( subroutine_timers ) call timer('helmholtz lhs') + if ( subroutine_timers ) call timer('pressure_solver.helmholtz_lhs') select type (x) type is (r_solver_field_vector_type) @@ -241,7 +241,7 @@ contains nullify( w3_mask, w2_mask ) end if nullify( x_vec, y_vec ) - if ( subroutine_timers ) call timer('helmholtz lhs') + if ( subroutine_timers ) call timer('pressure_solver.helmholtz_lhs') class default diff --git a/science/gungho/source/algorithm/solver/semi_implicit_solver_alg_mod.x90 b/science/gungho/source/algorithm/solver/semi_implicit_solver_alg_mod.x90 index 893deb5b1..a127b0ed5 100644 --- a/science/gungho/source/algorithm/solver/semi_implicit_solver_alg_mod.x90 +++ b/science/gungho/source/algorithm/solver/semi_implicit_solver_alg_mod.x90 @@ -574,7 +574,7 @@ contains type(integer_field_type), pointer :: face_selector_ew type(integer_field_type), pointer :: face_selector_ns - if ( subroutine_timers ) call timer('semi_implicit_solver_alg') + if ( subroutine_timers ) call timer('dynamics.solver') ! Input fields are r_def fields so preliminary work uses field_types mesh_id = state(igh_p)%get_mesh_id() @@ -669,14 +669,14 @@ contains end if ! Solve the semi-implicit operator - if ( subroutine_timers ) call timer('mixed_solver') + if ( subroutine_timers ) call timer('solver.mixed_solver') call log_event( "Gungho: mixed solve:", LOG_LEVEL_DEBUG ) ! Create field vectors out of field arrays call construct_solver_state(vector_inc, rhs_rsol, import_fields = .false.) call construct_solver_state(vector_rhs, rhs_rsol, import_fields = .true.) call vector_inc%set_scalar(0.0_r_def) call mixed_solver%apply(vector_inc, vector_rhs) - if ( subroutine_timers ) call timer('mixed_solver') + if ( subroutine_timers ) call timer('solver.mixed_solver') ! Get the pressure increment inc_exner_rsol => vector_inc%get_field_from_position(isol_p) @@ -742,7 +742,7 @@ contains if ( write_moisture_diag ) & call moisture_conservation_alg( state(igh_d), mr, 'After solve' ) - if ( subroutine_timers ) call timer('semi_implicit_solver_alg') + if ( subroutine_timers ) call timer('dynamics.solver') end subroutine semi_implicit_solver_alg_step diff --git a/science/gungho/source/algorithm/solver/si_operators_alg_mod.x90 b/science/gungho/source/algorithm/solver/si_operators_alg_mod.x90 index 0b116dad8..907fb94cf 100644 --- a/science/gungho/source/algorithm/solver/si_operators_alg_mod.x90 +++ b/science/gungho/source/algorithm/solver/si_operators_alg_mod.x90 @@ -193,7 +193,6 @@ contains type(function_space_type), pointer :: w3_fs => null() type(function_space_type), pointer :: wt_fs => null() - if ( subroutine_timers ) call timer('si_operators_alg:create') call log_event( "Gungho: creating si_operators", LOG_LEVEL_DEBUG ) if(l_multigrid) then @@ -282,8 +281,6 @@ contains end do nullify( w2_fs, w3_fs, wt_fs ) - if ( subroutine_timers ) call timer('si_operators_alg:create') - end subroutine create_si_operators !> @brief Explicitly reclaim memory from module scope variables @@ -472,7 +469,7 @@ contains integer(kind=i_def), parameter :: req_stencil_depth = 1 integer(kind=i_def), parameter :: req_halo_depth = req_stencil_depth + 1 - if ( subroutine_timers ) call timer('si_operators_alg:compute') + if ( subroutine_timers ) call timer('dynamics.compute_si_operators') call log_event( "Gungho: computing si_operators", LOG_LEVEL_DEBUG ) dt = real(model_clock%get_seconds_per_step(), r_def) @@ -824,7 +821,7 @@ contains mesh, reference_element, m2, u_normalisation, t_normalisation, & w2_mask, mesh ) - if ( subroutine_timers ) call timer('si_operators_alg:compute') + if ( subroutine_timers ) call timer('dynamics.compute_si_operators') end subroutine compute_si_operators diff --git a/science/gungho/source/algorithm/timestepping/semi_implicit_timestep_alg_mod.X90 b/science/gungho/source/algorithm/timestepping/semi_implicit_timestep_alg_mod.X90 index 7aa360475..e16fdbf6e 100644 --- a/science/gungho/source/algorithm/timestepping/semi_implicit_timestep_alg_mod.X90 +++ b/science/gungho/source/algorithm/timestepping/semi_implicit_timestep_alg_mod.X90 @@ -663,7 +663,7 @@ contains logical(l_def) :: murk_lbc real(r_def) :: tau_r - if ( subroutine_timers ) call timer('semi_implicit_timestep_alg') + if ( subroutine_timers ) call timer('semi_implicit_timestep') cast_dt = real(model_clock%get_seconds_per_step(), r_def) @@ -1156,7 +1156,7 @@ contains nullify( mm_wt, mm_vel ) - if ( subroutine_timers ) call timer('semi_implicit_timestep_alg') + if ( subroutine_timers ) call timer('semi_implicit_timestep') end subroutine run_step diff --git a/science/gungho/source/algorithm/transport/common/calc_dep_pts_alg_mod.x90 b/science/gungho/source/algorithm/transport/common/calc_dep_pts_alg_mod.x90 index 02150f9a1..9612ea952 100644 --- a/science/gungho/source/algorithm/transport/common/calc_dep_pts_alg_mod.x90 +++ b/science/gungho/source/algorithm/transport/common/calc_dep_pts_alg_mod.x90 @@ -159,8 +159,6 @@ contains type(r_tran_field_type) :: dep_wind type(r_tran_field_type) :: dep_wind_np1 - if ( subroutine_timers ) call timer( 'transport.hori_dep_pts' ) - ! Get function space, mesh, and Det(J) at W3 w2_fs => wind_n%get_function_space() w2h_fs => dep_dist%get_function_space() @@ -186,6 +184,8 @@ contains ! Lagrangian approaches -------------------------------------------------- case ( horizontal_method_trapezoidal ) + + if ( subroutine_timers ) call timer( 'transport.hori_dep_pts' ) call invoke( calc_departure_wind_kernel_type(dep_wind, wind_n, & detj_at_w3, 1), & calc_departure_wind_kernel_type(dep_wind_np1, wind_np1, & @@ -204,7 +204,11 @@ contains detj_at_w3, 1, & face_selector_ew, & face_selector_ns) ) + if ( subroutine_timers ) call timer( 'transport.hori_dep_pts' ) + case ( horizontal_method_midpoint ) + + if ( subroutine_timers ) call timer( 'transport.hori_dep_pts' ) call invoke( calc_departure_wind_kernel_type(dep_wind, wind_n, & detj_at_w3, 1), & hori_dep_dist_midpoint_kernel_type(dep_dist, & @@ -219,9 +223,13 @@ contains detj_at_w3, 1, & face_selector_ew, & face_selector_ns) ) + if ( subroutine_timers ) call timer( 'transport.hori_dep_pts' ) ! Eulerian approaches ---------------------------------------------------- case ( horizontal_method_euler, horizontal_method_timeaverage ) + + if ( subroutine_timers ) call timer( 'transport.hori_dep_pts' ) + ! Set the advecting wind based on the departure point method if ( horizontal_method == horizontal_method_euler ) then call invoke( setval_X(wind_adv, wind_np1) ) @@ -251,6 +259,8 @@ contains inc_min_aX(max_hori_dep, dep_dist) ) end if + if ( subroutine_timers ) call timer( 'transport.hori_dep_pts' ) + case ( horizontal_method_ffsl ) ! Use time-averaged wind cap_dep_points = (horizontal_limit == horizontal_limit_cap) @@ -280,8 +290,6 @@ contains nullify( w2_fs, w2h_fs, mesh, detj_at_w3, face_selector_ew, face_selector_ns ) - if ( subroutine_timers ) call timer( 'transport.hori_dep_pts' ) - end subroutine calc_hori_dep_pts !> @brief Calculates the horizontal FFSL departure points @@ -344,6 +352,8 @@ contains logical(kind=l_def) :: cap_dep_points logical(kind=l_def) :: is_cubed_sphere + if ( subroutine_timers ) call timer( 'transport.hori_dep_pts' ) + mesh => wind%get_mesh() face_selector_ew => get_face_selector_ew(mesh%get_id()) face_selector_ns => get_face_selector_ns(mesh%get_id()) @@ -419,6 +429,8 @@ contains end if end if + if ( subroutine_timers ) call timer( 'transport.hori_dep_pts' ) + end subroutine calc_ffsl_hori_dep_pts diff --git a/science/gungho/source/algorithm/transport/common/end_of_transport_step_alg_mod.x90 b/science/gungho/source/algorithm/transport/common/end_of_transport_step_alg_mod.x90 index 34ee74e25..1790c8db6 100644 --- a/science/gungho/source/algorithm/transport/common/end_of_transport_step_alg_mod.x90 +++ b/science/gungho/source/algorithm/transport/common/end_of_transport_step_alg_mod.x90 @@ -126,8 +126,6 @@ contains logical(kind=l_def) :: do_overwrite type(r_tran_field_type), pointer :: field_start - if ( subroutine_timers ) call timer('transport.end_of_transport') - mesh => field_np1%get_mesh() ! Determine whether this is the final split step @@ -172,8 +170,6 @@ contains call log_field_minmax( LOG_LEVEL_DEBUG, 'field_np1: end_of_advective_step', field_np1) - if ( subroutine_timers ) call timer('transport.end_of_transport') - end subroutine end_of_advective_step_alg !> @brief Common end-of-step code for conservative transport schemes @@ -233,8 +229,6 @@ contains real(kind=r_tran) :: acceptable_min real(kind=r_tran) :: field_min, field_max - if ( subroutine_timers ) call timer('transport.end_of_transport') - ! Extract transport runtime mesh => field_np1%get_mesh() mesh_id = mesh%get_id() @@ -390,8 +384,6 @@ contains call log_field_minmax( LOG_LEVEL_DEBUG, 'field_np1: end_of_conservative_step', field_np1) - if ( subroutine_timers ) call timer('transport.end_of_transport') - end subroutine end_of_conservative_step_alg !> @brief Common end-of-step code for consistent transport schemes @@ -491,8 +483,6 @@ contains real(kind=r_tran) :: field_min, field_max logical(kind=l_def) :: to_compute_field_np1 - if ( subroutine_timers ) call timer('transport.end_of_transport') - ! Extract transport runtime prime_extrusion_mesh => field_np1%get_mesh() prime_extrusion_mesh_id = prime_extrusion_mesh%get_id() @@ -532,8 +522,6 @@ contains (trim(transport_metadata%get_name()) == 'potential_temperature' .or. & trim(transport_metadata%get_name()) == 'theta')) then - if ( subroutine_timers ) call timer('transport.theta_dispersion') - shifted_mesh => mesh_collection%get_mesh(prime_extrusion_mesh, SHIFTED) sh_w3_fs => function_space_collection%get_fs(shifted_mesh, 0, 0, W3) rmultiplicity_shifted => get_rmultiplicity_fv(flux_function_space, shifted_mesh%get_id()) @@ -570,8 +558,6 @@ contains face_selector_ew, & face_selector_ns), & inc_X_plus_Y(flux, flux_correction) ) - - if ( subroutine_timers ) call timer('transport.theta_dispersion') end if ! ------------------------------------------------------------------------ ! @@ -766,8 +752,6 @@ contains call log_field_minmax( LOG_LEVEL_DEBUG, 'field_np1: end_of_consistent_step', field_np1) - if ( subroutine_timers ) call timer('transport.end_of_transport') - end subroutine end_of_consistent_step_alg !> @brief Build up the mass flux used over a full conservative transport step @@ -809,8 +793,6 @@ contains logical(kind=l_def) :: is_flux_3d logical(kind=l_def) :: is_flux_split - if ( subroutine_timers ) call timer('transport.build_up_flux') - ! Don't know which function space the fluxes are in -- add up each mesh => sum_flux%get_mesh() mesh_id = mesh%get_id() @@ -890,8 +872,6 @@ contains end if end if - if ( subroutine_timers ) call timer('transport.build_up_flux') - end subroutine build_up_flux end module end_of_transport_step_alg_mod diff --git a/science/gungho/source/algorithm/transport/common/flux_precomputations_mod.x90 b/science/gungho/source/algorithm/transport/common/flux_precomputations_mod.x90 index 993b71d38..146f82c89 100644 --- a/science/gungho/source/algorithm/transport/common/flux_precomputations_mod.x90 +++ b/science/gungho/source/algorithm/transport/common/flux_precomputations_mod.x90 @@ -867,7 +867,7 @@ contains face_selector_ew => get_face_selector_ew(self%mesh_ids(2)) face_selector_ns => get_face_selector_ns(self%mesh_ids(2)) - if ( subroutine_timers ) call timer('transport.get_ref_flux') + if ( subroutine_timers ) call timer('transport.flux_precomp') ! Transform fluxes to the shifted mesh, with case depending on fs_id select case (fs_id) @@ -894,7 +894,7 @@ contains self%ref_flux(1, step_idx)) ) end select - if ( subroutine_timers ) call timer('transport.get_ref_flux') + if ( subroutine_timers ) call timer('transport.flux_precomp') end if ! Point to existing field @@ -961,7 +961,7 @@ contains ! Obtain reference field from mass ref_mass => self%get_ref_mass(mesh_id, step) - if ( subroutine_timers ) call timer('transport.get_ref_field') + if ( subroutine_timers ) call timer('transport.flux_precomp') call self%ref_field(mesh_idx, step)%initialise(w3_fs, halo_depth=halo_depth) @@ -973,7 +973,7 @@ contains detj_w3) ) end if - if ( subroutine_timers ) call timer('transport.get_ref_field') + if ( subroutine_timers ) call timer('transport.flux_precomp') end if ! Return existing field @@ -1079,7 +1079,7 @@ contains ref_flux => self%get_ref_flux(mesh_id, step-1) call increment%initialise(w3_fs) - if ( subroutine_timers ) call timer('transport.get_ref_mass') + if ( subroutine_timers ) call timer('transport.flux_precomp') ! Take divergence of flux to get increment fs_id = ref_flux%which_function_space() @@ -1140,14 +1140,14 @@ contains depth=transport_boundary_depth) end if - if ( subroutine_timers ) call timer('transport.get_ref_mass') + if ( subroutine_timers ) call timer('transport.flux_precomp') ! ---------------------------------------------------------------------- ! ! 2. The density from this step (multiplied by cell volumes) ! ---------------------------------------------------------------------- ! else if (self%ref_field(mesh_idx, step)%is_initialised()) then - if ( subroutine_timers ) call timer('transport.get_ref_mass') + if ( subroutine_timers ) call timer('transport.flux_precomp') detj_w3 => get_detj_at_w3_r_tran(mesh_id) if (panel_edge_treatment == panel_edge_treatment_extended_mesh) then call invoke_deep_X_times_Y(self%ref_mass(mesh_idx, step), & @@ -1157,13 +1157,13 @@ contains self%ref_field(mesh_idx, step), detj_w3) ) end if - if ( subroutine_timers ) call timer('transport.get_ref_mass') + if ( subroutine_timers ) call timer('transport.flux_precomp') ! ---------------------------------------------------------------------- ! ! 3. If on the shifted mesh, obtain the mass by shifting the mass ! ---------------------------------------------------------------------- ! else if (mesh_idx == 2) then - if ( subroutine_timers ) call timer('transport.get_ref_mass') + if ( subroutine_timers ) call timer('transport.flux_precomp') ref_mass_prime => self%get_ref_mass(self%mesh_ids(1), step, negative_check_flag) if (panel_edge_treatment == panel_edge_treatment_extended_mesh) then ! Original field has already been remapped, so can perform a "deep" @@ -1176,7 +1176,7 @@ contains call invoke( shift_mass_w3_kernel_type(self%ref_mass(2, step), & ref_mass_prime) ) end if - if ( subroutine_timers ) call timer('transport.get_ref_mass') + if ( subroutine_timers ) call timer('transport.flux_precomp') end if ! Check if the computed reference mass is negative ----------------------- @@ -1246,7 +1246,7 @@ contains detj_w3 => get_detj_at_w3_r_tran(mesh_id) w3_fs => function_space_collection%get_fs(mesh, 0, 0, W3) - if ( subroutine_timers ) call timer('transport.get_ref_field_xy') + if ( subroutine_timers ) call timer('transport.flux_precomp') call self%ref_field_x(mesh_idx, step_idx)%initialise(w3_fs, halo_depth=halo_depth) @@ -1257,7 +1257,7 @@ contains call invoke( X_divideby_Y(self%ref_field_x(mesh_idx, step_idx), & ref_mass, detj_w3) ) end if - if ( subroutine_timers ) call timer('transport.get_ref_field_xy') + if ( subroutine_timers ) call timer('transport.flux_precomp') end if ! Return existing field @@ -1310,7 +1310,7 @@ contains detj_w3 => get_detj_at_w3_r_tran(mesh_id) w3_fs => function_space_collection%get_fs(mesh, 0, 0, W3) - if ( subroutine_timers ) call timer('transport.get_ref_field_xy') + if ( subroutine_timers ) call timer('transport.flux_precomp') call self%ref_field_y(mesh_idx, step_idx)%initialise(w3_fs, halo_depth=halo_depth) @@ -1321,7 +1321,7 @@ contains call invoke( X_divideby_Y(self%ref_field_y(mesh_idx, step_idx), & ref_mass, detj_w3) ) end if - if ( subroutine_timers ) call timer('transport.get_ref_field_xy') + if ( subroutine_timers ) call timer('transport.flux_precomp') end if ! Return existing field @@ -1666,7 +1666,7 @@ contains mesh => mesh_collection%get_mesh(mesh_id) dep_dist => self%get_dep_dist(mesh_id, step, outer_step_local) - if ( subroutine_timers ) call timer('transport.get_dep_stencil_extent') + if ( subroutine_timers ) call timer('transport.flux_precomp') ! We can shorten the stencil extent to the Courant number call get_field_minmax(dep_dist, dep_min, dep_max) @@ -1684,7 +1684,7 @@ contains self%max_stencil_extent_computed = .true. end if - if ( subroutine_timers ) call timer('transport.get_dep_stencil_extent') + if ( subroutine_timers ) call timer('transport.flux_precomp') end if ! INNER STEP EXTENTS ------------------------------------------------------- @@ -1703,7 +1703,7 @@ contains mesh => mesh_collection%get_mesh(mesh_id) dep_dist => self%get_dep_dist(mesh_id, step, outer_step_local) - if ( subroutine_timers ) call timer('transport.get_dep_stencil_extent') + if ( subroutine_timers ) call timer('transport.flux_precomp') ! We can shorten the stencil extent to the Courant number call get_field_minmax(dep_dist, dep_min, dep_max) @@ -1721,7 +1721,7 @@ contains self%max_stencil_extent_computed = .true. end if - if ( subroutine_timers ) call timer('transport.get_dep_stencil_extent') + if ( subroutine_timers ) call timer('transport.flux_precomp') end if end function get_dep_stencil_extent @@ -1835,7 +1835,7 @@ contains ref_flux => self%get_ref_flux(mesh_id, step) w3_fs => function_space_collection%get_fs(mesh, 0, 0, W3) - if ( subroutine_timers ) call timer('transport.get_ref_mass_xy') + if ( subroutine_timers ) call timer('transport.flux_precomp') call self%ref_mass_x(mesh_idx, step_idx)%initialise(w3_fs, halo_depth=halo_depth) call self%ref_mass_y(mesh_idx, step_idx)%initialise(w3_fs, halo_depth=halo_depth) @@ -1891,7 +1891,7 @@ contains ) end if - if ( subroutine_timers ) call timer('transport.get_ref_mass_xy') + if ( subroutine_timers ) call timer('transport.flux_precomp') end subroutine compute_ref_mass_x_and_y @@ -1937,7 +1937,7 @@ contains end if ref_flux => self%get_ref_flux(mesh_id, step) - if ( subroutine_timers ) call timer('transport.compute_dep_dists') + if ( subroutine_timers ) call timer('transport.flux_precomp') w2_fs => ref_flux%get_function_space() call self%dep_dist(mesh_idx, step_idx)%initialise(w2_fs) @@ -1979,7 +1979,7 @@ contains ) end if - if ( subroutine_timers ) call timer('transport.compute_dep_dists') + if ( subroutine_timers ) call timer('transport.flux_precomp') end subroutine compute_dep_dist_inner @@ -2021,7 +2021,7 @@ contains ref_mass_x => self%get_ref_mass_x(mesh_id, step) ref_mass_y => self%get_ref_mass_y(mesh_id, step) - if ( subroutine_timers ) call timer('transport.compute_dep_dists') + if ( subroutine_timers ) call timer('transport.flux_precomp') if (direction /= direction_h) then write(log_scratch_space, '(A,I8,A)') & @@ -2059,7 +2059,7 @@ contains ) end if - if ( subroutine_timers ) call timer('transport.compute_dep_dists') + if ( subroutine_timers ) call timer('transport.flux_precomp') end subroutine compute_dep_dist_outer diff --git a/science/gungho/source/algorithm/transport/common/predictors_alg_mod.x90 b/science/gungho/source/algorithm/transport/common/predictors_alg_mod.x90 index 6af318e78..454b83374 100644 --- a/science/gungho/source/algorithm/transport/common/predictors_alg_mod.x90 +++ b/science/gungho/source/algorithm/transport/common/predictors_alg_mod.x90 @@ -22,6 +22,8 @@ module predictors_alg_mod use field_mod, only: field_type use model_clock_mod, only: model_clock_type use operator_mod, only: operator_type + use io_config_mod, only: subroutine_timers + use timer_mod, only: timer ! Configurations use derived_config_mod, only: bundle_size @@ -83,6 +85,8 @@ contains ! Divergence operator type(operator_type), pointer :: im3_div => null() + if ( subroutine_timers ) call timer("dynamics.transport_predictors") + ! Predictor of the wind field (u-beta*dt*rhs) if ( .not. si_momentum_equation ) then if (horizontal_transport_predictor) then @@ -133,6 +137,8 @@ contains nullify( im3_div ) end if + if ( subroutine_timers ) call timer("dynamics.transport_predictors") + end subroutine predictors_alg end module predictors_alg_mod diff --git a/science/gungho/source/algorithm/transport/common/wind_precomputations_mod.x90 b/science/gungho/source/algorithm/transport/common/wind_precomputations_mod.x90 index 0578f128b..91f8ff84a 100644 --- a/science/gungho/source/algorithm/transport/common/wind_precomputations_mod.x90 +++ b/science/gungho/source/algorithm/transport/common/wind_precomputations_mod.x90 @@ -369,6 +369,8 @@ contains class(wind_precomputations_type), intent(inout) :: self + if ( subroutine_timers ) call timer('transport.wind_precomp_final') + self%is_initialised_flag = .false. if ( allocated( self%mesh_ids ) ) deallocate( self%mesh_ids ) if ( allocated( self%wind_n ) ) deallocate( self%wind_n ) @@ -403,6 +405,8 @@ contains if ( allocated( self%dep_stencil_extent ) ) deallocate( self%dep_stencil_extent ) if ( allocated( self%split_ffsl_precomputations ) ) deallocate( self%split_ffsl_precomputations ) + if ( subroutine_timers ) call timer('transport.wind_precomp_final') + end subroutine finalise ! ============================================================================ ! @@ -826,7 +830,7 @@ contains ! Otherwise, the departure points are those stored in this object else - if ( subroutine_timers ) call timer('transport.dep_dist_reset_unity') + if ( subroutine_timers ) call timer('transport.wind_precomp') ! Check if they have been computed, based on if they are initialised mesh_idx = self%idx_from_mesh_id(mesh_id) @@ -861,7 +865,7 @@ contains dep_dist_xy => self%dep_dist_xy(mesh_idx, frac_idx) - if ( subroutine_timers ) call timer('transport.dep_dist_reset_unity') + if ( subroutine_timers ) call timer('transport.wind_precomp') end if end function get_dep_dist_xy @@ -905,7 +909,7 @@ contains ! Otherwise, the departure points are those stored in this object else - if ( subroutine_timers ) call timer('transport.dep_dist_reset_unity') + if ( subroutine_timers ) call timer('transport.wind_precomp') ! Check if they have been computed, based on if they are initialised mesh_idx = self%idx_from_mesh_id(mesh_id) @@ -931,7 +935,7 @@ contains dep_dist_z => self%dep_dist_z(mesh_idx, frac_idx) - if ( subroutine_timers ) call timer('transport.dep_dist_reset_unity') + if ( subroutine_timers ) call timer('transport.wind_precomp') end if end function get_dep_dist_z @@ -1258,7 +1262,7 @@ contains ! Has the field already been computed? If not, compute it now if (.not. self%dep_courant_vert(mesh_idx)%is_initialised()) then - if ( subroutine_timers ) call timer('transport.dep_dist_courant') + if ( subroutine_timers ) call timer('transport.wind_precomp') ! Calculate vertical departure distance mesh => mesh_collection%get_mesh(mesh_id) @@ -1278,7 +1282,7 @@ contains self%wind_n(mesh_idx), self%wind_np1(mesh_idx), self%dt_substep, & compute_cfl_dep & ) - if ( subroutine_timers ) call timer('transport.dep_dist_courant') + if ( subroutine_timers ) call timer('transport.wind_precomp') end if dep_courant_vert => self%dep_courant_vert(mesh_idx) @@ -1397,7 +1401,7 @@ contains face_selector_ns => get_face_selector_ns(mesh_id) wind_3d => self%get_wind(mesh_id, direction_3d) - if ( subroutine_timers ) call timer('transport.compute_courant') + if ( subroutine_timers ) call timer('transport.wind_precomp') ! ------------------------------------------------------------------------ ! ! Determine Courant number field @@ -1509,7 +1513,7 @@ contains self%courant_computed(mesh_idx) = .true. - if ( subroutine_timers ) call timer('transport.compute_courant') + if ( subroutine_timers ) call timer('transport.wind_precomp') end subroutine compute_courant @@ -1552,7 +1556,7 @@ contains frac_idx = get_fraction_idx(splitting, step) dep_dist_z => self%get_dep_dist_z(mesh_id, splitting, step) - if ( subroutine_timers ) call timer('transport.compute_sl_coeffs') + if ( subroutine_timers ) call timer('transport.wind_precomp') ! Points to appropriate coefficients and indices --------------------------- select case (space) @@ -1624,7 +1628,7 @@ contains ! Compute coefficients ----------------------------------------------------- call compute_sl_coefficients_alg(coeffs, sl_indices, dep_dist_z, order) - if ( subroutine_timers ) call timer('transport.compute_sl_coeffs') + if ( subroutine_timers ) call timer('transport.wind_precomp') end subroutine compute_sl_coefficients diff --git a/science/gungho/source/algorithm/transport/control/gungho_transport_control_alg_mod.X90 b/science/gungho/source/algorithm/transport/control/gungho_transport_control_alg_mod.X90 index 7ebe3d4eb..a073de228 100644 --- a/science/gungho/source/algorithm/transport/control/gungho_transport_control_alg_mod.X90 +++ b/science/gungho/source/algorithm/transport/control/gungho_transport_control_alg_mod.X90 @@ -263,7 +263,7 @@ contains type(transport_controller_type) :: transport_controller type(transport_controller_type) :: aerosol_transport_controller - if ( subroutine_timers ) call timer('gungho_transport_control') + if ( subroutine_timers ) call timer('dynamics.transport') ! ======================================================================== ! ! Pre-transport initialisation tasks @@ -555,7 +555,7 @@ contains call transport_controller%finalise() call aerosol_transport_controller%finalise() - if ( subroutine_timers ) call timer('gungho_transport_control') + if ( subroutine_timers ) call timer('dynamics.transport') end subroutine gungho_transport_control_alg diff --git a/science/gungho/source/algorithm/transport/control/moist_mr_transport_alg_mod.x90 b/science/gungho/source/algorithm/transport/control/moist_mr_transport_alg_mod.x90 index 98c9f75b3..34de02baf 100644 --- a/science/gungho/source/algorithm/transport/control/moist_mr_transport_alg_mod.x90 +++ b/science/gungho/source/algorithm/transport/control/moist_mr_transport_alg_mod.x90 @@ -9,10 +9,8 @@ module moist_mr_transport_alg_mod use constants_mod, only: i_def, r_def use field_mod, only: field_type - use io_config_mod, only: subroutine_timers use log_mod, only: log_event, LOG_LEVEL_ERROR use mr_indices_mod, only: nummr - use timer_mod, only: timer use transport_enumerated_types_mod, only: equation_form_advective, & equation_form_conservative, & equation_form_consistent @@ -62,8 +60,6 @@ contains integer(kind=i_def) :: imr integer(kind=i_def) :: equation_form - if ( subroutine_timers ) call timer('transport.moisture') - ! If performing advective transport in the first outer loop, then the ! transport metadata needs setting here to make that choice ! The transport metadata will then be reset correctly within transport_field @@ -132,8 +128,6 @@ contains call invoke( setval_X(mr_out_rdef(imr), mr_in_rdef(imr)) ) end do - if ( subroutine_timers ) call timer('transport.moisture') - end subroutine moist_mr_transport_alg end module moist_mr_transport_alg_mod diff --git a/science/gungho/source/algorithm/transport/control/theta_transport_alg_mod.x90 b/science/gungho/source/algorithm/transport/control/theta_transport_alg_mod.x90 index 55c1c3b9a..ad31be337 100644 --- a/science/gungho/source/algorithm/transport/control/theta_transport_alg_mod.x90 +++ b/science/gungho/source/algorithm/transport/control/theta_transport_alg_mod.x90 @@ -24,7 +24,6 @@ module theta_transport_alg_mod use function_space_collection_mod, only: function_space_collection use fv_divergence_3d_kernel_mod, only: fv_divergence_3d_kernel_type use sci_geometric_constants_mod, only: get_height_fv, get_height_fe - use io_config_mod, only: subroutine_timers use log_mod, only: log_event, LOG_LEVEL_ERROR use map_w2_to_sh_w2_alg_mod, only: map_w2_to_sh_w2_alg use mesh_mod, only: mesh_type @@ -42,7 +41,6 @@ module theta_transport_alg_mod get_num_split_steps, & get_dry_config use theta_moist_source_kernel_mod, only: theta_moist_source_kernel_type - use timer_mod, only: timer use timestepping_config_mod, only: time_method => method, & method_semi_implicit use transport_config_mod, only: theta_variable, & diff --git a/science/gungho/source/algorithm/transport/control/tracer_collection_transport_alg_mod.x90 b/science/gungho/source/algorithm/transport/control/tracer_collection_transport_alg_mod.x90 index e8d80ac54..1dcd718b2 100644 --- a/science/gungho/source/algorithm/transport/control/tracer_collection_transport_alg_mod.x90 +++ b/science/gungho/source/algorithm/transport/control/tracer_collection_transport_alg_mod.x90 @@ -16,13 +16,11 @@ module tracer_collection_transport_mod use field_collection_iterator_mod, only: field_collection_iterator_type use function_space_mod, only: function_space_type use function_space_collection_mod, only: function_space_collection - use io_config_mod, only: subroutine_timers use log_mod, only: log_event, & LOG_LEVEL_ERROR, & LOG_LEVEL_DEBUG use mesh_mod, only: mesh_type use mesh_collection_mod, only: mesh_collection - use timer_mod, only: timer use transport_controller_mod, only: transport_controller_type use transport_enumerated_types_mod, only: equation_form_advective, & @@ -79,8 +77,6 @@ contains integer(kind=i_def) :: equation_form - if ( subroutine_timers ) call timer('transport.tracer_collection') - ! If performing advective transport in the first outer loop, then the ! transport metadata needs setting here to make that choice ! The transport metadata will then be reset correctly within transport_field @@ -162,8 +158,6 @@ contains ! but in case there are no fields in the collection, also reset it here call transport_controller%after_transport_field() - if ( subroutine_timers ) call timer('transport.tracer_collection') - end subroutine tracer_collection_transport_alg @@ -216,8 +210,6 @@ contains ! Transport runtime and form of transport equation integer(kind=i_def) :: equation_form - if ( subroutine_timers ) call timer('transport.tracer_collection') - ! If performing advective transport in the first outer loop, then the ! transport metadata needs setting here to make that choice call transport_controller%before_transport_field(transport_metadata) @@ -301,8 +293,6 @@ contains end if - if ( subroutine_timers ) call timer('transport.tracer_collection') - end subroutine coarse_collection_transport_alg end module tracer_collection_transport_mod diff --git a/science/gungho/source/algorithm/transport/control/wind_transport_alg_mod.x90 b/science/gungho/source/algorithm/transport/control/wind_transport_alg_mod.x90 index 73a649ade..a4845274f 100644 --- a/science/gungho/source/algorithm/transport/control/wind_transport_alg_mod.x90 +++ b/science/gungho/source/algorithm/transport/control/wind_transport_alg_mod.x90 @@ -103,8 +103,6 @@ contains type(function_space_type), pointer :: w2b_fs logical(kind=l_def) :: optimised_conversion - if ( subroutine_timers ) call timer('transport.wind') - k_h = get_element_order_h_transport() k_v = get_element_order_v_transport() @@ -262,8 +260,6 @@ contains end if ! si_momentum_equation - if ( subroutine_timers ) call timer('transport.wind') - end subroutine wind_transport_alg end module wind_transport_alg_mod diff --git a/science/gungho/source/algorithm/transport/ffsl/ffsl_hori_alg_mod.x90 b/science/gungho/source/algorithm/transport/ffsl/ffsl_hori_alg_mod.x90 index 7b8f88d2f..f903a9319 100644 --- a/science/gungho/source/algorithm/transport/ffsl/ffsl_hori_alg_mod.x90 +++ b/science/gungho/source/algorithm/transport/ffsl/ffsl_hori_alg_mod.x90 @@ -436,7 +436,6 @@ contains ! used as two kernel arguments field_ptr_copy => field_big_halo - if ( subroutine_timers ) call timer('transport.ffsl_hori_sweeps') ! MASS FLUX COMPUTATION ==================================================== if (panel_edge_treatment == panel_edge_treatment_special_edges) then ! Special edge treatment ------------------------------------------------ @@ -488,29 +487,23 @@ contains min_val, ndep, dt ) ) end if - if ( subroutine_timers ) call timer('transport.ffsl_hori_sweeps') ! fluxes may need unifying to guarantee a unique flux for each face -------- if ( panel_edge_treatment == panel_edge_treatment_extended_mesh ) then - if ( subroutine_timers ) call timer('transport.ffsl_flux_unify') w2b_fs => function_space_collection%get_fs(mesh, 0, 0, W2Hbroken) call flux_broken%initialise( w2b_fs ) call invoke( average_w2_to_w2b_kernel_type(flux_broken, flux), & ffsl_unify_flux_kernel_type(flux, flux_broken, & 1, panel_id, 1) ) - if ( subroutine_timers ) call timer('transport.ffsl_flux_unify') end if ! Compute updated advective fields ----------------------------------------- - if ( subroutine_timers ) call timer('transport.ffsl_hori_update') call invoke( fv_divergence_x_kernel_type(increment_x, flux, detj_at_w3), & fv_divergence_y_kernel_type(increment_y, flux, detj_at_w3) ) call ffsl_advective_increment(increment_x, field_n, dt, adv_one_x) call ffsl_advective_increment(increment_y, field_n, dt, adv_one_y) - if ( subroutine_timers ) call timer('transport.ffsl_hori_update') - end subroutine ffsl_hori_cosmic_inner_alg !> @brief The first horizontal sweeps for FFSL with Swift splitting @@ -737,7 +730,6 @@ contains field_ptr_copy => field_big_halo - if ( subroutine_timers ) call timer('transport.ffsl_hori_sweeps') ! MASS FLUX COMPUTATION ==================================================== if (panel_edge_treatment == panel_edge_treatment_remapping) then ! Use remapped fields at panel edges ------------------------------------- @@ -810,21 +802,16 @@ contains end if - if ( subroutine_timers ) call timer('transport.ffsl_hori_sweeps') - ! fluxes may need unifying to guarantee a unique flux for each face -------- if ( panel_edge_treatment == panel_edge_treatment_extended_mesh ) then - if ( subroutine_timers ) call timer('transport.ffsl_flux_unify') w2b_fs => function_space_collection%get_fs(mesh, 0, 0, W2Hbroken) call flux_broken%initialise( w2b_fs ) call invoke( average_w2_to_w2b_kernel_type(flux_broken, flux), & ffsl_unify_flux_kernel_type(flux, flux_broken, & 1, panel_id, 1) ) - if ( subroutine_timers ) call timer('transport.ffsl_flux_unify') end if ! Compute advected fields - if ( subroutine_timers ) call timer('transport.ffsl_hori_update') call invoke( fv_difference_x_kernel_type(increment_x, flux), & fv_difference_y_kernel_type(increment_y, flux) ) ! Obtain updated mixing ratio by dividing by updated density @@ -833,8 +820,6 @@ contains call swift_inner_update_tracer(field_y, field_n, dry_mass_y, & dry_mass_n, increment_y, step_dt) - if ( subroutine_timers ) call timer('transport.ffsl_hori_update') - end subroutine ffsl_hori_swift_inner_alg !> @brief Performs the outer horizontal steps of X and Y horizontal FFSL sweeps @@ -1104,8 +1089,6 @@ contains ) end if - if ( subroutine_timers ) call timer('transport.ffsl_hori_sweeps') - ! MASS FLUX COMPUTATION ==================================================== if (panel_edge_treatment == panel_edge_treatment_remapping) then ! Use remapped fields at panel edges ------------------------------------- @@ -1179,23 +1162,17 @@ contains end if - if ( subroutine_timers ) call timer('transport.ffsl_hori_sweeps') - ! fluxes may need unifying to guarantee a unique flux for each face -------- if ( panel_edge_treatment == panel_edge_treatment_extended_mesh ) then - if ( subroutine_timers ) call timer('transport.ffsl_flux_unify') w2b_fs => function_space_collection%get_fs(mesh, 0, 0, W2Hbroken) call flux_broken%initialise( w2b_fs ) call invoke( average_w2_to_w2b_kernel_type(flux_broken, flux), & ffsl_unify_flux_kernel_type(flux, flux_broken, & 1, panel_id, 1) ) - if ( subroutine_timers ) call timer('transport.ffsl_flux_unify') end if ! Compute advective increments, if required -------------------------------- if (to_compute_adv_inc .or. to_compute_field_np1) then - if ( subroutine_timers ) call timer('transport.ffsl_hori_update') - call increment_x%initialise( vector_space = field_fs ) call increment_y%initialise( vector_space = field_fs ) @@ -1261,8 +1238,6 @@ contains inc_X_minus_bY(field_np1, dt, increment_y) ) end if end if - - if ( subroutine_timers ) call timer('transport.ffsl_hori_update') end if end subroutine ffsl_hori_outer_alg diff --git a/science/gungho/source/algorithm/transport/mol/reconstruct_w3_field_alg_mod.x90 b/science/gungho/source/algorithm/transport/mol/reconstruct_w3_field_alg_mod.x90 index 6bed73bed..214e6a24c 100644 --- a/science/gungho/source/algorithm/transport/mol/reconstruct_w3_field_alg_mod.x90 +++ b/science/gungho/source/algorithm/transport/mol/reconstruct_w3_field_alg_mod.x90 @@ -177,7 +177,7 @@ contains logical(kind=l_def) :: monotone integer(kind=i_def) :: remap_depth - if ( subroutine_timers ) call timer('transport.w3_hori_recon') + if ( subroutine_timers ) call timer('mol.w3_hori_recon') mesh => field_new%get_mesh() mesh_id = mesh%get_id() @@ -237,7 +237,7 @@ contains stencil_size) ) end if - if ( subroutine_timers ) call timer('transport.w3_hori_recon') + if ( subroutine_timers ) call timer('mol.w3_hori_recon') end subroutine hori_w3_reconstruct_alg @@ -269,7 +269,7 @@ contains logical(kind=l_def) :: reversible integer(kind=i_def) :: monotonicity - if ( subroutine_timers ) call timer('transport.w3_vert_recon') + if ( subroutine_timers ) call timer('mol.w3_vert_recon') reversible = ( transport_metadata%get_reversible() .and. final_rk_stage ) logspace = transport_metadata%get_log_space() @@ -311,7 +311,7 @@ contains end if - if ( subroutine_timers ) call timer('transport.w3_vert_recon') + if ( subroutine_timers ) call timer('mol.w3_vert_recon') end subroutine vert_w3_reconstruct_alg diff --git a/science/gungho/source/algorithm/transport/mol/wt_advective_update_alg_mod.x90 b/science/gungho/source/algorithm/transport/mol/wt_advective_update_alg_mod.x90 index 310165201..4dab60d55 100644 --- a/science/gungho/source/algorithm/transport/mol/wt_advective_update_alg_mod.x90 +++ b/science/gungho/source/algorithm/transport/mol/wt_advective_update_alg_mod.x90 @@ -114,7 +114,7 @@ contains logical(kind=l_def) :: monotone integer(kind=i_def) :: remap_depth - if ( subroutine_timers ) call timer('transport.wt_hori_recon') + if ( subroutine_timers ) call timer('mol.wt_hori_recon') mesh => wind%get_mesh() mesh_id = mesh%get_id() @@ -196,7 +196,7 @@ contains wind, & wind_dir, stencil_extent)) - if ( subroutine_timers ) call timer('transport.wt_hori_recon') + if ( subroutine_timers ) call timer('mol.wt_hori_recon') end subroutine hori_wt_update_alg @@ -231,7 +231,7 @@ contains logical(kind=l_def) :: reversible integer(kind=i_def) :: monotonicity - if ( subroutine_timers ) call timer('transport.wt_vert_recon') + if ( subroutine_timers ) call timer('mol.wt_vert_recon') reversible = ( transport_metadata%get_reversible() .and. final_rk_stage ) logspace = transport_metadata%get_log_space() @@ -268,7 +268,7 @@ contains logspace ) ) end if - if ( subroutine_timers ) call timer('transport.wt_vert_recon') + if ( subroutine_timers ) call timer('mol.wt_vert_recon') end subroutine vert_wt_update_alg diff --git a/science/gungho/source/diagnostics/external_forcing_diagnostics.f90 b/science/gungho/source/diagnostics/external_forcing_diagnostics.f90 index 7f0bc7751..8fbd324e3 100644 --- a/science/gungho/source/diagnostics/external_forcing_diagnostics.f90 +++ b/science/gungho/source/diagnostics/external_forcing_diagnostics.f90 @@ -41,7 +41,7 @@ subroutine write_forcing_diagnostics(du_forcing, output_wind_inc) output_dw_force type( field_type ) :: du_force, dv_force, dw_force - if ( subroutine_timers ) call timer("write_forcing_diagnostics") + if ( subroutine_timers ) call timer("diags.external_forcing") if ( output_wind_inc ) then ! @@ -92,7 +92,7 @@ subroutine write_forcing_diagnostics(du_forcing, output_wind_inc) end if - if ( subroutine_timers ) call timer("write_forcing_diagnostics") + if ( subroutine_timers ) call timer("diags.external_forcing") end subroutine write_forcing_diagnostics diff --git a/science/gungho/source/driver/gungho_driver_mod.F90 b/science/gungho/source/driver/gungho_driver_mod.F90 index a3b9846a6..4f98653fa 100644 --- a/science/gungho/source/driver/gungho_driver_mod.F90 +++ b/science/gungho/source/driver/gungho_driver_mod.F90 @@ -38,7 +38,8 @@ module gungho_driver_mod write_diag, & diagnostic_frequency, & multifile_io, & - nodal_output_on_w3 + nodal_output_on_w3, & + subroutine_timers use initialization_config_mod, only : lbc_option, & lbc_option_gungho_file, & lbc_option_um2lfric_file, & @@ -63,6 +64,8 @@ module gungho_driver_mod stochastic_physics, & stochastic_physics_um use io_value_mod, only : io_value_type + use timer_mod, only : timer + use time_config_mod, only : timestep_start #ifdef UM_PHYSICS use variable_fields_mod, only : update_variable_fields @@ -140,6 +143,8 @@ subroutine initialise( program_name, modeldb ) nullify( field_collection_ptr, soil_fields, snow_fields, surface_fields ) #endif + call log_event('Initialising gungho', LOG_LEVEL_INFO) + if ( subroutine_timers ) call timer('gungho_initialise') ! Initialise infrastructure and setup constants call initialise_infrastructure( io_context_name, modeldb ) @@ -270,6 +275,7 @@ subroutine initialise( program_name, modeldb ) #endif nullify(mesh, twod_mesh, aerosol_mesh, aerosol_twod_mesh) + if ( subroutine_timers ) call timer('gungho_initialise') end subroutine initialise @@ -286,6 +292,7 @@ subroutine step( modeldb ) type(mesh_type), pointer :: mesh => null() type(mesh_type), pointer :: twod_mesh => null() + integer(kind=i_def) :: ts_start, rc #if defined(COUPLED) || defined(UM_PHYSICS) type( field_collection_type ), pointer :: depository => null() @@ -302,7 +309,14 @@ subroutine step( modeldb ) type( field_collection_type ), pointer :: surface_fields type( field_collection_type ), pointer :: ancil_fields +#endif + read(timestep_start,*,iostat=rc) ts_start + if ( subroutine_timers .and. modeldb%clock%get_step() == ts_start ) then + call timer('gungho_driver_first_timestep') + end if + if ( subroutine_timers ) call timer('gungho_driver_timestep') +#ifdef UM_PHYSICS nullify( surface_fields, ancil_fields ) regrid_operation => map_scalar_intermesh @@ -426,6 +440,10 @@ subroutine step( modeldb ) call output_model_data( modeldb ) nullify(mesh, twod_mesh) + if ( subroutine_timers ) call timer('gungho_driver_timestep') + if ( subroutine_timers .and. modeldb%clock%get_step() == ts_start ) then + call timer('gungho_driver_first_timestep') + end if end subroutine step @@ -443,7 +461,11 @@ subroutine finalise( program_name, modeldb ) #ifdef COUPLED type( field_collection_type ), pointer :: depository => null() +#endif + + if ( subroutine_timers ) call timer('gungho_finalise') +#ifdef COUPLED if (l_esm_couple) then depository => modeldb%fields%get_field_collection("depository") ! Ensure coupling fields are updated at the end of a cycle to ensure the values @@ -468,6 +490,9 @@ subroutine finalise( program_name, modeldb ) ! Finalise infrastructure and constants call finalise_infrastructure(modeldb) + call log_event('gungho finalised', LOG_LEVEL_INFO) + if ( subroutine_timers ) call timer('gungho_finalise') + end subroutine finalise end module gungho_driver_mod diff --git a/science/linear/source/algorithm/core_dynamics/tl_rhs_alg_mod.x90 b/science/linear/source/algorithm/core_dynamics/tl_rhs_alg_mod.x90 index 2d329e9d8..afb2cd3ca 100644 --- a/science/linear/source/algorithm/core_dynamics/tl_rhs_alg_mod.x90 +++ b/science/linear/source/algorithm/core_dynamics/tl_rhs_alg_mod.x90 @@ -134,7 +134,7 @@ subroutine tl_rhs_alg(rhs, alpha_dt, base_state, state, moist_dyn, & integer(kind=i_def), parameter :: exner_stencil_depth = 1 - if ( subroutine_timers ) call timer('rhs_alg') + if ( subroutine_timers ) call timer('tl_dynamics.rhs_alg') mesh => base_state(igh_u)%get_mesh() @@ -290,7 +290,7 @@ subroutine tl_rhs_alg(rhs, alpha_dt, base_state, state, moist_dyn, & mesh, reference_element ) - if ( subroutine_timers ) call timer('rhs_alg') + if ( subroutine_timers ) call timer('tl_dynamics.rhs_alg') end subroutine tl_rhs_alg diff --git a/science/linear/source/algorithm/timestepping/tl_rk_alg_timestep_mod.x90 b/science/linear/source/algorithm/timestepping/tl_rk_alg_timestep_mod.x90 index 30d391f99..63a2870ae 100644 --- a/science/linear/source/algorithm/timestepping/tl_rk_alg_timestep_mod.x90 +++ b/science/linear/source/algorithm/timestepping/tl_rk_alg_timestep_mod.x90 @@ -256,7 +256,7 @@ contains type(field_type) :: ls_exner_big_halo, & exner_big_halo - if ( subroutine_timers ) call timer('tl_rk_alg') + if ( subroutine_timers ) call timer('tl_runge_kutta_timestep') cast_dt = real(model_clock%get_seconds_per_step(), r_def) @@ -508,7 +508,7 @@ contains nullify( geopotential, chi, panel_id, m3_inv, & mesh, reference_element, qr ) - if ( subroutine_timers ) call timer('tl_rk_alg') + if ( subroutine_timers ) call timer('tl_runge_kutta_timestep') end subroutine tl_rk_alg_step diff --git a/science/linear/source/algorithm/timestepping/tl_si_timestep_alg_mod.x90 b/science/linear/source/algorithm/timestepping/tl_si_timestep_alg_mod.x90 index c4bfedbd2..038eb1d2e 100644 --- a/science/linear/source/algorithm/timestepping/tl_si_timestep_alg_mod.x90 +++ b/science/linear/source/algorithm/timestepping/tl_si_timestep_alg_mod.x90 @@ -397,7 +397,7 @@ contains type( namelist_type ), pointer :: mixed_solver_nml real( kind=r_def ) :: mixed_solver_a_tol - if ( subroutine_timers ) call timer('semi_implicit_timestep_alg') + if ( subroutine_timers ) call timer('tl_semi_implicit_timestep') cast_dt = real(modeldb%clock%get_seconds_per_step(), r_def) @@ -891,7 +891,7 @@ contains nullify( mm_wt, mm_vel, qr ) - if ( subroutine_timers ) call timer('semi_implicit_timestep_alg') + if ( subroutine_timers ) call timer('tl_semi_implicit_timestep') end subroutine tl_semi_implicit_alg_step diff --git a/science/linear/source/algorithm/transport/mol/tl_mol_conservative_alg_mod.x90 b/science/linear/source/algorithm/transport/mol/tl_mol_conservative_alg_mod.x90 index b4563234e..282d02a27 100644 --- a/science/linear/source/algorithm/transport/mol/tl_mol_conservative_alg_mod.x90 +++ b/science/linear/source/algorithm/transport/mol/tl_mol_conservative_alg_mod.x90 @@ -116,7 +116,7 @@ module tl_mol_conservative_alg_mod type(flux_precomputations_type), pointer :: ls_wind_flux_precomp type(flux_precomputations_type), pointer :: pert_wind_flux_precomp - if ( subroutine_timers ) call timer('tl_mol_conservative_alg') + if ( subroutine_timers ) call timer('tl_transport.mol_conservative') ! ------------------------------------------------------------------------ ! ! Extract transport objects and initialise temporary fields @@ -411,7 +411,7 @@ module tl_mol_conservative_alg_mod if ( allocated(rk_weights) ) deallocate(rk_weights) if ( allocated(stored_ls_field) ) deallocate(stored_ls_field) - if ( subroutine_timers ) call timer('tl_mol_conservative_alg') + if ( subroutine_timers ) call timer('tl_transport.mol_conservative') end subroutine tl_mol_conservative_alg