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 2024 ExpyDoc