Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
2 changes: 0 additions & 2 deletions cime_config/testdefs/testmods_dirs/cam/rad_diag/user_nl_cpl

This file was deleted.

142 changes: 142 additions & 0 deletions doc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,4 +1,146 @@
===============================================================

Tag name: cam6_4_135
Originator(s): fvitt
Date: 8 Dec 2025
One-line Summary: Aerosol optics interfaces for bulk and volcanic aerosols
Github PR URL: https://github.com/ESCOMP/CAM/pull/1404

Purpose of changes (include the issue number and title text for each relevant GitHub issue):
Extend aerosol optics interfaces for bulk aerosols and volcanic aerosols.
(issue #1400)

Describe any changes made to build system: N/A

Describe any changes made to the namelist: N/A

List any changes to the defaults for the boundary datasets: N/A

Describe any substantial timing or memory changes: N/A

Code reviewed by: jimmielin, gold2718

List all files eliminated:
D cime_config/testdefs/testmods_dirs/cam/rad_diag/user_nl_cpl
- reprosum_ namelist settings allowed roundoff level differences in
summations across MPI tasks which was caused failure of this restart
test: ERC_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_gnu.cam-rad_diag

List all files added and what they do:
A src/chemistry/aerosol/bulk_aerosol_properties_mod.F90
A src/chemistry/aerosol/bulk_aerosol_state_mod.F90
- minimal implementation for bulk aerosol optics

A src/chemistry/aerosol/hygro_aerosol_optics_mod.F90
A src/chemistry/aerosol/hygroscopic_aerosol_optics_mod.F90
A src/chemistry/aerosol/insoluble_aerosol_optics_mod.F90
- aerosol optics types for bulk aerosols

A src/chemistry/aerosol/volcrad_aerosol_optics_mod.F90
- aerosol optics type for volcanic aerosols

A src/physics/cam/aer_vis_diag_mod.F90
- utility module for AOD diagnostics

List all existing files that have been modified, and describe the changes:

M src/chemistry/aerosol/aerosol_properties_mod.F90
M src/chemistry/aerosol/carma_aerosol_properties_mod.F90
M src/chemistry/aerosol/modal_aerosol_properties_mod.F90
- implement model_is interface
- add bulk and volcanic aerosol properties to the optics_params interface

M src/physics/cam/aer_rad_props.F90
- bulk and volcanic aerosol optics code moved to extended aerosol_optics
classes

M src/physics/cam/aerosol_optics_cam.F90
- use the extended aerosol optics classes for bulk and volcanic aerosols

If there were any failures reported from running test_driver.sh on any test
platform, and checkin with these failures has been OK'd by the gatekeeper,
then copy the lines from the td.*.status files for the failed tests to the
appropriate machine below. All failed tests must be justified.

derecho/intel/aux_cam:
DIFF ERC_D_Ln9.f19_f19_mg17.QPMOZ.derecho_intel.cam-outfrq3s
DIFF SMS_D_Ln9.ne16_ne16_mg17.QPX2000.derecho_intel.cam-outfrq9s_amie
DIFF ERI_D_Ln18.ne16pg3_ne16pg3_mt232.FHIST_C4.derecho_intel.cam-outfrq3s_eri
DIFF ERP_Lh12.f19_f19_mg17.FW4madSD.derecho_intel.cam-outfrq3h
DIFF SMS_D_Ld5.f19_f19_mt232.PC4.derecho_intel.cam-cam4_port5d
- bulk aerosol optics roundoff level differences

DIFF ERC_D_Ln9.f09_f09_mt232.FHIST_BDRD.derecho_intel.cam-outfrq9s
DIFF ERC_D_Ln9.mpasa120_mpasa120.F2000climo.derecho_intel.cam-outfrq9s_mpasa120
DIFF ERC_D_Ln9.mpasa120_mpasa120.FHISTC_LTso.derecho_intel.cam-outfrq9s_mpasa120
DIFF ERC_D_Ln9.ne30pg3_ne30pg3_mt232.F1850C_LTso.derecho_intel.cam-outfrq9s
DIFF ERC_Ln9.C96_C96_mt232.F2000climo.derecho_intel.cam-outfrq9s
DIFF ERI_D_Ln18.f09_f09_mt232.FHIST.derecho_intel.cam-outfrq3s_eri
DIFF ERI_D_Ln18.f19_f19_mt232.FHIST_C5.derecho_intel.cam-outfrq3s_eri
DIFF ERI_D_Ln18.ne30pg3_ne30pg3_mt232.FHISTC_LTso.derecho_intel.cam-outfrq3s_eri
DIFF ERP_D_Ln9.ne30pg3_ne30pg3_mt232.F1850C_MTso.derecho_intel.cam-outfrq9s
DIFF ERP_Ln9.f19_f19_mg17.FWsc1850.derecho_intel.cam-outfrq9s
DIFF ERR_Ln9.ne16pg3_ne16pg3_mt232.FHISTC_LTso.derecho_intel.cam-outfrq9s_bwic
DIFF SMS_D_Ln9.f09_f09_mg17.FSD.derecho_intel.cam-outfrq9s
DIFF SMS_D_Ln9.f19_f19_mt232.FHIST_C5.derecho_intel.cam-mam7
DIFF SMS_D_Ln9.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.derecho_intel.cam-outfrq9s
DIFF SMS_D_Ln9.ne30pg3_ne30pg3_mt232.FHISTC_MTso.derecho_intel.cam-outfrq9s
DIFF SMS_Ln9.f09_f09_mg17.F2010climo.derecho_intel.cam-nudging
DIFF SMS_Ln9.f19_f19_mt232.F2000climo.derecho_intel.cam-silhs
DIFF SMS_D_Ld5.f09_f09_mt232.PC6.derecho_intel.cam-cam6_port_f09
- volcanic aerosol optics roundoff level differences


SMS_D_Ln9_P1536x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
- intermittent failure in CTSM code (lnd_set_decomp_and_domain.F90)
- This test failed the first time but passed on a retry. Keeping this in the ChangeLog until CTSM makes a fix

derecho/nvhpc/aux_cam:
FAIL ERS_Ln9.ne30pg3_ne30pg3_mt232.FHISTC_LTso.derecho_nvhpc.cam-outfrq9s_gpu_default
-pre-existing failure -- exceeds wallclock time limit
NOTE: Jian has determined this is due to changes on derecho with the the last upgrade.
He has reported the issue to CISL. Note cam6_4_128 is the last CAM tag with
baselines to use for comparison but answer changes are expected starting with
cam6_4_130.

izumi/nag/aux_cam:
DIFF SMS_D_Ln3.ne5pg3_ne5pg3_mg37.QPX2000.izumi_nag.cam-outfrq3s
DIFF SMS_D_Ln6.ne5_ne5_mg37.QPWmaC4.izumi_nag.cam-outfrq3s_physgrid_tem
- bulk aerosol optics roundoff level differences

DIFF ERC_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_nag.cam-outfrq3s_subcol
DIFF ERC_D_Ln9.f10_f10_mt232.FHIST.izumi_nag.cam-outfrq3s_cospsathist
DIFF ERC_D_Ln9.ne3pg3_ne3pg3_mt232.FHISTC_LTso.izumi_nag.cam-cosp_rad_diags
DIFF ERC_D_Ln9.ne3pg3_ne3pg3_mt232.FHISTC_LTso.izumi_nag.cam-outfrq9s_nochem
DIFF SMS_D_Ln9.f10_f10_mt232.F1850.izumi_nag.cam-outfrq9s
DIFF TMC_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_nag.cam-mc_ttrac
- volcanic aerosol optics roundoff level differences

izumi/gnu/aux_cam:
DIFF ERC_D_Ln9.f10_f10_mg37.QPC4.izumi_gnu.cam-outfrq3s_diags
DIFF SMS_D_Ln9.f10_f10_mg37.QPWmaC4.izumi_gnu.cam-outfrq9s_apmee
DIFF SMS_D_Ln3.f10_f10_mg37.QPMOZ.izumi_gnu.cam-outfrq3s_chemproc
DIFF ERC_D_Ln9.ne3pg3_ne3pg3_mt232.F1850_C4.izumi_gnu.cam-co2rmp
DIFF SMS_D_Ln9.f19_f19_mt232.FW4madSD.izumi_gnu.cam-outfrq9s
DIFF ERC_D_Ln9.ne3pg3_ne3pg3_mt232.FHIST.izumi_gnu.cam-nochem_clubbmf
DIFF ERC_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_gnu.cam-rad_diag
- bulk aerosol optics roundoff level differences

DIFF ERC_D_Ln9.f19_f19_mt232.FHIST.izumi_gnu.cam-lonlat_fv_diags
DIFF ERC_D_Ln9.mpasa480_mpasa480_mt232.FHISTC_LTso.izumi_gnu.cam-outfrq9s_mpasa480
DIFF ERC_D_Ln9.ne3pg3_ne3pg3_mt232.FHISTC_LTso.izumi_gnu.cam-sat_lcltod
DIFF ERS_Ln9_P24x1.mpasa480_mpasa480.F2000climo.izumi_gnu.cam-outfrq9s_mpasa480
DIFF PLB_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_gnu.cam-ttrac_loadbal0
DIFF PLB_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_gnu.cam-ttrac_loadbal1
DIFF PLB_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_gnu.cam-ttrac_loadbal3
DIFF SMS_D_Ln3.ne3pg3_ne3pg3_mt232.PC7.izumi_gnu.cam-pc7_ne3pg3
DIFF SUB_D_Ln9.ne3pg3_ne3pg3_mt232.FHIST.izumi_gnu.cam-outfrq9s
DIFF SCT_D_Ln7.ne3_ne3_mg37.QPC6.izumi_gnu.cam-scm_prep_c6
- volcanic aerosol optics roundoff level differences

Summarize any changes to answers: roundoff

===============================================================
===============================================================

Tag name: cam6_4_134
Expand Down
40 changes: 36 additions & 4 deletions src/chemistry/aerosol/aerosol_properties_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ module aerosol_properties_mod
procedure(aero_resuspension_resize), deferred :: resuspension_resize
procedure(aero_rebin_bulk_fluxes), deferred :: rebin_bulk_fluxes
procedure(aero_hydrophilic), deferred :: hydrophilic
procedure(aero_id_query), deferred :: model_is

procedure :: final=>aero_props_final
end type aerosol_properties
Expand Down Expand Up @@ -101,7 +102,7 @@ end function aero_number_transported
! species morphology
!------------------------------------------------------------------------
subroutine aero_props_get(self, bin_ndx, species_ndx, list_ndx, density, hygro, &
spectype, specname, specmorph, refindex_sw, refindex_lw)
spectype, specname, specmorph, refindex_sw, refindex_lw)
Comment thread
gold2718 marked this conversation as resolved.
import :: aerosol_properties, r8
class(aerosol_properties), intent(in) :: self
integer, intent(in) :: bin_ndx ! bin index
Expand All @@ -124,7 +125,10 @@ subroutine aero_optics_params(self, list_ndx, bin_ndx, opticstype, extpsw, absps
refrtabsw, refitabsw, refrtablw, refitablw, ncoef, prefr, prefi, sw_hygro_ext_wtp, &
sw_hygro_ssa_wtp, sw_hygro_asm_wtp, lw_hygro_ext_wtp, wgtpct, nwtp, &
sw_hygro_coreshell_ext, sw_hygro_coreshell_ssa, sw_hygro_coreshell_asm, lw_hygro_coreshell_ext, &
corefrac, bcdust, kap, relh, nfrac, nbcdust, nkap, nrelh )
corefrac, bcdust, kap, relh, nfrac, nbcdust, nkap, nrelh, &
sw_hygroscopic_ext, sw_hygroscopic_ssa, sw_hygroscopic_asm, lw_hygroscopic_ext, &
sw_insoluble_ext, sw_insoluble_ssa, sw_insoluble_asm, lw_insoluble_ext, &
r_sw_ext, r_sw_scat, r_sw_ascat, r_mu, r_lw_abs )

