490 likes | 687 Views
gt4f90io : gtool4 規約に基づく Fortran90 netCDF I/O ライブラリ. 北海道大学大学院 理学研究科 地球惑星科学専攻 地球流体力学研究室 修士課程 2 年 森川 靖大. 目次. I. 背景 ・ データの嵐 ・ 例えば何がしたいのか? ・ 何が欲しいのか? ・ davis プロジェクト. III. gt4f90io ・ 概要 ・ 特徴 ・ サブルーチン群 ・ 使用例 ・ まとめ ・ 課題
E N D
gt4f90io:gtool4規約に基づくFortran90 netCDF I/Oライブラリ 北海道大学大学院 理学研究科 地球惑星科学専攻 地球流体力学研究室 修士課程 2年 森川 靖大
目次 I.背景 ・ データの嵐 ・ 例えば何がしたいのか? ・ 何が欲しいのか? ・ davis プロジェクト III.gt4f90io ・ 概要 ・ 特徴 ・ サブルーチン群 ・ 使用例 ・ まとめ ・ 課題 ・ おまけ(お手軽 Install) II.これまでの経過 ・ davis プロジェクト年表 ・ GTOOL3 ・ gtool4 プロジェクト - 今までの取り組み - 現在の取り組み 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 最初の davis ワークショップ 1999/04 JST プロジェクト開始 2000/03 JST 発表会 • gtool4 netCDF 規約 • gtool4 Tools/Library, dcl-C, dcl-f90, RubyDCL のプロトタイプ 2001/06 合同大会 • RubyDCL 2002/03 第1回電脳 Ruby ワークショプ • Gphys, RubyNetCDF 2003/03 第2回電脳 Ruby ワークショップ • gdcl 2004/03 第3回電脳 Ruby ワークショップ • gt4f90io, GAVE
GTOOL3 (1989) 数値モデル 解析ツール群 可視化ツール群 I/Oライブラリ GTOOL3 Library DCL 文字処理、数値基礎処理、 可視化ライブラリ • GTOOL3 ソフトウェア • I/Oライブラリ + 解析・可視化ツール群 • Fortran77で記述 • 構成 • GTOOL3 データ構造 • Sequential Unformatted ファイル • テープドライブとの入出力が念頭にあったため • 自己記述性を (ある程度) 実現 • ヘッダ部分にデータ名や次元サイズや作成日などの情報を格納
gtool4 プロジェクト (1999) • GTOOL3 の欠点を克服したツール開発 • 自己記述性の強化 • データと「軸ファイル」を統合 • ネットワーク透過性の向上 • 機種依存 (浮動小数点、Big/Little endian問題) 回避 • データ構造の多様性への対応 • 3 次元以上のデータの取り扱い • 内部構造の整理 • 徹底した階層化
今までの取組み (~2002) gtool4 Fortran90 Tools/Library 数値モデル 解析ツール群 可視化ツール群 I/Oライブラリ NetCDF Library その他のデータアクセス ライブラリ (未定) DCL • gtool4 Tools/Library • I/Oライブラリ + 解析・可視化ツール群 • Fortran 90で記述 : モジュール、構造型、総称手続き を活用 • ファイル形式は netCDF: 高移植性、多次元データ、自己記述的 • 構成 • gtool4 netCDF規約 • 多次元データと可視化情報を自己記述的に格納する netCDF規約 • 地球科学の格子点データを想定 • 既存の COARDS規約, NCAR CSM規約 との互換性を考慮
電脳Rubyプロジェクト躍進 • 電脳Rubyプロジェクトのツール群 • Rubyによる解析・可視化ツールの開発 • ワークステーション、パソコンで対話的に使える • ツールを目指す : : 2000/03 JST 発表会 • gtool4 netCDF 規約 • gtool4 Tools/Library, dcl-C, dcl-f90, RubyDCL のプロトタイプ 2001/06 合同大会 • RubyDCL 2002/03 第1回電脳 Ruby ワークショプ • Gphys, RubyNetCDF 2003/03 第2回電脳 Ruby ワークショップ • gdcl 2004/03 第3回電脳 Ruby ワークショップ • gt4f90io • GAVE
現在の取り組み (2003~) 注目!!! • 解析、可視化ツール • 電脳 Rubyプロジェクトで • 解析・可視化は Rubyの方が将来性ありそう • 素人さんでも使えそうな雰囲気が伝わってきた • データI/Oライブラリ • gtool4からgt4f90ioへ • gtool4から解析・可視化部分をとりはずす • F90ベースの数値モデルのデータ I/Oに特化 • データ構造 • gtool4 netCDF規約 の充実 • まだまだ足りない部分が多いはず
gt4f90io (2003-2004) • 数値モデルのデータ I/Oライブラリ • Fortran90の数値モデルでの利用を想定 • gtool4 netCDF形式のデータを出力 • 正式名称 • [日] 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 sysdep netCDFデータアクセス用下層ライブラリ。 netCDF 変数の入出力ファイルのオープン、 入出力範囲の保持、属性の文字列変換など Fortran コンパイラに 依存するコードの共通 インターフェイスを提供 その他のデータアクセス ライブラリ (未定) UNIDATA netCDF Library
特徴 • 簡単インターフェース • 覚えるべきは… • モジュール名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 行を追加 • apt でインストール • これはFujitsu Fortran 4 用。 • 他にも ffc3 や Intel Fortran コンパイラ、ifc6, ifc7, ifc8 を用意 • 使い方はチュートリアル参照してね • http://www.gfd-dennou.org/arch/gtool4/gt4tutorial/rakuraku/ 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-get install gt4f90io-ffc4 netcdf-ffc4
何が欲しかったっけ? • 基盤は揃いつつある • みんなで好きに使える数値モデル • メカニズムを理解するための数値モデル • みんなで好きに使えるデータ • 隣の専門家と会話したい • データ自身が中身を語ってくれる(自己記述的)と嬉しい • ネットワーク上を透過的に持ち運べるとなお嬉しい • みんなで好きに使える解析・可視化ツール • 売り物は(あまり)使いたくない • 実際は、高価なのにイマイチなものが多い • かといって GrADS使うのもねぇ • 先のような例題に使うには少々不向き • gtool4プロジェクト • データ形式 : gtool4 netCDF 規約 • データ I/O : gt4f90io • なんとか開発中… • 電脳Rubyプロジェクト • RubyDCL, RubyNetCDF, Gphys, GAVE… • 第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.. 下位モジュール
gt4_history 具体的使用例 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 • サンプル Fortran 90 プログラム
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" ; doubletemp(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 RubyNetCDF + … NetCDF Library その他のデータアクセス ライブラリ (未定) DCL Library
目次・旧 1. これまでの取り組み 1-1. GTOOL3 1-2. gtool4 プロジェクト[1] 1-3. gtool4 プロジェクト[2] 1-4. gtool4 プロダクト 2. gt4f90io 2-1. 概要 2-2. 構造 2-3. コーディング 2-4. 使用例 2-5. 使用結果 2-6. 課題 2-7. まとめ 2-8. URL 3. 参考資料
内部構造・アニメ版 文字列と数値の変換など 内部用汎用ライブラリ dc_string dc_trace デバッグ用モジュール dc_error エラーの処理 ??_generic その他の形式の データアクセス用 下層ライブラリ (未定) sysdep Fortran コンパイラに 依存するコードの共通 インターフェイスを提供 その他のデータアクセス ライブラリ (未定) 数値モデル (Fortran 90で記述) • モジュール構造概観 gt4f90io – Fortran90 netCDF I/O Library gt4_history 数値モデルの結果を gtool4 netCDF形式の多次元数値 データとして出力するための Fortran 90インターフェース gtdata_generic 各種のデータ形式を抽象化した多次元数値データ アクセスライブラリ (データ形式の違いは下層のライブラリによって吸収) an_generic netCDFデータアクセス用下層ライブラリ。 netCDF 変数の入出力ファイルのオープン、 入出力範囲の保持、属性の文字列変換など UNIDATA netCDF Library
背景 【1】 (以前の発表資料の残骸) • 様々な形式のデータが多量に氾濫 【原因】 • コンピュータの進歩 • 観測技術の向上 • ネットワークの発展 • データ参照コストの劇的な増加 【データ参照コストとは?】 • このファイルの形式は? • ファイルの内容は? • どうやって読むの?
背景【2】 (以前の発表資料の残骸) • 共同研究でもデータの効率的な相互参照は必須 地球大気との比較 階層的モデル群による アプローチ
背景 【3】 (以前の発表資料の残骸) • 大学なので… • 公共財として利用したい • 研究教育資源としてデータやツールを提供 • 誰でも自由に参照 • オープン/フリー • みんなで使える (データの共有) • 改変が自由 • 再配布も可
今までの取組み 現在の取り組み(非採用バージョン) • gtool4 Tools/Library • I/O ライブラリ + 解析・可視化コマンド群 • Fortran 90で記述 : モジュール、構造型、総称手続き を活用 • ファイル形式は netCDF : 高移植性、多次元データ、自己記述的 • 構成 • gt4f90io • 数値モデルのデータ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 • 解析、可視化コマンド群を分離 • オブジェクト指向スクリプト言語Ruby へ • gtool4 netCDF規約 • 引き続き策定継続
GTOOL3 (1989) [no animation] 数値モデル 解析コマンド群 可視化コマンド群 I/Oライブラリ GTOOL3 Library DCL Library 文字処理、数値基礎処理、 可視化ライブラリ • GTOOL3 ソフトウェア • I/O ライブラリ + 解析・可視化コマンド群 • Fortran77 で記述 • 構成 • GTOOL3 データ構造 • Fortran sequential unformatted ファイル • 自己記述性を (ある程度) 実現 • ヘッダ部分にデータ名や次元サイズや作成日などの情報を格納
davis 以前の世界 (old) • 数値モデル: 電脳倶楽部 AGCM5 • 沼口さん作成の大気大循環モデル • 問題点(?) • 地球用に徹底的にチューニング (他の惑星への転用が難しい) • 比較惑星科学的利用が難しい • プログラムを階層的に分離できない • 力学的理解のために用いる事が困難 • 可視化と解析: GTOOL3 • スパコン仕様なので FORTRAN77 • 描画に DCL を利用 • データ構造: GTOOL3 形式 • 固定ヘッダー+データの機種依存バイナリ • MT I/O を考慮
誰が作る? (破棄) 技術的な仕事、教育活動も 研究活動の一環 自作への道へ davis プロジェクト開始
目標 (dennou-ruby) • 階層化モデルの データI/Oライブラリ • 要件 • ネットワーク透過的なファイル形式 • 自己記述的なデータ形式 • いろいろなところで利用可能
目標 (stel) • データの氾濫を乗り切るために必要なもの • 効率的な相互参照が可能なもの • オープン/フリーなもの • 地球科学に適したもの • 作りたいもの • ネットワーク透過的なファイル形式 • 自己記述的なデータ形式 • いろんなところで使えるデータ I/Oライブラリ • いろんなところで使える解析・可視化コマンド群
参考資料 (使わない) • Toyoda, E., Ishiwatari, M., Takehiro, S., Hayashi, Y.-Y., gtool4 Devlopment Group, 2002: gtool4 Fortran90 Tools/Library, http://www.gfd-dennou.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/note-iugg2003.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.gfd-dennou.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