Table of Contents |
---|
Identify the data you want to retrieve
- ML, 3 parameters
- Time: 00 and 12
- Dates: 1 to 30 April 2017
- first 90 steps, every hour (0/to/90/by/1)
- 10 levels closest to the surface (127/to/137)
- Area: Europe
- Output grid: regular lat/lon 0.5/0.5
Use MARS "list" verb to find out the size of your request
You can use the MARS catalogue and the "View MARS request" to get a MARS request and modify the keywords with the information that you need. Once you have the request prepared, you should replace RETRIEVE by LIST and add the OUTPUT = COST keyword. Any post-processing keyword will be ignored by the LIST verb.
...
Warning |
---|
This request is too large: 180,000 fields, 8 tapes. |
Use the MARS catalogue to find out how the data are distributed in files and tapes
Using the MARS catalogue, browse to the data you want to retrieve until you reach the final stage which gives a selection and several options: http://apps.ecmwf.int/mars-catalogue/?class=od&stream=oper&expver=1&type=fc&year=2017&month=apr&levtype=ml&date=2017-04-01&time=00:00:00
...
Tip |
---|
The size of the file that will be transferred to the system can be established by downloading a single field using the Post-processing keywords (usually GRID and AREA). Then multiply the size of the file obtained containing this single field by the total number of fields that you want to retrieve in a single request. In this case, number_of_fields=3003. |
Now that we know the size of the data that we want to retrieve in one go from the same block, we can study the best way to iterate to get the data you need.
Split the request in sensible chunks iterating through the correct keywords
The browser can now be used to find out how the data are distributed in the MARS tree. If you have a look to on the "Current selection" section for this specific example shows:
...
This is an example BASH script to loop retrieving data for one date and time at a time for a full month.
Bash script example
Code Block | ||
---|---|---|
| ||
#!/bin/bash # this example will filter the area of Europe (N/W/S/E) and interpolate the final fields to # a 0.5x0.5 regular lat-lon grid (GRID=0.5/0.5) AREA="73.5/-27/33/45" GRID="0.5/0.5" # fixed selection from the same block PARAMS="130/131/132" LEVELIST="127/128/129/130/131/132/133/134/135/136/137" STEP="0/to/90/by/1" TIMES="0000 1200" YEAR="2017" MONTH="04" #date loop for y in ${YEAR}; do for m in ${MONTH}; do #get the number of days for this particular month/year days_per_month=$(cal ${m} ${y} | awk 'NF {DAYS = $NF}; END {print DAYS}') for my_date in $(seq -w 1 ${days_per_month}); do my_date=${YEAR}${m}${my_date} #time lop for my_time in ${TIMES}; do cat << EOF > my_request_${my_date}_${my_time}.mars RETRIEVE, CLASS = OD, TYPE = FC, STREAM = OPER, EXPVER = 0001, LEVTYPE = ML, GRID = ${GRID}, AREA = ${AREA}, LEVELIST = ${LEVELIST}, PARAM = ${PARAMS}, DATE = ${my_date}, TIME = ${my_time}, STEP = ${STEP}, TARGET = "oper_ml_${my_date}_${my_time}.grib" EOF mars my_request_${my_date}_${my_time}.mars if [ $? -eq 0 ]; then rm -f my_request_${my_date}_${my_time}.mars fi done done done done |
Note |
---|
You can use the multi-target feature in the TARGET keyword if you are using the full MARS client (from within ECMWF computing facilities). You can also use ecCodes to post-process the TARGET file afterwards. |
...