Below is an example script of retreiving the FWI dataset from 1940 to Present Day using Consolidated and Intermediate Datasets.
import cdsapi
import os
from datetime import datetime, timedelta
c = cdsapi.Client()
year_start=2023
year_end=2023
date_start=datetime(year_start,1,1)
date_end=datetime(year_end,12,31)
date=date_start
consolidated_end=False
DOWNLOAD_LOCATION=f'{os.getcwd()}/FWI/'
os.makedirs(DOWNLOAD_LOCATION,exist_ok=True)
def retrieve_CDS(year, month, day, dataset_type):
c.retrieve(
'cems-fire-historical-v1',
{
'product_type': 'reanalysis',
'system_version': '4_1',
'dataset_type': f'{dataset_type}_dataset',
'variable': 'fire_weather_index',
'year': year,
'month': month,
'day': day,
'grid': '0.25/0.25',
'format': 'netcdf',
},
f'{DOWNLOAD_LOCATION}/ECMWF_FWI_FWI_{year}{month}{day}_1200_hr_v4.1_{dataset_type[:3]}.nc')
while date <= date_end:
year=date.strftime('%Y')
month=date.strftime('%m')
day=date.strftime('%d')
print(f'Checking {year}-{month}-{day}')
if not os.path.isfile(f'{DOWNLOAD_LOCATION}/ECMWF_FWI_FWI_{year}{month}{day}_1200_hr_v4.1_con.nc'):
if consolidated_end==False:
try:
print(f'Attempting Retrievial of Consolidated {year}-{month}-{day}')
retrieve_CDS(year,month,day,'consolidated')
# Remove intermediate file for the same date to avoid duplication
if os.path.exists(f'{DOWNLOAD_LOCATION}/ECMWF_FWI_FWI_{year}{month}{day}_1200_hr_v4.1_int.nc'):
os.remove(f'{DOWNLOAD_LOCATION}/ECMWF_FWI_FWI_{year}{month}{day}_1200_hr_v4.1_int.nc')
except:
print(f'Failed Retrievial of Consolidated {year}-{month}-{day}, Trying Intermediate')
if not os.path.isfile(f'{DOWNLOAD_LOCATION}/ECMWF_FWI_FWI_{year}{month}{day}_1200_hr_v4.1_int.nc'):
retrieve_CDS(year,month,day,'intermediate')
consolidated_end=True
else:
if not os.path.isfile(f'{DOWNLOAD_LOCATION}/ECMWF_FWI_FWI_{year}{month}{day}_1200_hr_v4.1_int.nc'):
try:
print(f'Attempting Retrievial of Intermediate {year}-{month}-{day}')
retrieve_CDS(year,month,day,'intermediate')
except:
print(f'Failed Retrievial of Intermediate {year}-{month}-{day}')
break
else:
print(f'Intermediate {year}-{month}-{day} exists')
else:
print(f'Consolidated {year}-{month}-{day} exists')
date += timedelta(days=1)
print(f"Last Date retrieved {date.strftime('%Y-%m-%d')}")