gt4f90io_dm2semi - 地球惑星科学科

gt4f90io:
gtool4 規約に基づく
Fortran90 netCDF I/O ライブラリ
北海道大学大学院 理学研究科 地球惑星科学専攻
地球流体力学研究室 修士課程 2年
森川 靖大
目次
I. 背景
・
・
・
・
データの嵐
例えば何がしたいのか?
何が欲しいのか?
davis プロジェクト
II. これまでの経過
・ davis プロジェクト年表
・ GTOOL3
・ gtool4 プロジェクト
- 今までの取り組み
- 現在の取り組み
III. gt4f90io
・
・
・
・
・
・
・
概要
特徴
サブルーチン群
使用例
まとめ
課題
おまけ(お手軽 Install)
IV. これから…
・ 何が欲しかったっけ?
・ 理解のための数値モデルへ
- SPMODEL
- DCPAM
背景
データの嵐
様々な形式のデータが多量に氾濫
衛星観測データ
客観解析データ
数値モデルデータ
ネットワークの発展で活発に流通
データ参照コストの劇的な増加
「何の」データ?
 「いつ」, 「どこで」, 「誰が」作ったデータ?
 どうやって「見る」の?

例題:数値モデリング
地球大気との比較
階層的モデル群による
アプローチ
例題:観測とモデルの比較
客観解析データを初期値にモデルを計算
客観解析データとモデルデータとの比較
「客観解析データ」とは、元々規則的に並んでいない観測データを、
数値モデルによって規則的に配置されたデータにしたもの。(?)
普通、数値モデルで用いるデータとしては、最も観測データに近い。(?)
NCEP/NCAR
(客観解析データ)
モデル
Now Printing
何が欲しいのか?
みんなで好きに使える数値モデル
 メカニズムを理解するための数値モデル
• 地球以外にも容易に適用できると嬉しい
みんなで好きに使えるデータ
 データ参照コストを抑え、隣の専門家とサクサク会話したい
 データ自身が中身を語ってくれる(自己記述的)と嬉しい
みんなで好きに使える解析・可視化ツール
 売り物は(あまり)使いたくない
• 実際は、高価なのにイマイチなものが多い
 かといって GrADS 使うのもねぇ
• 先のような例題に使うには少々不向き
davis プロジェクト (1998)
Development of tools
for Analysis and VISualization
【多次元データの構造化と可視化】
以下の製品開発を目指す
 我々にとって使い勝手のよいデータ構造
 我々にとって使い勝手のよい解析・可視化ツール
最初の davis ワークショップ(1998)での一言
分かる情報を提供すべし』
『技術的な仕事、教育活動も研究活動の一環』
『隣の専門家が
これまでの経過
davis プロジェクト年表
1989~90 (davis 以前)

GTOOL3, dcl
:
1998/10
1999/04
2000/03


gtool4 netCDF 規約
gtool4 Tools/Library, dcl-C, dcl-f90, RubyDCL のプロトタイプ
2001/06

RubyDCL
2002/03

合同大会
第1回電脳 Ruby ワークショプ
Gphys, RubyNetCDF
2003/03

:
最初の davis ワークショップ
JST プロジェクト開始
JST 発表会
gdcl
第2回電脳 Ruby ワークショップ
2004/03
第3回電脳 Ruby ワークショップ
 gt4f90io, GAVE
GTOOL3
(1989)
GTOOL3 ソフトウェア
ライブラリ + 解析・可視化ツール群
 Fortran77 で記述
 構成
 I/O
数値モデル
解析ツール群
可視化ツール群
I/O ライブラリ
GTOOL3 Library
GTOOL3 データ構造
 Sequential
DCL
文字処理、数値基礎処理、
可視化ライブラリ
Unformatted ファイル
• テープドライブとの入出力が念頭にあったため
 自己記述性を (ある程度) 実現
• ヘッダ部分にデータ名や次元サイズや作成日などの情報を格納
gtool4 プロジェクト
(1999)
GTOOL3 の欠点を克服したツール開発
自己記述性の強化
• データと「軸ファイル」を統合
ネットワーク透過性の向上
• 機種依存 (浮動小数点、Big/Little endian問題) 回避
データ構造の多様性への対応
• 3 次元以上のデータの取り扱い
内部構造の整理
• 徹底した階層化
今までの取組み
(~2002)
 gtool4 Tools/Library




