Sec. 11 Statistically downscaled climate data from PCIC

Last update: Fri Jun 9 12:12:10 2023 +0000 (444a736)

We can improve upon our estimate of the impact of climate change on our climate index of interest by downscaling GCM data using more sophisticated statistical downscaling techniques.

In this exercise, we will use data that has been downscaled using a method called “bias correction / constructed analogues with quantile mapping reordering” (BCCAQv2; see Cannon, Sobie, and Murdock (2015)). One of the advantages of this method is that we can bias-correct and downscale daily GCM data.

The data was provided by Pacific Climate Impacts Consortium, University of Victoria (2019), and is downscaled based on a high-quality gridded observed data set (~10 km grid size) developed by NRCan (ANUSPLIN300). The Pacific Climate Impacts Consortium (PCIC) provides an excellent overview of their downscaling methodology, with citations made to the relevant articles, here. You should read the entirety of that page before continuing this preface and before starting lab 5.

Figure 11.1, below, shows the results of this downscaling process for the Canadian CanESM2 model (CMIP5-generation model). Notice that the PCIC product, downscaled to a 10 km grid, is much more closely related to the observed station point data that we downloaded from Environment and Climate Change Canada. Our comparison here still isn’t perfect, as we’re still comparing point data to a grid cell (albeit a smaller grid cell), but it is evident that the downscaled data can improve the quality of our impact assessment. Read on to learn how to obtain this high-resolution downscaled data directly from PCIC.

Baseline (1981‒2100) $T_\mathrm{mean}$ at Toronto, observed (green), simulated by CanESM2 (yellow), and downscaled by PCIC (blue).

Figure 11.1: Baseline (1981‒2100) \(T_\mathrm{mean}\) at Toronto, observed (green), simulated by CanESM2 (yellow), and downscaled by PCIC (blue).

11.1 Obtaining statistically downscaled PCIC data

There are several places that you can download PCIC’s statistically downscaled data. We present four options here, two that use your web browser, and two that you can access directly from Python. You can download the data for Sec. 12 using one of the methods below or you can save a bit of time and access the PCIC data you need for Sec. 12 here.

11.1.1 Using a web browser to obtain PCIC data

11.1.1.1 Using the PCIC data portal website to obtain PCIC data

PCIC provides an intuitive point-and-click map for accessing the downscaled GCM data. For Lab 5, we will be using statistically downscaled data for 26 CMIP6. To download this information manually, follow the steps below.

  1. Open the link to the downscaled GCM data: https://data.pacificclimate.org/portal/downscaled_cmip6/map/. A map of North America should appear on your screen.
  2. In the bar on the right-hand side of your screen. Select “Historical,ssp245”.
  3. Select one of the downscaled data sets, e.g. CanESM5, r1i1p2f1, and ‘tasmax’. We have to download ‘tasmax’ and ‘tasmin’ separately.
  4. Set your start date to 1981-01-01, leave the end date as is at 2101-01-01.
  5. Now, click on the pencil icon in the top right-hand corner of the map and select the Toronto latitude and longitude (43.67°N and 79.40°W). A small window will pop-up asking if you want to download this data - click ‘OK’.
  6. Repeat this process 103 times so that you have data for both ‘tasmax’ and ‘tasmin’ for all 6 models for SSP2-4.5 and SSP5-8.5.

You can also download whole areas from the PCIC data portal. To do that, use the polygon icon between the pencil and the hand.

11.1.1.2 Using ClimateData.ca to obtain PCIC data

ClimateData.ca is a collaboration between the Government of Canada (via ECCC), and several research partners (the Computer Research Institute of Montréal (CRIM), Ouranos, PCIC, the Prairie Climate Centre, and HabitatSeven) to provide a platform for access to climate data other information and tools to support decision-making around climate change. Similar to the PCIC data portal, ClimateData.ca also provides an intuitive point-and-click map for accessing the PCIC BCCAQv2 data. To download this information manually, follow the steps below.

  1. Open the link to the downscaled GCM data: https://climatedata.ca/download/. A screen with several drop-down menus and map of Canada should appear on your screen.
  2. Select the time frequency of the data you want. We will select daily.
  3. Select the dataset you want: CMIP6.
  4. Select the variable that you want. We will select maximum temperature (tasmax).
  5. Select the location that you want either by searching or by selecting grid boxes on the map. We will select Toronto.
  6. Select the data format. We will select netCDF.
  7. Finally, enter your email address. You will receive an email with a download link.
  8. Note that the ClimateData.ca download page does not allow you to select models or scenarios. Your download will include all available models and scenarios for the PCIC BCCAQv2 data and it will include separate files for each type of daily calendar (e.g. some GCMs include leap years and some do not).
  9. Repeat this process one more time so that you have data for both ‘tasmax’ and ‘tasmin’ for all models and scenarios.

You can download multiple grid cells at a time by holding down the ‘Ctrl’ key as you click on grid cells on the map.

11.1.2 Using Python to obtain PCIC data

11.1.2.1 Using PAVICS to obtain PCIC data

Power Analytics and Visualization for Climate Science (PAVICS) is a new research platform dedicated to climate analysis and visualization. It bundles data search, analytics and visualization services. PAVICS is developed by Ouranos, CRIM and the birdhouse community and been funded by the CANARIE research software program. We can use Python to access the PAVICS server to download the PCIC bccaqv2 data.

As always, we first import the necessary libraries.

Python

import numpy as np
from datetime import datetime
import xarray as xr

Next, we will define the latitude and longitude coordinates that we are interested in. Here, I am specifying the latitude and longitude for Toronto.

Python

# Define longitudes and latitudes of your location of interest.
lon_sel = -79.4
lat_sel = 43.3

The data are hosted on the cloud, so the next step is to specify the server where the data catalog is located. We will make use of a package called siphon to help us navigate the data catalog.

Python

from siphon.catalog import TDSCatalog

# PAVICS catalog link for BCCAQv2 CMIP6 data
pavics = "https://pavics.ouranos.ca/twitcher/ows/proxy/thredds/catalog/datasets/simulations/bias_adjusted/cmip6/pcic/CanDCS-U6/catalog.xml"  

# Create Catalog
cat = TDSCatalog(pavics)

Let’s see how many files we have in our CMIP6 data catalog:

Python

# List of datasets
print(f"Number of datasets: {len(cat.datasets)}")
## Number of datasets: 105

That’s a lot of files! Let’s take a look at the file names.

Python

all_data = [cat.datasets[x] for x in cat.datasets]

