早崎トップ 研究(気候気象) 研究(大気汚染) データリスト Linux Tips Mac Tips

ERA Interim memo

ERA Interim メモ

ERA Interim について.

 ERA Interim の概要

 データ同化

See ERA-Interim web under Climate reanalysis web.

  • 12-hr 4D-Var
  • T255L60 (top = 0.1 hPa)
  • New humidity anal.
  • Improved model physics

 観測データ

  • Altimeter wave heights
  • New ERS altimeter (after August 1991)
  • Winds and clear-sky radiances. Meteosat-2 (1982-1988)
  • Ozone profile. GOME (after 1995)
  • Radio occultation measurements. CHAMP GPS radio occultation measurements (2001 to mid 2006)

データ取得方法

 ECMWF サーバ API key 設定

ECMWF サーバへのアクセス情報は,API key として ~/.ecmwfapirc に保存しておく.

複数のサーバで ECMWF サーバへのバッチアクセスをしたい場合, API key はそれぞれの計算機で用意しておくこと. アクセス要求を出したときの本人認証で使うので,必須.

上記は,多分私の勘違い. 別計算機からアクセスする場合,一度取得した .ecmwfapirc を $HOME 以下にコピーすればアクセス可能. つい最近に新規導入した MacBookPro (El Capitan; 過去に一度もログインしたことがないPC) からのログインで確認 (2016-02-19).

$ cat ~/.ecmwfapirc
{
    "url"   : "https://api.ecmwf.int/v1",
    "key"   : "xxxxxxxxx11111111112222222233333",
    "email" : "your_mail_address@gmail.com"
}

※API key は,各自が取得したもの.
e-mail は,登録したメールアドレス.

※ http ではなく,https に変更されてた(check 2017-06-21)

なお,この API key は ERA Interim だけでなくECMWFが提供する他のプロジェクト研究のデータセットの入手にも使える. ただし,プロジェクトごとに license agreement に同意する必要あり. 入手可能なデータセットは,Public Datasets (ECMWF)に掲載されてる.

私の場合,CAMS Global Fire Assimilation System (GFAS)のデータ取得時にも利用できた(check 2017-06-21). GFAS は NICAM-Chem (NICAM-SPRINTARS) で使う森林火災による排出量データ. See also CTM memo (hysk)

 データ取得の手順 (Perl使用)

Perl を使ったバッチダウンロード. 事前準備として,Perl 用APIモジュールなどのインストールが必要.

See also Navigation > Batch access in the ERA Interim download web (full-resolution version)

See also Access ECMWF Public Datasets (ECMWF Web API 以下)

CentOS 6.x & 7.0 (checked 2014-10-29)ならば下記の手順:

$ sudo yum -y install perl-JSON perl-Crypt-SSLeay
$ sudo yum -y install perl-Date-Calc
(In CentOS 7 environment, you should execute "sudo yum -y install perl-LWP-Protocol-https")
$ wget https://software.ecmwf.int/wiki/download/attachments/23694554/ecmwf-api-client-perl.tgz?version=2&modificationDate=1362841106725&api=v2
(バージョンアップしたらアドレス変わるはず.要注意)
  Check: https://software.ecmwf.int/wiki/display/WEBAPI/Accessing+ECMWF+data+servers+in+batch
$ tar xzf ecmwf-api-client-perl.tgz
$ sudo cp -pr ECMWF /usr/share/perl5/.

 サンプルスクリプト(SLP, 6-hrly)

最近は Python を使うのが主流なのか. Brief request syntax には,Python での例が掲載されてるだけ(checked 2016-02-19).

Access ECMWF Public Datasets でも,"This method is only supported to UNIX platfolms with Python." と明記されている. したがって,以下で例示した方法は「将来性がない(出来なくなっても文句言えない)」と言えそう. これからダウンロードを始める人は,Perl でなく Python を使うことをおすすめする(2016-02-19). なお,本稿記載時点では,例示した下記スクリプトでもダウンロードできている.

1要素のみを取得するサンプルの perl script. SLP (param: 151.128), Jan2014 to Aug2014. 1ヵ月分を 1-file (ファイル名の例: slp_201401.grib) にまとめてダウンロード. 美しくはないが,一応動いてるからよしとする.

#!/usr/bin/perl
use ECMWF::DataServer;
use Date::Calc qw(:all);

