気象庁数値予報ルーチンにおける
Ruby 活用事例
気象庁予報部数値予報課 プログラム班
豊田英司
(page 1)
きょうの話題
- まずは数値予報ルーチンのご紹介
- 天気予報の中での数値予報システム
- データベース NuSDaS とデータサーバ Pandora
- こんな所でもう Ruby
- これからはこんな所で Ruby?
- 国内二進・GRIB電文エンコード
- Pandora サーバ
(page 2)
天気予報と数値予報
- 気象観測
- 数値予報
- デコード
- データ同化
- 数値予報モデル
- ガイダンス
- エンコード: 電報として集配信
- 予報作業 → 発表
(page 3)
数値予報の歴史 = コンピュータの歴史
(page 4)
現行計算機システム
(page 5)
数値予報システム
- 長期
- 暖候季・寒候季予報 (年2回)
- エルニーニョ予測、季節予報 (月1回)
- 1か月予報 (週1回)、週間予報 (日1回)
- 中核 = 全球解析予報サイクル
- サイクル解析 (日4回)、速報解析・予報 (日2回)
- 高解像度
- 領域モデル (日2回)
- メソモデル (日4回)
- 降水短時間予報 (日24回→日48回)
(page 6)
「プログラム」に関する仕事
- 運用ソフトウェアの設定
- JNOS: ジョブスケジューラ
- AQUA: CPU割当て管理
- バッチジョブの作成
- プログラムの整備
- 電文デコード
- 格子データ入出力 NuSDaS, Pandora
- FAX 図作成等の可視化、電文エンコード
- その他
(page 7)
NuSDaS ツールでの Ruby 利用
NuSDaS とは
- 気象GPV用データベース
- データ圧縮
- 複数ファイルに分割配置/探索
- 定義ファイル
- 構造は固定的7次元
- 基準時刻・メンバ・対象時刻・高度・要素・X・Y
- API はこれらに依存
- ファイル型式等の具体層にも....
- ライブラリは C で書かれている
(page 8)
NuSDaS ツール in Ruby
- 入出力API Ruby/NuSDaS
- 拡張ライブラリ NArray, NWPTime 使用
- 定義ファイルエディタ
- データ操作ツール
- = 複数ディレクトリの併合
- ハードリンクで済む版
- データファイルのマージ版
(page 9)
Ruby の嬉しい所 = 既存スタイルの隙間を補う
- C
- シェル
- Ruby
- 開発が速い
- プログラム動作も結構速い、チューン可能
- 保守性よし
- GUI もばっちり
(page 10)
バッチジョブ生成ツール
半端じゃない世界
- 量的すごさ
- スクリプトの数: 1,877
- 投入頻度: 4000/day
- ロードモジュール数: 2,567
- バッチジョブ: プログラムコード行数の1/3
- 質的すごさ
- 可変データ取り回し
- プログラム起動毎にシンボリックリンク
- テスト用作業ディレクトリ
- その他変な書法 (明文規則なし、チェック大変)
(page 11)
バッチジョブ生成ツール
- 入力言語: JCL
- ディレクトリ名の抽象化
- 記述の圧縮:だいたい1/3
- 書法チェックの一部を文法チェックとして自動化
- 出力言語: ボルンシェル
- 可変データ取り回し等、特殊な御作法のコードを自動的に作成
- 将来: Ruby によるインタープリタへ移行
(page 12)
国内二進電文エンコーダ in Ruby
- 入出力API Ruby/NuSDaS の活用
- ビット圧縮の高速化
- 拡張ライブラリ MultiBitNums
- 周辺処理の整理とあわせて旧 Fortran コードと同程度の処理速度を達成
- 動いているものは変えられない
(page 13)
Pandora サーバ
(page 14)
まとめ
(page 15)