Looking at the list of file names, we can see different model names and different scenarios (SSPs). We can also see that CanESM5 has multiple ensemble members. In order to give equal weight to each model, we only want to download one ensemble member for CanESM5. Also, notice that some of the ensemble member labels are different for different models.

We are going to filter this catalog in order to extract a single file for each model. This is a bit clumsy, but it works. Here’s an example for SSP5-8.5.

Python

#filter based on ssp and ensemble member
ssp585_data = [cat.datasets[x] for x in cat.datasets if "ssp585" in x and "r1i1" in x]
ssp585_extra1 = [cat.datasets[x] for x in cat.datasets if "ssp585" in x and "r2i1p1" in x]
ssp585_extra2 = [cat.datasets[x] for x in cat.datasets if "ssp585" in x and "r4i1p1" in x]
ssp585_data = ssp585_data+ssp585_extra1+ssp585_extra2
ssp585_data
## [day_BCCAQv2+ANUSPLIN300_UKESM1-0-LL_historical+ssp585_r1i1p1f2_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_TaiESM1_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_NorESM2-MM_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_NorESM2-LM_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_MRI-ESM2-0_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-LR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-HR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_MIROC6_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_MIROC-ES2L_historical+ssp585_r1i1p1f2_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_KIOST-ESM_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_IPSL-CM6A-LR_historical+ssp585_r1i1p1f1_gr_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_INM-CM5-0_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_INM-CM4-8_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_HadGEM3-GC31-LL_historical+ssp585_r1i1p1f3_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_GFDL-ESM4_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_FGOALS-g3_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_EC-Earth3-Veg_historical+ssp585_r1i1p1f1_gr_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_CanESM5_historical+ssp585_r1i1p2f1_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_CNRM-ESM2-1_historical+ssp585_r1i1p1f2_gr_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_CNRM-CM6-1_historical+ssp585_r1i1p1f2_gr_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_CMCC-ESM2_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_BCC-CSM2-MR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_ACCESS-ESM1-5_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_ACCESS-CM2_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_KACE-1-0-G_historical+ssp585_r2i1p1f1_gr_1950-2100.ncml, day_BCCAQv2+ANUSPLIN300_EC-Earth3_historical+ssp585_r4i1p1f1_gr_1950-2100.ncml]

We can do the same thing for SSP2-4.5:

Python

ssp245_data = [cat.datasets[x] for x in cat.datasets if "ssp245" in x and "r1i1" in x]
ssp245_extra1 = [cat.datasets[x] for x in cat.datasets if "ssp245" in x and "r2i1p1" in x]
ssp245_extra2 = [cat.datasets[x] for x in cat.datasets if "ssp245" in x and "r4i1p1" in x]
ssp245_data = ssp245_data+ssp245_extra1+ssp245_extra2

Next, we are going to loop over the different scenarios and variables for our download. Let’s define lists for each.

Python

# lists of variables and scenarios
var = ['tasmax','tasmin']
scen = [ssp245_data,ssp585_data]

Within the inner loop below we will access data for each file. We are accessing the data using the Open-source Project for a Network Data Access Protocol or OPeNDAP.

Python

# loop over variables, scenarios and models
for j in range(len(var)):
    for i in range(len(scen)):
        for k in scen[i]:
            print(str(k)[:-5])
            # print progress to screen
            now = datetime.now()
            current_time = now.strftime("%H:%M:%S")
            print('...Downloading...',str(k),var[j],"Current Time =", current_time)

            # open file
            filename = k.access_urls["OPENDAP"]
            grid   = xr.open_dataset(filename, chunks="auto")

            # Get the temperature data for selected latitude and longitude and time period
            tmp = grid[var[j]].sel(lat=lat_sel,lon=lon_sel,method='nearest')
            tmp = tmp.sel(time=slice('1981-01','2100-12'))

            # save to netcdf
            tmp.to_netcdf(var[j]+'_'+str(k)[:-5]+ ".nc")
            print('...Finished...',str(k),var[j],"Current Time =", current_time)