I/O ライブラリ + 解析・可視化ツール群
Fortran 90 で記述 : モジュール、構造型、総称手続き を活用
ファイル形式は netCDF : 高移植性、多次元データ、自己記述的
構成
gtool4 Fortran90 Tools/Library
数値モデル
解析ツール群
可視化ツール群
I/O ライブラリ
NetCDF
Library
その他のデータアクセス
ライブラリ (未定)
DCL
 gtool4 netCDF 規約

多次元データと可視化情報を自己記述的に格納する netCDF 規約
• 地球科学の格子点データを想定
• 既存の COARDS 規約, NCAR CSM 規約 との互換性を考慮
電脳Rubyプロジェクト躍進
:
2000/03


gtool4 netCDF 規約
gtool4 Tools/Library, dcl-C, dcl-f90, RubyDCL のプロトタイプ
2001/06

RubyDCL
2002/03

gdcl
2004/03
 gt4f90io

合同大会
第1回電脳 Ruby ワークショプ
Gphys, RubyNetCDF
2003/03

:
JST 発表会
GAVE
第2回電脳 Ruby ワークショップ
第3回電脳 Ruby ワークショップ
電脳Rubyプロジェクトのツール群
Ruby による解析・可視化ツールの開発
• ワークステーション、パソコンで対話的に使える
ツールを目指す
現在の取り組み
(2003~)
 解析、可視化ツール

電脳 Ruby プロジェクトで
• 解析・可視化は Ruby の方が将来性ありそう
• 素人さんでも使えそうな雰囲気が伝わってきた
 データ I/O ライブラリ

gtool4 から gt4f90io へ
注目!!!
• gtool4 から解析・可視化部分をとりはずす
• F90 ベースの数値モデルのデータ I/O に特化
 データ構造

gtool4 netCDF 規約 の充実
•
まだまだ足りない部分が多いはず
gt4f90io
gt4f90io
(2003-2004)
数値モデルのデータ I/O ライブラリ
の数値モデルでの利用を想定
 gtool4 netCDF 形式のデータを出力
 Fortran90
正式名称
 [日] gtool4 規約に基づく Fortran90 netCDF I/O ライブラリ
 [英] Fortran90 netCDF I/O library with gtool4 convention
構成
gtool4 Fortran90 Tools/Library
数値モデル
gt4f90io
[Fortran90 netCDF
I/O library]
解析ツール群
可視化ツール群
I/O ライブラリ
NetCDF
Library
その他のデータアクセス
ライブラリ (未定)
DCL
gt4f90ioの内部構造
 モジュール構造概観
数値モデル (Fortran 90で記述)
gt4f90io – Fortran90 netCDF I/O Library
gt4_history
数値モデルの結果を gtool4 netCDF 形式の多次元数値
データとして出力するための Fortran 90 インターフェース
文字列と数値の変換など
dc_string
gtdata_generic
内部用汎用ライブラリ
各種のデータ形式を抽象化した多次元数値データ
アクセスライブラリ
dc_trace
dc_error
(データ形式の違いは下層のライブラリによって吸収)
エラーの処理
??_generic
その他の形式の
データアクセス用
下層ライブラリ
(未定)
その他のデータアクセス
ライブラリ (未定)
an_generic
netCDF データアクセス用下層ライブラリ。
netCDF 変数の入出力ファイルのオープン、
入出力範囲の保持、属性の文字列変換など
UNIDATA netCDF Library
デバッグ用モジュール
sysdep
Fortran コンパイラに
依存するコードの共通
インターフェイスを提供
特徴
簡単インターフェース
覚えるべきは…
• モジュール名 gt4_history
• 最低限たった 4 つのサブルーチン
多次元格子点データを簡単に出力
• 正確には gtool4 netCDF 規約に基づくデータ
gt4_history のサブルーチン
 HistoryCreate(file, title, …)
 初期設定