$DD = 01;
$s_YYYYMM = 201401;
$e_YYYYMM = 201408;
$YYYYMM = $s_YYYYMM;
while ( $YYYYMM <= $e_YYYYMM) {
  $YYYY = substr($YYYYMM,0,4);
  $MM   = substr($YYYYMM,4,2);
  $month = $MM + 0;
    $dom = Days_in_Month($YYYY,$MM);

$client -> retrieve(
dataset => "interim",
date => "${YYYY}${MM}01/to/${YYYY}${MM}${dom}",
time => "00:00:00/06:00:00/12:00:00/18:00:00",
stream => "oper",
levtype => "sfc",
param => "151.128",
step => "0",
type => "an",
grid => "0.75/0.75",
"area" => "90/0/-90/359.25",
target => "slp_${YYYY}${MM}.grib",
);

  ($YYYY, $month, $DD) = Add_Delta_YMD($YYYY, $month, $DD, 0, 1, 0);
  $MM = sprintf("%02d", $month);
  $YYYYMM = $YYYY . $MM;
}

GRIBパラメータ番号が分からない時には, Parameter database で検索(check 2017-06-21).
変数名(ex. "sea level pressure")と入力すれば,適合するデータが絞り込まれて表示される. "Parameter ID" 部分がそれ. さらに詳しく見るなら,"Name" 部分をクリックすれば詳細表示される. "Mean sea level pressure" の場合,ECMWF では5つ表示された. どれが自分の欲しいものか,このページの情報だけでは特定できないな... 解決できず. pending.

 サンプルスクリプト(pressure-level; u, v, T, Z, q; 6-hrly)

p面の主要要素 (u, v, T, Z, q) を取得するサンプルの perl script. omega (param: 135.128)を入れるのを忘れてた.

#!/usr/bin/env perl
#
# you MUST prepare perl module "ECMWF::DataServer"
#   see https://software.ecmwf.int/wiki/display/WEBAPI/Accessing+ECMWF+data+servers+in+batch
#
# DL = https://software.ecmwf.int/wiki/download/attachments/23694554/ecmwf-api-client-perl.tgz?version=2&modificationDate=1362841106725&api=v2
#
# Directory "ECMWF/" must be copied under = /usr/lib/perl5/site_perl/5.8.8/.
# (See $PERL5LIB)
# 
#       3rd release: 2016-02-19 (NIES, Japan)
#       2nd release: 2013-04-26 (Univ. Tsukuba, Japan)
#       1st release: 2012-01-29 (Univ. Toyama, Japan)
#       M. Hayasaki
use ECMWF::DataServer;
use Date::Calc qw(:all);

my $client = ECMWF::DataServer->new();

### Set local directory
$opath_base = "/mnt/raid01/reanal/ERA_Interim/grib/Daily/anl_p075";

###
# Sample ofile = ${opath_base}/${yyyy}/zuvtq_${lev_4digit}_${YYYY}${MM}.grib"
#   Ex. 850-hPa, Oct2014
#     ${opath_base}/2014/zuvtq_0850_201410.grib

$DD = 01;
#$s_YYYYMM = 197901;
$s_YYYYMM = 201410;
$e_YYYYMM = 201512;

$lev_max = 26;
#$lev_max = 1;    # Used for DEBUG

#                 0    1    2    3    4    5    6    7    8    9
@pres_level = (1000, 975, 950, 925, 900, 875, 850, 825, 800, 775, \
                750, 700, 650, 600, 550, 500, 450, 400, 350, 300, \
                250, 225, 200, 175, 150, 125, 100);


### List of variables
#hgt: 129.128 (checked)
#tmp: 130.128 (checked)
#ugrd: 131.128 (confirmed; 2013-05-06)
#vgrd: 132.128 (checked)
#shum: 133.128
#vvel: 135.128

