...
Info |
---|
The best approach is to iterate over the hindcastYears. For each hindcastYear iterate over all the available hindcastMonths and for each hindcastMonth iterate over all the available hindcastDays. At this point you may wish to check ECMWF availability and to view a an ECMWF request |
Info |
---|
for hindcastYear in hindcastYears |
...
Info |
---|
Please note:
|
Code Block | ||
---|---|---|
| ||
#!/usr/bin/env python from ecmwfapi import ECMWFDataServer server = ECMWFDataServer() origin = "ecmf" modelVersionDate = "20142015-0112-0103" def retrieve_ECMWF_reforecast(): """ A function to demonstrate how to iterate efficiently over all hindcastYears, hindcastMonths etc for a particular ECMWF_reforecast_request. Change the variables below to adapt the iteration to your needs """ hindcastYearStart = 1981 hindcastYearEnd = 2013 hindcastMonthStart = 1 hindcastMonthEnd = 12 # ECMWECMWF Favailabilityavailability is every 5 days: 1, 6, 11, 16, 21, 26 hindcastDays = [1, 6, 11, 16, 21, 26]"1995-12-03/1996-12-03/1997-12-03/1998-12-03/1999-12-03/2000-12-03/2001-12-03/2002-12-03/2003-12-03/2004-12-03/2005-12-03/2006-12-03/2007-12-03/2008-12-03/2009-12-03/2010-12-03/2011-12-03/2012-12-03/2013-12-03/2014-12-03" #Step 1: Iterate over all the available hindcastYear(s) for hindcastYear in list(range(hindcastYearStart, hindcastYearEnd + 1)): #Step 2: Iterate over all the available hindcastMonths(s) for hindcastMonth in list(range(hindcastMonthStart, hindcastMonthEnd + 1)): hindcastDates = [] #Step 3: Create the list of the available hindcastDates for hindcastDay in hindcastDays: hindcastDate = '%04d%02d%02d' % ( hindcastYear, hindcastMonth, hindcastDay) hindcastDates.append(hindcastDate) #Please note: the steps 4 and 5 below could run in parallel #Step 4: Get all the available perturbed forecast, pressure level data pfplTarget = "%s_%s_%04d%02d.grb" % ( origin, "pfpl", hindcastYear, hindcastMonth) ECMWF_reforecast_pf_pl_request("/".join(hindcastDates), pfplTarget) #Step 5: Get all the available perturbed forecast, surface data pfsfcTarget = "%s_%s_%04d%02d.grb" % ( origin, "pfsfc", hindcastYear, hindcastMonth) ECMWF_reforecast_pf_sfc_request("/".join(hindcastDates), pfsfcTarget) def ECMWF_reforecast_pf_pl_request(hindcastDate, target): """ A ECMWFreforecast, perturbed forecast, pressure level, request. The cost of this request is 571,392 fields and 11.1352 Gbytes Change the keywords below to adapt it to your needs. """ server.retrieve({ "class": "s2", "dataset": "s2s", "date": modelVersionDate, "expver": "prod", "hdate": hindcastDate, "levtype": "pl", "levelist": "10/50/100/200/300/500/700/850/925/1000", "origin": origin, "param": "130/131/132/133/135/156", "step": "24/to/1488/by/24", "stream": "enfh", "target": target, "time": "00", "number": "1/to/32", "type": "pf", }) def ECMWF_reforecast_pf_sfc_request(hindcastDate, target): """ A ECMWFreforecast, perturbed forecast, sfc request. The cost of this request is 383,040 fields and 7.1 GB Change the keywords below to adapt it to your needs. """ server.retrieve({ "class": "s2", "dataset": "s2s", "date": modelVersionDate, "expver": "prod", "hdate": hindcastDate, "levtype": "sfc", "origin": origin, "param": "31/34/121/122/136/146/147/151/167/168/169/175/176/177/179/180/181/235/228086/228095/228096/228141/228143/228144/228164/228228", "step": "24/to/1488/by/24", "stream": "enfh", "target": target, "time": "00", "number": "1/to/32", "type": "pf", }) if __name__ == '__main__': retrieve_ECMWF_reforecast() |
...