• 出力ファイル名、タイトル、…、次元変数名、次元サイズ、…
 HistoryAddVariable(varname, dims, …)
 変数定義
• 変数名、依存次元名、…
 HistoryPut(varname, value, …)
 変数出力
• 変数名、出力値、…
 HistoryClose
 終了処理
総称手続き (generic procedure)
によって、違うデータ型にも
同じ名前のサブルーチンで対応
使用例
 サンプル Fortran 90 プログラム
program sample
use gt4_history
! モジュールの使用を宣言
[型宣言] ......
call HistoryCreate( &
file='sample.nc', title='gt4_history',
&
..., dims=(/'x','t'/), dimsizes=(/30,0/), &
.......)
call HistoryAddVariable( &
varname='temp', dims=(/'x','t'/), .... )
! ヒストリー作成
! ・ファイル名、タイトル
! ・次元変数、次元サイズ
! 変数定義
! ・変数名、依存次元、..
[時間積分ループ]
:
call HistoryPut(varname= 'temp', value=temp) ! 変数の出力
:
[時間積分ループ 終わり]
call HistoryClose
stop
end program sample
! 終了の処理
まとめ
gt4f90io

http://www.gfd-dennou.org/arch/gtool4/
御利益
 Fortran90
数値モデルから
gtool4 netCDF データを出力
 覚えるモジュール
1 つ、サブルーチン 4 つ
• モジュール : gt4_history
• サブルーチン
– HistoryCreate、HistoryAddVariable
– HistoryPut、HistoryClose
課題
当面の課題
 様々なプラットフォームでの動作テスト
• 動作確認
– 富士通 Linux 用 Fortran Compiler 3.0, 4.0
– Intel Fortran Compiler 7.0, 8.0 (8.0.039以降)
 gtool4
netCDF 規約 へ対応について
• 対応する属性に関して一覧表を作る
• 必須属性、推奨属性に関しては自動で netCDF ファイルに出力
• データ入力時には、属性と規約との整合性をチェック
 ユーザフレンドリな「入力」用インターフェース開発
• 一応出来たけど、ダサいので改良中…
– HistoryGet
 ファイル出力プログラムの改良
• サイズが巨大になるときは自動で分割するとか?
おまけ(お手軽 Install)
debian パッケージあります
 /etc/apt/sources.list に以下の
4 行を追加
deb ftp://www.gfd-dennou.org/arch/gtool4/debian/gt4f90io woody/
deb-src ftp://www.gfd-dennou.org/arch/gtool4/debian/gt4f90io woody/
deb ftp://www.gfd-dennou.org/arch/spmodel/debian woody/
deb-src ftp://www.gfd-dennou.org/arch/spmodel/debian woody/
 apt
でインストール
# apt-get install gt4f90io-ffc4 netcdf-ffc4
• これはFujitsu Fortran 4 用。
• 他にも ffc3 や Intel Fortran コンパイラ、ifc6, ifc7, ifc8 を用意
使い方はチュートリアル参照してね

http://www.gfd-dennou.org/arch/gtool4/gt4tutorial/rakuraku/
これから…?
何が欲しかったっけ?
みんなで好きに使える数値モデル

メカニズムを理解するための数値モデル
基盤は揃いつつある
みんなで好きに使えるデータ

隣の専門家と会話したい
gtool4プロジェクト
 データ自身が中身を語ってくれる(自己記述的)と嬉しい
データ形式 : gtool4 netCDF 規約
データ I/O : gt4f90io
 ネットワーク上を透過的に持ち運べるとなお嬉しい
なんとか開発中…
みんなで好きに使える解析・可視化ツール

売り物は(あまり)使いたくない
電脳Rubyプロジェクト
•RubyDCL,
実際は、高価なのにイマイチなものが多い
RubyNetCDF, Gphys, GAVE…
 かといって
GrADS
使うのもねぇ
第2回電脳
Ruby ワークショップでほぼ出揃う
•鋭意開発中!!!
先のような例題に使うには少々不向き
皆で好きに使える数値モデル
理解のための数値モデルを目指して
いくつかの試み
 SPMODEL (Hierarchical Spectral Models for GFD)