## day_BCCAQv2+ANUSPLIN300_UKESM1-0-LL_historical+ssp245_r1i1p1f2_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_UKESM1-0-LL_historical+ssp245_r1i1p1f2_gn_1950-2100.ncml tasmax Current Time = 12:17:19
## ...Finished... day_BCCAQv2+ANUSPLIN300_UKESM1-0-LL_historical+ssp245_r1i1p1f2_gn_1950-2100.ncml tasmax Current Time = 12:17:19
## day_BCCAQv2+ANUSPLIN300_TaiESM1_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_TaiESM1_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:17:28
## ...Finished... day_BCCAQv2+ANUSPLIN300_TaiESM1_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:17:28
## day_BCCAQv2+ANUSPLIN300_NorESM2-MM_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_NorESM2-MM_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:17:37
## ...Finished... day_BCCAQv2+ANUSPLIN300_NorESM2-MM_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:17:37
## day_BCCAQv2+ANUSPLIN300_NorESM2-LM_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_NorESM2-LM_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:17:46
## ...Finished... day_BCCAQv2+ANUSPLIN300_NorESM2-LM_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:17:46
## day_BCCAQv2+ANUSPLIN300_MRI-ESM2-0_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MRI-ESM2-0_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:17:54
## ...Finished... day_BCCAQv2+ANUSPLIN300_MRI-ESM2-0_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:17:54
## day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-LR_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-LR_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:18:02
## ...Finished... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-LR_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:18:02
## day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-HR_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-HR_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:18:09
## ...Finished... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-HR_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:18:09
## day_BCCAQv2+ANUSPLIN300_MIROC6_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MIROC6_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:18:17
## ...Finished... day_BCCAQv2+ANUSPLIN300_MIROC6_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:18:17
## day_BCCAQv2+ANUSPLIN300_MIROC-ES2L_historical+ssp245_r1i1p1f2_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MIROC-ES2L_historical+ssp245_r1i1p1f2_gn_1950-2100.ncml tasmax Current Time = 12:18:25
## ...Finished... day_BCCAQv2+ANUSPLIN300_MIROC-ES2L_historical+ssp245_r1i1p1f2_gn_1950-2100.ncml tasmax Current Time = 12:18:25
## day_BCCAQv2+ANUSPLIN300_KIOST-ESM_historical+ssp245_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_KIOST-ESM_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:18:33
## ...Finished... day_BCCAQv2+ANUSPLIN300_KIOST-ESM_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:18:33
## day_BCCAQv2+ANUSPLIN300_IPSL-CM6A-LR_historical+ssp245_r1i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_IPSL-CM6A-LR_historical+ssp245_r1i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:18:43
## ...Finished... day_BCCAQv2+ANUSPLIN300_IPSL-CM6A-LR_historical+ssp245_r1i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:18:43
## day_BCCAQv2+ANUSPLIN300_INM-CM5-0_historical+ssp245_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_INM-CM5-0_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:18:50
## ...Finished... day_BCCAQv2+ANUSPLIN300_INM-CM5-0_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:18:50
## day_BCCAQv2+ANUSPLIN300_INM-CM4-8_historical+ssp245_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_INM-CM4-8_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:18:57
## ...Finished... day_BCCAQv2+ANUSPLIN300_INM-CM4-8_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:18:57
## day_BCCAQv2+ANUSPLIN300_HadGEM3-GC31-LL_historical+ssp245_r1i1p1f3_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_HadGEM3-GC31-LL_historical+ssp245_r1i1p1f3_gn_1950-2100.ncml tasmax Current Time = 12:19:07
## ...Finished... day_BCCAQv2+ANUSPLIN300_HadGEM3-GC31-LL_historical+ssp245_r1i1p1f3_gn_1950-2100.ncml tasmax Current Time = 12:19:07
## day_BCCAQv2+ANUSPLIN300_GFDL-ESM4_historical+ssp245_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_GFDL-ESM4_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:19:17
## ...Finished... day_BCCAQv2+ANUSPLIN300_GFDL-ESM4_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:19:17
## day_BCCAQv2+ANUSPLIN300_FGOALS-g3_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_FGOALS-g3_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:19:26
## ...Finished... day_BCCAQv2+ANUSPLIN300_FGOALS-g3_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:19:26
## day_BCCAQv2+ANUSPLIN300_EC-Earth3-Veg_historical+ssp245_r1i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_EC-Earth3-Veg_historical+ssp245_r1i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:19:36
## ...Finished... day_BCCAQv2+ANUSPLIN300_EC-Earth3-Veg_historical+ssp245_r1i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:19:36
## day_BCCAQv2+ANUSPLIN300_CanESM5_historical+ssp245_r1i1p2f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CanESM5_historical+ssp245_r1i1p2f1_gn_1950-2100.ncml tasmax Current Time = 12:19:45
## ...Finished... day_BCCAQv2+ANUSPLIN300_CanESM5_historical+ssp245_r1i1p2f1_gn_1950-2100.ncml tasmax Current Time = 12:19:45
## day_BCCAQv2+ANUSPLIN300_CNRM-ESM2-1_historical+ssp245_r1i1p1f2_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CNRM-ESM2-1_historical+ssp245_r1i1p1f2_gr_1950-2100.ncml tasmax Current Time = 12:19:55
## ...Finished... day_BCCAQv2+ANUSPLIN300_CNRM-ESM2-1_historical+ssp245_r1i1p1f2_gr_1950-2100.ncml tasmax Current Time = 12:19:55
## day_BCCAQv2+ANUSPLIN300_CNRM-CM6-1_historical+ssp245_r1i1p1f2_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CNRM-CM6-1_historical+ssp245_r1i1p1f2_gr_1950-2100.ncml tasmax Current Time = 12:20:04
## ...Finished... day_BCCAQv2+ANUSPLIN300_CNRM-CM6-1_historical+ssp245_r1i1p1f2_gr_1950-2100.ncml tasmax Current Time = 12:20:04
## day_BCCAQv2+ANUSPLIN300_CMCC-ESM2_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CMCC-ESM2_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:20:13
## ...Finished... day_BCCAQv2+ANUSPLIN300_CMCC-ESM2_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:20:13
## day_BCCAQv2+ANUSPLIN300_BCC-CSM2-MR_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_BCC-CSM2-MR_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:20:22
## ...Finished... day_BCCAQv2+ANUSPLIN300_BCC-CSM2-MR_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:20:22
## day_BCCAQv2+ANUSPLIN300_ACCESS-ESM1-5_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_ACCESS-ESM1-5_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:20:32
## ...Finished... day_BCCAQv2+ANUSPLIN300_ACCESS-ESM1-5_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:20:32
## day_BCCAQv2+ANUSPLIN300_ACCESS-CM2_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_ACCESS-CM2_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:20:41
## ...Finished... day_BCCAQv2+ANUSPLIN300_ACCESS-CM2_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:20:41
## day_BCCAQv2+ANUSPLIN300_KACE-1-0-G_historical+ssp245_r2i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_KACE-1-0-G_historical+ssp245_r2i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:20:49
## ...Finished... day_BCCAQv2+ANUSPLIN300_KACE-1-0-G_historical+ssp245_r2i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:20:49
## day_BCCAQv2+ANUSPLIN300_EC-Earth3_historical+ssp245_r4i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_EC-Earth3_historical+ssp245_r4i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:20:59
## ...Finished... day_BCCAQv2+ANUSPLIN300_EC-Earth3_historical+ssp245_r4i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:20:59
## day_BCCAQv2+ANUSPLIN300_UKESM1-0-LL_historical+ssp585_r1i1p1f2_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_UKESM1-0-LL_historical+ssp585_r1i1p1f2_gn_1950-2100.ncml tasmax Current Time = 12:21:09
## ...Finished... day_BCCAQv2+ANUSPLIN300_UKESM1-0-LL_historical+ssp585_r1i1p1f2_gn_1950-2100.ncml tasmax Current Time = 12:21:09
## day_BCCAQv2+ANUSPLIN300_TaiESM1_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_TaiESM1_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:21:19
## ...Finished... day_BCCAQv2+ANUSPLIN300_TaiESM1_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:21:19
## day_BCCAQv2+ANUSPLIN300_NorESM2-MM_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_NorESM2-MM_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:21:29
## ...Finished... day_BCCAQv2+ANUSPLIN300_NorESM2-MM_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:21:29
## day_BCCAQv2+ANUSPLIN300_NorESM2-LM_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_NorESM2-LM_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:21:39
## ...Finished... day_BCCAQv2+ANUSPLIN300_NorESM2-LM_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:21:39
## day_BCCAQv2+ANUSPLIN300_MRI-ESM2-0_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MRI-ESM2-0_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:21:49
## ...Finished... day_BCCAQv2+ANUSPLIN300_MRI-ESM2-0_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:21:49
## day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-LR_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-LR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:21:59
## ...Finished... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-LR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:21:59
## day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-HR_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-HR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:22:08
## ...Finished... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-HR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:22:08
## day_BCCAQv2+ANUSPLIN300_MIROC6_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MIROC6_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:22:16
## ...Finished... day_BCCAQv2+ANUSPLIN300_MIROC6_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:22:16
## day_BCCAQv2+ANUSPLIN300_MIROC-ES2L_historical+ssp585_r1i1p1f2_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MIROC-ES2L_historical+ssp585_r1i1p1f2_gn_1950-2100.ncml tasmax Current Time = 12:22:24
## ...Finished... day_BCCAQv2+ANUSPLIN300_MIROC-ES2L_historical+ssp585_r1i1p1f2_gn_1950-2100.ncml tasmax Current Time = 12:22:24
## day_BCCAQv2+ANUSPLIN300_KIOST-ESM_historical+ssp585_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_KIOST-ESM_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:22:33
## ...Finished... day_BCCAQv2+ANUSPLIN300_KIOST-ESM_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:22:33
## day_BCCAQv2+ANUSPLIN300_IPSL-CM6A-LR_historical+ssp585_r1i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_IPSL-CM6A-LR_historical+ssp585_r1i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:22:41
## ...Finished... day_BCCAQv2+ANUSPLIN300_IPSL-CM6A-LR_historical+ssp585_r1i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:22:41
## day_BCCAQv2+ANUSPLIN300_INM-CM5-0_historical+ssp585_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_INM-CM5-0_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:22:50
## ...Finished... day_BCCAQv2+ANUSPLIN300_INM-CM5-0_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:22:50
## day_BCCAQv2+ANUSPLIN300_INM-CM4-8_historical+ssp585_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_INM-CM4-8_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:23:00
## ...Finished... day_BCCAQv2+ANUSPLIN300_INM-CM4-8_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:23:00
## day_BCCAQv2+ANUSPLIN300_HadGEM3-GC31-LL_historical+ssp585_r1i1p1f3_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_HadGEM3-GC31-LL_historical+ssp585_r1i1p1f3_gn_1950-2100.ncml tasmax Current Time = 12:23:10
## ...Finished... day_BCCAQv2+ANUSPLIN300_HadGEM3-GC31-LL_historical+ssp585_r1i1p1f3_gn_1950-2100.ncml tasmax Current Time = 12:23:10
## day_BCCAQv2+ANUSPLIN300_GFDL-ESM4_historical+ssp585_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_GFDL-ESM4_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:23:19
## ...Finished... day_BCCAQv2+ANUSPLIN300_GFDL-ESM4_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmax Current Time = 12:23:19
## day_BCCAQv2+ANUSPLIN300_FGOALS-g3_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_FGOALS-g3_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:23:28
## ...Finished... day_BCCAQv2+ANUSPLIN300_FGOALS-g3_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:23:28
## day_BCCAQv2+ANUSPLIN300_EC-Earth3-Veg_historical+ssp585_r1i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_EC-Earth3-Veg_historical+ssp585_r1i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:23:37
## ...Finished... day_BCCAQv2+ANUSPLIN300_EC-Earth3-Veg_historical+ssp585_r1i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:23:37
## day_BCCAQv2+ANUSPLIN300_CanESM5_historical+ssp585_r1i1p2f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CanESM5_historical+ssp585_r1i1p2f1_gn_1950-2100.ncml tasmax Current Time = 12:23:45
## ...Finished... day_BCCAQv2+ANUSPLIN300_CanESM5_historical+ssp585_r1i1p2f1_gn_1950-2100.ncml tasmax Current Time = 12:23:45
## day_BCCAQv2+ANUSPLIN300_CNRM-ESM2-1_historical+ssp585_r1i1p1f2_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CNRM-ESM2-1_historical+ssp585_r1i1p1f2_gr_1950-2100.ncml tasmax Current Time = 12:23:54
## ...Finished... day_BCCAQv2+ANUSPLIN300_CNRM-ESM2-1_historical+ssp585_r1i1p1f2_gr_1950-2100.ncml tasmax Current Time = 12:23:54
## day_BCCAQv2+ANUSPLIN300_CNRM-CM6-1_historical+ssp585_r1i1p1f2_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CNRM-CM6-1_historical+ssp585_r1i1p1f2_gr_1950-2100.ncml tasmax Current Time = 12:24:03
## ...Finished... day_BCCAQv2+ANUSPLIN300_CNRM-CM6-1_historical+ssp585_r1i1p1f2_gr_1950-2100.ncml tasmax Current Time = 12:24:03
## day_BCCAQv2+ANUSPLIN300_CMCC-ESM2_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CMCC-ESM2_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:24:11
## ...Finished... day_BCCAQv2+ANUSPLIN300_CMCC-ESM2_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:24:11
## day_BCCAQv2+ANUSPLIN300_BCC-CSM2-MR_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_BCC-CSM2-MR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:24:21
## ...Finished... day_BCCAQv2+ANUSPLIN300_BCC-CSM2-MR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:24:21
## day_BCCAQv2+ANUSPLIN300_ACCESS-ESM1-5_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_ACCESS-ESM1-5_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:24:30
## ...Finished... day_BCCAQv2+ANUSPLIN300_ACCESS-ESM1-5_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:24:30
## day_BCCAQv2+ANUSPLIN300_ACCESS-CM2_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_ACCESS-CM2_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:24:39
## ...Finished... day_BCCAQv2+ANUSPLIN300_ACCESS-CM2_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmax Current Time = 12:24:39
## day_BCCAQv2+ANUSPLIN300_KACE-1-0-G_historical+ssp585_r2i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_KACE-1-0-G_historical+ssp585_r2i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:24:47
## ...Finished... day_BCCAQv2+ANUSPLIN300_KACE-1-0-G_historical+ssp585_r2i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:24:47
## day_BCCAQv2+ANUSPLIN300_EC-Earth3_historical+ssp585_r4i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_EC-Earth3_historical+ssp585_r4i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:24:57
## ...Finished... day_BCCAQv2+ANUSPLIN300_EC-Earth3_historical+ssp585_r4i1p1f1_gr_1950-2100.ncml tasmax Current Time = 12:24:57
## day_BCCAQv2+ANUSPLIN300_UKESM1-0-LL_historical+ssp245_r1i1p1f2_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_UKESM1-0-LL_historical+ssp245_r1i1p1f2_gn_1950-2100.ncml tasmin Current Time = 12:25:06
## ...Finished... day_BCCAQv2+ANUSPLIN300_UKESM1-0-LL_historical+ssp245_r1i1p1f2_gn_1950-2100.ncml tasmin Current Time = 12:25:06
## day_BCCAQv2+ANUSPLIN300_TaiESM1_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_TaiESM1_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:25:15
## ...Finished... day_BCCAQv2+ANUSPLIN300_TaiESM1_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:25:15
## day_BCCAQv2+ANUSPLIN300_NorESM2-MM_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_NorESM2-MM_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:25:24
## ...Finished... day_BCCAQv2+ANUSPLIN300_NorESM2-MM_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:25:24
## day_BCCAQv2+ANUSPLIN300_NorESM2-LM_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_NorESM2-LM_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:25:33
## ...Finished... day_BCCAQv2+ANUSPLIN300_NorESM2-LM_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:25:33
## day_BCCAQv2+ANUSPLIN300_MRI-ESM2-0_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MRI-ESM2-0_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:25:42
## ...Finished... day_BCCAQv2+ANUSPLIN300_MRI-ESM2-0_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:25:42
## day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-LR_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-LR_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:25:51
## ...Finished... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-LR_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:25:51
## day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-HR_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-HR_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:25:59
## ...Finished... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-HR_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:25:59
## day_BCCAQv2+ANUSPLIN300_MIROC6_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MIROC6_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:26:07
## ...Finished... day_BCCAQv2+ANUSPLIN300_MIROC6_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:26:07
## day_BCCAQv2+ANUSPLIN300_MIROC-ES2L_historical+ssp245_r1i1p1f2_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MIROC-ES2L_historical+ssp245_r1i1p1f2_gn_1950-2100.ncml tasmin Current Time = 12:26:16
## ...Finished... day_BCCAQv2+ANUSPLIN300_MIROC-ES2L_historical+ssp245_r1i1p1f2_gn_1950-2100.ncml tasmin Current Time = 12:26:16
## day_BCCAQv2+ANUSPLIN300_KIOST-ESM_historical+ssp245_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_KIOST-ESM_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:26:24
## ...Finished... day_BCCAQv2+ANUSPLIN300_KIOST-ESM_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:26:24
## day_BCCAQv2+ANUSPLIN300_IPSL-CM6A-LR_historical+ssp245_r1i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_IPSL-CM6A-LR_historical+ssp245_r1i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:26:33
## ...Finished... day_BCCAQv2+ANUSPLIN300_IPSL-CM6A-LR_historical+ssp245_r1i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:26:33
## day_BCCAQv2+ANUSPLIN300_INM-CM5-0_historical+ssp245_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_INM-CM5-0_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:26:41
## ...Finished... day_BCCAQv2+ANUSPLIN300_INM-CM5-0_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:26:41
## day_BCCAQv2+ANUSPLIN300_INM-CM4-8_historical+ssp245_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_INM-CM4-8_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:26:50
## ...Finished... day_BCCAQv2+ANUSPLIN300_INM-CM4-8_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:26:50
## day_BCCAQv2+ANUSPLIN300_HadGEM3-GC31-LL_historical+ssp245_r1i1p1f3_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_HadGEM3-GC31-LL_historical+ssp245_r1i1p1f3_gn_1950-2100.ncml tasmin Current Time = 12:26:59
## ...Finished... day_BCCAQv2+ANUSPLIN300_HadGEM3-GC31-LL_historical+ssp245_r1i1p1f3_gn_1950-2100.ncml tasmin Current Time = 12:26:59
## day_BCCAQv2+ANUSPLIN300_GFDL-ESM4_historical+ssp245_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_GFDL-ESM4_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:27:09
## ...Finished... day_BCCAQv2+ANUSPLIN300_GFDL-ESM4_historical+ssp245_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:27:09
## day_BCCAQv2+ANUSPLIN300_FGOALS-g3_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_FGOALS-g3_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:27:18
## ...Finished... day_BCCAQv2+ANUSPLIN300_FGOALS-g3_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:27:18
## day_BCCAQv2+ANUSPLIN300_EC-Earth3-Veg_historical+ssp245_r1i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_EC-Earth3-Veg_historical+ssp245_r1i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:27:27
## ...Finished... day_BCCAQv2+ANUSPLIN300_EC-Earth3-Veg_historical+ssp245_r1i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:27:27
## day_BCCAQv2+ANUSPLIN300_CanESM5_historical+ssp245_r1i1p2f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CanESM5_historical+ssp245_r1i1p2f1_gn_1950-2100.ncml tasmin Current Time = 12:27:35
## ...Finished... day_BCCAQv2+ANUSPLIN300_CanESM5_historical+ssp245_r1i1p2f1_gn_1950-2100.ncml tasmin Current Time = 12:27:35
## day_BCCAQv2+ANUSPLIN300_CNRM-ESM2-1_historical+ssp245_r1i1p1f2_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CNRM-ESM2-1_historical+ssp245_r1i1p1f2_gr_1950-2100.ncml tasmin Current Time = 12:27:44
## ...Finished... day_BCCAQv2+ANUSPLIN300_CNRM-ESM2-1_historical+ssp245_r1i1p1f2_gr_1950-2100.ncml tasmin Current Time = 12:27:44
## day_BCCAQv2+ANUSPLIN300_CNRM-CM6-1_historical+ssp245_r1i1p1f2_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CNRM-CM6-1_historical+ssp245_r1i1p1f2_gr_1950-2100.ncml tasmin Current Time = 12:27:52
## ...Finished... day_BCCAQv2+ANUSPLIN300_CNRM-CM6-1_historical+ssp245_r1i1p1f2_gr_1950-2100.ncml tasmin Current Time = 12:27:52
## day_BCCAQv2+ANUSPLIN300_CMCC-ESM2_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CMCC-ESM2_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:28:00
## ...Finished... day_BCCAQv2+ANUSPLIN300_CMCC-ESM2_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:28:00
## day_BCCAQv2+ANUSPLIN300_BCC-CSM2-MR_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_BCC-CSM2-MR_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:28:10
## ...Finished... day_BCCAQv2+ANUSPLIN300_BCC-CSM2-MR_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:28:10
## day_BCCAQv2+ANUSPLIN300_ACCESS-ESM1-5_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_ACCESS-ESM1-5_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:28:18
## ...Finished... day_BCCAQv2+ANUSPLIN300_ACCESS-ESM1-5_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:28:18
## day_BCCAQv2+ANUSPLIN300_ACCESS-CM2_historical+ssp245_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_ACCESS-CM2_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:28:26
## ...Finished... day_BCCAQv2+ANUSPLIN300_ACCESS-CM2_historical+ssp245_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:28:26
## day_BCCAQv2+ANUSPLIN300_KACE-1-0-G_historical+ssp245_r2i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_KACE-1-0-G_historical+ssp245_r2i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:28:34
## ...Finished... day_BCCAQv2+ANUSPLIN300_KACE-1-0-G_historical+ssp245_r2i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:28:34
## day_BCCAQv2+ANUSPLIN300_EC-Earth3_historical+ssp245_r4i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_EC-Earth3_historical+ssp245_r4i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:28:43
## ...Finished... day_BCCAQv2+ANUSPLIN300_EC-Earth3_historical+ssp245_r4i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:28:43
## day_BCCAQv2+ANUSPLIN300_UKESM1-0-LL_historical+ssp585_r1i1p1f2_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_UKESM1-0-LL_historical+ssp585_r1i1p1f2_gn_1950-2100.ncml tasmin Current Time = 12:28:50
## ...Finished... day_BCCAQv2+ANUSPLIN300_UKESM1-0-LL_historical+ssp585_r1i1p1f2_gn_1950-2100.ncml tasmin Current Time = 12:28:50
## day_BCCAQv2+ANUSPLIN300_TaiESM1_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_TaiESM1_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:29:00
## ...Finished... day_BCCAQv2+ANUSPLIN300_TaiESM1_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:29:00
## day_BCCAQv2+ANUSPLIN300_NorESM2-MM_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_NorESM2-MM_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:29:09
## ...Finished... day_BCCAQv2+ANUSPLIN300_NorESM2-MM_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:29:09
## day_BCCAQv2+ANUSPLIN300_NorESM2-LM_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_NorESM2-LM_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:29:20
## ...Finished... day_BCCAQv2+ANUSPLIN300_NorESM2-LM_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:29:20
## day_BCCAQv2+ANUSPLIN300_MRI-ESM2-0_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MRI-ESM2-0_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:29:29
## ...Finished... day_BCCAQv2+ANUSPLIN300_MRI-ESM2-0_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:29:29
## day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-LR_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-LR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:29:37
## ...Finished... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-LR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:29:37
## day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-HR_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-HR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:29:45
## ...Finished... day_BCCAQv2+ANUSPLIN300_MPI-ESM1-2-HR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:29:45
## day_BCCAQv2+ANUSPLIN300_MIROC6_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MIROC6_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:29:52
## ...Finished... day_BCCAQv2+ANUSPLIN300_MIROC6_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:29:52
## day_BCCAQv2+ANUSPLIN300_MIROC-ES2L_historical+ssp585_r1i1p1f2_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_MIROC-ES2L_historical+ssp585_r1i1p1f2_gn_1950-2100.ncml tasmin Current Time = 12:30:00
## ...Finished... day_BCCAQv2+ANUSPLIN300_MIROC-ES2L_historical+ssp585_r1i1p1f2_gn_1950-2100.ncml tasmin Current Time = 12:30:00
## day_BCCAQv2+ANUSPLIN300_KIOST-ESM_historical+ssp585_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_KIOST-ESM_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:30:10
## ...Finished... day_BCCAQv2+ANUSPLIN300_KIOST-ESM_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:30:10
## day_BCCAQv2+ANUSPLIN300_IPSL-CM6A-LR_historical+ssp585_r1i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_IPSL-CM6A-LR_historical+ssp585_r1i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:30:19
## ...Finished... day_BCCAQv2+ANUSPLIN300_IPSL-CM6A-LR_historical+ssp585_r1i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:30:19
## day_BCCAQv2+ANUSPLIN300_INM-CM5-0_historical+ssp585_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_INM-CM5-0_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:30:27
## ...Finished... day_BCCAQv2+ANUSPLIN300_INM-CM5-0_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:30:27
## day_BCCAQv2+ANUSPLIN300_INM-CM4-8_historical+ssp585_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_INM-CM4-8_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:30:36
## ...Finished... day_BCCAQv2+ANUSPLIN300_INM-CM4-8_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:30:36
## day_BCCAQv2+ANUSPLIN300_HadGEM3-GC31-LL_historical+ssp585_r1i1p1f3_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_HadGEM3-GC31-LL_historical+ssp585_r1i1p1f3_gn_1950-2100.ncml tasmin Current Time = 12:30:45
## ...Finished... day_BCCAQv2+ANUSPLIN300_HadGEM3-GC31-LL_historical+ssp585_r1i1p1f3_gn_1950-2100.ncml tasmin Current Time = 12:30:45
## day_BCCAQv2+ANUSPLIN300_GFDL-ESM4_historical+ssp585_r1i1p1f1_gr1_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_GFDL-ESM4_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:30:54
## ...Finished... day_BCCAQv2+ANUSPLIN300_GFDL-ESM4_historical+ssp585_r1i1p1f1_gr1_1950-2100.ncml tasmin Current Time = 12:30:54
## day_BCCAQv2+ANUSPLIN300_FGOALS-g3_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_FGOALS-g3_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:31:02
## ...Finished... day_BCCAQv2+ANUSPLIN300_FGOALS-g3_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:31:02
## day_BCCAQv2+ANUSPLIN300_EC-Earth3-Veg_historical+ssp585_r1i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_EC-Earth3-Veg_historical+ssp585_r1i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:31:11
## ...Finished... day_BCCAQv2+ANUSPLIN300_EC-Earth3-Veg_historical+ssp585_r1i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:31:11
## day_BCCAQv2+ANUSPLIN300_CanESM5_historical+ssp585_r1i1p2f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CanESM5_historical+ssp585_r1i1p2f1_gn_1950-2100.ncml tasmin Current Time = 12:31:19
## ...Finished... day_BCCAQv2+ANUSPLIN300_CanESM5_historical+ssp585_r1i1p2f1_gn_1950-2100.ncml tasmin Current Time = 12:31:19
## day_BCCAQv2+ANUSPLIN300_CNRM-ESM2-1_historical+ssp585_r1i1p1f2_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CNRM-ESM2-1_historical+ssp585_r1i1p1f2_gr_1950-2100.ncml tasmin Current Time = 12:31:28
## ...Finished... day_BCCAQv2+ANUSPLIN300_CNRM-ESM2-1_historical+ssp585_r1i1p1f2_gr_1950-2100.ncml tasmin Current Time = 12:31:28
## day_BCCAQv2+ANUSPLIN300_CNRM-CM6-1_historical+ssp585_r1i1p1f2_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CNRM-CM6-1_historical+ssp585_r1i1p1f2_gr_1950-2100.ncml tasmin Current Time = 12:31:36
## ...Finished... day_BCCAQv2+ANUSPLIN300_CNRM-CM6-1_historical+ssp585_r1i1p1f2_gr_1950-2100.ncml tasmin Current Time = 12:31:36
## day_BCCAQv2+ANUSPLIN300_CMCC-ESM2_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_CMCC-ESM2_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:31:46
## ...Finished... day_BCCAQv2+ANUSPLIN300_CMCC-ESM2_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:31:46
## day_BCCAQv2+ANUSPLIN300_BCC-CSM2-MR_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_BCC-CSM2-MR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:31:56
## ...Finished... day_BCCAQv2+ANUSPLIN300_BCC-CSM2-MR_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:31:56
## day_BCCAQv2+ANUSPLIN300_ACCESS-ESM1-5_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_ACCESS-ESM1-5_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:32:06
## ...Finished... day_BCCAQv2+ANUSPLIN300_ACCESS-ESM1-5_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:32:06
## day_BCCAQv2+ANUSPLIN300_ACCESS-CM2_historical+ssp585_r1i1p1f1_gn_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_ACCESS-CM2_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:32:15
## ...Finished... day_BCCAQv2+ANUSPLIN300_ACCESS-CM2_historical+ssp585_r1i1p1f1_gn_1950-2100.ncml tasmin Current Time = 12:32:15
## day_BCCAQv2+ANUSPLIN300_KACE-1-0-G_historical+ssp585_r2i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_KACE-1-0-G_historical+ssp585_r2i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:32:22
## ...Finished... day_BCCAQv2+ANUSPLIN300_KACE-1-0-G_historical+ssp585_r2i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:32:22
## day_BCCAQv2+ANUSPLIN300_EC-Earth3_historical+ssp585_r4i1p1f1_gr_1950-2100
## ...Downloading... day_BCCAQv2+ANUSPLIN300_EC-Earth3_historical+ssp585_r4i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:32:30
## ...Finished... day_BCCAQv2+ANUSPLIN300_EC-Earth3_historical+ssp585_r4i1p1f1_gr_1950-2100.ncml tasmin Current Time = 12:32:30

