気象データとしては、観測値のほかに、 数値予報の初期値のためにつくられた格子点データがよくつかわれる。 初期値をつくるためには、観測値と(前の時刻の初期値からの)予報値とをくみあわせる 「データ同化」とよばれる技術がつかわれる。 観測値をとりこんで得られた格子点値を「解析値」あるいは「客観解析値」という。 それをそのまま初期値にするばあいと、 初期値にするまでにもう一段の処理があるので解析値と初期値とが区別されるばあいがある。
格子点データのファイル形式として、 気象庁では、WMOできめられた GRIB version 2 (GRIB2) という形式をつかっているが、 研究者は、アメリカの Unidata できめられた NetCDF という形式をつかっていることが多い。 ここでは、京都大学 生存圏研究所で NetCDFに変換されたものを読むことにしたい。
NetCDF は、Python でも、そのためのライブラリを追加すれば読むことができるが、 ここではまず、増田が経験のある GrADS で読んでみることにする。
京大生存研のサーバーで公開されている気象庁MSMの格子点データには、 気象庁でつくられ、気象業務支援センターから GRIB2 形式で配信されたものと、 それを京大生存研で編集して NetCDF 形式にしたものがある。 (なお、全球モデル GSM の格子点データは、GRIB2 形式のものだけが置かれている。)
NetCDF形式の格子点データは、地表面は1層のもの (MSM-Sとする)と、気圧面16層のもの (MSM-Pとする) にわかれている。
MSM-Sデータの水平格子間隔は実際は緯度経度だが約 5 km である。 時間間隔は 1 時間だが、そのうち hour が 3の倍数の時刻は「初期値」、 他の時刻は予報値がはいっている。降水量や日射量はすべて予報値である。 観測値の情報がとりこまれるのは初期値がつくられるときである。
MSP-Pデータの水平格子間隔は実際は緯度経度だが約 10 km (MSM-Sの格子のひとつおき)である。 時間間隔は 3 時間で、(2006年3月以降は) すべて初期値である。
(初期値・予報値の情報は http://database.rish.kyoto-u.ac.jp/arch/jmadata/data/gpv/netcdf/README による。)
MSMモデルでつかっている地表面の標高 (ジオポテンシャル高度) を 格子点データの格子に内挿したものは、 http://database.rish.kyoto-u.ac.jp/arch/jmadata/data/gpv/original/etc/ にある TOPO.MSM_5K である。 (同じディレクトリにある 「README(支援センター)_201406.txt」、 「README(支援センター)_201702.txt」の情報によった。) TOPO.MSM_5K のタイムスタンプは 2017年1月30日で、その他の時期も同じ値だったかどうかは未確認である。 (変化があっても数値としては小さなものらしいが)。
これを GrADS で読む ctl ファイルをつくった。
MSMデータの京大生存研で編集されたNetCDFファイルは、 GrADS (version 2.2) の sdfopen で開くことができる。 ただし、この方法では、時系列の長さが、NetCDFの1つのファイル、 つまり、1日ごとに分割される。
複数の日のデータをつづけて読むためには、GrADS 用の ctl ファイルをつくる必要がある。
ctlファイルに「DTYPE netcdf」と指定し、 XDEF, YDEF, ZDEF, TDEF と VARS ... ENDVARS のあいだに各変数の定義を適切に指定すれば、 open で開いて読めるはずである。 ところが、実際やってみると、 OPTIONS template を利用して複数のファイルにまたがる時系列をつくることはできるのだが、 「UNPACK scale_factor add_offset」 を指定しても、add_offset が読みこまれず、 数量の原点がずれたままになってしまう。 (たとえば、海面気圧は単位 Pa なので 100000 ぐらいの値になるべきなのだが、 10000 ぐらいの値がでてくる。)
ctlファイルをつくって、xdfopen で読む方法によれば、 複数のファイルにまたがる時系列をつくり、数量をただしく読むことができた。 このばあいの ctl ファイルの構成は、open で読むばあいとはちがいがある。 例として、MSM-S の 2012年9月の1か月ぶんの1時間値を、 1日ごとの30個のファイルをつづけて読むための ctl ファイルをしめす。 他の月のばあいは、TDEFの行の、はじめの日時と、時間ステップ数とを変更すればよい。 他の年のばあいは変数の構成に変更 (たとえば日射量の追加) がありうる。
[2021-10-26 追加] MSM-P について、2020年8月の1か月ぶんの3時間値を読むための ctl ファイルをつくった。 (データのある気圧面の気圧値は、コメントになっているが ZDEF の行に書いておいた。)
なお、NetCDFの変数名 z は等圧面高度なので、ctlファイルでの変数名を height、 w は 鉛直速度ではあるが dp/dt なので、omega に変えた。
緯度・経度を指定して1地点の時系列をテキストファイルで書きだす手つづきを、 下にリンクした [GrADS (Grid Analysis and Display System) を使う] のうちの 「GrADSから数値をファイルに書き出す」で、series.gs としてしめした。 ここでは、それをすこし変更したバージョンを用意した。 変更点は、日時を、年、月、日、時(UTC) にわけ、あいだに空白をいれたことである。 (月は、いまのところ、英語の月名の最初の3文字(大文字)のままである。)