• 階層的地球流体力学スペクトルモデル集
– コードの可読性を重視
» 『数式のようなコードが簡単に書ける』 ことを目指す
– 階層化された数値モデルを目指す
» 『簡単なモデル ⇔ 複雑なモデル』 を容易に
– データ I/O に gt4f90io を使用
» 『隣の研究者が分かるデータ』 を扱うため
 DCPAM (Dennou Club Planetary Atmospheric Model)
• 理解できる、可読的・階層的、惑星大気大循環モデル
参考 URL
 gt4f90io (gtool4 プロジェクト)

http://www.gfd-dennou.org/arch/gtool4
 電脳 davis プロジェクト

http://www.gfd-dennou.org/arch/davis
 DCL (Dennou Club Library)

http://www.gfd-dennou.org/arch/dcl
 電脳 Ruby プロジェクト

http://www.gfd-dennou.org/arch/ruby
 SPMODEL

http://www.gfd-dennou.org/arch/spmodel
 DCPAM


http://www.gfd-dennou.org/arch/agcm6
http://www.gfd-dennou.org/arch/dcpam
(←古いページ)
(←将来的にはこのページへ)
メモ
以降、付録(?)
総称手続き
 Fortran 90 コーディングスタイル

オブジェクト指向“的”に…
• クラス → 構造型
• メソッド → サブルーチン
• 多態性 (polymorphism) → 総称宣言されたサブルーチン
– 引数の型に合わせ、異なるサブルーチンが呼び出される (下図参照)
上位モジュール
《引数の型を気にせず、サブルーチンを呼び出せる》
総称名称
《引数の型に応じて実際に
呼び出されるサブルーチンが変化》
個別の
サブルーチン
文字型用
(例:HistoryAddAttr)
論理型用
例:HistoryAddAttrC
例:HistoryAddAttrL
下位モジュール
実数型用
例:HistoryAddAttrR
例:Histo..
gt4f90io 詳細図
gtool4 Tools/Library 詳細図
gt4_history 具体的使用例
 サンプル Fortran 90 プログラム
