...
Code Block | ||
---|---|---|
| ||
#!/usr/bin/env python
from ecmwfapi import ECMWFDataServer
server = ECMWFDataServer()
origin = "ammc"
modelVersionDate = "2014-01-01"
def retrieve_BoM_reforecast():
"""
A function to demonstrate how to iterate efficiently over all hindcastYears, hindcastMonths etc
for a particular BoM_reforecast_request.
Change the variables below to adapt the iteration to your needs
"""
hindcastYearStart = 1981
hindcastYearEnd = 2013
hindcastMonthStart = 1
hindcastMonthEnd = 12
# BoM availability is every 5 days: 1, 6, 11, 16, 21, 26
hindcastDays = [1, 6, 11, 16, 21, 26]
#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)
BoM_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)
BoM_reforecast_pf_sfc_request("/".join(hindcastDates), pfsfcTarget)
def BoM_reforecast_pf_pl_request(hindcastDate, target):
"""
A BoM reforecast, 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 BoM_reforecast_pf_sfc_request(hindcastDate, target):
"""
A BoM reforecast, 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_BoM_reforecast()
|
...