$YYYYMM = $s_YYYYMM;
while ( $YYYYMM <= $e_YYYYMM) {
  $YYYY = substr($YYYYMM,0,4);
  $MM   = substr($YYYYMM,4,2);
#  printf "YYYY = $YYYY , MM = $MM\n";
  $month = $MM + 0;
    $dom = Days_in_Month($YYYY,$month);

  $opath = "$opath_base/$YYYY";

  $cnt = 0;
  while ( $cnt <= $lev_max ) {
    $level = $pres_level[$cnt];
    $lev_4digit = sprintf("%04d", $level);

    printf "YYYYMM = $YYYYMM ; Pres = $lev_4digit\n";

$client->retrieve(
"dataset" => "interim",
"date" => "${YYYY}${MM}01/to/${YYYY}${MM}${dom}",
"stream" => "oper",
"levtype" => "pl",
"param" => "129.128/130.128/131.128/132.128/133.128",
"step" => "0",
"time" => "00:00:00/06:00:00/12:00:00/18:00:00",
"type" => "an",
"class" => "ei",
"area" => "90/0/-90/359.25",
"grid" => "0.75/0.75",
"target" => "${opath}/zuvtq_${lev_4digit}_${YYYY}${MM}.grib",
"levelist" => "${level}",
);


  $cnt = $cnt + 1; 
  }

  ($YYYY, $month, $DD) = Add_Delta_YMD($YYYY, $month, $DD, 0, 1, 0);
  $MM = sprintf("%02d", $month);
  $YYYYMM = $YYYY . $MM;
}

所要時間の目安を知るためのテスト. 2014年9月の 2-level 分 (1000, 975 hPa)の1ヶ月分, 2ファイル(合計: 約270MB)をダウンロード@職場PC. ダウンロードに要した時間: 約6分. 2015年9月の100-hPa以下の等圧面(残り25-level)の取得に約63分(checked 2016-02-19).

概算では,主要5要素(u, v, T, z, q)の 6-hourly を1ヶ月分 (2014年9月,1ファイルに1つの気圧面データ,133 MiB/file, 3.5 GiB in total) をダウンロードするのに 約70分必要. 平均転送レートは約830 KiB/sec (各ファイルの転送レート: 500 KiB to 2 MiB/sec の範囲で変動).

 データ取得の手順 (Python使用)

Python を使ったバッチダウンロード. 事前準備として,Python 用APIライブラリのインストールが必要.

CentOS 7.3 (checked 2016-02-19)ならば下記の手順:

$ sudo yum -y install python-pip
$ sudo pip install https://software.ecmwf.int/wiki/download/attachments/47287906/ecmwf-api-client-python.tgz
  (See also Access ECMWF Public Datasets)

*tgzより前の数字の羅列は,バージョンごとに異なるようだ(2017-06-21確認). 各自が設定する際には,上記コマンドの copy & paste ではなく, Access ECMWF Public Datasetsにアクセスして確認すること.

CentOS 7.3.1611 では,python のバージョンは2.7.5 (2017-06-21確認). 私の環境では,python v3系列を使わないとダメだった(原因特定できず). なお,python v3.4.5 では /usr/lib/python3.4/site-packages/ 以下にインストールされた.

最初に pip コマンド(Python 関連パッケージの管理コマンド)のインストールが必要. 後は Access ECMWF Public Datasets の記載事項に従う.

鉛直レベル数 vertical levels

 p面 (pressure level)

latlon データのp面はJRA55 のそれと同一. See also JRA55 memo (hysk) > 鉛直レベル数

  • 37 pressure level (1000, 975, 950, ..., 800, 775, 750, 700, ... (50-hPa int.) ..., 250, 225, 200, 175, 150, 125, 100, ..., 10, 7, 5, 3, 2, 1 hPa)
  • 層番号,気圧,高度 (米国標準大気に基づく.海抜高度で1013hPaとする)
Height at standard pressure levels of the ERA Interim.
level No. pressure height
1 1000
2 975
3 950
4 925
5 900
6 875
7 850
8 825
9 800
10 775
11 750
12 700
13 650
14 600
15 550
16 500
17 450
18 400
19 350
20 300
21 250
22 225
23 200
24 175
25 150
26 125
27 100
28 70
29 50
30 30
31 20
32 10
33 7
34 5
35 3
36 2
37 1

  モデル面 (model level data of the ERA Interim)

  • 60-level in total.
  • pressure at "full-level" (mid-point level) = 1012.049 (N=60), 1009.056, 1004.644, 998.385 (N=57), ..., 930.370 (N=52), ..., 857.342 (N=49), ..., 691.752 (N=44), ..., 500.000 (N=39), ..., 257.356 (N=32), ..., 95.978 (N=25), ..., 28.882 (N=19), ..., 9.892 (N=9), ..., 1.151 (N=5), ..., 0.292 (N=2), 0.100 (N=1). (Psfc = 1013.25 hPa)
  • see 60 model level definitions (The page will stop until Apr2015)

 等温位面 (isentropic analysis data of the ERA Interim)

  • JRA55 (21-level in total; 270 to 850 K)とは異なる.レベル数少ない. See also JRA55 メモ (hysk) > 鉛直レベル数 > 等温位面
  • 鉛直レベル: 15-level in total.
    • from 265 to 285 K: 10 K interval (level No. = 1 to 3)
    • from 285 to 330 K: 15 K interval (level No. = 3 to 6)
    • from 330 to 370 K: 20 K interval (level No. = 6 to 8)
    • from 370 to 530 K: 25, 35, 45, 55 K interval (level No. = 8 to 12)
    • above 475 K: 530, 600, 700, 850 K (level No. = 12 to 15)
  • 265, 275, 285, 300, 315 (level=5), 330, 350, 370, 395, 430 (level=10), 475, 530, 600, 700, 850 (total level=15)

