...
EFAS Medium-range climatology
Code Block | ||||
---|---|---|---|---|
| ||||
## === retrieve EFAS Medium-Range Climatology === import cdsapi if __name__ == '__main__': c = cdsapi.Client() VARIABLES = [ 'river_discharge_in_the_last_6_hours', 'snow_depth_water_equivalent', ] YEARS = ['%02d'%(mn) for mn in range(1991,2022)] MONTHS = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'] DAYS = ['%02d'%(mn) for mn in range(1,32)] for variable in VARIABLES: for year in YEARS: c.retrieve( 'efas-historical', { 'system_version': 'version_4_0', 'variable': variable, 'model_levels': 'surface_level', 'hyear': '1991', 'hmonth': MONTHS, 'hday': DAYS, 'time': '00:00', 'format': 'grib', }, f'efas_historical_{variable}_{year}.grib') |
...
EFAS Medium-range forecast
Code Block | ||||
---|---|---|---|---|
| ||||
## === retrieve EFAS Medium-Range Forecast === import cdsapi import datetime def compute_dates_range(start_date,end_date,loop_days=True): start_date = datetime.date(*[int(x) for x in start_date.split('-')]) end_date = datetime.date(*[int(x) for x in end_date.split('-')]) ndays = (end_date - start_date).days + 1 dates = [] for d in range(ndays): dates.append(start_date + datetime.timedelta(d)) if not loop_days: dates = [i for i in dates if i.day == 1] else: pass return dates if __name__ == '__main__': # start the client c = cdsapi.Client() # user inputs START_DATE = '2020-10-14' # first date with available data END_DATE = '2021-02-28' LEADTIMES = [str(lt) for lt in range(0,372,6)] # loop over dates and save to disk dates = compute_dates_range(START_DATE,END_DATE) for date in dates: year = date.strftime('%Y') month = date.strftime('%m') day = date.strftime('%d') print(f"RETRIEVING: {year}-{month}-{day}") c.retrieve('efas-forecast', { 'format': 'grib', 'originating_centre':'ecmwf', 'product_type':'ensemble_perturbed_forecasts', 'variable': 'river_discharge_in_the_last_6_hours', 'model_levels': 'surface_level', 'year': year, 'month': month, 'day': day, 'leadtime_hour':LEADTIMES, 'time': '12:00', }, f'efas_forecast_{year}_{month}_{day}.grib') |
GloFAS Medium-range climatology
Code Block | ||||
---|---|---|---|---|
| ||||
## === retrieve GloFAS Medium-Range Climatology === import cdsapi if __name__ == '__main__': c = cdsapi.Client() YEARS = ['%02d'%(mn) for mn in range(1979,2021)] MONTHS = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'] DAYS = ['%02d'%(mn) for mn in range(1,32)] for year in YEARS: c.retrieve( 'cems-glofas-historical', { 'system_version':'version_2_1', 'product_type': 'consolidated', 'hydrological_model': 'htessel_lisflood', 'variable': 'river_discharge_in_the_last_24_hours', 'hyear': year,, 'hmonth': MONTHS, 'hday': DAYS,, 'format': 'grib', }, f'glofas_historical_{year}.grib') |
...
GloFAS Medium-range forecast
Code Block | ||||
---|---|---|---|---|
| ||||
## === retrieve GloFAS Medium-Range Forecast === import cdsapi import datetime import warnings def compute_dates_range(start_date,end_date,loop_days=True): start_date = datetime.date(*[int(x) for x in start_date.split('-')]) end_date = datetime.date(*[int(x) for x in end_date.split('-')]) ndays = (end_date - start_date).days + 1 dates = [] for d in range(ndays): dates.append(start_date + datetime.timedelta(d)) if not loop_days: dates = [i for i in dates if i.day == 1] else: pass return dates if __name__ == '__main__': # start the client c = cdsapi.Client() # user inputs START_DATE = '2019-11-05' # first date with available data END_DATE = '2021-03-15' LEADTIMES = [str(lt) for lt in range(24,744,24)] # loop over dates and save to disk dates = compute_dates_range(START_DATE,END_DATE) for date in dates: year = date.strftime('%Y') month = date.strftime('%m') day = date.strftime('%d') print(f"RETRIEVING: {year}-{month}-{day}") c.retrieve( 'cems-glofas-forecast', { 'format': 'grib', 'system_version':'operational', 'hydrological_model': 'htessel_lisflood', 'product_type':'ensemble_perturbed_forecasts', 'variable': 'river_discharge_in_the_last_24_hours', 'year': year, 'month': month, 'day': day, 'leadtime_hour':LEADTIMES }, f'glofas_forecast_{year}_{month}_{day}.grib') |
...
GloFAS Medium-range reforecast (with example area subset)
Code Block | ||||
---|---|---|---|---|
| ||||
## === retrieve GloFAS Medium-Range Reforecast === ## === subset India, Pakistan, Nepal and Bangladesh region === import cdsapi from datetime import datetime, timedelta def get_monthsdays(): start, end = datetime(2019, 1, 1), datetime(2019, 12, 31) days = [start + timedelta(days=i) for i in range((end - start).days + 1)] monthday = [d.strftime("%B-%d").split("-") for d in days if d.weekday() in [0,3] ] return monthday MONTHSDAYS = get_monthsdays() if __name__ == '__main__': c = cdsapi.Client() # user inputs BBOX = [40.05 ,59.95, 4.95, 95.05] # North West South East YEARS = ['%d'%(y) for y in range(1999,2019)] LEADTIMES = ['%d'%(l) for l in range(24,1128,24)] # submit request for md in MONTHSDAYS: month = md[0].lower() day = md[1] c.retrieve( 'cems-glofas-reforecast', { 'system_version': 'version_2_2', 'variable': 'river_discharge_in_the_last_24_hours', 'format': 'grib', 'hydrological_model': 'htessel_lisflood', 'product_type': 'control_reforecast', 'area': BBOX,# < - subset 'hyear': YEARS, 'hmonth': month , 'hday': day , 'leadtime_hour': LEADTIMES, }, f'glofas_reforecast_{month}_{day}.grib') |
...