Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@
| andrewcoughtrie | Andrew Coughtrie | Met Office | 2026-02-10 |
| jennyhickson | Jenny Hickson | Met Office | 2026-03-02 |
| Pierre-siddall | Pierre Siddall | Met Office | 2026-03-13 |
| JoeCartonKelly-MO | Joseph Carton-Kelly | Met Office | 2026-04-15 |
7 changes: 7 additions & 0 deletions src/control/core/interface/ukca_config_specification_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,8 @@ MODULE ukca_config_specification_mod
REAL :: acc_cor_scav_scaling ! Scaling factor for scavenging
! parameters for the accumulation and
! coarse modes
REAL :: solinsol_hygro_ratio(4) ! SOL/INSOL hygroscopicity ratios
! cp_su, cp_cl, cp_bc, cp_oc

! -- GLOMAP deposition configuration options --
LOGICAL :: l_ddepaer ! True for aerosol dry deposition
Expand Down Expand Up @@ -996,6 +998,7 @@ SUBROUTINE init_ukca_configuration()
glomap_config%l_dust_mp_ageing = .FALSE.
glomap_config%dry_depvel_acc_scaling = rmdi
glomap_config%acc_cor_scav_scaling = rmdi
glomap_config%solinsol_hygro_ratio(:) = rmdi