import :: aerosol_properties, r8

Expand Down Expand Up @@ -169,6 +173,25 @@ subroutine aero_optics_params(self, list_ndx, bin_ndx, opticstype, extpsw, absps
integer, optional, intent(out) :: nkap ! hygroscopicity dimension size
integer, optional, intent(out) :: nrelh ! relative humidity dimension size

! hygroscopic
real(r8), optional, pointer :: sw_hygroscopic_ext(:,:) ! short wave extinction table
real(r8), optional, pointer :: sw_hygroscopic_ssa(:,:) ! short wave single-scatter albedo table
real(r8), optional, pointer :: sw_hygroscopic_asm(:,:) ! short wave asymmetry table
real(r8), optional, pointer :: lw_hygroscopic_ext(:,:) ! long wave absorption table

! non-hygroscopic (insoluble)
real(r8), optional, pointer :: sw_insoluble_ext(:) ! short wave extinction table
real(r8), optional, pointer :: sw_insoluble_ssa(:) ! short wave single-scatter albedo table
real(r8), optional, pointer :: sw_insoluble_asm(:) ! short wave asymmetry table
real(r8), optional, pointer :: lw_insoluble_ext(:) ! long wave absorption table

! volcanic radius
real(r8), optional, pointer :: r_sw_ext(:,:)
real(r8), optional, pointer :: r_sw_scat (:,:)
real(r8), optional, pointer :: r_sw_ascat(:,:)
real(r8), optional, pointer :: r_mu(:)
real(r8), optional, pointer :: r_lw_abs(:,:)

end subroutine aero_optics_params

!------------------------------------------------------------------------
Expand Down Expand Up @@ -375,12 +398,12 @@ end function aero_alogsig_rlist
! returns name for a given radiation list number and aerosol bin
!------------------------------------------------------------------------------
function aero_bin_name(self, list_ndx, bin_ndx) result(name)
import :: aerosol_properties, r8
import :: aerosol_properties, r8, aero_name_len
class(aerosol_properties), intent(in) :: self
integer, intent(in) :: list_ndx ! radiation list number
integer, intent(in) :: bin_ndx ! bin number

character(len=32) name
character(len=aero_name_len) :: name

end function aero_bin_name

Expand Down Expand Up @@ -434,6 +457,15 @@ logical function aero_hydrophilic(self, bin_ndx)
integer, intent(in) :: bin_ndx ! bin number
end function aero_hydrophilic

!------------------------------------------------------------------------------
! Returns TRUE if the aerosol model matches the query, otherwise FALSE
!------------------------------------------------------------------------------
logical function aero_id_query(self, query)
import :: aerosol_properties
class(aerosol_properties), intent(in) :: self
character(len=*), intent(in) :: query
end function aero_id_query

end interface

contains
Expand Down
Loading