Notice that each time we go through the loop, we define a URL that specifies the file name we want to download. This code downloads the data into your working directory.

11.1.2.2 Obtaining PCIC data programmatically

The PCIC data portal can also be accessed programmatically via Python or your preferred programming language. If you performed any manual downloading, above, you may have noticed that the data portal webpage returns some interesting data set URLs. We can use the same specific URL syntax to automate our downloading. We can do this in Python using the code, below.

As always, we first import the necessary libraries.

Python

import datetime as dt
import json
import numpy as np
import os
import re
import requests
from netCDF4 import Dataset, date2index, num2date, date2num
from tqdm import tqdm

Here we will use a similar download function as the one that we used in Lab 2 (Sec. 6) so that we can keep track of the files as they download.

Python

# Adapted from: https://stackoverflow.com/a/37573701
def download(url, filename):
    print("Downloading ", filename)
    r = requests.get(url, stream=True)
    total_size, block_size = int(r.headers.get('content-length', 0)), 1024
    with open(filename, 'wb') as f:
        for data in tqdm(r.iter_content(block_size),
                         total=total_size//block_size,
                         unit='KiB', unit_scale=True):
            f.write(data)
    if total_size != 0 and os.path.getsize(filename) != total_size:
        print("Downloaded size does not match expected size!\n",
              "FYI, the status code was ", r.status_code)

