How to make/use Station Data

Station Data の作り方

  • データファイルの構造
    • 同じ時刻のデータについて、1レコード(28バイトヘッダ+4バイトデータ×要素数)を繰り返す。
      4byte blankstidが入っても良い(?)
      4byte ascii: stidstidは8文字まで。
      4byte real (*2): lat, lon
      4byte integer (*3): time, nlev, nflagそれぞれ通常0,1,1(?)
      4byte real (*X): rval30個までは動作確認
    • 時刻が変わるときは、rvalなしの空ヘッダ(28バイト)を差し込む。その際nlev=0にする。
    • 上記の繰り返し(最後も28バイトの空ヘッダ)

fortranを使う場合の注意:

  • open文の属性でrecordtype="stream"を使うと便利。しかし、少なくともPGFとGNUは非対応。ifortはOK(コンパイル時の-assume bytereclを忘れずに)

その他注意:

  • コントロールファイルにZDEFが設定できないため、鉛直方向にレコードを切ることができない。時間方向のみ。したがって、変数を増やして対応するのが良い(1000hPaのT、500hPaのTなどを同じレコードに入れる)。(改善してほしい点)

Station Data の読み方

  • GRIBデータを読む際、ctlファイルからgribmapを通してidxファイルを作成するように、まず、ctlファイルを作成する。通常のGRIBグリッドデータと違う点は、以下の二項目。
    dtype station
    stnmap XXX.map
  • 次に、stnmapの実行
    $ stnmap -i XXX.ctl 
  • GrADSを起動して、ctlを開く
    $ grads
    > open XXX.ctl
    > set digsiz 0.3
    > set stid on
    > d p

BUFRファイル

GrADS本家のページによるとBUFRファイルを読み込んで描画できるとのこと。しかし、SIO/GDASのサンプルパッケージについているprepbufr78120100.bufr(いわゆるNCEP PREPBUFRファイル)について、 bufrscanで中身を読み取り、bufr.ctlに内容を書いてみるものの、うまくいかなかった。

>open bufr.ctl
>d temp
Parsing BUFR file prepbufr78120100.bufr
Finished parsing BUFR file

などとでるが、図は出力されず。gxout statにしてみると、データをひとつとして読み取っていないようだ。

上のprepbufrをGrADSで読めるツワモノの人、助けて…。参考までに作ったCTLファイルを下に貼ります。それか、GrADSで読めるBUFRファイルとCTLファイルの組み合わせをコピーさせてくれるだけでも非常にありがたいです。お願いします。

DSET ^prepbufr78120100.bufr
TITLE prepbufr78120100.bufr
UNDEF -9999
DTYPE bufr
OPTIONS big_endian
TDEF 6 linear 0Z1DEC1978 1hr
STID 1,192
XVAR 6,2
YVAR 5,2
VARS 13
slon 0 6,2 Station longitude
slat 0 5,2 Station latitude
selv 0 10,194 Station elevation
pres 0 7,192 Pressure
spfh 0 13,192 Specific humidity
dewpt 0 12,194 Dew point temperature
temp 0 12,192 Temperature
hgt 0 10,195 Height
uwnd 0 11,3 U-component wind
vwnd 0 11,4 V-component wind
wdir 0 11,1 Wind direction
wspd 0 11,191 Wind speed
tpw 0 13,221 Total precipitable water
ENDVARS

描画のコツ

Station IDの記入

> set stid on
> d var

時系列変化

任意の一地点を指定した上で、d var(stid=stationname)など。

> set lat 1
> set lon 1
> set t 1 2
> d p(stid=QQQ)

内挿(oacres)

Reference用に緯度・経度方向に等間隔のデータを用意し、oacres関数を用いる。

> open grid.ctl # 等間隔の格子データ(例えば2.5度再解析大気データなど。)
> open stn.ctl # Station data
> d oacres(gridvar.1,stnvar.2) # gridvarの格子で、変数stnvarを内挿

oacres内挿後、演算可能。従ってRMSなども楽に計算できる。

> d sqrt(aave(pow(oacres(gridvar.1,stnvar.2)-gridvar.1,2),lon=-180,lon=180,lat=-90,lat=90))

内挿(gr2stn)

oacresとは逆に、grid格子のデータをstn格子点に内挿する。RMSを計算するにはこちらのほうが(おそらく)正確。しかし、一点一点計算するため、遅い。

> d gr2stn(gridvar.1,stnvar.2)

Link