From 6e0dc9824f8dfc795f98e8ff3e4e00615c7294b9 Mon Sep 17 00:00:00 2001 From: Alan J Hewitt <40797340+alanjhewitt@users.noreply.github.com> Date: Thu, 16 Jul 2026 15:44:41 +0100 Subject: [PATCH 1/5] UKCA side changes --- CONTRIBUTORS.md | 1 + .../top_level/ukca_radaer_lfric_api_mod.F90 | 928 ++++++++++++++++++ 2 files changed, 929 insertions(+) create mode 100644 src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index de11f63..6caf55a 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -9,3 +9,4 @@ | JoeCartonKelly-MO | Joseph Carton-Kelly | Met Office | 2026-04-15 | | yg460-cam | Yao Ge | University of Cambridge | 2026-04-17 | | theabro | Nathan Luke Abraham | NCAS & University of Cambridge | 2026-03-19 | +| alanjhewitt | Alan J Hewitt | Met Office | 2026-07-12 | diff --git a/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 b/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 new file mode 100644 index 0000000..d44a1dd --- /dev/null +++ b/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 @@ -0,0 +1,928 @@ +! *****************************COPYRIGHT******************************* +! (C) Crown copyright Met Office. All rights reserved. +! For further details please refer to the file COPYRIGHT.txt +! which you should have received as part of this distribution. +! *****************************COPYRIGHT******************************* +! +! An interface routine to pass chunked columns from lfric to radaer +! +! Subroutine Interface: +! +! Code Owner: Please refer to the UM file CodeOwners.txt +! This file belongs in section: TOP_LEVEL +! +MODULE ukca_radaer_lfric_api_mod + +IMPLICIT NONE + +CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName = 'UKCA_RADAER_LFRIC_API_MOD' + +CONTAINS + +SUBROUTINE ukca_radaer_lfric_interface( & + ! Fixed array dimensions (input) + npd_profile, & + npd_layer, & + npd_exclude_lw, & + npd_exclude_sw, & + npd_ukca_aod_wavel, & + ncp_max_x_nmodes, & + ! Actual array dimensions (input) + n_ukca_mode, & + n_ukca_cpnt, & + ! Prescribed SSA dimensions + nd_prof_ssa, & + nd_layr_ssa, & + nd_band_ssa, & + ! Variables related to waveband exclusion + l_exclude_lw, & + l_exclude_sw, & + ! Modal diameters from UKCA module (input) + ukca_dry_diam_um, & + ukca_wet_diam_um, & + ! Other inputs from UKCA module (input) + ukca_comp_vol_um, & + ukca_modal_vol_um, & + ukca_modal_rho_um, & + ukca_modal_wtv_um, & + ! Logical to describe orientation + l_inverted, & + ! Control option for prescribed single scattering albedo array + i_ukca_radaer_prescribe_ssa, & + ! Model level of the tropopause (input) + trindxrad_um, & + ! Whether we need to run shortwave band_average because lit or not + l_any_lit_points_um, & + ! Prescription of single-scattering albedo + ukca_radaer_presc_ssa, & + ! Input Component mass-mixing ratios + ukca_mix_ratio_um, & + ! Input modal number concentrations + ukca_modal_nbr_um, & + ! Input Pressure and temperature + p_theta_levels, t_theta_levels, & + ! Which aerosol optical depth diagnostics to calculate + l_aod_ukca_ait_sol, l_aaod_ukca_ait_sol, & + l_aod_ukca_acc_sol, l_aaod_ukca_acc_sol, & + l_aod_ukca_cor_sol, l_aaod_ukca_cor_sol, & + l_aod_ukca_ait_ins, l_aaod_ukca_ait_ins, & + l_aod_ukca_acc_ins, l_aaod_ukca_acc_ins, & + l_aod_ukca_cor_ins, l_aaod_ukca_cor_ins, & + ! Mass thickness of layers + d_mass_theta_levels_um, & + ! Modal mass-mixing ratios (input output) + ukca_mode_mix_ratio_um, & + ! Band-averaged optical properties (output) + aer_lw_absorption_um, & + aer_sw_absorption_um, & + aer_lw_scattering_um, & + aer_sw_scattering_um, & + aer_lw_asymmetry_um, & + aer_sw_asymmetry_um, & + aod_ukca_all_modes_um, & + aaod_ukca_all_modes_um ) + +USE socrates_init_mod, ONLY: n_sw_band, & + sw_n_band_exclude, & + sw_index_exclude, & + n_lw_band, & + lw_n_band_exclude, & + lw_index_exclude + +USE ukca_mode_setup, ONLY: mode_ait_sol, mode_acc_sol, & + mode_cor_sol, mode_ait_insol, & + mode_acc_insol, mode_cor_insol, & + ip_ukca_mode_aitken, & + ip_ukca_mode_accum, & + ip_ukca_mode_coarse, & + i_ukca_bc_tuned, & + cp_su, cp_bc, cp_oc, & + cp_cl, cp_du, cp_so, & + cp_no3, cp_nn, cp_nh4, & + nmodes, ncp_max + +USE ukca_radaer_band_average_mod, ONLY: ukca_radaer_band_average + +USE ukca_radaer_compute_aod_mod, ONLY: ukca_radaer_compute_aod + +USE ukca_radaer_prepare_mod, ONLY: ukca_radaer_prepare + +USE um_physics_init_mod, ONLY: n_radaer_mode + +USE parkind1, ONLY: jpim, jprb +USE yomhook, ONLY: lhook, dr_hook + +IMPLICIT NONE + +! Arguments + +! Fixed array dimensions +INTEGER, INTENT(IN) :: npd_profile +INTEGER, INTENT(IN) :: npd_layer +INTEGER, INTENT(IN) :: npd_exclude_lw +INTEGER, INTENT(IN) :: npd_exclude_sw +INTEGER, INTENT(IN) :: npd_ukca_aod_wavel +INTEGER, INTENT(IN) :: ncp_max_x_nmodes + +! RADAER array dimensions (note that nucleation mode is excluded) +INTEGER, INTENT(IN) :: n_ukca_mode, n_ukca_cpnt + +! Fixed array dimensions for prescribed SSA +INTEGER, INTENT(IN) :: nd_prof_ssa, nd_layr_ssa, nd_band_ssa + +! Variables related to waveband exclusion +LOGICAL, INTENT(IN) :: l_exclude_lw, l_exclude_sw + +! Modal diameters from UKCA module (input) +REAL, INTENT(IN) :: ukca_dry_diam_um(npd_profile, npd_layer, n_ukca_mode) +REAL, INTENT(IN) :: ukca_wet_diam_um(npd_profile, npd_layer, n_ukca_mode) + +! Component volume +REAL, INTENT(IN) :: ukca_comp_vol_um( n_ukca_cpnt, npd_profile, npd_layer ) + +! Modal volumes and densities +REAL, INTENT(IN) :: ukca_modal_vol_um( npd_profile, npd_layer, n_ukca_mode ) +REAL, INTENT(IN) :: ukca_modal_rho_um( npd_profile, npd_layer, n_ukca_mode ) + +! Volume of water in modes +REAL, INTENT(IN) :: ukca_modal_wtv_um( npd_profile, npd_layer, n_ukca_mode ) + +! Logical to describe orientation +LOGICAL, INTENT(IN) :: l_inverted + +! When > 0, use a prescribed single scattering albedo field +INTEGER, INTENT(IN) :: i_ukca_radaer_prescribe_ssa + +! Model level of tropopause +INTEGER, INTENT(IN) :: trindxrad_um(npd_profile) + +! Whether we need to run shortwave band_average because lit or not +LOGICAL, INTENT(IN) :: l_any_lit_points_um + +! Prescription of single-scattering albedo +REAL, INTENT(IN) :: ukca_radaer_presc_ssa( nd_prof_ssa, nd_layr_ssa, & + nd_band_ssa ) + +! Component mass-mixing ratios +REAL, INTENT(IN) :: ukca_mix_ratio_um( n_ukca_cpnt, npd_profile, npd_layer ) + +! Modal number concentrations divided by molecular concentration of air +REAL, INTENT(IN) :: ukca_modal_nbr_um( n_ukca_cpnt, npd_profile, npd_layer ) + +! pressure on theta levels +REAL, INTENT(IN) :: p_theta_levels( npd_profile, npd_layer ) + +! temperature on theta levels +REAL, INTENT(IN) :: t_theta_levels( npd_profile, npd_layer ) + +! Which aerosol optical depth diagnostics to calculate +LOGICAL, INTENT(IN) :: l_aod_ukca_ait_sol, l_aaod_ukca_ait_sol, & + l_aod_ukca_acc_sol, l_aaod_ukca_acc_sol, & + l_aod_ukca_cor_sol, l_aaod_ukca_cor_sol, & + l_aod_ukca_ait_ins, l_aaod_ukca_ait_ins, & + l_aod_ukca_acc_ins, l_aaod_ukca_acc_ins, & + l_aod_ukca_cor_ins, l_aaod_ukca_cor_ins + +! Mass thickness of layers +REAL, INTENT(IN) :: d_mass_theta_levels_um( npd_profile, npd_layer ) + +! Modal mass-mixing ratios +REAL, INTENT(IN OUT) :: ukca_mode_mix_ratio_um( npd_profile, npd_layer, & + n_radaer_mode ) + +! Band-averaged modal optical properties +REAL, INTENT(IN OUT) :: aer_lw_absorption_um( npd_profile, npd_layer, & + n_radaer_mode, n_lw_band ) + +REAL, INTENT(IN OUT) :: aer_sw_absorption_um( npd_profile, npd_layer, & + n_radaer_mode, n_sw_band ) + +REAL, INTENT(IN OUT) :: aer_lw_scattering_um( npd_profile, npd_layer, & + n_radaer_mode, n_lw_band ) + +REAL, INTENT(IN OUT) :: aer_sw_scattering_um( npd_profile, npd_layer, & + n_radaer_mode, n_sw_band ) + +REAL, INTENT(IN OUT) :: aer_lw_asymmetry_um( npd_profile, npd_layer, & + n_radaer_mode, n_lw_band ) + +REAL, INTENT(IN OUT) :: aer_sw_asymmetry_um( npd_profile, npd_layer, & + n_radaer_mode, n_sw_band ) + +! Aerosol Optical Depth diagnostics +REAL, INTENT(IN OUT) :: aod_ukca_all_modes_um( npd_profile, npd_ukca_aod_wavel,& + n_ukca_mode ) + +REAL, INTENT(IN OUT) :: aaod_ukca_all_modes_um(npd_profile, npd_ukca_aod_wavel,& + n_ukca_mode ) + +! Local variables + +! Loop variables +INTEGER :: i, k + +! Modal number concentrations (m-3) +REAL :: ukca_modal_number_um( npd_profile, npd_layer, n_ukca_mode) + +! Local AOD diagnostics +REAL :: aod_ukca_this_mode_um( npd_profile, npd_ukca_aod_wavel ) +REAL :: aaod_ukca_this_mode_um( npd_profile, npd_ukca_aod_wavel ) +REAL :: sod_ukca_this_mode_um( npd_profile, npd_ukca_aod_wavel ) + +! ----------------------------------------------------------------- + +LOGICAL, PARAMETER :: l_nitrate = .FALSE. ! Make this a namelist option later +LOGICAL, PARAMETER :: l_sustrat = .TRUE. ! Make this a namelist option later + ! l_sustrat=.true. for ga9 + +LOGICAL, PARAMETER :: l_cornarrow_ins = .FALSE. +! Make this a namelist option later + +! ----------------------------------------------------------------- + +! Maxwell-Garnett mixing approach logical control switches +INTEGER, PARAMETER :: i_ukca_tune_bc = i_ukca_bc_tuned +INTEGER, PARAMETER :: i_glomap_clim_tune_bc = 0 ! No tuning + +! Spectral information +INTEGER, PARAMETER :: ip_infra_red = 2 +INTEGER, PARAMETER :: ip_solar = 1 + +LOGICAL, PARAMETER :: soluble_wanted = .TRUE. +LOGICAL, PARAMETER :: soluble_unwanted = .FALSE. + +INTEGER :: i_cpnt_index( ncp_max, nmodes ) + +INTEGER :: i_mode_type( nmodes ) + +INTEGER :: n_cpnt_in_mode( nmodes ) + +LOGICAL :: l_soluble( nmodes ) + +INTEGER :: i_cpnt_type( ncp_max_x_nmodes ) + +! ----------------------------------------------------------------- + +INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 +INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 +REAL(KIND=jprb) :: zhook_handle +CHARACTER(LEN=*), PARAMETER :: RoutineName='UKCA_RADAER_LFRIC_INTERFACE' + +IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName, zhook_in, zhook_handle) + + !----------------------------------------------------------------------- + + + ! No nucleation mode +l_soluble(1:nmodes) = [.TRUE., .TRUE., .TRUE., .FALSE., & + .FALSE.,.FALSE.,.FALSE.,.FALSE.] + +! No nucleation mode +n_cpnt_in_mode(1:nmodes) = [ 3, 5, 5, 2, 1, 1, -1, -1 ] + +! No nucleation mode +i_mode_type(1:nmodes) = [ 1, 2, 3, 1, 2, 3, -1, -1 ] + +! No nucleation mode +i_cpnt_index(cp_su, 1:nmodes)=[ 1, 4, 9, 14, 16, 17, -1, -1 ] +i_cpnt_index(cp_bc, 1:nmodes)=[ 2, 5, 10, 15, -1, -1, -1, -1 ] +i_cpnt_index(cp_oc, 1:nmodes)=[ 3, 6, 11, -1, -1, -1, -1, -1 ] +i_cpnt_index(cp_cl, 1:nmodes)=[ -1, 7, 12, -1, -1, -1, -1, -1 ] +i_cpnt_index(cp_du, 1:nmodes)=[ -1, 8, 13, -1, -1, -1, -1, -1 ] +i_cpnt_index(cp_so, 1:nmodes)=[ -1, -1, -1, -1, -1, -1, -1, -1 ] +i_cpnt_index(cp_no3,1:nmodes)=[ -1, -1, -1, -1, -1, -1, -1, -1 ] +i_cpnt_index(cp_nn, 1:nmodes)=[ -1, -1, -1, -1, -1, -1, -1, -1 ] +i_cpnt_index(cp_nh4,1:nmodes)=[ -1, -1, -1, -1, -1, -1, -1, -1 ] + +i_cpnt_type(1:ncp_max_x_nmodes) = & + [ 1, 2, 3, 1, 2, 3, 4, 5, 1, & + 2, 3, 4, 5, 2, 3, 5, 5, -1, & + -1, -1, -1, -1, -1, -1, -1, -1, -1, & + -1, -1, -1, -1, -1, -1, -1, -1, -1, & + -1, -1, -1, -1, -1, -1, -1, -1, -1, & + -1, -1, -1, -1, -1, -1, -1, -1, -1, & + -1, -1, -1, -1, -1, -1, -1, -1, -1, & + -1, -1, -1, -1, -1, -1, -1, -1, -1 ] + +!---------------------------------------------------------------------- + +CALL ukca_radaer_prepare( & + ! Input Actual array dimensions + npd_profile, npd_layer, n_ukca_mode, n_ukca_cpnt, & + ! Input Fixed array dimensions + npd_profile, npd_layer, n_radaer_mode, & + ! Input from the UKCA_RADAER structure + nmodes, ncp_max, i_cpnt_index, n_cpnt_in_mode, & + ! Input Component mass-mixing ratios + ukca_mix_ratio_um, & + ! Input modal number concentrations + ukca_modal_nbr_um, & + ! Input Pressure and temperature + p_theta_levels, t_theta_levels, & + ! Output Modal mass-mixing ratios + ukca_mode_mix_ratio_um, & + ! Output modal number concentrations + ukca_modal_number_um & + ) + +! Long wave ( e.g. ip_infra_red ) +CALL ukca_radaer_band_average( & + ! Fixed array dimensions (input) + npd_profile, & + npd_layer, & + n_radaer_mode, & + n_lw_band, & + npd_exclude_lw, & + ! Spectral information (input) + n_lw_band, & + ip_infra_red, & + l_exclude_lw, & + lw_n_band_exclude, & + lw_index_exclude, & + ! Actual array dimensions (input) + npd_profile, & + npd_layer, & + n_ukca_mode, & + n_ukca_cpnt, & + ! Prescribed SSA dimensions + nd_prof_ssa, & + nd_layr_ssa, & + nd_band_ssa, & + ! UKCA_RADAER structure (input) + nmodes, & + ncp_max, & + ncp_max_x_nmodes, & + i_cpnt_index, & + i_cpnt_type, & + i_mode_type, & + l_nitrate, & + l_soluble, & + l_sustrat, & + l_cornarrow_ins, & + n_cpnt_in_mode, & + ! Modal mass-mixing ratios (input) + ukca_mode_mix_ratio_um, & + ! Modal number concentrations (input) + ukca_modal_number_um, & + ! Modal diameters from UKCA module (input) + ukca_dry_diam_um, & + ukca_wet_diam_um, & + ! Other inputs from UKCA module (input) + ukca_comp_vol_um, & + ukca_modal_vol_um, & + ukca_modal_rho_um, & + ukca_modal_wtv_um, & + ! Logical to describe orientation + l_inverted, & + ! Control option for prescribed single scattering albedo array + i_ukca_radaer_prescribe_ssa, & + ! Model level of the tropopause (input) + trindxrad_um, & + ! Prescription of single-scattering albedo + ukca_radaer_presc_ssa, & + ! Maxwell-Garnett mixing approach logical control switches + i_ukca_tune_bc, i_glomap_clim_tune_bc, & + ! Band-averaged optical properties (output) + aer_lw_absorption_um, & + aer_lw_scattering_um, & + aer_lw_asymmetry_um & + ) + +! Short wave (e.g. ip_solar ) - only calculate on lit points +IF ( l_any_lit_points_um ) THEN + + CALL ukca_radaer_band_average( & + ! Fixed array dimensions (input) + npd_profile, & + npd_layer, & + n_radaer_mode, & + n_sw_band, & + npd_exclude_sw, & + ! Spectral information (input) + n_sw_band, & + ip_solar, & + l_exclude_sw, & + sw_n_band_exclude, & + sw_index_exclude, & + ! Actual array dimensions (input) + npd_profile, & + npd_layer, & + n_ukca_mode, & + n_ukca_cpnt, & + ! Prescribed SSA dimensions + nd_prof_ssa, & + nd_layr_ssa, & + nd_band_ssa, & + ! UKCA_RADAER structure (input) + nmodes, & + ncp_max, & + ncp_max_x_nmodes, & + i_cpnt_index, & + i_cpnt_type, & + i_mode_type, & + l_nitrate, & + l_soluble, & + l_sustrat, & + l_cornarrow_ins, & + n_cpnt_in_mode, & + ! Modal mass-mixing ratios (input) + ukca_mode_mix_ratio_um, & + ! Modal number concentrations (input) + ukca_modal_number_um, & + ! Modal diameters from UKCA module (input) + ukca_dry_diam_um, & + ukca_wet_diam_um, & + ! Other inputs from UKCA module (input) + ukca_comp_vol_um, & + ukca_modal_vol_um, & + ukca_modal_rho_um, & + ukca_modal_wtv_um, & + ! Logical to describe orientation + l_inverted, & + ! Switch for prescribed single scattering albedo array + i_ukca_radaer_prescribe_ssa, & + ! Model level of the tropopause (input) + trindxrad_um, & + ! Prescription of single-scattering albedo + ukca_radaer_presc_ssa, & + ! Maxwell-Garnett mixing approach logical control switches + i_ukca_tune_bc, i_glomap_clim_tune_bc, & + ! Band-averaged optical properties (output) + aer_sw_absorption_um, & + aer_sw_scattering_um, & + aer_sw_asymmetry_um ) + +END IF + +!------------------------------------------------ +! Now calculate aod and aaod for Aitken Soluble mode + +IF ( l_aod_ukca_ait_sol .OR. l_aaod_ukca_ait_sol ) THEN + + CALL ukca_radaer_compute_aod( & + ! Fixed array dimensions (input) + npd_profile, & + npd_layer, & + n_ukca_mode, & + n_ukca_cpnt, & + npd_ukca_aod_wavel, & + ! Fixed array Prescribed ssa dimensions (input) + nd_prof_ssa, & + nd_layr_ssa, & + nd_band_ssa, & + ! UKCA_RADAER structure (input) + nmodes, & + ncp_max, & + ncp_max_x_nmodes, & + i_cpnt_index, & + i_cpnt_type, & + n_cpnt_in_mode, & + l_nitrate, & + l_soluble, & + l_sustrat, & + i_mode_type, & + l_cornarrow_ins, & + ! Modal diameters from UKCA module + ukca_dry_diam_um, & + ukca_wet_diam_um, & + ! Mass thickness of layers + d_mass_theta_levels_um, & + ! Component volumes + ukca_comp_vol_um, & + ! Modal volumes, densities, and water content + ukca_modal_vol_um, & + ukca_modal_rho_um, & + ukca_modal_wtv_um, & + ! Modal mass-mixing ratios + ukca_mode_mix_ratio_um, & + ! Modal number concentrations + ukca_modal_number_um, & + ! Type selection + ip_ukca_mode_aitken, & + soluble_wanted, & + ! Switch for if prescribed SSA is on + i_ukca_radaer_prescribe_ssa, & + ! Model level of the tropopause + trindxrad_um, & + ! Prescription of single-scattering albedo + ukca_radaer_presc_ssa, & + ! Modal extinction aerosol opt depth - column (output) + aod_ukca_this_mode_um, & + ! Modal extinction aerosol opt depth - stratosphere (output) + sod_ukca_this_mode_um, & + ! Modal absorption aerosol opt depth (output) + aaod_ukca_this_mode_um, & + ! Fixed array dimensions + npd_profile, & + npd_layer, & + n_radaer_mode, & + npd_ukca_aod_wavel ) + + DO k = 1, npd_ukca_aod_wavel + DO i = 1, npd_profile + aod_ukca_all_modes_um(i,k,mode_ait_sol-1) = aod_ukca_this_mode_um(i,k) + END DO + END DO + + DO k = 1, npd_ukca_aod_wavel + DO i = 1, npd_profile + aaod_ukca_all_modes_um(i,k,mode_ait_sol-1) = aaod_ukca_this_mode_um(i,k) + END DO + END DO + +END IF ! Calculate AOD Aitken Soluble mode + +!------------------------------------------------ +! Now calculate aod and aaod for Accumulation Soluble mode + +IF ( l_aod_ukca_acc_sol .OR. l_aaod_ukca_acc_sol ) THEN + + CALL ukca_radaer_compute_aod( & + ! Fixed array dimensions (input) + npd_profile, & + npd_layer, & + n_ukca_mode, & + n_ukca_cpnt, & + npd_ukca_aod_wavel, & + ! Fixed array Prescribed ssa dimensions (input) + nd_prof_ssa, & + nd_layr_ssa, & + nd_band_ssa, & + ! UKCA_RADAER structure (input) + nmodes, & + ncp_max, & + ncp_max_x_nmodes, & + i_cpnt_index, & + i_cpnt_type, & + n_cpnt_in_mode, & + l_nitrate, & + l_soluble, & + l_sustrat, & + i_mode_type, & + l_cornarrow_ins, & + ! Modal diameters from UKCA module + ukca_dry_diam_um, & + ukca_wet_diam_um, & + ! Mass thickness of layers + d_mass_theta_levels_um, & + ! Component volumes + ukca_comp_vol_um, & + ! Modal volumes, densities, and water content + ukca_modal_vol_um, & + ukca_modal_rho_um, & + ukca_modal_wtv_um, & + ! Modal mass-mixing ratios + ukca_mode_mix_ratio_um, & + ! Modal number concentrations + ukca_modal_number_um, & + ! Type selection + ip_ukca_mode_accum, & + soluble_wanted, & + ! Switch for if prescribed SSA is on + i_ukca_radaer_prescribe_ssa, & + ! Model level of the tropopause + trindxrad_um, & + ! Prescription of single-scattering albedo + ukca_radaer_presc_ssa, & + ! Modal extinction aerosol opt depth - column (output) + aod_ukca_this_mode_um, & + ! Modal extinction aerosol opt depth - stratosphere (output) + sod_ukca_this_mode_um, & + ! Modal absorption aerosol opt depth (output) + aaod_ukca_this_mode_um, & + ! Fixed array dimensions + npd_profile, & + npd_layer, & + n_radaer_mode, & + npd_ukca_aod_wavel ) + + DO k = 1, npd_ukca_aod_wavel + DO i = 1, npd_profile + aod_ukca_all_modes_um(i,k,mode_acc_sol-1) = aod_ukca_this_mode_um(i,k) + END DO + END DO + + DO k = 1, npd_ukca_aod_wavel + DO i = 1, npd_profile + aaod_ukca_all_modes_um(i,k,mode_acc_sol-1) = aaod_ukca_this_mode_um(i,k) + END DO + END DO + +END IF ! Calculate AOD Accumulation Soluble mode + +!------------------------------------------------ +! Now calculate aod and aaod for Coarse Soluble mode + +IF ( l_aod_ukca_cor_sol .OR. l_aaod_ukca_cor_sol ) THEN + + CALL ukca_radaer_compute_aod( & + ! Fixed array dimensions (input) + npd_profile, & + npd_layer, & + n_ukca_mode, & + n_ukca_cpnt, & + npd_ukca_aod_wavel, & + ! Fixed array Prescribed ssa dimensions (input) + nd_prof_ssa, & + nd_layr_ssa, & + nd_band_ssa, & + ! UKCA_RADAER structure (input) + nmodes, & + ncp_max, & + ncp_max_x_nmodes, & + i_cpnt_index, & + i_cpnt_type, & + n_cpnt_in_mode, & + l_nitrate, & + l_soluble, & + l_sustrat, & + i_mode_type, & + l_cornarrow_ins, & + ! Modal diameters from UKCA module + ukca_dry_diam_um, & + ukca_wet_diam_um, & + ! Mass thickness of layers + d_mass_theta_levels_um, & + ! Component volumes + ukca_comp_vol_um, & + ! Modal volumes, densities, and water content + ukca_modal_vol_um, & + ukca_modal_rho_um, & + ukca_modal_wtv_um, & + ! Modal mass-mixing ratios + ukca_mode_mix_ratio_um, & + ! Modal number concentrations + ukca_modal_number_um, & + ! Type selection + ip_ukca_mode_coarse, & + soluble_wanted, & + ! Switch for if prescribed SSA is on + i_ukca_radaer_prescribe_ssa, & + ! Model level of the tropopause + trindxrad_um, & + ! Prescription of single-scattering albedo + ukca_radaer_presc_ssa, & + ! Modal extinction aerosol opt depth - column (output) + aod_ukca_this_mode_um, & + ! Modal extinction aerosol opt depth - stratosphere (output) + sod_ukca_this_mode_um, & + ! Modal absorption aerosol opt depth (output) + aaod_ukca_this_mode_um, & + ! Fixed array dimensions + npd_profile, & + npd_layer, & + n_radaer_mode, & + npd_ukca_aod_wavel ) + + DO k = 1, npd_ukca_aod_wavel + DO i = 1, npd_profile + aod_ukca_all_modes_um(i,k,mode_cor_sol-1) = aod_ukca_this_mode_um(i,k) + END DO + END DO + + DO k = 1, npd_ukca_aod_wavel + DO i = 1, npd_profile + aaod_ukca_all_modes_um(i,k,mode_cor_sol-1) = aaod_ukca_this_mode_um(i,k) + END DO + END DO + +END IF ! Calculate AOD Coarse Soluble mode + +!------------------------------------------------ +! Now calculate aod and aaod for Aitken Insoluble mode + +IF ( l_aod_ukca_ait_ins .OR. l_aaod_ukca_ait_ins ) THEN + + CALL ukca_radaer_compute_aod( & + ! Fixed array dimensions (input) + npd_profile, & + npd_layer, & + n_ukca_mode, & + n_ukca_cpnt, & + npd_ukca_aod_wavel, & + ! Fixed array Prescribed ssa dimensions (input) + nd_prof_ssa, & + nd_layr_ssa, & + nd_band_ssa, & + ! UKCA_RADAER structure (input) + nmodes, & + ncp_max, & + ncp_max_x_nmodes, & + i_cpnt_index, & + i_cpnt_type, & + n_cpnt_in_mode, & + l_nitrate, & + l_soluble, & + l_sustrat, & + i_mode_type, & + l_cornarrow_ins, & + ! Modal diameters from UKCA module + ukca_dry_diam_um, & + ukca_wet_diam_um, & + ! Mass thickness of layers + d_mass_theta_levels_um, & + ! Component volumes + ukca_comp_vol_um, & + ! Modal volumes, densities, and water content + ukca_modal_vol_um, & + ukca_modal_rho_um, & + ukca_modal_wtv_um, & + ! Modal mass-mixing ratios + ukca_mode_mix_ratio_um, & + ! Modal number concentrations + ukca_modal_number_um, & + ! Type selection + ip_ukca_mode_aitken, & + soluble_unwanted, & + ! Switch for if prescribed SSA is on + i_ukca_radaer_prescribe_ssa, & + ! Model level of the tropopause + trindxrad_um, & + ! Prescription of single-scattering albedo + ukca_radaer_presc_ssa, & + ! Modal extinction aerosol opt depth - column (output) + aod_ukca_this_mode_um, & + ! Modal extinction aerosol opt depth - stratosphere (output) + sod_ukca_this_mode_um, & + ! Modal absorption aerosol opt depth (output) + aaod_ukca_this_mode_um, & + ! Fixed array dimensions + npd_profile, & + npd_layer, & + n_radaer_mode, & + npd_ukca_aod_wavel ) + + DO k = 1, npd_ukca_aod_wavel + DO i = 1, npd_profile + aod_ukca_all_modes_um(i,k,mode_ait_insol-1) = aod_ukca_this_mode_um(i,k) + END DO + END DO + + DO k = 1, npd_ukca_aod_wavel + DO i = 1, npd_profile + aaod_ukca_all_modes_um(i,k,mode_ait_insol-1)=aaod_ukca_this_mode_um(i,k) + END DO + END DO + +END IF ! Calculate AOD Aitkin Insoluble mode + +!------------------------------------------------ +! Now calculate aod and aaod for Accumulation Insoluble mode + +IF ( l_aod_ukca_acc_ins .OR. l_aaod_ukca_acc_ins ) THEN + + CALL ukca_radaer_compute_aod( & + ! Fixed array dimensions (input) + npd_profile, & + npd_layer, & + n_ukca_mode, & + n_ukca_cpnt, & + npd_ukca_aod_wavel, & + ! Fixed array Prescribed ssa dimensions (input) + nd_prof_ssa, & + nd_layr_ssa, & + nd_band_ssa, & + ! UKCA_RADAER structure (input) + nmodes, & + ncp_max, & + ncp_max_x_nmodes, & + i_cpnt_index, & + i_cpnt_type, & + n_cpnt_in_mode, & + l_nitrate, & + l_soluble, & + l_sustrat, & + i_mode_type, & + l_cornarrow_ins, & + ! Modal diameters from UKCA module + ukca_dry_diam_um, & + ukca_wet_diam_um, & + ! Mass thickness of layers + d_mass_theta_levels_um, & + ! Component volumes + ukca_comp_vol_um, & + ! Modal volumes, densities, and water content + ukca_modal_vol_um, & + ukca_modal_rho_um, & + ukca_modal_wtv_um, & + ! Modal mass-mixing ratios + ukca_mode_mix_ratio_um, & + ! Modal number concentrations + ukca_modal_number_um, & + ! Type selection + ip_ukca_mode_accum, & + soluble_unwanted, & + ! Switch for if prescribed SSA is on + i_ukca_radaer_prescribe_ssa, & + ! Model level of the tropopause + trindxrad_um, & + ! Prescription of single-scattering albedo + ukca_radaer_presc_ssa, & + ! Modal extinction aerosol opt depth - column (output) + aod_ukca_this_mode_um, & + ! Modal extinction aerosol opt depth - stratosphere (output) + sod_ukca_this_mode_um, & + ! Modal absorption aerosol opt depth (output) + aaod_ukca_this_mode_um, & + ! Fixed array dimensions + npd_profile, & + npd_layer, & + n_radaer_mode, & + npd_ukca_aod_wavel ) + + DO k = 1, npd_ukca_aod_wavel + DO i = 1, npd_profile + aod_ukca_all_modes_um(i,k,mode_acc_insol-1) = aod_ukca_this_mode_um(i,k) + END DO + END DO + + DO k = 1, npd_ukca_aod_wavel + DO i = 1, npd_profile + aaod_ukca_all_modes_um(i,k,mode_acc_insol-1)=aaod_ukca_this_mode_um(i,k) + END DO + END DO + +END IF ! Calculate AOD Accumulation Insoluble mode + +!------------------------------------------------ +! Now calculate aod and aaod for Coarse Insoluble mode +IF ( l_aod_ukca_cor_ins .OR. l_aaod_ukca_cor_ins ) THEN + + CALL ukca_radaer_compute_aod( & + ! Fixed array dimensions (input) + npd_profile, & + npd_layer, & + n_ukca_mode, & + n_ukca_cpnt, & + npd_ukca_aod_wavel, & + ! Fixed array Prescribed ssa dimensions (input) + nd_prof_ssa, & + nd_layr_ssa, & + nd_band_ssa, & + ! UKCA_RADAER structure (input) + nmodes, & + ncp_max, & + ncp_max_x_nmodes, & + i_cpnt_index, & + i_cpnt_type, & + n_cpnt_in_mode, & + l_nitrate, & + l_soluble, & + l_sustrat, & + i_mode_type, & + l_cornarrow_ins, & + ! Modal diameters from UKCA module + ukca_dry_diam_um, & + ukca_wet_diam_um, & + ! Mass thickness of layers + d_mass_theta_levels_um, & + ! Component volumes + ukca_comp_vol_um, & + ! Modal volumes, densities, and water content + ukca_modal_vol_um, & + ukca_modal_rho_um, & + ukca_modal_wtv_um, & + ! Modal mass-mixing ratios + ukca_mode_mix_ratio_um, & + ! Modal number concentrations + ukca_modal_number_um, & + ! Type selection + ip_ukca_mode_coarse, & + soluble_unwanted, & + ! Switch for if prescribed SSA is on + i_ukca_radaer_prescribe_ssa, & + ! Model level of the tropopause + trindxrad_um, & + ! Prescription of single-scattering albedo + ukca_radaer_presc_ssa, & + ! Modal extinction aerosol opt depth - column (output) + aod_ukca_this_mode_um, & + ! Modal extinction aerosol opt depth - stratosphere (output) + sod_ukca_this_mode_um, & + ! Modal absorption aerosol opt depth (output) + aaod_ukca_this_mode_um, & + ! Fixed array dimensions + npd_profile, & + npd_layer, & + n_radaer_mode, & + npd_ukca_aod_wavel ) + + DO k = 1, npd_ukca_aod_wavel + DO i = 1, npd_profile + aod_ukca_all_modes_um(i,k,mode_cor_insol-1) = aod_ukca_this_mode_um(i,k) + END DO + END DO + + DO k = 1, npd_ukca_aod_wavel + DO i = 1, npd_profile + aaod_ukca_all_modes_um(i,k,mode_cor_insol-1)=aaod_ukca_this_mode_um(i,k) + END DO + END DO + +END IF ! Calculate AOD Coarse Insoluble mode + +IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName, zhook_out, zhook_handle) + +END SUBROUTINE ukca_radaer_lfric_interface + +END MODULE ukca_radaer_lfric_api_mod From 858eb60ec9408d2cecd545910f8d5f79fe468e58 Mon Sep 17 00:00:00 2001 From: Alan J Hewitt <40797340+alanjhewitt@users.noreply.github.com> Date: Mon, 27 Jul 2026 11:50:50 +0100 Subject: [PATCH 2/5] Mohit and Ian suggested change --- .../top_level/ukca_radaer_lfric_api_mod.F90 | 328 +++++++++--------- 1 file changed, 164 insertions(+), 164 deletions(-) diff --git a/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 b/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 index d44a1dd..4c28c3f 100644 --- a/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 +++ b/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 @@ -9,7 +9,7 @@ ! Subroutine Interface: ! ! Code Owner: Please refer to the UM file CodeOwners.txt -! This file belongs in section: TOP_LEVEL +! This file belongs in section: UKCA ! MODULE ukca_radaer_lfric_api_mod @@ -38,27 +38,27 @@ SUBROUTINE ukca_radaer_lfric_interface( & l_exclude_lw, & l_exclude_sw, & ! Modal diameters from UKCA module (input) - ukca_dry_diam_um, & - ukca_wet_diam_um, & + ukca_dry_diam, & + ukca_wet_diam, & ! Other inputs from UKCA module (input) - ukca_comp_vol_um, & - ukca_modal_vol_um, & - ukca_modal_rho_um, & - ukca_modal_wtv_um, & + ukca_comp_vol, & + ukca_modal_vol, & + ukca_modal_rho, & + ukca_modal_wtv, & ! Logical to describe orientation l_inverted, & ! Control option for prescribed single scattering albedo array i_ukca_radaer_prescribe_ssa, & ! Model level of the tropopause (input) - trindxrad_um, & + trindxrad, & ! Whether we need to run shortwave band_average because lit or not - l_any_lit_points_um, & + l_any_lit_points, & ! Prescription of single-scattering albedo ukca_radaer_presc_ssa, & ! Input Component mass-mixing ratios - ukca_mix_ratio_um, & + ukca_mix_ratio, & ! Input modal number concentrations - ukca_modal_nbr_um, & + ukca_modal_nbr, & ! Input Pressure and temperature p_theta_levels, t_theta_levels, & ! Which aerosol optical depth diagnostics to calculate @@ -69,18 +69,18 @@ SUBROUTINE ukca_radaer_lfric_interface( & l_aod_ukca_acc_ins, l_aaod_ukca_acc_ins, & l_aod_ukca_cor_ins, l_aaod_ukca_cor_ins, & ! Mass thickness of layers - d_mass_theta_levels_um, & + d_mass_theta_levels, & ! Modal mass-mixing ratios (input output) - ukca_mode_mix_ratio_um, & + ukca_mode_mix_ratio, & ! Band-averaged optical properties (output) - aer_lw_absorption_um, & - aer_sw_absorption_um, & - aer_lw_scattering_um, & - aer_sw_scattering_um, & - aer_lw_asymmetry_um, & - aer_sw_asymmetry_um, & - aod_ukca_all_modes_um, & - aaod_ukca_all_modes_um ) + aer_lw_absorption, & + aer_sw_absorption, & + aer_lw_scattering, & + aer_sw_scattering, & + aer_lw_asymmetry, & + aer_sw_asymmetry, & + aod_ukca_all_modes, & + aaod_ukca_all_modes ) USE socrates_init_mod, ONLY: n_sw_band, & sw_n_band_exclude, & @@ -134,18 +134,18 @@ SUBROUTINE ukca_radaer_lfric_interface( & LOGICAL, INTENT(IN) :: l_exclude_lw, l_exclude_sw ! Modal diameters from UKCA module (input) -REAL, INTENT(IN) :: ukca_dry_diam_um(npd_profile, npd_layer, n_ukca_mode) -REAL, INTENT(IN) :: ukca_wet_diam_um(npd_profile, npd_layer, n_ukca_mode) +REAL, INTENT(IN) :: ukca_dry_diam(npd_profile, npd_layer, n_ukca_mode) +REAL, INTENT(IN) :: ukca_wet_diam(npd_profile, npd_layer, n_ukca_mode) ! Component volume -REAL, INTENT(IN) :: ukca_comp_vol_um( n_ukca_cpnt, npd_profile, npd_layer ) +REAL, INTENT(IN) :: ukca_comp_vol( n_ukca_cpnt, npd_profile, npd_layer ) ! Modal volumes and densities -REAL, INTENT(IN) :: ukca_modal_vol_um( npd_profile, npd_layer, n_ukca_mode ) -REAL, INTENT(IN) :: ukca_modal_rho_um( npd_profile, npd_layer, n_ukca_mode ) +REAL, INTENT(IN) :: ukca_modal_vol( npd_profile, npd_layer, n_ukca_mode ) +REAL, INTENT(IN) :: ukca_modal_rho( npd_profile, npd_layer, n_ukca_mode ) ! Volume of water in modes -REAL, INTENT(IN) :: ukca_modal_wtv_um( npd_profile, npd_layer, n_ukca_mode ) +REAL, INTENT(IN) :: ukca_modal_wtv( npd_profile, npd_layer, n_ukca_mode ) ! Logical to describe orientation LOGICAL, INTENT(IN) :: l_inverted @@ -154,20 +154,20 @@ SUBROUTINE ukca_radaer_lfric_interface( & INTEGER, INTENT(IN) :: i_ukca_radaer_prescribe_ssa ! Model level of tropopause -INTEGER, INTENT(IN) :: trindxrad_um(npd_profile) +INTEGER, INTENT(IN) :: trindxrad(npd_profile) ! Whether we need to run shortwave band_average because lit or not -LOGICAL, INTENT(IN) :: l_any_lit_points_um +LOGICAL, INTENT(IN) :: l_any_lit_points ! Prescription of single-scattering albedo REAL, INTENT(IN) :: ukca_radaer_presc_ssa( nd_prof_ssa, nd_layr_ssa, & nd_band_ssa ) ! Component mass-mixing ratios -REAL, INTENT(IN) :: ukca_mix_ratio_um( n_ukca_cpnt, npd_profile, npd_layer ) +REAL, INTENT(IN) :: ukca_mix_ratio( n_ukca_cpnt, npd_profile, npd_layer ) ! Modal number concentrations divided by molecular concentration of air -REAL, INTENT(IN) :: ukca_modal_nbr_um( n_ukca_cpnt, npd_profile, npd_layer ) +REAL, INTENT(IN) :: ukca_modal_nbr( n_ukca_cpnt, npd_profile, npd_layer ) ! pressure on theta levels REAL, INTENT(IN) :: p_theta_levels( npd_profile, npd_layer ) @@ -184,36 +184,36 @@ SUBROUTINE ukca_radaer_lfric_interface( & l_aod_ukca_cor_ins, l_aaod_ukca_cor_ins ! Mass thickness of layers -REAL, INTENT(IN) :: d_mass_theta_levels_um( npd_profile, npd_layer ) +REAL, INTENT(IN) :: d_mass_theta_levels( npd_profile, npd_layer ) ! Modal mass-mixing ratios -REAL, INTENT(IN OUT) :: ukca_mode_mix_ratio_um( npd_profile, npd_layer, & +REAL, INTENT(IN OUT) :: ukca_mode_mix_ratio( npd_profile, npd_layer, & n_radaer_mode ) ! Band-averaged modal optical properties -REAL, INTENT(IN OUT) :: aer_lw_absorption_um( npd_profile, npd_layer, & +REAL, INTENT(IN OUT) :: aer_lw_absorption( npd_profile, npd_layer, & n_radaer_mode, n_lw_band ) -REAL, INTENT(IN OUT) :: aer_sw_absorption_um( npd_profile, npd_layer, & +REAL, INTENT(IN OUT) :: aer_sw_absorption( npd_profile, npd_layer, & n_radaer_mode, n_sw_band ) -REAL, INTENT(IN OUT) :: aer_lw_scattering_um( npd_profile, npd_layer, & +REAL, INTENT(IN OUT) :: aer_lw_scattering( npd_profile, npd_layer, & n_radaer_mode, n_lw_band ) -REAL, INTENT(IN OUT) :: aer_sw_scattering_um( npd_profile, npd_layer, & +REAL, INTENT(IN OUT) :: aer_sw_scattering( npd_profile, npd_layer, & n_radaer_mode, n_sw_band ) -REAL, INTENT(IN OUT) :: aer_lw_asymmetry_um( npd_profile, npd_layer, & +REAL, INTENT(IN OUT) :: aer_lw_asymmetry( npd_profile, npd_layer, & n_radaer_mode, n_lw_band ) -REAL, INTENT(IN OUT) :: aer_sw_asymmetry_um( npd_profile, npd_layer, & +REAL, INTENT(IN OUT) :: aer_sw_asymmetry( npd_profile, npd_layer, & n_radaer_mode, n_sw_band ) ! Aerosol Optical Depth diagnostics -REAL, INTENT(IN OUT) :: aod_ukca_all_modes_um( npd_profile, npd_ukca_aod_wavel,& +REAL, INTENT(IN OUT) :: aod_ukca_all_modes( npd_profile, npd_ukca_aod_wavel, & n_ukca_mode ) -REAL, INTENT(IN OUT) :: aaod_ukca_all_modes_um(npd_profile, npd_ukca_aod_wavel,& +REAL, INTENT(IN OUT) :: aaod_ukca_all_modes(npd_profile, npd_ukca_aod_wavel, & n_ukca_mode ) ! Local variables @@ -222,12 +222,12 @@ SUBROUTINE ukca_radaer_lfric_interface( & INTEGER :: i, k ! Modal number concentrations (m-3) -REAL :: ukca_modal_number_um( npd_profile, npd_layer, n_ukca_mode) +REAL :: ukca_modal_number( npd_profile, npd_layer, n_ukca_mode) ! Local AOD diagnostics -REAL :: aod_ukca_this_mode_um( npd_profile, npd_ukca_aod_wavel ) -REAL :: aaod_ukca_this_mode_um( npd_profile, npd_ukca_aod_wavel ) -REAL :: sod_ukca_this_mode_um( npd_profile, npd_ukca_aod_wavel ) +REAL :: aod_ukca_this_mode( npd_profile, npd_ukca_aod_wavel ) +REAL :: aaod_ukca_this_mode( npd_profile, npd_ukca_aod_wavel ) +REAL :: sod_ukca_this_mode( npd_profile, npd_ukca_aod_wavel ) ! ----------------------------------------------------------------- @@ -314,15 +314,15 @@ SUBROUTINE ukca_radaer_lfric_interface( & ! Input from the UKCA_RADAER structure nmodes, ncp_max, i_cpnt_index, n_cpnt_in_mode, & ! Input Component mass-mixing ratios - ukca_mix_ratio_um, & + ukca_mix_ratio, & ! Input modal number concentrations - ukca_modal_nbr_um, & + ukca_modal_nbr, & ! Input Pressure and temperature p_theta_levels, t_theta_levels, & ! Output Modal mass-mixing ratios - ukca_mode_mix_ratio_um, & + ukca_mode_mix_ratio, & ! Output modal number concentrations - ukca_modal_number_um & + ukca_modal_number & ) ! Long wave ( e.g. ip_infra_red ) @@ -361,35 +361,35 @@ SUBROUTINE ukca_radaer_lfric_interface( & l_cornarrow_ins, & n_cpnt_in_mode, & ! Modal mass-mixing ratios (input) - ukca_mode_mix_ratio_um, & + ukca_mode_mix_ratio, & ! Modal number concentrations (input) - ukca_modal_number_um, & + ukca_modal_number, & ! Modal diameters from UKCA module (input) - ukca_dry_diam_um, & - ukca_wet_diam_um, & + ukca_dry_diam, & + ukca_wet_diam, & ! Other inputs from UKCA module (input) - ukca_comp_vol_um, & - ukca_modal_vol_um, & - ukca_modal_rho_um, & - ukca_modal_wtv_um, & + ukca_comp_vol, & + ukca_modal_vol, & + ukca_modal_rho, & + ukca_modal_wtv, & ! Logical to describe orientation l_inverted, & ! Control option for prescribed single scattering albedo array i_ukca_radaer_prescribe_ssa, & ! Model level of the tropopause (input) - trindxrad_um, & + trindxrad, & ! Prescription of single-scattering albedo ukca_radaer_presc_ssa, & ! Maxwell-Garnett mixing approach logical control switches i_ukca_tune_bc, i_glomap_clim_tune_bc, & ! Band-averaged optical properties (output) - aer_lw_absorption_um, & - aer_lw_scattering_um, & - aer_lw_asymmetry_um & + aer_lw_absorption, & + aer_lw_scattering, & + aer_lw_asymmetry & ) ! Short wave (e.g. ip_solar ) - only calculate on lit points -IF ( l_any_lit_points_um ) THEN +IF ( l_any_lit_points ) THEN CALL ukca_radaer_band_average( & ! Fixed array dimensions (input) @@ -426,31 +426,31 @@ SUBROUTINE ukca_radaer_lfric_interface( & l_cornarrow_ins, & n_cpnt_in_mode, & ! Modal mass-mixing ratios (input) - ukca_mode_mix_ratio_um, & + ukca_mode_mix_ratio, & ! Modal number concentrations (input) - ukca_modal_number_um, & + ukca_modal_number, & ! Modal diameters from UKCA module (input) - ukca_dry_diam_um, & - ukca_wet_diam_um, & + ukca_dry_diam, & + ukca_wet_diam, & ! Other inputs from UKCA module (input) - ukca_comp_vol_um, & - ukca_modal_vol_um, & - ukca_modal_rho_um, & - ukca_modal_wtv_um, & + ukca_comp_vol, & + ukca_modal_vol, & + ukca_modal_rho, & + ukca_modal_wtv, & ! Logical to describe orientation l_inverted, & ! Switch for prescribed single scattering albedo array i_ukca_radaer_prescribe_ssa, & ! Model level of the tropopause (input) - trindxrad_um, & + trindxrad, & ! Prescription of single-scattering albedo ukca_radaer_presc_ssa, & ! Maxwell-Garnett mixing approach logical control switches i_ukca_tune_bc, i_glomap_clim_tune_bc, & ! Band-averaged optical properties (output) - aer_sw_absorption_um, & - aer_sw_scattering_um, & - aer_sw_asymmetry_um ) + aer_sw_absorption, & + aer_sw_scattering, & + aer_sw_asymmetry ) END IF @@ -483,35 +483,35 @@ SUBROUTINE ukca_radaer_lfric_interface( & i_mode_type, & l_cornarrow_ins, & ! Modal diameters from UKCA module - ukca_dry_diam_um, & - ukca_wet_diam_um, & + ukca_dry_diam, & + ukca_wet_diam, & ! Mass thickness of layers - d_mass_theta_levels_um, & + d_mass_theta_levels, & ! Component volumes - ukca_comp_vol_um, & + ukca_comp_vol, & ! Modal volumes, densities, and water content - ukca_modal_vol_um, & - ukca_modal_rho_um, & - ukca_modal_wtv_um, & + ukca_modal_vol, & + ukca_modal_rho, & + ukca_modal_wtv, & ! Modal mass-mixing ratios - ukca_mode_mix_ratio_um, & + ukca_mode_mix_ratio, & ! Modal number concentrations - ukca_modal_number_um, & + ukca_modal_number, & ! Type selection ip_ukca_mode_aitken, & soluble_wanted, & ! Switch for if prescribed SSA is on i_ukca_radaer_prescribe_ssa, & ! Model level of the tropopause - trindxrad_um, & + trindxrad, & ! Prescription of single-scattering albedo ukca_radaer_presc_ssa, & ! Modal extinction aerosol opt depth - column (output) - aod_ukca_this_mode_um, & + aod_ukca_this_mode, & ! Modal extinction aerosol opt depth - stratosphere (output) - sod_ukca_this_mode_um, & + sod_ukca_this_mode, & ! Modal absorption aerosol opt depth (output) - aaod_ukca_this_mode_um, & + aaod_ukca_this_mode, & ! Fixed array dimensions npd_profile, & npd_layer, & @@ -520,13 +520,13 @@ SUBROUTINE ukca_radaer_lfric_interface( & DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile - aod_ukca_all_modes_um(i,k,mode_ait_sol-1) = aod_ukca_this_mode_um(i,k) + aod_ukca_all_modes(i,k,mode_ait_sol-1) = aod_ukca_this_mode(i,k) END DO END DO DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile - aaod_ukca_all_modes_um(i,k,mode_ait_sol-1) = aaod_ukca_this_mode_um(i,k) + aaod_ukca_all_modes(i,k,mode_ait_sol-1) = aaod_ukca_this_mode(i,k) END DO END DO @@ -561,35 +561,35 @@ SUBROUTINE ukca_radaer_lfric_interface( & i_mode_type, & l_cornarrow_ins, & ! Modal diameters from UKCA module - ukca_dry_diam_um, & - ukca_wet_diam_um, & + ukca_dry_diam, & + ukca_wet_diam, & ! Mass thickness of layers - d_mass_theta_levels_um, & + d_mass_theta_levels, & ! Component volumes - ukca_comp_vol_um, & + ukca_comp_vol, & ! Modal volumes, densities, and water content - ukca_modal_vol_um, & - ukca_modal_rho_um, & - ukca_modal_wtv_um, & + ukca_modal_vol, & + ukca_modal_rho, & + ukca_modal_wtv, & ! Modal mass-mixing ratios - ukca_mode_mix_ratio_um, & + ukca_mode_mix_ratio, & ! Modal number concentrations - ukca_modal_number_um, & + ukca_modal_number, & ! Type selection ip_ukca_mode_accum, & soluble_wanted, & ! Switch for if prescribed SSA is on i_ukca_radaer_prescribe_ssa, & ! Model level of the tropopause - trindxrad_um, & + trindxrad, & ! Prescription of single-scattering albedo ukca_radaer_presc_ssa, & ! Modal extinction aerosol opt depth - column (output) - aod_ukca_this_mode_um, & + aod_ukca_this_mode, & ! Modal extinction aerosol opt depth - stratosphere (output) - sod_ukca_this_mode_um, & + sod_ukca_this_mode, & ! Modal absorption aerosol opt depth (output) - aaod_ukca_this_mode_um, & + aaod_ukca_this_mode, & ! Fixed array dimensions npd_profile, & npd_layer, & @@ -598,13 +598,13 @@ SUBROUTINE ukca_radaer_lfric_interface( & DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile - aod_ukca_all_modes_um(i,k,mode_acc_sol-1) = aod_ukca_this_mode_um(i,k) + aod_ukca_all_modes(i,k,mode_acc_sol-1) = aod_ukca_this_mode(i,k) END DO END DO DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile - aaod_ukca_all_modes_um(i,k,mode_acc_sol-1) = aaod_ukca_this_mode_um(i,k) + aaod_ukca_all_modes(i,k,mode_acc_sol-1) = aaod_ukca_this_mode(i,k) END DO END DO @@ -639,35 +639,35 @@ SUBROUTINE ukca_radaer_lfric_interface( & i_mode_type, & l_cornarrow_ins, & ! Modal diameters from UKCA module - ukca_dry_diam_um, & - ukca_wet_diam_um, & + ukca_dry_diam, & + ukca_wet_diam, & ! Mass thickness of layers - d_mass_theta_levels_um, & + d_mass_theta_levels, & ! Component volumes - ukca_comp_vol_um, & + ukca_comp_vol, & ! Modal volumes, densities, and water content - ukca_modal_vol_um, & - ukca_modal_rho_um, & - ukca_modal_wtv_um, & + ukca_modal_vol, & + ukca_modal_rho, & + ukca_modal_wtv, & ! Modal mass-mixing ratios - ukca_mode_mix_ratio_um, & + ukca_mode_mix_ratio, & ! Modal number concentrations - ukca_modal_number_um, & + ukca_modal_number, & ! Type selection ip_ukca_mode_coarse, & soluble_wanted, & ! Switch for if prescribed SSA is on i_ukca_radaer_prescribe_ssa, & ! Model level of the tropopause - trindxrad_um, & + trindxrad, & ! Prescription of single-scattering albedo ukca_radaer_presc_ssa, & ! Modal extinction aerosol opt depth - column (output) - aod_ukca_this_mode_um, & + aod_ukca_this_mode, & ! Modal extinction aerosol opt depth - stratosphere (output) - sod_ukca_this_mode_um, & + sod_ukca_this_mode, & ! Modal absorption aerosol opt depth (output) - aaod_ukca_this_mode_um, & + aaod_ukca_this_mode, & ! Fixed array dimensions npd_profile, & npd_layer, & @@ -676,13 +676,13 @@ SUBROUTINE ukca_radaer_lfric_interface( & DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile - aod_ukca_all_modes_um(i,k,mode_cor_sol-1) = aod_ukca_this_mode_um(i,k) + aod_ukca_all_modes(i,k,mode_cor_sol-1) = aod_ukca_this_mode(i,k) END DO END DO DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile - aaod_ukca_all_modes_um(i,k,mode_cor_sol-1) = aaod_ukca_this_mode_um(i,k) + aaod_ukca_all_modes(i,k,mode_cor_sol-1) = aaod_ukca_this_mode(i,k) END DO END DO @@ -717,35 +717,35 @@ SUBROUTINE ukca_radaer_lfric_interface( & i_mode_type, & l_cornarrow_ins, & ! Modal diameters from UKCA module - ukca_dry_diam_um, & - ukca_wet_diam_um, & + ukca_dry_diam, & + ukca_wet_diam, & ! Mass thickness of layers - d_mass_theta_levels_um, & + d_mass_theta_levels, & ! Component volumes - ukca_comp_vol_um, & + ukca_comp_vol, & ! Modal volumes, densities, and water content - ukca_modal_vol_um, & - ukca_modal_rho_um, & - ukca_modal_wtv_um, & + ukca_modal_vol, & + ukca_modal_rho, & + ukca_modal_wtv, & ! Modal mass-mixing ratios - ukca_mode_mix_ratio_um, & + ukca_mode_mix_ratio, & ! Modal number concentrations - ukca_modal_number_um, & + ukca_modal_number, & ! Type selection ip_ukca_mode_aitken, & soluble_unwanted, & ! Switch for if prescribed SSA is on i_ukca_radaer_prescribe_ssa, & ! Model level of the tropopause - trindxrad_um, & + trindxrad, & ! Prescription of single-scattering albedo ukca_radaer_presc_ssa, & ! Modal extinction aerosol opt depth - column (output) - aod_ukca_this_mode_um, & + aod_ukca_this_mode, & ! Modal extinction aerosol opt depth - stratosphere (output) - sod_ukca_this_mode_um, & + sod_ukca_this_mode, & ! Modal absorption aerosol opt depth (output) - aaod_ukca_this_mode_um, & + aaod_ukca_this_mode, & ! Fixed array dimensions npd_profile, & npd_layer, & @@ -754,13 +754,13 @@ SUBROUTINE ukca_radaer_lfric_interface( & DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile - aod_ukca_all_modes_um(i,k,mode_ait_insol-1) = aod_ukca_this_mode_um(i,k) + aod_ukca_all_modes(i,k,mode_ait_insol-1) = aod_ukca_this_mode(i,k) END DO END DO DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile - aaod_ukca_all_modes_um(i,k,mode_ait_insol-1)=aaod_ukca_this_mode_um(i,k) + aaod_ukca_all_modes(i,k,mode_ait_insol-1)=aaod_ukca_this_mode(i,k) END DO END DO @@ -795,35 +795,35 @@ SUBROUTINE ukca_radaer_lfric_interface( & i_mode_type, & l_cornarrow_ins, & ! Modal diameters from UKCA module - ukca_dry_diam_um, & - ukca_wet_diam_um, & + ukca_dry_diam, & + ukca_wet_diam, & ! Mass thickness of layers - d_mass_theta_levels_um, & + d_mass_theta_levels, & ! Component volumes - ukca_comp_vol_um, & + ukca_comp_vol, & ! Modal volumes, densities, and water content - ukca_modal_vol_um, & - ukca_modal_rho_um, & - ukca_modal_wtv_um, & + ukca_modal_vol, & + ukca_modal_rho, & + ukca_modal_wtv, & ! Modal mass-mixing ratios - ukca_mode_mix_ratio_um, & + ukca_mode_mix_ratio, & ! Modal number concentrations - ukca_modal_number_um, & + ukca_modal_number, & ! Type selection ip_ukca_mode_accum, & soluble_unwanted, & ! Switch for if prescribed SSA is on i_ukca_radaer_prescribe_ssa, & ! Model level of the tropopause - trindxrad_um, & + trindxrad, & ! Prescription of single-scattering albedo ukca_radaer_presc_ssa, & ! Modal extinction aerosol opt depth - column (output) - aod_ukca_this_mode_um, & + aod_ukca_this_mode, & ! Modal extinction aerosol opt depth - stratosphere (output) - sod_ukca_this_mode_um, & + sod_ukca_this_mode, & ! Modal absorption aerosol opt depth (output) - aaod_ukca_this_mode_um, & + aaod_ukca_this_mode, & ! Fixed array dimensions npd_profile, & npd_layer, & @@ -832,13 +832,13 @@ SUBROUTINE ukca_radaer_lfric_interface( & DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile - aod_ukca_all_modes_um(i,k,mode_acc_insol-1) = aod_ukca_this_mode_um(i,k) + aod_ukca_all_modes(i,k,mode_acc_insol-1) = aod_ukca_this_mode(i,k) END DO END DO DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile - aaod_ukca_all_modes_um(i,k,mode_acc_insol-1)=aaod_ukca_this_mode_um(i,k) + aaod_ukca_all_modes(i,k,mode_acc_insol-1)=aaod_ukca_this_mode(i,k) END DO END DO @@ -872,35 +872,35 @@ SUBROUTINE ukca_radaer_lfric_interface( & i_mode_type, & l_cornarrow_ins, & ! Modal diameters from UKCA module - ukca_dry_diam_um, & - ukca_wet_diam_um, & + ukca_dry_diam, & + ukca_wet_diam, & ! Mass thickness of layers - d_mass_theta_levels_um, & + d_mass_theta_levels, & ! Component volumes - ukca_comp_vol_um, & + ukca_comp_vol, & ! Modal volumes, densities, and water content - ukca_modal_vol_um, & - ukca_modal_rho_um, & - ukca_modal_wtv_um, & + ukca_modal_vol, & + ukca_modal_rho, & + ukca_modal_wtv, & ! Modal mass-mixing ratios - ukca_mode_mix_ratio_um, & + ukca_mode_mix_ratio, & ! Modal number concentrations - ukca_modal_number_um, & + ukca_modal_number, & ! Type selection ip_ukca_mode_coarse, & soluble_unwanted, & ! Switch for if prescribed SSA is on i_ukca_radaer_prescribe_ssa, & ! Model level of the tropopause - trindxrad_um, & + trindxrad, & ! Prescription of single-scattering albedo ukca_radaer_presc_ssa, & ! Modal extinction aerosol opt depth - column (output) - aod_ukca_this_mode_um, & + aod_ukca_this_mode, & ! Modal extinction aerosol opt depth - stratosphere (output) - sod_ukca_this_mode_um, & + sod_ukca_this_mode, & ! Modal absorption aerosol opt depth (output) - aaod_ukca_this_mode_um, & + aaod_ukca_this_mode, & ! Fixed array dimensions npd_profile, & npd_layer, & @@ -909,13 +909,13 @@ SUBROUTINE ukca_radaer_lfric_interface( & DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile - aod_ukca_all_modes_um(i,k,mode_cor_insol-1) = aod_ukca_this_mode_um(i,k) + aod_ukca_all_modes(i,k,mode_cor_insol-1) = aod_ukca_this_mode(i,k) END DO END DO DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile - aaod_ukca_all_modes_um(i,k,mode_cor_insol-1)=aaod_ukca_this_mode_um(i,k) + aaod_ukca_all_modes(i,k,mode_cor_insol-1)=aaod_ukca_this_mode(i,k) END DO END DO From 410b150eac197f4abe56e1a66bcdea64d64d7f99 Mon Sep 17 00:00:00 2001 From: Alan J Hewitt <40797340+alanjhewitt@users.noreply.github.com> Date: Tue, 28 Jul 2026 12:41:52 +0100 Subject: [PATCH 3/5] move to argument list to remove issues with box model build --- .../top_level/ukca_radaer_lfric_api_mod.F90 | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 b/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 index 4c28c3f..469f207 100644 --- a/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 +++ b/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 @@ -27,6 +27,14 @@ SUBROUTINE ukca_radaer_lfric_interface( & npd_exclude_sw, & npd_ukca_aod_wavel, & ncp_max_x_nmodes, & + n_radaer_mode, & + ! Spectral Information + n_sw_band, & + n_lw_band, & + sw_n_band_exclude, & + lw_n_band_exclude, & + sw_index_exclude, & + lw_index_exclude, & ! Actual array dimensions (input) n_ukca_mode, & n_ukca_cpnt, & @@ -82,13 +90,6 @@ SUBROUTINE ukca_radaer_lfric_interface( & aod_ukca_all_modes, & aaod_ukca_all_modes ) -USE socrates_init_mod, ONLY: n_sw_band, & - sw_n_band_exclude, & - sw_index_exclude, & - n_lw_band, & - lw_n_band_exclude, & - lw_index_exclude - USE ukca_mode_setup, ONLY: mode_ait_sol, mode_acc_sol, & mode_cor_sol, mode_ait_insol, & mode_acc_insol, mode_cor_insol, & @@ -107,8 +108,6 @@ SUBROUTINE ukca_radaer_lfric_interface( & USE ukca_radaer_prepare_mod, ONLY: ukca_radaer_prepare -USE um_physics_init_mod, ONLY: n_radaer_mode - USE parkind1, ONLY: jpim, jprb USE yomhook, ONLY: lhook, dr_hook @@ -123,6 +122,15 @@ SUBROUTINE ukca_radaer_lfric_interface( & INTEGER, INTENT(IN) :: npd_exclude_sw INTEGER, INTENT(IN) :: npd_ukca_aod_wavel INTEGER, INTENT(IN) :: ncp_max_x_nmodes +INTEGER, INTENT(IN) :: n_radaer_mode + +! Spectral Information +INTEGER, INTENT(IN) :: n_sw_band +INTEGER, INTENT(IN) :: n_lw_band +INTEGER, INTENT(IN) :: sw_n_band_exclude( n_sw_band ) +INTEGER, INTENT(IN) :: lw_n_band_exclude( n_lw_band ) +INTEGER, INTENT(IN) :: sw_index_exclude( npd_exclude_sw, n_sw_band ) +INTEGER, INTENT(IN) :: lw_index_exclude( npd_exclude_lw, n_lw_band ) ! RADAER array dimensions (note that nucleation mode is excluded) INTEGER, INTENT(IN) :: n_ukca_mode, n_ukca_cpnt From 8055d332fa1baad4ec0289824e482fbe82160af1 Mon Sep 17 00:00:00 2001 From: Alan J Hewitt <40797340+alanjhewitt@users.noreply.github.com> Date: Tue, 28 Jul 2026 13:57:54 +0100 Subject: [PATCH 4/5] For Mohit - Inline comments --- .../top_level/ukca_radaer_lfric_api_mod.F90 | 35 ++++++++++++++----- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 b/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 index 469f207..2fe7fd7 100644 --- a/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 +++ b/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 @@ -278,10 +278,15 @@ SUBROUTINE ukca_radaer_lfric_interface( & IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName, zhook_in, zhook_handle) - !----------------------------------------------------------------------- +!----------------------------------------------------------------------- - ! No nucleation mode +! Note that these hard coded values are calculated in UM module +! ukca_radaer_init-ukca.F90 +! Arrays with modes start on 2nd mode ( Aitkin Solvent ) +! Radaer expects data to be structured in this way. + +! No nucleation mode l_soluble(1:nmodes) = [.TRUE., .TRUE., .TRUE., .FALSE., & .FALSE.,.FALSE.,.FALSE.,.FALSE.] @@ -304,13 +309,13 @@ SUBROUTINE ukca_radaer_lfric_interface( & i_cpnt_type(1:ncp_max_x_nmodes) = & [ 1, 2, 3, 1, 2, 3, 4, 5, 1, & - 2, 3, 4, 5, 2, 3, 5, 5, -1, & - -1, -1, -1, -1, -1, -1, -1, -1, -1, & - -1, -1, -1, -1, -1, -1, -1, -1, -1, & - -1, -1, -1, -1, -1, -1, -1, -1, -1, & - -1, -1, -1, -1, -1, -1, -1, -1, -1, & - -1, -1, -1, -1, -1, -1, -1, -1, -1, & - -1, -1, -1, -1, -1, -1, -1, -1, -1 ] + 2, 3, 4, 5, 2, 3, 5, 5, -1, & + -1, -1, -1, -1, -1, -1, -1, -1, -1, & + -1, -1, -1, -1, -1, -1, -1, -1, -1, & + -1, -1, -1, -1, -1, -1, -1, -1, -1, & + -1, -1, -1, -1, -1, -1, -1, -1, -1, & + -1, -1, -1, -1, -1, -1, -1, -1, -1, & + -1, -1, -1, -1, -1, -1, -1, -1, -1 ] !---------------------------------------------------------------------- @@ -526,6 +531,8 @@ SUBROUTINE ukca_radaer_lfric_interface( & n_radaer_mode, & npd_ukca_aod_wavel ) + ! Note that we start from the second mode and so mode index has minus one. + DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile aod_ukca_all_modes(i,k,mode_ait_sol-1) = aod_ukca_this_mode(i,k) @@ -604,6 +611,8 @@ SUBROUTINE ukca_radaer_lfric_interface( & n_radaer_mode, & npd_ukca_aod_wavel ) + ! Note that we start from the second mode and so mode index has minus one. + DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile aod_ukca_all_modes(i,k,mode_acc_sol-1) = aod_ukca_this_mode(i,k) @@ -682,6 +691,8 @@ SUBROUTINE ukca_radaer_lfric_interface( & n_radaer_mode, & npd_ukca_aod_wavel ) + ! Note that we start from the second mode and so mode index has minus one. + DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile aod_ukca_all_modes(i,k,mode_cor_sol-1) = aod_ukca_this_mode(i,k) @@ -760,6 +771,8 @@ SUBROUTINE ukca_radaer_lfric_interface( & n_radaer_mode, & npd_ukca_aod_wavel ) + ! Note that we start from the second mode and so mode index has minus one. + DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile aod_ukca_all_modes(i,k,mode_ait_insol-1) = aod_ukca_this_mode(i,k) @@ -838,6 +851,8 @@ SUBROUTINE ukca_radaer_lfric_interface( & n_radaer_mode, & npd_ukca_aod_wavel ) + ! Note that we start from the second mode and so mode index has minus one. + DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile aod_ukca_all_modes(i,k,mode_acc_insol-1) = aod_ukca_this_mode(i,k) @@ -915,6 +930,8 @@ SUBROUTINE ukca_radaer_lfric_interface( & n_radaer_mode, & npd_ukca_aod_wavel ) + ! Note that we start from the second mode and so mode index has minus one. + DO k = 1, npd_ukca_aod_wavel DO i = 1, npd_profile aod_ukca_all_modes(i,k,mode_cor_insol-1) = aod_ukca_this_mode(i,k) From d06060e587656a5c2dfbdc45eb1e9bec8eca9edb Mon Sep 17 00:00:00 2001 From: yaswant <2984440+yaswant@users.noreply.github.com> Date: Mon, 3 Aug 2026 13:36:14 +0100 Subject: [PATCH 5/5] Merge main --- src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 b/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 index 2fe7fd7..f8bee6b 100644 --- a/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 +++ b/src/control/core/top_level/ukca_radaer_lfric_api_mod.F90 @@ -1,8 +1,8 @@ -! *****************************COPYRIGHT******************************* +! ----------------------------------------------------------------------------- ! (C) Crown copyright Met Office. All rights reserved. -! For further details please refer to the file COPYRIGHT.txt -! which you should have received as part of this distribution. -! *****************************COPYRIGHT******************************* +! The file LICENCE, distributed with this code, contains details of the terms +! under which the code may be used. +! ----------------------------------------------------------------------------- ! ! An interface routine to pass chunked columns from lfric to radaer !