PCIC maintains a JSON-formatted catalogue of file IDs and URLs, which we can retrieve in Python directly.

Python

with requests.get("http://tools.pacificclimate.org/dataportal/downscaled_gcms/catalog/catalog.json") as r:
    data = json.loads(r.content)

We cannot access the data entries with an integer index, but rather need to access the data using the keys. We can print the fill list of keys in the data object using data.keys(). This is a very long list, so I will omit it here. Let’s say that we are interested in accessing the data set with the key tasmax_day_BCCAQv2_CanESM2_historical-rcp26_r1i1p1_19500101-21001231_Canada. We can find the URL for this like this:

Python

url = data['tasmax_day_BCCAQv2_CanESM2_historical-rcp26_r1i1p1_19500101-21001231_Canada']
url
## 'https://data.pacificclimate.org/data/downscaled_gcms/tasmax_day_BCCAQv2+ANUSPLIN300_CanESM2_historical+rcp26_r1i1p1_19500101-21001231.nc'

Since this is a netCDF file, we can access its dimensions directly, just like we have done for files stored on the disk.

Python

nc = Dataset(url)
nc_time = nc.variables['time']
nc_lat = nc.variables['lat'][:].data
nc_lon = nc.variables['lon'][:].data

Now we can find the relevant indices. Here I am using d to represent day, x to represent longitude, and y to represent latitude.

