gt4f90io: gtool4 規約に基づく Fortran90 netCDF I/O ライブラリ
Download
Report
Transcript 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
• ヘッダ部分にデータ名や次元サイズや作成日などの情報を格納