1 / 22

gt4f90io gtool4 規約に基づく Fortran90 netCDF I/O ライブラリ

gt4f90io gtool4 規約に基づく Fortran90 netCDF I/O ライブラリ. ○ 森川 靖大 ( 北大・理 ) [morikawa@ep.sci.hokudai.ac.jp] 小高 正嗣 ( 北大・理 ) [odakker@gfd-dennou.org] 石渡 正樹 ( 北大・地球環境 ) [momoko@ees.hokudai.ac.jp] 林 祥介 ( 北大・理 ) [shosuke@gfd-dennou.org].

ofira
Download Presentation

gt4f90io gtool4 規約に基づく Fortran90 netCDF I/O ライブラリ

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. gt4f90iogtool4 規約に基づくFortran90 netCDF I/Oライブラリ ○ 森川 靖大 (北大・理) [morikawa@ep.sci.hokudai.ac.jp] 小高 正嗣 (北大・理) [odakker@gfd-dennou.org] 石渡 正樹 (北大・地球環境) [momoko@ees.hokudai.ac.jp] 林 祥介 (北大・理) [shosuke@gfd-dennou.org]

  2. 背景:データの嵐 • 様々な形式のデータが多量に氾濫 • 衛星観測データ • 数値モデルデータ ネットワークの発展で活発に流通 • データ参照コストの劇的な増加 • 「何」のデータ? • 「いつ」, 「どこで」, 「誰が」作ったデータ? • どうやって「見る」の?

  3. 数値モデルを用いた惑星大気の研究では… • 効率的なデータ相互参照が必要 地球大気との比較 階層的モデル群による アプローチ

  4. 目標:何が欲しいか? • 効率的な相互参照を可能にするもの • 自己記述的データ構造 • データに関する情報がデータに付属 • 作成者・表題・履歴 etc... • 変数・時刻・座標・欠損値・単位 etc... • 自由に利用できるソフトウェア • 公共財として利用できるもの • 研究教育資源として提供 • 誰でも使用・改変・再配布が可能

  5. gtool4プロジェクト (1999~) データ構造 ソフトウェア gtool4 【データ構造策定 & ソフトウェア開発プロジェクト】 豊田 他 (2000) GTOOL3【格子点データのライブラリ、解析・可視化ツール】 沼口 他(1989) Fortran77 で実装 準自己記述 (座標は別ファイル) Unformatted バイナリ 3次元格子点 次元制約の 不便性増大 機種依存で コスト増大 座標用別ファイル 管理コスト増大 Fortran90 登場 多次元 格子点 完全 自己記述 ネットワーク 透過 Fortran90 で実装

  6. gtool4のこれまで • データ構造 『gtool4 netCDF規約』 • 多次元格子点データ • 完全自己記述的 • 座標軸情報もデータに含まれる • ネットワーク透過 • COARDS 規約、NCAR CSM 規約 との互換性を考慮 • ソフトウェア 『gtool4 Fortran90 Tools/Library』 • Fortran 90: モジュール、構造型、総称手続き を活用 gtool4 Fortran90 Tools/Library 数値モデル データ I/O ライブラリ 解析・可視化 ツール 解析・可視化 gtool4 netCDF データ

  7. gtool4の、今 • データ構造 『gtool4 netCDF規約』 • 試用中 & 策定中 • ソフトウェア • 解析・可視化ツール • オブジェクト指向言語Ruby へ • データI/Oライブラリ • データ I/O ライブラリとして特化したgt4f90ioへ gt4f90io 電脳 Ruby 数値モデル データ I/O ライブラリ 解析・可視化 ツール 解析・可視化 gtool4 netCDF データ

  8. gt4f90io • gtool4 netCDF データのI/Oライブラリ • Fortran90ベースの数値モデル用 • 正式名称 • [日]gtool4 規約に基づくFortran90 netCDF I/Oライブラリ • [英]Fortran90 netCDF I/O library with gtool4 convention gt4f90io 数値モデル データ I/O ライブラリ gtool4 netCDF データ

  9. 内部構造階層化 数値モデル (Fortran90) • モジュール構造概観 gt4f90io gt4_history 数値モデルの結果を gtool4 netCDF形式の多次元数値 データとして出力するための Fortran 90インターフェース 文字列と数値の変換など 内部用汎用ライブラリ dc_string gtdata_generic 各種のデータ形式を抽象化した多次元数値データ アクセスライブラリ (データ形式の違いは下層のライブラリによって吸収) dc_trace デバッグ用モジュール dc_error エラーの処理 ??_generic その他の形式の データアクセス用 下層ライブラリ (未定) an_generic sysdep netCDFデータアクセス用下層ライブラリ。 netCDF 変数の入出力ファイルのオープン、 入出力範囲の保持、属性の文字列変換など Fortran コンパイラに 依存するコードの共通 インターフェイスを提供 gtool4 netCDF データ その他のデータ (未定)

  10. お手軽インターフェース • ライブラリ利用者は • モジュール gt4_history • サブルーチン 5 つ を知っていれば OK

  11. gt4_history のサブルーチン • HistoryCreate(file, title, …) • 初期設定 • 出力ファイル名、タイトル、…、次元変数名、次元サイズ、… • HistoryAddVariable(varname, dims, …) • 変数定義 • 変数名、依存次元名、… • HistoryPut(varname, value, …) • 変数出力 • 変数名、出力値、… • HistoryClose • 終了処理 • HistoryGet(file, varname, …) • 変数入力 • ファイル名、変数名、… 違うデータ型も 同サブルーチンで対応

  12. 使用例 • サンプル 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

  13. まとめ • データI/O ライブラリ gt4f90io • Fortran90ベースの数値モデル用 • gtool4 netCDF規約に基づくデータを扱う • 課題 • gtool4 netCDF規約へ完全に対応 • 入力用サブルーチン HistoryGet改良 • データサイズに応じて出力データを自動分割 • 導入例 • SPMODEL (Hierarchical Spectral Models for GFD) • 階層的地球流体力学スペクトルモデル集 • コードの可読性を重視 • データ I/Oにgt4f90ioを使用

  14. 参考 URL • gt4f90io(gtool4プロジェクト) • http://www.gfd-dennou.org/arch/gtool4 • 電脳 Ruby プロジェクト • http://www.gfd-dennou.org/arch/ruby • SPMODEL • http://www.gfd-dennou.org/arch/spmodel

  15. メモ

  16. 以降、付録(?)

  17. gt4f90io 詳細図

  18. gtool4 Tools/Library 詳細図

  19. おまけ(お手軽 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

  20. 総称手続き • Fortran 90 コーディングスタイル • オブジェクト指向“的”に… • クラス → 構造型 • メソッド → サブルーチン • 多態性 (polymorphism) → 総称宣言されたサブルーチン • 引数の型に合わせ、異なるサブルーチンが呼び出される (下図参照) 上位モジュール 《引数の型を気にせず、サブルーチンを呼び出せる》 総称名称 (例:HistoryAddAttr) 《引数の型に応じて実際に 呼び出されるサブルーチンが変化》 個別の サブルーチン 文字型用 論理型用 実数型用 例:HistoryAddAttrC 例:HistoryAddAttrL 例:HistoryAddAttrR 例:Histo.. 下位モジュール

  21. 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 プログラム

  22. 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 + …

More Related