While we are only really looking for a single point in our exercises, the code in this chapter requests a box of zero length and zero width. If, in the future, you plan to perform a regional study on a larger spatial scale just set your xmin (left), xmax (right), ymin (bottom) and ymax (top) to capture all of the cells that you are interested in.

Python

target = {"ymin": 43.67, "xmin": -79.40, "ymax": 43.67, "xmax": -79.40}
# FIXME: As of the time of writing, using non-zero dmin indices causes issues
#dmin = date2index(dt.datetime(1981, 1, 1, 12, 0, 0), nc_time, select="nearest")
dmin = 0
dmax = len(nc_time)
ymin = np.argmin(np.abs(nc_lat - target['ymin']))
xmin = np.argmin(np.abs(nc_lon - target['xmin']))
ymax = np.argmin(np.abs(nc_lat - target['ymax']))
xmax = np.argmin(np.abs(nc_lon - target['xmax']))

print("Our start date is", num2date(nc_time[dmin], nc_time.units, nc_time.calendar),
      "\nWe need data starting at time T={} (of {}), with Y from {} to {} and X from {} to {}".format(dmin, dmax, ymin, ymax, xmin, xmax))
## Our start date is 1950-01-01 12:00:00 
## We need data starting at time T=0 (of 55115), with Y from 32 to 32 and X from 739 to 739
nc.close()

