SPMODEL - ISPACK と gt4f90io による数値モデル開発 -

Slides:



Advertisements
Similar presentations
多次元データ 解析・可視化ソフトウェア GAVE A Grid Data Analyzer and Viewer, GAVE 竹本 和彰 北海道大学理学部地球科学科 地球流体力学研究室 4年 2004 年 2 月 3 日.
Advertisements

Debian の世界へようこそ! 北大 理学院 宇宙理学専攻 惑星宇宙グループ M1 三上 峻.  Debian GNU/Linux  Debian プロジェクト  GNU プロジェクト  Debian GNU/Linux とは  Debian インストール  パッケージ  Debian.
ITPASS Informational Training program with a spirit of self-help オプション課題の概要 高橋芳幸.
らくらく DCL 辻野 智紀 神戸大学 理学部 地球惑星科学科 B4.
Doxygen ~ IGModel を一例にした, 数値モデルのドキュメンテーションにおける Doxygen の利用
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
Generic programming と STL
Fortran と有限差分法の 入門の入門の…
Android と iPhone (仮題) 情報社会とコンピュータ 第13回
ラベル付き区間グラフを列挙するBDDとその応用
正二十面体格子大気モデル IGModel プロジェクトの紹介
C言語 配列 2016年 吉田研究室.
〜 「バネ力学を用いた正二十面体測地線格 子の改良(Tomita et al, 2001)」
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
数値モデルの出力データをどのように取り扱っているか?
ファーストイヤー・セミナーⅡ 第8回 データの入力.
Step-by-Step Guide on How to Start ALICE Analysis
スペクトル法による数値計算の原理 -一次元線形・非線形移流問題の場合-
シミュレーション物理5 運動方程式の方法: サブルーチンの使い方.
2007/1/18 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
MATLAB測位プログラミングの 基礎とGT (1)
北海道大学大学院理学研究科地球惑星科学専攻 地球流体力学研究室 M1 山田 由貴子
gt4f90io gtool4 規約に基づく Fortran90 netCDF I/O ライブラリ
davis / gtool4 プロジェクト その背景と野望
RDoc を用いた Fortran90/95 プログラムのドキュメント生成
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
ファイル操作と文字列の利用.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
アスペクト指向プログラミングを用いたIDSオフロード
概要 Boxed Economy Simulation Platform(BESP)とその基本構造 BESPの設計・実装におけるポイント!
宇宙磁気流体・プラズマシミュレーション サマーセミナー ~三次元MHDコードの作成〜
図書館職員のための アプリケーション開発講習会
スペクトル法の一部の基礎の初歩への はじめの一歩
半無限領域のスペクトル法による竜巻を模した渦の数値実験に向けた研究開発
電界中の電子の運動 シミュレータ作成 精密工学科プログラミング基礎 資料.
アルゴリズムとデータ構造 補足資料5-2 「サンプルプログラムsetop.c」
実行時情報に基づく OSカーネルのコンフィグ最小化
Relativistic Simulations and Numerical Cherenkov
デジタル画像とC言語.
phononの分散関係の計算 -カイラルナノチューブ(18,3)-
gt4f90io: gtool4 規約に基づく Fortran90 netCDF I/O ライブラリ
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
応用課題 8.太陽風磁気圏相互作用 ベクトル化とベクトル並列化(MPI)の3次元グローバルMHDコードを用いて、SUNワークステーションとベクトル並列型のスーパーコンピュータ Fujitsu VPP5000で太陽風と地球磁気圏相互作用のシミュレーションを行い、惑星間磁場(IMF)が北向きと南向きの場合の磁気圏構造を調べる。図形処理として、PostScript言語を用いた断面図や3次元磁力線の描画、VRMLを用いた3次元可視化を実行する。
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
速度ポテンシャルと 流線関数を ベクトルで理解する方法
ガイダンス 電子計算機 電気工学科 山本昌志 1E
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
シミュレーション物理4 運動方程式の方法.
バネモデルの シミュレータ作成 精密工学科プログラミング基礎 資料.
数値解析 第6章.
2008/7/16(情報コース)2008/7/22(通信コース) 住井
プログラム分散化のための アスペクト指向言語
卒論中間発表 2001/12/21 赤道の波動力学の基礎 北海道大学理学部 地球科学科 4年 山田 由貴子.
高度プログラミング演習 (11).
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
情報処理Ⅱ 2007年12月3日(月) その1.
How shall we do “Numerical Simulation”?
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
プログラミング入門2 第5回 配列 変数宣言、初期化について
第4回 配列.
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
第5回 配列.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

