Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagepy
collapsetrue
## === 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

Code Block
languagepy
collapsetrue
## === 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')


GloFAS Seasonal forecast

Code Block
languagepy
collapsetrue
## === retrieve GloFAS Seasonal Forecast ===
 
## === subset South America/Amazon region ===
 
import cdsapi
 
 
if __name__ == '__main__':
    c = cdsapi.Client()
 
    YEARS  = ['%d'%(y) for y in range(2020,2022)]
 
 
    MONTHS = ['%02d'%(m) for m in range(1,13)]
 
    LEADTIMES = ['%d'%(l) for l in range(24,2976,24)]
     
    for year in YEARS:
 
        for month in MONTHS:
             
            c.retrieve(
                'cems-glofas-seasonal',
                {  
                'variable': 'river_discharge_in_the_last_24_hours',
                'format': 'grib',
                'year': year,
                'month': '12' if year == '2020' else month,
                'leadtime_hour': LEADTIMES,
                'area': [ 10.95, -90.95, -30.95, -29.95 ]
 
                },
                f'glofas_seasonal_{year}_{month}.grib')

...