Now that we know the specific dimensions that we need to download, we can find the keys for the full set of models that we desire, for both RCP4.5 and RCP8.5. We will use a special search pattern called a regular expression for this.

Python

models = ["CanESM2", "CCSM4", "CSIRO-Mk3-6-0", "GFDL-ESM2G", "IPSL-CM5A-MR", "MIROC5"]

Here we are collapsing our list of models using ‘|’, which operates in our regular expression to mean “OR”. The same goes for our variables and scenarios “tasm(in|ax)” will match both variables, and “rcp(4|8)5” will match both “rcp45” and “rcp85”.

Python

pattern = r'tasm(in|ax).*BCCAQv2.*(' + '|'.join(models) + r').*-rcp(4|8)5_r1i1p1_.*'
pattern
## 'tasm(in|ax).*BCCAQv2.*(CanESM2|CCSM4|CSIRO-Mk3-6-0|GFDL-ESM2G|IPSL-CM5A-MR|MIROC5).*-rcp(4|8)5_r1i1p1_.*'

Now we can pull out our desired keys

Python

keys = [i for i in data.keys() if re.match(pattern, i)]
"\n".join(keys)
## 'tasmin_day_BCCAQv2_CSIRO-Mk3-6-0_historical-rcp45_r1i1p1_19500101-21001231_Canada\ntasmin_day_BCCAQv2_MIROC5_historical-rcp85_r1i1p1_19500101-21001231_Canada\ntasmax_day_BCCAQv2_GFDL-ESM2G_historical-rcp85_r1i1p1_19500101-21001231_Canada\ntasmax_day_BCCAQv2_MIROC5_historical-rcp45_r1i1p1_19500101-21001231_Canada\ntasmin_day_BCCAQv2_CCSM4_historical-rcp45_r1i1p1_19500101-21001231_Canada\ntasmax_day_BCCAQv2_IPSL-CM5A-MR_historical-rcp45_r1i1p1_19500101-21001231_Canada\ntasmin_day_BCCAQv2_CanESM2_historical-rcp85_r1i1p1_19500101-21001231_Canada\ntasmin_day_BCCAQv2_IPSL-CM5A-MR_historical-rcp85_r1i1p1_19500101-21001231_Canada\ntasmax_day_BCCAQv2_MIROC5_historical-rcp85_r1i1p1_19500101-21001231_Canada\ntasmin_day_BCCAQv2_IPSL-CM5A-MR_historical-rcp45_r1i1p1_19500101-21001231_Canada\ntasmin_day_BCCAQv2_MIROC5_historical-rcp45_r1i1p1_19500101-21001231_Canada\ntasmin_day_BCCAQv2_GFDL-ESM2G_historical-rcp85_r1i1p1_19500101-21001231_Canada\ntasmax_day_BCCAQv2_CSIRO-Mk3-6-0_historical-rcp85_r1i1p1_19500101-21001231_Canada\ntasmax_day_BCCAQv2_CCSM4_historical-rcp85_r1i1p1_19500101-21001231_Canada\ntasmin_day_BCCAQv2_GFDL-ESM2G_historical-rcp45_r1i1p1_19500101-21001231_Canada\ntasmax_day_BCCAQv2_GFDL-ESM2G_historical-rcp45_r1i1p1_19500101-21001231_Canada\ntasmin_day_BCCAQv2_CCSM4_historical-rcp85_r1i1p1_19500101-21001231_Canada\ntasmax_day_BCCAQv2_CanESM2_historical-rcp85_r1i1p1_19500101-21001231_Canada\ntasmax_day_BCCAQv2_CSIRO-Mk3-6-0_historical-rcp45_r1i1p1_19500101-21001231_Canada\ntasmax_day_BCCAQv2_CanESM2_historical-rcp45_r1i1p1_19500101-21001231_Canada\ntasmax_day_BCCAQv2_IPSL-CM5A-MR_historical-rcp85_r1i1p1_19500101-21001231_Canada\ntasmax_day_BCCAQv2_CCSM4_historical-rcp45_r1i1p1_19500101-21001231_Canada\ntasmin_day_BCCAQv2_CSIRO-Mk3-6-0_historical-rcp85_r1i1p1_19500101-21001231_Canada\ntasmin_day_BCCAQv2_CanESM2_historical-rcp45_r1i1p1_19500101-21001231_Canada'