エラー,注意点

  • 2002年を境に,SSTデータに大きな空間解像度ギャップあり. 高解像度化の前後で,ERA Interim にみられる短周期擾乱成分の挙動が異なってる. 特に日本の東側海上,黒潮ー親潮続流域にて. See Masunaga et al. (2015, JC)

取得済みデータ(hysk)

 データリスト

個人的に取得したデータのメモ. 何をどこまで取得したのか,記憶しておくのは無理. 理想的にはDBに登録しておくのがベストだが,ひとまず text ベタ打ちで.

(自分ルール) Hysk Data ID は,百の位: 0=Daily (6- and 12-hrly), 1=Monthly mean とする. 十の位以下は,記録した時の気分次第で適当につける.

  • Use 6-hourly, Monthly
  • pressure level: 1000 to 100 hPa, 2-D or sfc:
List of obtained data (hysk). PPPP = 4-digit pressure level (unit: hPa), YYYY = year, YYYYMM = year and month.
Hysk Data ID dataset identifier (hysk)
(p075 or surf075)
temporal int. period main variables last update
ERAI-001 anl_p075
(zuvtq_PPPP_YYYYMM.grib; w_PPPP_YYYYMM.grib)
6-hourly 1979-01-01 to 2015-12-31 u, v, T, z, q, w (omega) 2016-02-19
ERAI-011 fcst_surf075
(sfc_LHSH_YYYYMM.grib)
12-hourly (00, 12 UTC) 1979-01-01 to 2015-12-31 SSHF, SLHF (LH & SH flux from sfc) 2016-02-22
ERAI-012 anl_surf075
(sfc_uvtq_YYYYMM.grib)
6-hourly 1979-01-01 to 2015-12-31 10U, 10V, 2T, 2D 2016-02-24
ERAI-013 fcst_surf075
(sfc_rainfall_YYYYMM.grib)
12-hourly 1979-01-01 to 2015-12-31 LSP, CP, SF, TP, CSF, LSF (rain/snow fall) 2016-02-24
ERAI-014 anl_surf075
(slp_YYYYMM.grib)
6-hourly 1979-01-01 to 2016-05-31 SLP 2016-08-04
ERAI-101 anl_p075
(sfc_anl_YYYY.grib)
monthly 1979-01-01 to 2015-12-31 u, v, T, z, q, w (omega) 2016-02-19
ERAI-112 anl_surf075 monthly 1979-01-01 to 2014-08-31 rainfall (convective, large-scale) 2014-10-31
ERAI-111 anl_surf075
(sfc_anl_YYYY.grib)
monthly 1979-01-01 to 2015-12-31 SP, TCW, TCWV, SD, MSL, TCC, 10U, 10V, 2T, 2D
SR, AL, LCC, MCC, HCC, TCO3, SKT, TSN, CI, ASN, RSN, SSTK
2016-02-24
ERAI-151 fcst_surf075
(sfc_fcst_YYYY.grib)
monthly 1979-01-01 to 2015-12-31 BLH, IEWS, INSS, ISHF, IE, FAL, TCLW, TCIW 2016-02-24
ERAI-161 fcst_surf075
(sfc_LHSH_YYYY.grib)
synoptic monthly (00, 12 UTC) 1979-01-01 to 2015-12-31 SSHF, SLHF (LH & SH flux from sfc) 2016-02-24

 変数略語リスト(sfc_anl, monthly)

See also GRIB parameter table for ERA Interim(NCAR RDA, ds627.0)

