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
© Copyright 2026 ExpyDoc