{
"cells": [
{
"cell_type": "markdown",
"id": "356fae75",
"metadata": {},
"source": [
"# Aerosol-Ice Nucleating Particle Closure\n",
"\n",
"Contributed by Yijia Sun and Daniel A. Knopf"
]
},
{
"cell_type": "markdown",
"id": "077a8791",
"metadata": {},
"source": [
"---"
]
},
{
"cell_type": "markdown",
"id": "4610e215",
"metadata": {},
"source": [
"## Overview\n",
"Clouds observed during the Cold-Air Outbreaks in the Marine Boundary Layer Experiment (COMBLE) are typically mixed-phase clouds where supercooled liquid droplets and ice crystals coexist. Ice-nucleating particles (INPs) from the ambient aerosol particle size distribution (PSD) can initiate ice crystal formation. The ability to predict INPs from ambient aerosol can be evaluated by conducting a so-called closure study as outlined in Knopf et al. (2021). Different immersion freezing (IMF) parameterizations can be applied to derive the number concentration of predicted INPs for the COMBLE and Zeppelin observatory locations. Zeppelin is upwind and COMBLE downwind of the cold-air outbreak event.\n",
"\n",
"The quickcalc module, based on the simplistic 1D aerosol-cloud model (Knopf et al., 2023), allows inputting the PSD information measured at COMBLE and Zeppelin locations to derive the number concentration of INPs for different immersion freezing parameterizations. These predicted INP number concentrations are then compared to locally measured INP number concentrations, thereby manifesting a closure exercise. \n",
"\n",
"For this initial closure exercise, we chose Zeppelin observations at 0 UTC March 13 and COMBLE observations at 18 UTC March 13. The ambient PSD measurements are applied to derive INP number concentrations under the assumption that all aerosol particles are sea spray aerosols (SSA) while halving the number concentration of particles in the accumulation mode and neglecting particles in the Aitken mode. For this closure exercise three different IMF parameterizations were evaluated: that include two parameterizations that are singular or deterministic (no time dependence and ice nucleates on special particles or sites) and one parameterization that is based on classical nucleation theory (CNT) where ice nucleation is treated stochastically, i.e., no special particles and nucleation proceeds randomly, and is time dependent: MC2018 (singular ice nucleation active sites-based parameterization of SSA, McCluskey et al., 2018), AL2022 (singular ice nucleation active sites-based parameterization of SSA, Alpert et al., 2022) and the water-activity based immersion freezing model (ABIFM) of SSA (CNT-based parameterization, Alpert et al., 2022). Typically, these IMF parameterizations are uncertain by ±1-3 orders of magnitude. The results of this closure exercise can be seen here."
]
},
{
"cell_type": "markdown",
"id": "ea495a17",
"metadata": {},
"source": [
"\n",
"
"
]
},
{
"cell_type": "markdown",
"id": "4f503aae",
"metadata": {},
"source": [
"## Prerequisites\n",
"**System requirements**:\n",
"Implement numpy, xarray, pandas, pint and flake8 in the python environment and run this jupyter notebook in this folder. "
]
},
{
"cell_type": "markdown",
"id": "0674645c",
"metadata": {},
"source": [
"---"
]
},
{
"cell_type": "markdown",
"id": "a9e7364c",
"metadata": {},
"source": [
"## Imports"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "42eff893",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"from quickcalc import quickcalc\n",
"import numpy as np\n",
"from time import time\n",
"import xarray as xr\n",
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"id": "768bd5de",
"metadata": {},
"source": [
"The applied aerosol PSD parameters for Zeppelin and COMBLE locations can be accessed in this folder. "
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "c97b10a0",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"aer_info1= {\"name\": \"COMBLE18UTCMarch13\", #COMBLE18UTCMarch13case\n",
" \"n_init_max\": [21.66e6, 7.14e6],\n",
" \"psd\": {\"type\": \"multi_logn\",\n",
" \"diam_mean\": [0.13e-6,0.33e-6],\n",
" \"geom_sd\":[1.67,1.69],\n",
" \"n_bins\":50,\n",
" \"diam_min\":(0.0078e-6,5.577e-6),\n",
" \"m_ratio\":1.5},\n",
" \"nucleus_type\": \"SSA\"}\n",
"\n",
"aer_info2= {\"name\": \"ZEPPELIN0UTCMarch13\", #ZEPPELIN0UTCMarch13case\n",
" \"n_init_max\": [100.605e6, 24.58e6],\n",
" \"psd\": {\"type\": \"multi_logn\",\n",
" \"diam_mean\": [0.13e-6,0.61e-6],\n",
" \"geom_sd\":[2.2,1.9],\n",
" \"n_bins\":50,\n",
" \"diam_min\":(0.0059e-6,11.59e-6),\n",
" \"m_ratio\":1.5},\n",
" \"nucleus_type\": \"SSA\"}"
]
},