пятница, 27 апреля 2018 г.

Загрузка данных реанализов центра ECMWF. ECMWF batch mode


Задача: скачать данные реанализов европейского центра среднесрочных прогнозов (ECMWF)

Реанализы, подготовленные в европейском центре среднесрочных прогнозов, являются одними из самых широко используемых атмосферных реанализов. Такие реанализы как ERA40, ERA15, ERA Interim, ERAClim предоставляют доступ к большому числу параметров о состоянии атмосферы.

Центр ECMWF поддерживает скриптовую (в т.ч. и python) поддержку для загрузки данных реанализов. Ниже приведена инструкция для языка python.




Инструкция

Ссылка на оригинальную инструкцию ECMWF.

Просто так скачать реанализы ECMWF нельзя - нужна регистрация. Это может занять некоторое время (несколько суток). Заполняем форму и ждём, пока на указанный адрес электронной почты вам не пришлют логин и пароль.

Чтобы обеспечить доступ к серверам ECMWF необходимо установить ECMWF API. Он реализован в виде python-модуля + контрольного файла (.ecmwfapirc), в котором содержатся данные вашего аккаунта. Соответственно, нужно выполнить следующие шаги:

 1) Скачать python-модуль с помощью pip (проще всего через консоль):


2) Поместить в папку %USERPROFILE% (обычно, c:/users/ivan/) файл с именем ".ecmwfapirc", который должен иметь следующее содержимое:

{
    "url"   : "https://api.ecmwf.int/v1",
    "key"   : "XXXXXXXXXXXXXXXXXXXXXX",
    "email" : "john.smith@example.com"
}

3) Заменить "key"-строку на актуальный ключ, который можно получить после регистрации на портале ECMWF. Т.е. сначала нужно авторизоваться, а затем заказать ключ.


Всё! Теперь можно писать python-script для загрузки данных. Ниже приведён скрипт для загрузки данных ERA Interim об осадках (код параметра 228.128) за период 1979-2017 с временным разрешением 3ч для области 30-60 в.д. и  50-70 с.ш. Выходной формат - netcdf
 
P.S. Можно использовать графический режим (также требует регистрации и авторизации) для уточнения деталей запроса для загрузки данных с помощью скрипта. После выбора параметров внизу будет кнопка "view Mars Request". После нажатия на эту кнопку откроется окно, где будет представлен сам MARS-запрос и его отображение в виде python-скрипта.
 

#!/usr/bin/env python

import os
import calendar
from ecmwfapi import ECMWFDataServer
server = ECMWFDataServer()

cwd = os.getcwd()

years = range(1979, 2017)
for y in years:
    for m in range(1, 13):
        d = calendar.monthrange(y , m)[1]

        if m < 10:
            m = '0{}'.format(m)
        server.retrieve({
            "class": "ei",
            "dataset": "interim",
            "date": "{0:}-{1:}-01/to/{0:}-{1:}-{2:}".format(y, m, d),
            "expver": "1",
            "grid": "0.75/0.75",
            "levtype": "sfc",
            "param": "228.128",
            "step": "3/6/9/12",
            "stream": "oper",
            "time": "00:00:00/12:00:00",
            "type": "fc",
            "target": "erai_tp_{}_{}.nc".format(y, m),
            'area'   : "50./30./70./60.",
            'format' : 'netcdf'
        })

P.P.S. Ссылка "О time и steps".

UPD. 2018/07/06
Можно скачивать данные в один файл - годовой, например. Ниже приведён код, который скачивает 1460-1464 значений (6ч шаг по времени, 0-6-12-18ч анализа данных) в один файл для данного года сyear

from ecmwfapi import ECMWFDataServer
import numpy as np
server = ECMWFDataServer()

cyear = 2005

server.retrieve({
    "class": "ei",
    "dataset": "interim",
    "date": "{0:}-01-01/to/{0:}-12-31".format(cyear),
    "expver": "1",
    "grid": "0.75/0.75",
    "levtype": "sfc",
    "param": "165.128/166.128",
    "step": "0",
    "stream": "oper",
    "time": "00:00:00/06:00:00/12:00:00/18:00:00",
    "type": "an",
    "target": "eraNATS_an_{}.nc".format(cyear),
    'area'   : "60./19.5/90./90.",
    'format' : 'netcdf'
})

Комментариев нет:

Отправить комментарий

Как перевести UV в направление и скорость ветра? How to convert wind UV-components to direction and velocity?

 Всё просто.  def uv2dir(u, v):     '''     Источник:     https://github.com/blaylockbk/Ute_WRF/blob/master/functions/wind_calc...