SPMODEL - ISPACK と gt4f90io による数値モデル開発 - 電脳 davis – gtool4 に関する ワークショップ SPMODEL - ISPACK と gt4f90io による数値モデル開発 - 小高正嗣 SPMODEL 開発グループ http://www.gfd-dennou.org/arch/spmodel/

我々の目標 理解のための数値モデルが欲しい そのような数値モデルの要件 数式のように数値モデルとその結果を理解 簡単モデルと複雑モデルの結果をつなげて理解 そのような数値モデルの要件 可読性が高い 拡張性が高い 階層化された数値モデル群の一つ

SPMODEL 階層的地球流体力学スペクトルモデル集 基本方針 GFD スペクトルモデルを階層的に整備 ライブラリ(spml)とサンプルプログラムから構成 基本方針 コードの可読性を重視 書法を統一 実行速度性能にはこだわらない 共通のライブラリを利用 プログラム構造を階層化 計算エンジンに ISPACK, データ I/O に gt4f90io

SPMODEL ライブラリ(spml) ISPACK の F90 インターフェース 対応環境・コンパイラ F90 の配列関数機能を活用 http://www.gfd-dennou.org/arch/spmodel/spml.tar.gz 対応環境・コンパイラ x86 Linux: Fujitsu frt, Intel ifc (6.0, 7.0, 8.0) Fujitsu VPP NEC SX (移植作業中)

サンプルプログラム GFD の標準的な方程式系のモデルを整備 1 次元モデル 2 次元モデル 3 次元モデル 移流拡散方程式, KdV 方程式 2 次元モデル 水路領域ブシネスク方程式, 赤道β面浅水方程式 球面順圧渦度方程式, 球面浅水方程式 3 次元モデル 球殻ブシネスク方程式 球殻 MHD 方程式 プリミティブ方程式(開発予定)

読みやすいコードにするために 書法をきめる 手間のかかるデータ入出力は gt4f90io に 変数配列 配列関数 4 つのサブルーチンを call するだけ データの付加情報も渡すことができる netCDF の大域属性を利用

SPMODEL 書法 変数 配列関数 変数にはデータの種類を示す接頭詞をつける (出力型)_(機能)_(入力型) のように書く 実空間データ g_Zeta スペクトルデータ s_Zeta 配列関数 (出力型)_(機能)_(入力型) のように書く スペクトル変換 s_Zeta=s_g(g_Zeta) 発散 s_Div_g(g_Zeta) 引数の型を間違えることが少ない

