GRIB Helperルーチンの使用例 (翻訳記事)
GRIBエディション1または2のファイルへアクセスするための、IDLのGRIB API上に構築されたいくつかの高レベルのルーチン(GRIB Helperルーチン) の使用例をご紹介します。
この例では、NOAAオペレーショナルモデルアーカイブ配布システム(NOMADS)からNCEP HiResWindowモデルデータをダウンロードしました。 私が選択したファイルは、アラスカで18 UTC 2011-11-01に実行され、00 UTC 2011-11-02に有効になった、6時間アンサンブル平均予報データです。 GRIB_GET_RECORDルーチンを使用してデータファイルから250 mbのuおよびv風成分レコードを抽出し、データのネイティブマップ投影を使用して風速を画像として視覚化しました。 これが結果のスクリーンショットです。
では、どのようにデータをGRIBファイルから読み込んだのかご紹介します。
ダウンロードしたファイルのリストを表示します:
[mpiper@asimov: data]$ ll ak.t18z.pgrb.mean.f06.grib2*
-rw-r--r-- 1 2.6M 2011-11-02 10:47 ak.t18z.pgrb.mean.f06.grib2
-rw-r--r-- 1 1.3K 2011-11-02 10:46 ak.t18z.pgrb.mean.f06.grib2.idx
.idxファイルにはGRIBファイルの内容の概要が含まれているので非常に便利です。
[mpiper@asimov: data]$ cat ak.t18z.pgrb.mean.f06.grib2.idx
1:0:d=2011110118:UGRD:10 m above ground:6 hour fcst:wt ens-mean
2:159298:d=2011110118:VGRD:10 m above ground:6 hour fcst:wt ens-mean
3:322845:d=2011110118:UGRD:850 mb:6 hour fcst:wt ens-mean
4:472128:d=2011110118:UGRD:250 mb:6 hour fcst:wt ens-mean
5:583822:d=2011110118:VGRD:850 mb:6 hour fcst:wt ens-mean
6:737490:d=2011110118:VGRD:250 mb:6 hour fcst:wt ens-mean
7:850175:d=2011110118:MSLET:mean sea level:6 hour fcst:wt ens-mean
8:1053159:d=2011110118:HGT:500 mb:6 hour fcst:wt ens-mean
9:1202189:d=2011110118:RH:850 mb:6 hour fcst:wt ens-mean
10:1327929:d=2011110118:RH:2 m above ground:6 hour fcst:wt ens-mean
11:1452894:d=2011110118:TMP:850 mb:6 hour fcst:wt ens-mean
12:1573011:d=2011110118:TMP:500 mb:6 hour fcst:wt ens-mean
13:1665046:d=2011110118:TMP:250 mb:6 hour fcst:wt ens-mean
14:1753998:d=2011110118:TMP:2 m above ground:6 hour fcst:wt ens-mean
15:1918370:d=2011110118:CAPE:surface:6 hour fcst:wt ens-mean
16:2028476:d=2011110118:CIN:surface:6 hour fcst:wt ens-mean
17:2059862:d=2011110118:APCP:surface:0-6 hour acc fcst:wt ens-mean
18:2147351:d=2011110118:APCP:surface:3-6 hour acc fcst:wt ens-mean
19:2222796:d=2011110118:WIND:10 m above ground:6 hour fcst:wt ens-mean
20:2388294:d=2011110118:WIND:850 mb:6 hour fcst:wt ens-mean
21:2542921:d=2011110118:WIND:250 mb:6 hour fcst:wt ens-mean
このインデックスファイル(.idx)は、 "-s"オプションが設定されたwgrib2ユーティリティからの出力です。 (このインデックスファイルがない場合、最初にwgrib2を使用し、このインデックスファイルと同じものを作る必要がありました。)各行はGRIBファイル内のレコードに対応し、レコードの索引が最初にリストされています。 ヘルパールーチンGRIB_GET_PARAMETERNAMESを使用して、ファイルが使用したパラメータの名前を取得することができます:
IDL> f = '/home/mpiper/projects/GRIB/data/ak.t18z.pgrb.mean.f06.grib2'
IDL> p = grib_get_parameternames(f)
IDL> print, p
u-component of wind v-component of wind u-component of wind u-component of wind
v-component of wind v-component of wind 192 Geopotential height Relative humidity
Relative humidity Temperature Temperature Temperature Temperature
Convective available potential energy Convective inhibition Total precipitation
Total precipitation Wind speed Wind speed Wind speed
いくつかのパラメータ名が繰り返し表示されている(例; Temperatureは4回記載されている)。 インデックスファイルと比較すると、これらは大気中のさまざまな高さのデータに対応しています。 この例では、モデル化されたu成分とv成分の風を250 mbで使用したいと思います。 インデックスファイルとGRIB_GET_PARAMETERNAMESからの出力から、これらはレコード4と6に格納されていることがわかります。GRIB_GET_RECORDを使用してファイルからこれらのデータを抽出できます。
IDL> r_u250 = grib_get_record(f, 4, /structure)
IDL> r_v250 = grib_get_record(f, 6, /structure)
GRIB_GET_RECORDは、指定されたレコードの内容を保持する構造体変数を返します(レコード内のキーは構造体のフィールドに割り当てられます)。 たとえば、レコードの名前、その単位、データの圧力単位、およびデータ値の数は、次のステートメントでアクセスできます。
IDL> print, r_u250.parametername
u-component of wind
IDL> print, r_u250.parameterunits
m s-1
IDL> print, r_u250.level, r_u250.pressureunits
250hPa
IDL> print, r_u250.numberofvalues
497475
レコードのデータは、GRIB_GET_RECORDによって返される構造のVALUESフィールドに常に含まれています。
IDL> help, r_u250.values
DOUBLE = Array[825, 603]
※GRIB Helper Libraryは現在GitHubで公開されています。
https://github.com/mdpiper/grib-helper-lib
原文: https://www.nv5geospatialsoftware.com/Support/Self-Help-Tools/Help-Articles/Help-Articles-Detail/ArtMID/10220/ArticleID/16806/An-example-of-using-the-GRIB-helper-routines
※原文内でのダウンロードリンク(「here」と記載されている箇所)は現在利用できません。