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 • ヘッダ部分にデータ名や次元サイズや作成日などの情報を格納
© Copyright 2024 ExpyDoc