ソースコード例:時間積分(1) 1 次元線形移流拡散方程式 コード例 (Euler 法で時間積分) 数式のように数値コードを書ける s_ZetaA = s_ZetaB +   & dt*( - U*s_Dx_s(s_Zeta) + D*s_Dx_s(s_Dx_s(s_Zeta)) http://www.gfd-dennou.org/arch/spmodel/1d-cyclic-e/advection-diffusion/sample/f90/advdiff1.f90

ソースコード例:時間積分(2) 球面浅水方程式(渦度発散型) 渦度方程式は leapfrog スキームで w_EtaA=w_EtaB + 2*dt* & (- w_Div_xy_xy(xy_w(w_Eta)*xy_GradLon_w(w_Chi)/R, & xy_w(w_Eta)*xy_GradLat_w(w_Chi)/R)/R & + w_Jacobian_w_w(w_Eta, w_Psi)/R**2) http://www.gfd-dennou.org/arch/spmodel/2d-sphere-w/shallow/shallow-zd/f90/shallow_zd.f90

ソースコード例:時間積分(2) 質量保存の式 Leapforg + 台形 semi-implicit を用いる場合 多少複雑だが十分読めるコードが書ける

ソースコード例:時間積分(2) call get_dHsfc w_HsfcA=((1 + dt**2*Grav*H0*n(:.1))*w_HsfcB        &  + 2*dt*w_dHsfc)/(1 - dt**2*Grav*H0*n(:.1)) … End

ソースコード例:時間積分(2) soubroutin get_dHsfc … w_dHsfc=- (w_Div_xy_xy(xy_Hsfc*xy_GradLon_w(w_Chi)/R, & xy_Hsfc*xy_GradLat_w(w_Chi)/R)/R & - w_Jacobian_w_w(w_Hsfc,w_Psi)/R**2) & - H0*w_DivB & -H0*dt*(w_Div_xy_xy(xy_Eta*xy_GradLon_w(w_Psi)/R, & xy_Eta*xy_GradLat_w(w_Psi)/R)/R & + w_Jacobian_w_w(w_Eta,w_Chi)/R**2 & + w_Lapla_w(w_E)/R**2)

ソースコード例:データ入出力 use gt4history ! モジュール引用 … call HistoryCreate( & ! 出力ファイル作成   file=“output_file”, title=“Run Number”, source=“shallow” & institution=“GFD Dennou Club SPMODEL project”, & dims=(/‘lon’,‘lat’,‘t ’/),dimsizes=(/im,jm,0/), & longnames=(/‘longitude’,‘latitude ’,‘time ’/), & units=(/'deg.','deg.','sec.'/), origin=real(tinit), & interval=real(intrst*delt) ) call HistoryAddVariable( varname=“eta”, & ! 出力変数定義 dims=(/’lon’,’lat’,’t ’/), logname=‘Vorticity’, units=‘1/s’,xtype=‘double’) do it =1, n ! ループ開始 call HistoryPut(‘eta’,xy_Eta) ! 変数出力 end do call HistoryClose ! 入出力終了

計算時の CPU 時間 球面浅水モデルの場合 15 日モデル時間計算 表示は hh:mm:ss まずまずの実行速度 T21 T42 T63 Δt=1800 sec, 720 ステップ(T106 はΔt=900 sec) 表示は hh:mm:ss まずまずの実行速度 T21 T42 T63 T106 Xeon 2.4GHz 00:00:03 00:00:33 00:01:09 00:13:52 VPP800 00:00:09 ---------- 00:01:53

SPMODEL のご利益 数式のような数値コードが簡単に書ける ポイント 書法が決まっている 変数配列の添え字を管理しなくてよい 改変も簡単 コード作成時のバグも出にくい 変数配列の添え字を管理しなくてよい do ループは時間積分ループだけ 改変も簡単 ポイント すべての変数が同じ格子点上にある 交互格子の差分モデルでは格子点情報も必要 中野さんの Grid Modeling System を参照

gt4f90io のご利益 手間のかかる入出力手続きから解放 4 つのサブルーチンだけ覚えればよい netCDF ライブラリを直に使うよりずっと簡単

SPMODEL の課題 差分法と併用する場合 コードを作成しながら検討を予定 ex). 球面プリミティブ方程式モデル Grid Modeling System を使う? 変数配列に構造体は使いたくないなあ… 配列添え字を陽に扱う? 安直だけど可読性は良くないだろう 差分しない 全部スペクトル, 使い物になるだろうか? コードを作成しながら検討を予定

今後の予定 ドキュメントの整備 3 次元モデルの開発と試験 サンプルプログラムマニュアル チュートリアル 球面プリミティブ方程式モデル 1 次元サンプルプログラムのマニュアルのみ完成 チュートリアル プログラム書法など 3 次元モデルの開発と試験 球面プリミティブ方程式モデル 球面 MHD 方程式モデル

参考 URL SPMODEL ISPACK gt4f90io http://www.gfd-dennou.org/arch/spmodel/ http://www.gfd-dennou.org/arch/ispack/ gt4f90io http://www.gfd-dennou.org/arch/gtool4/

おまけ debian パッケージあります apt でインストール /etc/apt/sources.list に以下の 2 行を追加 ISPACK, netCDF のパッケージも用意 詳細はhttp://www/gfddennou.org/arch/spmodel deb ftp://www.gfd-dennou.org/arch/spmodel/debian woody/ deb-src ftp://www.gfd-dennou.org/arch/spmodel/debian woody/ # apt-get install spml

メモ