program sample
use gt4_history
! モジュールの使用を宣言
[型宣言] ..
call HistoryCreate( &
file='sample.nc', title='gt4_history sample',
source='Sample program of gt4_history/gt4f90io',
institution='GFD_Dennou Club davis project',
dims=(/'x','t'/), dimsizes=(/30,0/),
longnames=(/'X-coordinate','time
'/),
units=(/'m','s'/),
origin=real(0.0), interval=real(0.005) )
&
&
&
&
&
&
! ヒストリー作成
! ・ファイル名の指定、データ全体の表題の指定
! ・データを生成する手段
! ・ファイルを最終的に変更した人/組織
! ・次元変数、次元のサイズの指定
! ・次元の名前
! ・次元の単位の指定
! ・時間の原点、出力時間間隔の指定
call HistoryPut('x',x)
call HistoryAddAttr('x', 'topology', 'circular')
! 変数の出力
! 変数に属性を追加
call HistoryAddVariable( &
varname='temp', dims=(/'x','t'/), &
longname='temperature', units='K', xtype='double')
! 変数定義 (属性指定)
! ・変数名、依存する次元の指定
! ・変数の(長い)名前、単位、変数の型の指定
[時間積分ループ]
:
call HistoryPut('t',real(it*dt))
call HistoryPut('temp',temp)
:
[時間積分ループ 終わり]
! 変数の出力
! 変数の出力
call HistoryClose
stop
end program sample
! 終了の処理
gt4_history 使用結果
 gtool4 netCDF 規約に則った netCDF ファイル
$ ncdump sample.nc
(netCDF ファイルの属性 + データを出力)
[出力結果]
dimensions:
x = 30 ;
t = UNLIMITED ; // (201 currently)
variables:
float x(x) ;
x:long_name = "X-coordinate" ;
x:units = "m" ;
x:topology = "circular";
float t(t) ;
t:long_name = "time" ;
t:units = "s" ;
double temp(t, x) ;
temp:long_name = "temperature" ;
temp:units = "K" ;
// global attributes:
:title = "gt4_history sample" ;
:source = "Sample program of gt4_history/gt4f90io" ;
:institution = "GFD_Dennou Club davis project" ;
:history = "unknown unknown> gt4_history: HistoryCreate\n",
"" ;
data:
x = 0, 0.03448276, 0.06896552, 0.1034483, 0.137931, 0.1724138, 0.2068965,
:
t = 0, 0.0005, 0.001, 0.0015, 0.002, 0.0025, 0.003, 0.0035, 0.004, 0.0045,
:
temp =
1.38879542122922e-11, 3.87761921792298e-10, 8.53515772443671e-09,
:
解析 and 可視化
by
RubyNetCDF
+ RubyDCL
+ Gphys
+…
以降はゴミ
gt4f90io 【概要】(昔のスライド)
 正式名称
 [日] gtool4 規約に基づく Fortran90 netCDF I/O ライブラリ
 [英] Fortran90 netCDF I/O library with gtool4 convention
 目的

“Fortran90 netCDF I/O ライブラリ” への機能の特化 & 強化
• 開発 & メンテナンスのコスト削減のため
• 可視化 & 解析には、 Dennou Ruby Project のツール群を使用
– 結果として DCL から独立
解析コマンド群
 構想
数値モデル
可視化コマンド群
gt4f90io – Fortran90 netCDF I/O Library
NetCDF
Library
その他のデータアクセス
ライブラリ (未定)
非
依
存
RubyNetCDF + …
DCL Library
目次・旧
1. これまでの取り組み
1-1. GTOOL3
1-2. gtool4 プロジェクト [1]
1-3. gtool4 プロジェクト [2]
1-4. gtool4 プロダクト
3. 参考資料
2. gt4f90io
2-1. 概要
2-2. 構造
2-3. コーディング
2-4. 使用例
2-5. 使用結果
2-6. 課題
2-7. まとめ
2-8. URL
内部構造・アニメ版
 モジュール構造概観
数値モデル (Fortran 90で記述)
gt4f90io – Fortran90 netCDF I/O Library
gt4_history
数値モデルの結果を gtool4 netCDF 形式の多次元数値
データとして出力するための Fortran 90 インターフェース
文字列と数値の変換など
dc_string
gtdata_generic
内部用汎用ライブラリ
各種のデータ形式を抽象化した多次元数値データ
アクセスライブラリ
dc_trace
dc_error
(データ形式の違いは下層のライブラリによって吸収)
エラーの処理
??_generic
その他の形式の
データアクセス用
下層ライブラリ
(未定)
その他のデータアクセス
ライブラリ (未定)
an_generic
netCDF データアクセス用下層ライブラリ。
netCDF 変数の入出力ファイルのオープン、
入出力範囲の保持、属性の文字列変換など
UNIDATA netCDF Library
デバッグ用モジュール
sysdep
Fortran コンパイラに
依存するコードの共通
インターフェイスを提供
背景 【1】
(以前の発表資料の残骸)
様々な形式のデータが多量に氾濫
【原因】
 コンピュータの進歩
 観測技術の向上
 ネットワークの発展
データ参照コストの劇的な増加
【データ参照コストとは?】
 このファイルの形式は?
 ファイルの内容は?
 どうやって読むの?
背景 【2】
(以前の発表資料の残骸)
共同研究でもデータの効率的な相互参照は必
須
地球大気との比較
階層的モデル群による
アプローチ
背景 【3】
(以前の発表資料の残骸)
大学なので…
公共財として利用したい
• 研究教育資源としてデータやツールを提供
• 誰でも自由に参照
オープン/フリー
• みんなで使える (データの共有)
• 改変が自由
• 再配布も可
現在の取り組み
今までの取組み
(非採用バージョン)
gt4f90io
 gtool4 Tools/Library





I/O
ライブラリ + 解析・可視化コマンド群
数値モデルのデータ
I/O ライブラリとして特化
Fortran
90 で記述 : モジュール、構造型、総称手続き を活用
• 単独のツールとして再パッケージング
ファイル形式は
: 高移植性、多次元データ、自己記述的
– [日] gtool4netCDF
規約に基づく
Fortran90 netCDF I/O ライブラリ
構成 – [英] Fortran90 netCDF I/O library with gtool4 convention
gtool4 Fortran90 Tools/Library
数値モデル
gt4f90io
[Fortran90 netCDF
I/O library]
解析コマンド群
可視化コマンド群
I/O ライブラリ
NetCDF
Library
その他のデータアクセス
ライブラリ (未定)
 解析、可視化コマンド群を分離
• オブジェクト指向スクリプト言語 Ruby へ
 gtool4 netCDF 規約

引き続き策定継続
DCL Library
GTOOL3
(1989) [no animation]
GTOOL3 ソフトウェア
ライブラリ + 解析・可視化コマンド群
 Fortran77 で記述
 構成
 I/O
数値モデル
解析コマンド群
可視化コマンド群
I/O ライブラリ
GTOOL3 Library
DCL Library
GTOOL3 データ構造
文字処理、数値基礎処理、
可視化ライブラリ
sequential unformatted ファイル
 自己記述性を (ある程度) 実現
 Fortran
• ヘッダ部分にデータ名や次元サイズや作成日などの情報を格納
davis 以前の世界 (old)
数値モデル: 電脳倶楽部 AGCM5
 沼口さん作成の大気大循環モデル
 問題点(?)
• 地球用に徹底的にチューニング (他の惑星への転用が難しい)
– 比較惑星科学的利用が難しい
• プログラムを階層的に分離できない
– 力学的理解のために用いる事が困難
可視化と解析: GTOOL3
 スパコン仕様なので
 描画に
FORTRAN77
DCL を利用
データ構造: GTOOL3 形式
 固定ヘッダー+データの機種依存バイナリ
• MT I/O を考慮
誰が作る? (破棄)
技術的な仕事、教育活動も
研究活動の一環
自作への道へ
davis プロジェクト開始
目標
(dennou-ruby)
階層化モデルの
データ I/O ライブラリ
 要件
 ネットワーク透過的なファイル形式
 自己記述的なデータ形式
 いろいろなところで利用可能
目標
(stel)
 データの氾濫を乗り切るために必要なもの
効率的な相互参照が可能なもの
2. オープン/フリーなもの
3. 地球科学に適したもの
1.
 作りたいもの
ネットワーク透過的なファイル形式
 自己記述的なデータ形式
 いろんなところで使えるデータ I/O ライブラリ
 いろんなところで使える解析・可視化コマンド群

参考資料 (使わない)
 Toyoda, E., Ishiwatari, M., Takehiro, S., Hayashi, Y.-Y., gtool4 Devlopment
Group, 2002: gtool4 Fortran90 Tools/Library, http://www.gfddennou.org/arch/gtool4/, GFD Dennou Club.
 Toyoda, E., Ishiwatari, M., Horinouchi, T., Akahori, K., Numaguti, A., Hayashi,
Y.-Y., GFD Dennou Club Davis Project, 2000: gtool4 netCDF convention,
http://www.gfd-dennou.org/arch/gtool4/, GFD Dennou Club.
 Toyoda, E., Takehiro, S., Ishiwatari, M., Hayashi, Y., 2003: GTOOL: I/O
Library and Analysis Tool for Gridded Data, IUGG 2003 SW05 (Thu Jul 10
2003) , http://www.gfd-dennou.org/arch/prepri/2003/iugg/gtool/poster/noteiugg2003.html
 Takehiro, S., Ishioka, K., Toyoda, E., Ishiwatari, M., Hayashi, Y.-Y., SPMODEL
Development Group, 2002: Hierarchical GFD Spectral Models (SPMODEL),
http://www.gfd-dennou.org/arch/spmodel/, GFD Dennou Club.
 GFD Dennou Club, 2000-2003: Dennou Ruby Project . http://www.gfddennou.org/arch/ruby
 GFD Dennou Club, 1992-2002: DCL (GFD Dennou Club Library).
http://www.gfd-dennou.org/arch/dcl
 University Corporation for Atmospheric Research/Unidata, 1993-1999:
NetCDF. http://www.unidata.ucar.edu/packages/netcdf/index.html