sfc_anl (monthly)

  • Parameter code: ShortName=Description [units]
  • 134: SP=Surface pressure [Pa]
  • 136: TCW=Total column water [kg m**-2]
  • 137: TCWV=Total column water vapour [kg m**-2]
  • 141: SD=Snow depth [m of water equivalent]
  • 151: MSL=Mean sea level pressure [Pa]
  • 164: TCC=Total cloud cover [(0 - 1)]
  • 165: 10U=10 metre U wind component [m s**-1]
  • 166: 10V=10 metre V wind component [m s**-1]
  • 167: 2T=2 metre temperature [K]
  • 168: 2D=2 metre dewpoint temperature [K]
  • 173: SR=Surface roughness [m]
  • 174: AL=Albedo [(0 - 1)]
  • 186: LCC=Low cloud cover [(0 - 1)]
  • 187: MCC=Medium cloud cover [(0 - 1)]
  • 188: HCC=High cloud cover [(0 - 1)]
  • 206: TCO3=Total column ozone [kg m**-2]
  • 235: SKT=Skin temperature [K]
  • 238: TSN=Temperature of snow layer [K]
  • 31: CI=Sea-ice cover [(0 - 1)]
  • 32: ASN=Snow albedo [(0 - 1)]
  • 33: RSN=Snow density [kg m**-3]
  • 34: SSTK=Sea surface temperature [K]

 変数略語リスト(sfc_fcst, monthly)

sfc_fcst (monthly)

  • Parameter code: ShortName=Description [units]
  • 159: BLH=Boundary layer height [m]
  • 229: IEWS=Instantaneous X surface stress [N m**-2]
  • 230: INSS=Instantaneous Y surface stress [N m**-2]
  • 231: ISHF=Instantaneous surface heat flux [W m**-2]
  • 232: IE=Instantaneous moisture flux [kg m**-2 s**-1]
  • 243: FAL=Forecast albedo [(0 - 1)]x [kg m**-2 s**-1]
  • 78: TCLW=Total column liquid water [kg m**-2]
  • 79: TCIW=Total column ice water [kg m**-2]

rainfall & snowfall; sfc_fcst (monthly)

  • Parameter code: ShortName=Description [units]
  • 50: LSPF=Large-scale precipitation fraction [??]
  • 78: TCLW=Total column liquid water [kg m^-2]
  • 79: TCIW=Total column ice water [kg m^-2]
  • 136: TCW=Total column water [kg m^-2]; liquid + ice + vapour
  • 137: TCWV=Total column water vapour [kg m^-2]
  • 142: LSP=Stratiform precipitation [m]; accumulated field
  • 143: CP=Convective precipitation [m]; accumulated field
  • 228: TP=Total precipitation [m]
  • 239: CSF=Convective snowfall [m of water equivalent]; accumulated field
  • 240: LSF=Large-scale snowfall [m of water equivalent]; accumulated field

 変数略語リスト(anl_p075, 3-D variables of 6-hrly & monthly)

  • Parameter code: ShortName=Description [units]
  • 129: Z=Geopotential [m^2 s^-2]; ジオポテンシャル高度ではない.
  • 130: T=Temperature [K]
  • 131: U=U velocity [m s^-1]
  • 132: V=V velocity [m s^-1]
  • 133: Q=Specific humidity [kg kg^-1]
  • 135: W=Vertical velocity [Pa s^-1]

リンク

更新履歴

Date Changes
2016-08-04 データ更新,この日に確認した最新期間 (2016-05-31) まで取得. 自動更新にすべきか否か,ちょっと悩んでる. エラー発生時の挙動設定など,例外処理をスクリプトに加えねばならない. そこに割く労力・時間が,手動更新を代替する理由になりうるだろうか... こういう自動化できるものは,AI とかにやらせたいものだ.
研究それ自体がAIで出来る時代は,いつ来るのだろうか?それとも永遠に来ない? 楽観視していると,自分の職がなくなるな.
2016-02-19 データ更新,この日に確認した最新期間 (2015-12-31) まで取得. JCDAS のように解析値を日々更新するのではなく,1ヶ月単位くらいで更新しているようだ.
2014-11-03 ERA_Interim のダウンロード期間を2014-08-31まで延長. 変数名リストを追記.
2013-05-07 初版作成日は正確には不明. 上記は ERA Interim の配布データ期間を確認した日付け.