Volcanic Optical Depth (SAOD) Forcing Specifications
The volcanic optical depth pipeline extracts and integrates stratospheric aerosol optical depth (SAOD) at 550nm wavelength from the UOEXETER CMIP7 datasets, patching pre-industrial coupling namelists and manufacturing 4-band monthly ASCII tables for transient historical and scenario experiments.
Physical Domain & Scientific Scope
- Physical Quantity: Stratospheric Aerosol Optical Depth (SAOD) at \(\lambda = 550.0\,\text{nm}\).
- Vertical Integration: Layer extinction coefficients (\(\text{m}^{-1}\)) are summed over stratospheric layers, weighted by layer thickness: $\(\tau_{\text{strat}} = \sum_k \sigma_{\text{ext}, k} \times \Delta z_k\)$
- Scaling: Because UM radiation expects integer/scaled optical depth units, optical depth is scaled by: $\(\text{SAOD}_{\text{scaled}} = \tau_{\text{strat}} \times 10000.0\)$
- Spatial Discretization:
- Pre-Industrial (
PI): Globally integrated scalar SAOD constant patched into namelist variableVOLCTS_valin&couplinginatmosphere/input_atm.nml. - Historical (
HI) & ScenarioMIP (SM): Integrated across 4 equal-area/latitude bands (90°S–20°S,20°S–0°,0°–20°N,20°N–90°N) for each month and output into ASCII data tablevolcts_cmip7.dat.
- Pre-Industrial (
Controlling Suite Switches
The execution, experiment inclusion, and downstream configuration synchronization for volcanic optical depth are controlled by parameters in rose-suite.conf:
- Master Activation Switch:
ANCIL_CREATE_VOLCANIC = true
When set tofalse, all volcanic optical depth processing tasks are excluded from the execution graph. - Experiment Activation: Governed by
USE_EXP['PI'],USE_EXP['HI'], andUSE_EXP['SM']. - Scenario Extension Controls (
EXTEND_SM_VOLCANIC):True
Scalar boolean toggle; because UOEXETER ScenarioMIP volcanic data is padded to 2300, a single common table is generated across ScenarioMIP pathways. - Downstream Configuration Branching:
ForPI,PI_ancil_volcanicdirectly patches variableVOLCTS_valin${GIT_PI_CONFIG_DIR}/atmosphere/input_atm.nml. Downstream git branch cloning is managed byGIT_CONFIG_BRANCH_PRE['PI'](dev) andGIT_CONFIG_BRANCH_SUF['PI'](piControl), and pushing is gated byGIT_CONFIG_BRANCH_PUSH = false. ForHIandSM, tasks produce ASCII table files in the filesystem. - Reference: See Suite Configuration & Parameters Reference for full object declarations.
1. Pre-Industrial Experiment (PI)
PI_ancil_volcanic
- 1. Description & Purpose:
Computes the pre-industrial background stratospheric aerosol optical depth (SAOD) from UOEXETER climatology, integrating across 550nm wavelength, stratospheric vertical layers, and latitude bands. PatchesVOLCTS_valin the&couplingnamelist. - 2. CLI Arguments Passed:
python -m esm1p6_ancil.volcanic.cmip7_PI_volcanic_generate \ --ancil-target-dirname "${VAR.ANCIL_TARGET_PATH}" \ # Current: "/g/data/${PROJECT}/${USER}/CMIP7/esm1p6_ancil/$(isodatetime -f CCYY.MM.DD)" --cmip7-source-data-dirname "${VAR.CMIP7_SOURCE_PATH}" \ # Current: "/g/data/qv56/replicas/input4MIPs/CMIP7" --esm15-inputs-dirname "${VAR.ESM15_INPUTS_PATH}" \ # Current: "/g/data/vk83/configurations/inputs/access-esm1p5" --dataset-version "${CMIP7_VOLCANIC_VERSION}" \ # Current: "UOEXETER-CMIP-2-2-1" --dataset-vdate "${CMIP7_VOLCANIC_VDATE}" \ # Current: "v20250521" --dataset-date-range "${CMIP7_PI_VOLCANIC_DATE_RANGE}" # Current: "185001-202112" - 3. Input4MIPs Versions & Temporal Metadata:
- Dataset Version:
${CMIP7_VOLCANIC_VERSION}(UOEXETER-CMIP-2-2-1) - Version Date (
vdate):${CMIP7_VOLCANIC_VDATE}(v20250521) - Date Range:
${CMIP7_PI_VOLCANIC_DATE_RANGE}(185001-202112,-clim.ncclimatology)
- Dataset Version:
- 4. Input4MIPs Directory Path & Filenames:
- Directory Path:
${VAR.CMIP7_SOURCE_PATH}/CMIP/uoexeter/${CMIP7_VOLCANIC_VERSION}/atmos/monC/ext/gnz/${CMIP7_VOLCANIC_VDATE}/
(Evaluated:/g/data/qv56/replicas/input4MIPs/CMIP7/CMIP/uoexeter/UOEXETER-CMIP-2-2-1/atmos/monC/ext/gnz/v20250521/) - Filename:
ext_input4MIPs_aerosolProperties_CMIP_${CMIP7_VOLCANIC_VERSION}_gnz_${CMIP7_PI_VOLCANIC_DATE_RANGE}-clim.nc
- Directory Path:
- 5. Python Scripts & Functions:
- Main Script / Entrypoint:
esm1p6_ancil.volcanic.cmip7_PI_volcanic_generate - Key Functions Called:
average_stratospheric_aerosol_optical_depth,cmip7_volcanic_dirpath,constrain_to_wavelength,mean_over_pi_months,mean_over_latitudes,sum_over_height_layers,cmip7_pi_volcanic_patch,f90nml.Parser - Shared Libraries:
iris,numpy,cftime,f90nml
- Main Script / Entrypoint:
- 6. Function-Level Cube Transformations & Constraints:
- Input Cubes: 4D climatological extinction cube loaded via
iris.load_cubewith dimensions(time: 12, wavelength, lat, height). - Constraints Applied: Wavelength constraint
iris.Constraint(radiation_wavelength=550.0e-9). - Coordinate Bounds & Manipulation:
- Temporal bounds verified via
time_coord.has_bounds(); if missing,guess_bounds(). - Time average calculated across 12 months weighted by monthly day fractions (
time_weights = np.diff(np.append(points, [365])) / 365.0) collapsingtimewithiris.analysis.MEAN. - NaN stratospheric cells zeroed via
np.nan_to_num(cube.data, copy=False). - Latitude averaged with cosine area weights via
iris.analysis.cartography.cosine_latitude_weights(cube). - Vertical integration: Collapsed over
height_above_mean_sea_levelwithiris.analysis.SUM, weighted by stratospheric layer height boundsnp.diff(height_coord.bounds).flatten().
- Temporal bounds verified via
- Created / Output Value: Reduces 4D cube to scalar float
average_saod, multiplied by scaling factorSAOD_SCALING = 10000.0.
- Input Cubes: 4D climatological extinction cube loaded via
- 7. Produced File Versions & Date Ranges:
None (Direct namelist generation). Pre-industrial background climatology. - 8. Produced File Directory Paths & Filenames:
None. - 9. Namelist File & Variable Updates:
- Target File:
${GIT_PI_CONFIG_DIR}/atmosphere/input_atm.nml - Namelist Group:
&coupling - Variable Updated:
VOLCTS_val = <average_saod * 10000.0>(Format6.2f, e.g.0.17)
- Target File:
2. Historical Experiment (HI)
HI_ancil_volcanic
- 1. Description & Purpose:
Integrates historical monthly stratospheric extinction fields (1850–2023) across 550nm wavelength and stratospheric height, averages into 4 latitude bands, scales by 10000, and writes${ESM_HI_VOLCANIC_SAVE_FILENAME}(volcts_cmip7.dat). - 2. CLI Arguments Passed:
python -m esm1p6_ancil.volcanic.cmip7_HI_volcanic_generate \ --ancil-target-dirname "${VAR.ANCIL_TARGET_PATH}" \ # Current: "/g/data/${PROJECT}/${USER}/CMIP7/esm1p6_ancil/$(isodatetime -f CCYY.MM.DD)" --cmip7-source-data-dirname "${VAR.CMIP7_SOURCE_PATH}" \ # Current: "/g/data/qv56/replicas/input4MIPs/CMIP7" --esm15-inputs-dirname "${VAR.ESM15_INPUTS_PATH}" \ # Current: "/g/data/vk83/configurations/inputs/access-esm1p5" --dataset-version "${CMIP7_VOLCANIC_VERSION}" \ # Current: "UOEXETER-CMIP-2-2-1" --dataset-vdate "${CMIP7_VOLCANIC_VDATE}" \ # Current: "v20250521" --dataset-date-range "${CMIP7_HI_VOLCANIC_DATE_RANGE}" \ # Current: "175001-202312" --pad \ --save-filename "${ESM_HI_VOLCANIC_SAVE_FILENAME}" # Current: "volcts_cmip7.dat" - 3. Input4MIPs Versions & Temporal Metadata:
- Version:
${CMIP7_VOLCANIC_VERSION}(UOEXETER-CMIP-2-2-1),${CMIP7_VOLCANIC_VDATE}(v20250521), Date Range:${CMIP7_HI_VOLCANIC_DATE_RANGE}(175001-202312).
- Version:
- 4. Input4MIPs Directory Path & Filenames:
- Path:
${VAR.CMIP7_SOURCE_PATH}/CMIP/uoexeter/${CMIP7_VOLCANIC_VERSION}/atmos/mon/ext/gnz/${CMIP7_VOLCANIC_VDATE}/
(Evaluated:/g/data/qv56/replicas/input4MIPs/CMIP7/CMIP/uoexeter/UOEXETER-CMIP-2-2-1/atmos/mon/ext/gnz/v20250521/) - Filename:
ext_input4MIPs_aerosolProperties_CMIP_${CMIP7_VOLCANIC_VERSION}_gnz_${CMIP7_HI_VOLCANIC_DATE_RANGE}.nc
- Path:
- 5. Scripts & Functions:
esm1p6_ancil.volcanic.cmip7_HI_volcanic_generate,save_stratospheric_aerosol_optical_depth,constrain_to_wavelength,sum_over_height_layers. - 6. Cube Transformations:
- Constrained to 550nm wavelength.
- Stratospheric layer height integration for each month.
- Latitude averaging across 4 discrete bands (
90°S–20°S,20°S–0°,0°–20°N,20°N–90°N). - Scaled by 10000.0. Pre-1850 years filled with pre-industrial mean via
print_early_saod. Post-2023 years tapered or padded.
- 7. Produced File:
${ESM_HI_VOLCANIC_SAVE_FILENAME}(volcts_cmip7.dat, ASCII table, columns:year month band1 band2 band3 band4). - 8. Destination Path:
${VAR.ANCIL_TARGET_PATH}/modern/historical/atmosphere/forcing/${ESM_GRID_DIRNAME}/<DATE>/${ESM_HI_VOLCANIC_SAVE_FILENAME}. - 9. Namelist Updates:
None (Produces ASCII forcing table).
3. ScenarioMIP Experiment (SM)
SM_ancil_volcanic
- 1. Description & Purpose:
Generates projection 4-band volcanic SAOD table${ESM_SM_VOLCANIC_SAVE_FILENAME}(volcts_cmip7.dat) for ScenarioMIP simulations spanning 2022 to 2100 (tapering/holding constant to 2300). - 2. CLI Arguments Passed:
python -m esm1p6_ancil.volcanic.cmip7_SM_volcanic_generate \ --ancil-target-dirname "${VAR.ANCIL_TARGET_PATH}" \ # Current: "/g/data/${PROJECT}/${USER}/CMIP7/esm1p6_ancil/$(isodatetime -f CCYY.MM.DD)" --cmip7-source-data-dirname "${VAR.CMIP7_SOURCE_PATH}" \ # Current: "/g/data/qv56/replicas/input4MIPs/CMIP7" --esm15-inputs-dirname "${VAR.ESM15_INPUTS_PATH}" \ # Current: "/g/data/vk83/configurations/inputs/access-esm1p5" --dataset-version "${CMIP7_SM_VOLCANIC_VERSION}" \ # Current: "UOEXETER-ScenarioMIP-2-2-2" --dataset-vdate "${CMIP7_SM_VOLCANIC_VDATE}" \ # Current: "v20251219" --dataset-date-range "${CMIP7_SM_VOLCANIC_DATE_RANGE}" \ # Current: "202201-210012" --pad \ --save-filename "${ESM_SM_VOLCANIC_SAVE_FILENAME}" # Current: "volcts_cmip7.dat" - 3. Input4MIPs Versions & Temporal Metadata:
- Version:
${CMIP7_SM_VOLCANIC_VERSION}(UOEXETER-ScenarioMIP-2-2-2),${CMIP7_SM_VOLCANIC_VDATE}(v20251219), Date Range:${CMIP7_SM_VOLCANIC_DATE_RANGE}(202201-210012).
- Version:
- 7. Produced File:
${ESM_SM_VOLCANIC_SAVE_FILENAME}(volcts_cmip7.dat, ASCII table, 1850–2300). - 8. Destination Path:
${VAR.ANCIL_TARGET_PATH}/modern/scen7-h/atmosphere/forcing/${ESM_GRID_DIRNAME}/<DATE>/${ESM_SM_VOLCANIC_SAVE_FILENAME}. - 9. Namelist Updates:
None (Produces ASCII forcing table).