gt4f90io: gtool4 規約に基づく Fortran90 netCDF I/O ライブラリ

gt4f90io:
gtool4 規約に基づく
Fortran90 netCDF I/O ライブラリ
○ 森川 靖大
小高 正嗣
石渡 正樹
林 祥介
(北大・理・地球惑星) [[email protected]]
(北大・理・地球惑星) [[email protected]]
(北大・地球環境)
[[email protected]]
(北大・理・地球惑星) [[email protected]]
目標
階層化モデルの
データ I/O ライブラリ
 要件
 ネットワーク透過的なファイル形式
 自己記述的なデータ形式
 いろいろなところで利用可能
GTOOL3
(1989)
GTOOL3 ソフトウェア
ライブラリ + 解析・可視化コマンド群
 Fortran77 で記述
 構成
 I/O
数値モデル
解析コマンド群
可視化コマンド群
I/O ライブラリ
GTOOL3 Library
DCL Library
GTOOL3 データ構造
文字処理、数値基礎処理、
可視化ライブラリ
sequential unformatted ファイル
 自己記述性を (ある程度) 実現
 Fortran
• ヘッダ部分にデータ名や次元サイズや作成日などの情報を格納
gtool4 プロジェクト
(1999)
GTOOL3 の欠点を克服
自己記述性の強化
• データと「軸ファイル」を統合
ネットワーク透過性の向上
• 機種依存 (浮動小数点、Big/Little endian問題) 回避
データ構造の多様性への対応
• 3 次元以上のデータの取り扱い
内部構造の整理
• 徹底した階層化
今までの取組み
 gtool4 Tools/Library




I/O ライブラリ + 解析・可視化コマンド群
Fortran 90 で記述 : モジュール、構造型、総称手続き を活用
ファイル形式は netCDF : 高移植性、多次元データ、自己記述的
構成
gtool4 Fortran90 Tools/Library
数値モデル
解析コマンド群
可視化コマンド群
I/O ライブラリ
NetCDF
Library
その他のデータアクセス
ライブラリ (未定)
DCL Library
 gtool4 netCDF 規約

多次元数値データとその可視化情報を自己記述的に格納するための
netCDF 規約
• 地球科学の格子点データを想定
現在の取り組み
 解析、可視化コマンド群

オブジェクト指向スクリプト言語 Ruby へ
• Dennou Ruby Project
 データ I/O ライブラリ
 gt4f90io として単独での再パッケージング
 gtool4 netCDF 規約

引き続き策定を継続
gt4f90io
(2003-2004)
数値モデルの
データ I/O ライブラリ として特化
正式名称
 [日] 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 Library
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 データを出力
• 導入例 :階層的地球流体力学スペクトルモデル集 SPMODEL
– http://www.gfd-dennou.org/arch/spmodel/
 覚えるモジュール
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 ファイルに出力
• データ入力時には、属性と規約との整合性をチェック
 ユーザフレンドリな「入力」用インターフェース開発
• 現在、データの入力には gt4f90io の下位のサブルーチ
ンを自分で組み合わせることが必要
メモ
セミナー中のコメント
 (谷口) gt4f90io って普通の Fortran90 プログラムで動きます?
• (石渡) 綺麗に整列された格子点データを対象にしているなら問題ない
よ
• (林) 格子点じゃなくても、非格子点⇔格子点データの手間を自分で負
うならやれるけど?
 (堀之内)
出力ファイルをサイズやタイムステップに応じて分け
れない?
• (森川) 現在は、原則1つの HistoryCreate で 1 つのファイルですね
• (堀之内) 今までの上にかぶせるように作ると良いね
• (林) 始めはサンプルモデルを作成してそれを公開するだね
 (堀之内)
Gtool4 netCDF 規約との対応を書いてあると嬉しい
ね
• 例えば 「gt4f90io ver1.0 は gtool4 netCDF 規約 4.1 と対応 」とか
以降、付録(?)
参考資料
 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
総称手続き
 Fortran 90 コーディングスタイル

オブジェクト指向“的”に…
• クラス → 構造型
• メソッド → サブルーチン
• 多態性 (polymorphism) → 総称宣言されたサブルーチン
– 引数の型に合わせ、異なるサブルーチンが呼び出される (下図参照)
上位モジュール
《引数の型を気にせず、サブルーチンを呼び出せる》
総称名称
《引数の型に応じて実際に
呼び出されるサブルーチンが変化》
個別の
サブルーチン
文字型用
(例:HistoryAddAttr)
論理型用
例:HistoryAddAttrC
例:HistoryAddAttrL
下位モジュール
実数型用
例:HistoryAddAttrR
例:Histo..
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】
(以前の発表資料の残骸)
大学なので…
公共財として利用したい
• 研究教育資源としてデータやツールを提供
• 誰でも自由に参照
オープン/フリー
• みんなで使える (データの共有)
• 改変が自由
• 再配布も可
目標
(以前の発表資料の残骸)
 データの氾濫を乗り切るために必要なもの
効率的な相互参照が可能なもの
2. オープン/フリーなもの
3. 地球科学に適したもの
1.
 作りたいもの
ネットワーク透過的なファイル形式
 自己記述的なデータ形式
 いろんなところで使えるデータ I/O ライブラリ
 いろんなところで使える解析・可視化コマンド群

現在の取り組み
今までの取組み
(非採用バージョン)
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
• ヘッダ部分にデータ名や次元サイズや作成日などの情報を格納