
{
"cell_type": "markdown",
"id": "a87319bc",
"metadata": {},
"source": [
"## Calculate the predicted INPs\n",
"For the time-dependent IMF parameterization (ABIFM) an ice nucleation activation time, based on the INP measurements has to be applied. The chosen activation time is 1 min following the recommendation given in Alpert et al., (2022). The implemented equations for selected SSA IMF parameterizations can be found in the file AER.py. "
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "ce3216ba",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"COMBLEAL2022INP=[]\n",
"COMBLEMC2018INP=[]\n",
"COMBLEABIFMINP=[]\n",
"ZeppelinAL2022INP=[]\n",
"ZeppelinMC2018INP=[]\n",
"ZeppelinABIFMINP=[]\n",
"\n",
"for T in range(1, 48, 1):\n",
" #COMBLE18UTCMarch13case\n",
" COMBLEAL2022 = quickcalc(aer_info_dict={**aer_info1, **{\"singular_fun\": \"AL2022\"}}, T_in=243+(T-1)*0.5, use_ABIFM=False,RH_in=99.5)\n",
" COMBLEAL2022INP.append(COMBLEAL2022.variables['inp_tot'].values)\n",
" COMBLEMC2018 = quickcalc(aer_info_dict={**aer_info1, **{\"singular_fun\": \"MC2018\"}}, T_in=243+(T-1)*0.5, use_ABIFM=False,RH_in=99.5)\n",
" COMBLEMC2018INP.append(COMBLEMC2018.variables['inp_tot'].values)\n",
" COMBLEABIFM =quickcalc(aer_info_dict=aer_info1, T_in=243+(T-1)*0.5, use_ABIFM=True,RH_in=99.5, ABIFM_delta_t=60.)\n",
" COMBLEABIFMINP.append(COMBLEABIFM.variables['inp_tot'].values)\n",
" #ZEPPELIN0UTCMarch13case\n",
" ZeppelinAL2022 = quickcalc(aer_info_dict={**aer_info2, **{\"singular_fun\": \"AL2022\"}}, T_in=243+(T-1)*0.5, use_ABIFM=False,RH_in=99.5)\n",
" ZeppelinAL2022INP.append(ZeppelinAL2022.variables['inp_tot'].values)\n",
" ZeppelinMC2018 = quickcalc(aer_info_dict={**aer_info2, **{\"singular_fun\": \"MC2018\"}}, T_in=243+(T-1)*0.5, use_ABIFM=False,RH_in=99.5)\n",
" ZeppelinMC2018INP.append(ZeppelinMC2018.variables['inp_tot'].values)\n",
" ZeppelinABIFM =quickcalc(aer_info_dict=aer_info2, T_in=243+(T-1)*0.5, use_ABIFM=True,RH_in=99.5, ABIFM_delta_t=60.)\n",
" ZeppelinABIFMINP.append(ZeppelinABIFM.variables['inp_tot'].values)"
]
},
{
"cell_type": "markdown",
"id": "91f9334b",
"metadata": {},
"source": [
"## Variables Included in the netcdf Output File"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "0d0c053d",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"
<xarray.Dataset>\n", "Dimensions: (diam: 48, T: 16, diam_edge: 49)\n", "Coordinates:\n", " * diam (diam) float64 8.345e-09 9.553e-09 ... 4.183e-06 4.789e-06\n", " * T (T) float64 266.0 266.1 266.2 266.3 ... 267.8 268.0 268.2\n", " T_C (T) float64 -7.15 -7.05 -6.945 ... -5.379 -5.19 -4.992\n", " diam_um (diam) float64 0.008345 0.009553 0.01094 ... 4.183 4.789\n", " * diam_edge (diam_edge) float64 7.8e-09 8.929e-09 ... 5.123e-06\n", "Data variables:\n", " dn_dlogD (diam) float64 1.355 5.368 19.83 68.37 ... 20.21 6.005 1.67\n", " surf_area (diam) float64 2.188e-16 2.867e-16 ... 5.498e-11 7.204e-11\n", " ns_raw float64 2.251e+03\n", " inp_pct float64 4.832e-08\n", " diam_bin_edges (diam_edge) float64 7.8e-09 8.929e-09 ... 5.123e-06\n", " inp_tot float64 0.01392\n", " inp (diam, T) float64 3.274e-14 3.268e-14 ... 9.057e-08\n", " T_in float64 266.0\n", "Attributes:\n", " Parameterization: INAS