You might expect that you can access the data in the PCIC netCDF files directly, just like we have done for the dimensions. This is usually true of netCDF files but at the time of writing, trying to access the files directly was giving unexpected results. However, we can download the required files to disk and access them locally using the download() function that we defined earlier. Before we download the files, however, we need to know the URL and filename of each file.

Python

urls = [data[key] for key in keys]
filenames = [os.path.basename(url) for url in urls]

# FIXME, when the dmin error is fixed, you might want to change the date in the filename
#filenames = [re.sub('19500101', '19810101', i) for i in filenames]

The data portal documentation explains that we need to format our request URL with a valid OPeNDAP specification. In our case, the URL will look like this:

https://data.pacificclimate.org/data/downscaled_gcms/data/<datasetid>.nc?<variable>[<dmin:dmax>][<xmin:xmax>][<ymin:ymax>]

We need to fill in the dataset_id with the URL from the catalogue that we downloaded earlier. We will complete the DAP specification with either “tasmax” or “tasmin” and [<dmin:dmax>][<xmin:xmax>][<ymin:ymax>]. You may notice that the requested URL has the .nc extension twice. This is because we are asking the server to access the netCDF file and to return the result as a netCDF file. Other options include .csv and ASCII gridded data, but these are metadata-poor formats and are not recommended.

Python

url_suffix = "[{}:{}][{}:{}][{}:{}]".format(dmin, dmax, ymin, ymax, xmin, xmax)
urls = [url + ".nc?" + re.search(r'tasm(in|ax)', url)[0] + url_suffix for url in urls]

You may wish to confirm that your filenames and URLs match, e.g.

Python

filenames[0]
## 'tasmin_day_BCCAQv2+ANUSPLIN300_CSIRO-Mk3-6-0_historical+rcp45_r1i1p1_19500101-21001231.nc'

Python

urls[0]
## 'https://data.pacificclimate.org/data/downscaled_gcms/tasmin_day_BCCAQv2+ANUSPLIN300_CSIRO-Mk3-6-0_historical+rcp45_r1i1p1_19500101-21001231.nc.nc?tasmin[0:55115][32:32][739:739]'

Now you can proceed to download these files by looping over the filenames and urls objects. Note that, at the time of writing, the download speeds were very slow (< 500 bits/second or about 0.0625 kb/s). In addition, it seems that subsetting in the time dimension causes downloads to fail after about 3kb are downloaded, so you may in fact need to download the entire time series. Given these current issues, you may prefer to download the data from this book’s files.

Python

for i in range(len(urls)):
    download(urls[i], filenames[i])

11.2 Ready to analyze downscaled PCIC data

Now that you have the data, we can proceed to analyze it. In Lab 5 (Sec. 12), we will compare the downscaled GCM data to our observed data and re-assess our climate index based on these new data.

References

Cannon, Alex J., Stephen R. Sobie, and Trevor Q. Murdock. 2015. “Bias Correction of GCM Precipitation by Quantile Mapping: How Well Do Methods Preserve Changes in Quantiles and Extremes?” Journal of Climate 28 (17): 6938–59. https://doi.org/10.1175/JCLI-D-14-00754.1.
Pacific Climate Impacts Consortium, University of Victoria. 2019. “Statistically Downscaled Climate Scenarios,” February. https://data.pacificclimate.org/portal/downscaled_gcms/map/.