! -- GLOMAP deposition configuration options --
glomap_config%l_ddepaer = .FALSE.
Expand Down Expand Up @@ -1122,6 +1125,7 @@ SUBROUTINE ukca_get_config( &
hno3_uptake_coeff, &
sigwmin, &
sigma_updraught_scaling, &
solinsol_hygro_ratio, &
l_cal360, &
l_ukca_chem_aero, &
l_ukca_mode, &
Expand Down Expand Up @@ -1324,6 +1328,7 @@ SUBROUTINE ukca_get_config( &
REAL, OPTIONAL, INTENT(OUT) :: ph_fit_coeff_b
REAL, OPTIONAL, INTENT(OUT) :: ph_fit_intercept
REAL, OPTIONAL, INTENT(OUT) :: hno3_uptake_coeff
REAL, OPTIONAL, INTENT(OUT) :: solinsol_hygro_ratio(4)

LOGICAL, OPTIONAL, INTENT(OUT) :: l_cal360
LOGICAL, OPTIONAL, INTENT(OUT) :: l_ukca_chem_aero
Expand Down Expand Up @@ -1748,6 +1753,8 @@ SUBROUTINE ukca_get_config( &
IF (PRESENT(mode_incld_so2_rfrac)) &
mode_incld_so2_rfrac = glomap_config%mode_incld_so2_rfrac
IF (PRESENT(l_aero_rainout)) l_aero_rainout = glomap_config%l_aero_rainout
IF (PRESENT(solinsol_hygro_ratio)) solinsol_hygro_ratio(:) = &
glomap_config%solinsol_hygro_ratio(:)
IF (PRESENT(l_cv_rainout)) l_cv_rainout = glomap_config%l_cv_rainout
IF (PRESENT(i_mode_nucscav)) i_mode_nucscav = glomap_config%i_mode_nucscav
IF (PRESENT(l_impc_scav)) l_impc_scav = glomap_config%l_impc_scav
Expand Down
23 changes: 23 additions & 0 deletions src/control/core/top_level/ukca_setup_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ SUBROUTINE ukca_setup(error_code, &
ph_fit_intercept, &
sigwmin, &
sigma_updraught_scaling, &
solinsol_hygro_ratio, &
const_rmol, &
const_tfs, &
const_rho_water, &
Expand Down Expand Up @@ -461,6 +462,7 @@ SUBROUTINE ukca_setup(error_code, &
REAL, OPTIONAL, INTENT(IN) :: sigwmin
REAL, OPTIONAL, INTENT(IN) :: hno3_uptake_coeff
REAL, OPTIONAL, INTENT(IN) :: sigma_updraught_scaling
REAL, OPTIONAL, INTENT(IN) :: solinsol_hygro_ratio(4)
REAL, OPTIONAL, INTENT(IN) :: const_rmol
REAL, OPTIONAL, INTENT(IN) :: const_tfs
REAL, OPTIONAL, INTENT(IN) :: const_rho_water
Expand Down Expand Up @@ -600,6 +602,8 @@ SUBROUTINE ukca_setup(error_code, &
LOGICAL :: l_strat_scheme_selected ! True if a Stratospheric scheme is
! selected for chemistry

REAL :: sum_solinsol_hygro_ratio ! Sum of solinsol hygroscopicity ratios (=1)

INTEGER (KIND=jpim), PARAMETER :: zhook_in = 0 ! DrHook tracing entry
INTEGER (KIND=jpim), PARAMETER :: zhook_out = 1 ! DrHook tracing exit
REAL (KIND=jprb) :: zhook_handle ! DrHook tracing
Expand Down Expand Up @@ -1313,6 +1317,9 @@ SUBROUTINE ukca_setup(error_code, &

END IF

IF (PRESENT(solinsol_hygro_ratio)) &
glomap_config%solinsol_hygro_ratio(:) = solinsol_hygro_ratio(:)

! -- GLOMAP deposition configuration options --

! Dry deposition
Expand Down Expand Up @@ -1721,6 +1728,22 @@ SUBROUTINE ukca_setup(error_code, &

END IF

! Ensure the sum of solinsol_hygro_ratio is 1
IF (ukca_config%l_ukca_mode .AND. &
glomap_config%i_mode_setup == 11) THEN
sum_solinsol_hygro_ratio = 0.0
DO i = 1,4
sum_solinsol_hygro_ratio = sum_solinsol_hygro_ratio + &
glomap_config%solinsol_hygro_ratio(i)
END DO
IF (PRESENT(solinsol_hygro_ratio)) THEN
glomap_config%solinsol_hygro_ratio(:) = &
glomap_config%solinsol_hygro_ratio(:) / sum_solinsol_hygro_ratio
ELSE
glomap_config%solinsol_hygro_ratio(:) = [1.0, 0.0, 0.0, 0.0]
END IF
END IF

! Initialise chemical definition arrays
CALL ukca_chem1_init()

Expand Down
24 changes: 19 additions & 5 deletions src/science/core/aerosols/glomap/ukca_volume_mode.F90
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ SUBROUTINE ukca_volume_mode( glomap_variables_local, nbox, nd, md, mdt, &
USE ukca_config_constants_mod, ONLY: rho_water, avogadro, rho_so4

USE ukca_mode_setup, ONLY: nmodes, nanion, ncation, &
cp_su, cp_oc, cp_cl, &
cp_su, cp_oc, cp_cl, cp_bc, &
cp_so, cp_nh4, cp_no3, cp_nn

USE yomhook, ONLY: lhook, dr_hook
Expand Down Expand Up @@ -240,6 +240,7 @@ SUBROUTINE ukca_volume_mode( glomap_variables_local, nbox, nd, md, mdt, &
REAL :: mmwrhow
REAL :: f_ao
REAL :: cl(nbox,-nanion:ncation) !ION CONCS (MOL/CC OF AIR)
REAL :: mdcopy(nbox,nmodes,glomap_variables_local%ncp) !Redistributes ions for solinsol

REAL :: tmp1(nbox,nmodes)
!
Expand Down Expand Up @@ -297,6 +298,7 @@ SUBROUTINE ukca_volume_mode( glomap_variables_local, nbox, nd, md, mdt, &

denom(:)=0.0 ! define on all points to avoid error
denom2(:)=0.0
mdcopy(:,:,:) = md(:,:,:) ! assigning md input values to mdcopy

! Correct relative humidities to lie within the range of 10-90%
corrh(:)=rh(:)
Expand Down Expand Up @@ -348,8 +350,20 @@ SUBROUTINE ukca_volume_mode( glomap_variables_local, nbox, nd, md, mdt, &
cl(:,i)=0.0 ! set all concentrations to zero initially
END DO

! If SOLINSOL then redistribute sulphate md into other species
IF (glomap_config%i_mode_setup == 11) THEN
mdcopy(:,imode,cp_su) = glomap_config%solinsol_hygro_ratio(1)* &
(mdcopy(:,imode,cp_su))
mdcopy(:,imode,cp_cl) = glomap_config%solinsol_hygro_ratio(2)* &
(mdcopy(:,imode,cp_su))
Comment thread
JoeCartonKelly-MO marked this conversation as resolved.
Outdated
mdcopy(:,imode,cp_bc) = glomap_config%solinsol_hygro_ratio(3)* &
(mdcopy(:,imode,cp_su))
mdcopy(:,imode,cp_oc) = glomap_config%solinsol_hygro_ratio(4)* &
(mdcopy(:,imode,cp_su))
END IF

IF (component(imode,cp_su)) THEN ! assume all H2SO4 --> SO4
cl(:,-2)=md(:,imode,cp_su)/avogadro ! [SO4] in moles/cc (air)
cl(:,-2)=mdcopy(:,imode,cp_su)/avogadro ! [SO4] in moles/cc (air)
END IF

IF (component(imode,cp_so)) THEN
Expand All @@ -362,7 +376,7 @@ SUBROUTINE ukca_volume_mode( glomap_variables_local, nbox, nd, md, mdt, &
END IF

IF (component(imode,cp_oc)) THEN
cl(:,-2)=cl(:,-2)+(fhyg_aom/avogadro)*(md(:,imode,cp_oc)/f_ao)
cl(:,-2)=cl(:,-2)+(fhyg_aom/avogadro)*(mdcopy(:,imode,cp_oc)/f_ao)
! .. Increment concentration of SO4 ions to represent the
! .. presence of hygroscopic aged organic aerosol mass in CP_OC.
! .. Assume it has uptake behaviour at fraction FHYG_AOM of SO4.
Expand All @@ -377,8 +391,8 @@ SUBROUTINE ukca_volume_mode( glomap_variables_local, nbox, nd, md, mdt, &
END IF

IF (component(imode,cp_cl)) THEN ! assume complete dissociation
cl(:,3)=md(:,imode,cp_cl)/avogadro ! [Na] in moles per cc (air)
cl(:,-4)=md(:,imode,cp_cl)/avogadro ! [Cl] in moles per cc (air)
cl(:,3)=mdcopy(:,imode,cp_cl)/avogadro ! [Na] in moles per cc (air)
cl(:,-4)=mdcopy(:,imode,cp_cl)/avogadro ! [Cl] in moles per cc (air)
Comment thread
JoeCartonKelly-MO marked this conversation as resolved.
END IF

! Nitrate scheme
Expand Down
Loading