{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "2e336d6e", "metadata": {}, "outputs": [], "source": [ "#Import libraries\n", "import numpy as np\n", "import xarray as xr\n", "import scipy\n", "from scipy import stats\n", "import scipy.special as sp\n", "import matplotlib.pyplot as plt\n", "from glob import glob\n", "import os\n", "import warnings" ] }, { "cell_type": "code", "execution_count": null, "id": "6130b8b3", "metadata": {}, "outputs": [], "source": [ "#Set paths\n", "dir_data = '/Users/jzhang/Documents/Data/'\n", "\n", "#Load data\n", "cFlx = xr.open_mfdataset(sorted(glob(dir_data+'CERES/FluxByCldTyp/CERES_FluxByCldTyp-MON_Terra-Aqua-MODIS_Ed4.1_*nc'))).sel(time=slice(np.datetime64('2003-01-01'),np.datetime64('2022-12-31')))\n", "ebaf = xr.open_mfdataset(sorted(glob(dir_data+'CERES/EBAFed42/CERES_EBAF_Ed4.2_Subset_200301-202212.nc'))).sel(time=slice(np.datetime64('2003-01-01'),np.datetime64('2022-12-31')))\n", "ocean = xr.open_dataset(dir_data+'CERES/SYN1deg/CERES_SYN1deg-Month_Terra-Aqua-NOAA20_Ed4.2_Subset_200003-202507.nc').sel(time=slice(np.datetime64('2003-01-01'),np.datetime64('2022-12-31')))\n", "oce_frac = ocean['aux_ocean_mon']/100.\n", "\n", "cldtypes = ['Cu','Sc','St','Ac','As','Ns','Ci','Cs','Cb']\n", "dFlx = {} #Each cloud type aggregated separately\n", "for cldtype in cldtypes:\n", " dFlx[cldtype] = xr.open_dataset(dir_data+'CERES/FluxByCldTyp/FBCT_cldtype_%s_mon.nc' % cldtype).sel(time=slice(np.datetime64('2003-01-01'),np.datetime64('2022-12-31')))" ] }, { "cell_type": "code", "execution_count": null, "id": "7e673245", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Calculating:\n", "...all...\n", "...clr...\n", "...Cu...\n", "...Sc...\n", "...St...\n", "...Ac...\n", "...As...\n", "...Ns...\n", "...Ci...\n", "...Cs...\n", "...Cb...\n", "Done!\n", "\n", "Saving files:\n", "...all...\n", "...cld...\n", "...ocean...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "rm: /Users/jzhang/Documents/Data/CERES/FluxByCldTyp/FBCT_decomposition_ocean.nc: No such file or directory\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "...clr...\n", "...Cu...\n", "...Sc...\n", "...St...\n", "...Ac...\n", "...As...\n", "...Ns...\n", "...Ci...\n", "...Cs...\n", "...Cb...\n", "Done!\n" ] } ], "source": [ "#Set up master array to store decompositions\n", "xR = xr.Dataset() \n", "xR['time'] = cFlx.time\n", "xR['lat'] = cFlx.lat\n", "xR['lon'] = cFlx.lon\n", "xR['month'] = np.arange(1,13)\n", "xR['month'].attrs = {'units' : '1', 'long_name' : 'Month of the year'}\n", "\n", "###All-sky total\n", "\n", "R = cFlx['toa_sw_all_mon']\n", "R = R.where(R>0,0)\n", "\n", "xR['R'] = R\n", "xR['R'].attrs = {'units' : 'W m-2', 'long_name' : 'All-sky reflection'}\n", "\n", "S = cFlx['toa_solar_all_mon']\n", "\n", "xR['S'] = S\n", "xR['S'].attrs = {'units' : 'W m-2', 'long_name' : 'Insolation'}\n", "\n", "###Clear-sky\n", "\n", "R_clr = cFlx['toa_sw_clr_mon']\n", "R_clr = R_clr.where(R_clr>0,0)\n", "\n", "xR['R_clr'] = R_clr\n", "xR['R_clr'].attrs = {'units' : 'W m-2', 'long_name' : 'Clear-sky reflection'}\n", "\n", "### CRE\n", "\n", "R_cld = R - R_clr\n", "\n", "xR['R_cld'] = R_cld\n", "xR['R_cld'].attrs = {'units' : 'W m-2', 'long_name' : 'Cloudy-sky reflection'}\n", "\n", "###Ocean-fraction\n", "\n", "xR['O_frac'] = oce_frac\n", "xR['O_frac'].attrs = {'units' : '1', 'long_name' : 'Ocean fraction'}\n", "\n", "#Use EBAF values to help with decomposition\n", "#Note S is from FBCT, F_tow,down is from EBAF to be consistent with the use of surface fluxes from EBAF when calculate relative measures\n", "\n", "rsdt = ebaf['solar_mon']\n", "rsut = ebaf['toa_sw_clr_t_mon']\n", "rsds = ebaf['sfc_sw_down_clr_t_mon']\n", "rsus = ebaf['sfc_sw_up_clr_t_mon']\n", "\n", "R_aer = S*(rsdt*rsut-rsds*rsus)/(rsdt**2-rsus**2)\n", "R_aer = R_aer.where(R_aer>0,0)\n", "R_aer = R_aer.where(R_aer