Comparing Two Climate Models¶
In this notebook, I will be comparing two climate reanalysis models:
- NCEP-DOE Reanalysis 2: Surface
- ERA5
I will be looking at the following variables:
- Surface Pressure
- Mean Sea Level Pressure
- Total Column Water
The idea is simple: these two models should have very similar properties. I will be trying to user RBIG in order to assess how similar these models are. I'll be looking at the following IT measures
- Entropy
- Total Correlation
- Mutual Information
If these climate models are that similar, then they should exhibit similar IT measures.
Data - Climate Models¶
import os, sys
cwd = os.getcwd()
source_path = f"{cwd}/../../../"
sys.path.insert(0, f'{source_path}')
import numpy as np
# Data Loaders
from src.data.climate.amip import DataDownloader
from src.data.climate.amip import DataLoader
# ESDC tools
sys.path.insert(0, f'/home/emmanuel/code/py_esdc')
from esdc.standardize import normalize_temporal
from esdc.transform import regrid_data
import pandas as pd
import xarray as xr
from tqdm import tqdm
from sklearn import preprocessing
import seaborn as sns
import matplotlib.pyplot as plt
plt.style.use('ggplot')
%matplotlib inline
%load_ext autoreload
%autoreload 2
amip_data_path = f"/home/emmanuel/projects/2020_rbig_rs/data/climate/raw/amip/"
era5_path = f"/home/emmanuel/projects/2020_rbig_rs/data/climate/raw/era5/"
ncep_path = f"/home/emmanuel/projects/2020_rbig_rs/data/climate/raw/ncep/"
results_path = f"/home/emmanuel/projects/2020_rbig_rs/data/climate/results/"
fig_path = f"/home/emmanuel/projects/2020_rbig_rs/reports/figures/climate/"
Dataset - GISS¶
loader = DataLoader()
dataset = 'ipsl_cm5b_lr'
cmip5_data = loader.load_amip_data(dataset)
cmip5_data
Test I - AMIP vs. ERA5¶
ERA5¶
def get_era5():
era5_data = xr.open_mfdataset(f"{era5_path}*.nc", combine="by_coords")
era5_data = era5_data.rename({'msl': 'mslp', 'latitude': 'lat', 'longitude': 'lon'})
era5_data.attrs['model_id'] = 'era5'
era5_data = era5_data.rename({'mslp': 'psl'})
return era5_data
era5_data = get_era5()
ReGrid¶
cmip5_coords = len(cmip5_data.lat) + len(cmip5_data.lon)
era5_coords = len(era5_data.lat) + len(era5_data.lon)
if cmip5_coords >= era5_coords:
cmip5_data = regrid_data(era5_data, cmip5_data)
else:
era5_data = regrid_data(cmip5_data, era5_data)
era5_data
Test II - NCEP Data¶
ncep_data = xr.open_mfdataset(f"{ncep_path}*mon.mean.nc", combine="by_coords")
ncep_data = ncep_data.rename({'mslp': 'psl'})
ncep_data.attrs['model_id'] = 'ncar_ncep_doe_2'
ncep_data
ReGrid¶
cmip5_coords = len(cmip5_data.lat) + len(cmip5_data.lon)
ncep_coords = len(ncep_data.lat) + len(ncep_data.lon)
if cmip5_coords >= era5_coords:
cmip5_data = regrid_data(ncep_data, cmip5_data)
else:
ncep_data = regrid_data(cmip5_data, ncep_data)
ncep_data