多圏間・階層間結合モデル カップラーの開発

27
多多多 多多多多多多多多 多多多多多多多多 多多多多NICT/JST 多多多多 多多 )、一( NICT )、 多多多多 多多多多 多 多多多多 ()、( NICT )、 多多多多 多多多 多 多多多多多 ()、( NICT

description

多圏間・階層間結合モデル カップラーの開発. 寺田直樹( NICT/JST )、深沢圭一郎( NICT )、 金田香織(京大理)、陣英克( NICT )、 田中高史(九大)、品川裕之( NICT ). 本研究の目的. 前回の検討会では、開発者ごとに異なるディレクトリでモデル(モジュール)開発を行い、ディレクトリを跨いでモデル結合を行う方法案を紹介した 今回の発表では、モデル結合の具体例、特にインターフェース部の紹介と説明を行う       個人作業 → 多人数での作業      まずはインターフェースの整備が必要. 本研究の目的は”基盤部”の整備 - PowerPoint PPT Presentation

Transcript of 多圏間・階層間結合モデル カップラーの開発

Page 1: 多圏間・階層間結合モデル カップラーの開発

多圏間・階層間結合モデルカップラーの開発

寺田直樹( NICT/JST )、深沢圭一郎( NICT )、

金田香織(京大理)、陣英克( NICT )、田中高史(九大)、品川裕之( NICT )

Page 2: 多圏間・階層間結合モデル カップラーの開発

本研究の目的• 前回の検討会では、開発者ごとに異なるディレ

クトリでモデル(モジュール)開発を行い、ディレクトリを跨いでモデル結合を行う方法案を紹介した

• 今回の発表では、モデル結合の具体例、特にインターフェース部の紹介と説明を行う

      個人作業 → 多人数での作業     まずはインターフェースの整備が必要

Page 3: 多圏間・階層間結合モデル カップラーの開発

• 本研究の目的は”基盤部”の整備– 共有して初めて意味を成す

– 誰でも自由に利用して頂きたい (ボランティアベースで提供。× 特定グループのプロジェクト)

– 助言、批判、協力 大歓迎です

• 目標とするインターフェース– 多人数での作業が可能。加えて、個人のサイエンスを楽しむこ

とも可能– モデルの単なる結合から、究極コード(ブラソフ等)への連続

的移行が可能• 複数領域モデルの結合

• 計算エンジンの切り替え

• 便利ツールの共有化 ... などを自由に行える

– 並列化・非並列化コードを吸収• (ペタコンを狙うなら非並列は論外ですが。。)

Page 4: 多圏間・階層間結合モデル カップラーの開発

• 本発表では、開発中のインターフェース部(カップラーと接合ルーチン)を紹介– 現在は近くの研究者と不定期に議論

– リソースを共有出来る場所を見つけて公開して行きたい

Page 5: 多圏間・階層間結合モデル カップラーの開発

適用範囲例1: 宇宙天気モデル            → 磁気嵐シ

ミュレータ

• 多くの開発要素• 一人のスーパーマン

から多人数での開発へ

[Toth et al., 2005]

Page 6: 多圏間・階層間結合モデル カップラーの開発

適用範囲例2: HZs• G,M,K 型恒星放射スペ

クトル観測( I. Ribas, Spain )

• 恒星風 , CME モデル( M. Khodachenko, Austria )

• 惑星熱圏モデル( Y. Kulikov, Rusia )

• 惑星外圏モデル( H. Lammer, Austria )

• 惑星電磁圏モデル( N. Terada, Japan )

• 隕石デリバリー , 環境進化・気候モデル , ...

• ISSI チームプロポーザル( 2007- )

• Europlanet, ADAM&M

[Lammer et al., Astrobiology, 2007]

200 個以上の系外惑星が発見地球型も

Page 7: 多圏間・階層間結合モデル カップラーの開発

今回、開発したカップラーによって結合した3モデル

QuickTime˛ Ç∆ÉVÉlÉpÉbÉN êLí£ÉvÉçÉOÉâÉÄ

ǙDZÇÃÉsÉNÉ`ÉÉÇ å©ÇÈÇΩÇflÇ…ÇÕïKóvÇ≈Ç∑ÅB

太陽風 -火星電離圏 MHD モデル[Terada et al.]

QuickTime˛ Ç∆ÉVÉlÉpÉbÉN êLí£ÉvÉçÉOÉâÉÄ

ǙDZÇÃÉsÉNÉ`ÉÉÇ å©ÇÈÇΩÇflÇ…ÇÕïKóvÇ≈Ç∑ÅB

外圏底より上側 粒子モデル[Kaneda et al.]

外圏底より下側 two-stream モデル[Kaneda et al.]

Page 8: 多圏間・階層間結合モデル カップラーの開発

モデル結合方法簡易結合からソース公開まで、4段階の開発レベルを用意

– レベル1• カップラー(最上位ルーチン)とその接合部(接合ルーチン)の編集だ

けでモデル結合を実現。下位ルーチンはなるべく触らないで済むようにする

• 下位ルーチンは実行形式(静的ライブラリ)のみ公開• Grid converter はカップラー内で用意• 結合変数は、接合ルーチン内で MKS 単位系に変換

– レベル2• 結合変数の規格化量・規格化ルーチンを共有化

– レベル3• 下位ルーチンにおいてもプログラムの記述形式を統一• 下位ルーチンも汎用性のあるもの(引数で呼ぶ形)にする

– レベル4• 下位ルーチンも含めてソース公開

Page 9: 多圏間・階層間結合モデル カップラーの開発

• カップラーと接合ルーチンの記述ルール– 気象庁・気象研究所で策定されたルールに準拠– 基本的には、電脳倶楽部 dcmodel のコーディング

ルールを踏襲させて頂く• 変数命名法、配列代入文の上下限指定の省略は廃止(可読性

はある程度犠牲にする)などが異なる

• 用意された“ひな形”を編集して結合を実現– カップラー

• exm3_couple.f90

– 接合ルーチン• pkm3_ntmism.f90, pkm3_kkexsp.f90,

pkm3_kfmgsm.f90, ...

– Makefile のひな形も各所に用意

exm: execution modulepkm: package modulecrm: constant reference modulevrm: variable reference module

Page 10: 多圏間・階層間結合モデル カップラーの開発

ディレクトリ構成

kkexsp ntmism kfmgsm tuutlv couple

kkexsp_ntmism_kfmgsm kkexsp_kfmgsm ...

beta (開発中コード)

Page 11: 多圏間・階層間結合モデル カップラーの開発

ディレクトリ構成

kkexsp ntmism kfmgsm tuutlv couple

kkexsp_ntmism_kfmgsm

Makefile_ar

Makefile

Makefile_couple

make.ink

beta (開発中コード)

exm3_local.f90

pkm3_kkexsp.f90

exm3_couple.f90

コード群( a.f90, b.f90, ... )

静的ライブラリlibkkexsp.a  (← pkm3_kkexsp.o, a.o, b.o, ... )を作成・公開

Makefile静的ライブラリ(* .a )とexm3_couple.f90を結合

kkexsp_kfmgsm ...

Page 12: 多圏間・階層間結合モデル カップラーの開発

ディレクトリ構成

kkexsp ntmism kfmgsm tuutlv couple

make.ink

beta (開発中コード)

静的ライブラリlibkkexsp.aを作成

変数は引数で渡す

計算エンジン部(ブラソフなど)便利ツール群 , ...

libtuutlv.a

Makefile_ar

コード/ツールを用いたら、そのディレクトリ開発者(と共同開発者)を共著に入れるルール⇒ 腕自慢の若手が活躍出来る場

Makefile_arpkm3_kkexsp.f90

コード群( a.f90, b.f90, ... )

Page 13: 多圏間・階層間結合モデル カップラーの開発

ディレクトリ構成

kkexsp ntmism kfmgsm tuutlv couple

make.ink

beta (開発中コード)

静的ライブラリlibkkexsp.aを作成

変数は引数で渡す

計算エンジン部(ブラソフなど)便利ツール群 , ...

libtuutlv.a

Makefile_ar

領域モデルの結合⇒ 計算エンジンの切り替え  便利ツール群の共有化究極コードへの連続移行を視野に

Makefile_arpkm3_kkexsp.f90

コード群( a.f90, b.f90, ... )

Page 14: 多圏間・階層間結合モデル カップラーの開発

結合の実践手順1. 手持ちのプログラムのメイン部分を以下の3つに分割      -   init (初期値設定、ファイル読み込み部)      -   exe (メインループ部)      -   finalize (終了処理、ファイル書き出し部)2. 接合ルーチン( pkm3_ntmism.f90 など)の”ひな形”の

指定箇所に、分割したプログラムを挿入3. カップラー( exm3_couple.f90 )の”ひな形”のサブルー

チンコール部分と、結合変数に関する部分を書き換え4. 必要に応じて grid converter を作成 or書き換え

(あと、細かい変更箇所が数カ所、、)

exm: execution modulepkm: package modulecrm: constant reference modulevrm: variable reference module

Page 15: 多圏間・階層間結合モデル カップラーの開発

カップラー( exm3_couple.f90)の説明( 1/5)

PROGRAM exm3_couple !--------------------------------------------------------------------- ! Execution module ! Coupler of 'kkexst', 'kkexsp', and 'ntmism' ! kkexst : Kaori Kaneda, Exosphere two-stream model (open file no.*) ! kkexsp : Kaori Kaneda, Exosphere particle tracing model (open file no.*) ! ntmism : Naoki Terada, Takashi Tanaka, and Hiroyuki Shinagawa, ! Magneto-ionosphere MHD model (open file no.*) !--------------------------------------------------------------------- USE vrm3_couple ! MPI変数や exm3_couple内で使う変数を宣言 USE pkm1_kkexst USE vrm1_kkexst ! kkexst の結合変数を宣言 USE pkm3_kkexsp USE vrm3_kkexsp ! kkexsp の結合変数を宣言 USE pkm3_ntmism USE vrm3_ntmism ! ntmism の結合変数を宣言 USE pkm3_ntmism2kkexsp IMPLICIT NONE

! ! Initialize !

! ! MPI initialize !

( MPI 初期化 , MPI_INIT, MPI_COMM_SIZE, MPI_COMM_RANK ) ( MPI 初期化 , MPI_SPLIT, MPI_COMM_SIZE, MPI_COMM_RANK )

Page 16: 多圏間・階層間結合モデル カップラーの開発

カップラー( exm3_couple.f90 )つづき( 2/5 )

! ! kkexst initialize !

CALL pkm1_kkexst_init(引数 ) ! 引数には主に結合変数が入る

! ! kkexsp initialize !

CALL pkm3_kkexsp_init(引数 )

! ! ntmism initialize !

CALL pkm3_ntmism_init(引数 )

! ! Grid conversion initialize (@ ntmism master PE) !

CALL ntmism2kkexsp_gconv_init(引数 )

! ! Send to master PEs !

CALL MPI_BCAST(引数 )

Page 17: 多圏間・階層間結合モデル カップラーの開発

カップラー( exm3_couple.f90 )つづき( 3/5 )

! ! Main loop !

tim0_couple_t = 0.0_npr0_r tim0_couple_dt = 1.0e-0_npr0_r ! in [s] nlp0_couple_lmax = 1000

DO nlp0_couple_loop = 1, nlp0_couple_lmax

! ! kkexst exe !

CALL pkm1_kkexst_exe(引数 ) ! 引数には主に結合変数が入る

! ! kkexsp exe !

CALL pkm3_kkexsp_exe(引数 )

! ! ntmism exe !

CALL pkm3_ntmism_exe(引数 )

Page 18: 多圏間・階層間結合モデル カップラーの開発

カップラー( exm3_couple.f90 )つづき( 4/5 ) !

! Grid conversion (@ ntmism master PE) !

CALL ntmism2kkexsp_gconv_exe(引数 )

! ! Send to master PEs !

CALL MPI_BCAST(引数 )

! ! Advance coupling variable !

fld3_kkexsp_nhi(変数範囲 ) = fld3_kkexsp_nhi_adv(変数範囲 ) fld3_kkexsp_noi(変数範囲 ) = fld3_kkexsp_noi_adv(変数範囲 ) fld3_kkexsp_no2i(変数範囲 ) = fld3_kkexsp_no2i_adv(変数範囲 ) fld3_kkexsp_nco2i(変数範囲 ) = fld3_kkexsp_nco2i_adv(変数範囲 ) fld3_kkexst_phai_u(変数範囲 ) = fld3_kkexst_phai_u_adv(変数範囲 )

tim0_couple_t = tim0_couple_t + tim0_couple_dt END DO

! ! Finalize !

Page 19: 多圏間・階層間結合モデル カップラーの開発

カップラー( exm3_couple.f90 )つづき( 5/5 )

! ! kkexst finalize !

CALL pkm1_kkexst_finalize(引数 ) ! ! kkexsp finalize !

CALL pkm3_kkexsp_finalize(引数 )

! ! ntmism finalize !

CALL pkm3_ntmism_finalize(引数 )

! ! MPI finalize !

CALL MPI_FINALIZE(引数 )

STOPEND PROGRAM exm3_couple

Page 20: 多圏間・階層間結合モデル カップラーの開発

接合ルーチン( pkm3_ntmism.f90等)の説明

MODULE pkm3_kkexsp !--------------------------------------------------------------------- ! モジュールの説明 (open file no.*) ! 内部サブルーチンの簡単な説明 ! - pkm3_kkexsp_init : initialize calculation (public) ! - pkm3_kkexsp_exe : execute calculation (public) ! - pkm3_kkexsp_finalize : finalize calculation (public) !--------------------------------------------------------------------- IMPLICIT NONE PRIVATE ! private 宣言で閉じ込め PUBLIC :: pkm3_kkexsp_init, & & pkm3_kkexsp_exe, & & pkm3_kkexsp_finalize

INTEGER(KIND = 4), PARAMETER :: npr0_i = 4, & & npr0_r = 8, & & npr0_c = 1

! ! ここで kkexsp コード群に共通の定数や変数を宣言(もしくは宣言モジュールを USE する) ! 例えば、、、 !

INTEGER(KIND = npr0_i), PARAMETER :: natom = 100000000 REAL (KIND = npr0_r), SAVE :: vel(natom)

Page 21: 多圏間・階層間結合モデル カップラーの開発

接合ルーチン( pkm3_ntmism.f90等)の説明

CONTAINS

SUBROUTINE pkm3_kkexsp_init(引数 ) ! 引数には主に結合変数が入る !------------------------------------------------------------------- ! 内部サブルーチンの説明 !------------------------------------------------------------------- IMPLICIT NONE

! ! ここで内部サブルーチンで用いる定数や変数を宣言 !

!------------------------------------------------------------------- ! Start main block !

! ! ここにプログラムの初期化部分を挿入 !

! ! End main block !-------------------------------------------------------------------

RETURN END SUBROUTINE pkm3_kkexsp_init !---------------------------------------------------------------------

Page 22: 多圏間・階層間結合モデル カップラーの開発

接合ルーチン( pkm3_ntmism.f90等)の説明

SUBROUTINE pkm3_kkexsp_exe(引数 ) ! 引数には主に結合変数が入る !------------------------------------------------------------------- ! 内部サブルーチンの説明 !------------------------------------------------------------------- IMPLICIT NONE

! ! ここで内部サブルーチンで用いる定数や変数を宣言 !

!------------------------------------------------------------------- ! Start main block !

! ! ここにプログラムのメインループ部分を挿入 !

! ! End main block !-------------------------------------------------------------------

RETURN END SUBROUTINE pkm3_kkexsp_exe !---------------------------------------------------------------------

Page 23: 多圏間・階層間結合モデル カップラーの開発

接合ルーチン( pkm3_ntmism.f90等)の説明

SUBROUTINE pkm3_kkexsp_finalize(引数 ) !------------------------------------------------------------------- ! 内部サブルーチンの説明 !------------------------------------------------------------------- IMPLICIT NONE

! ! ここで内部サブルーチンで用いる定数や変数を宣言 !

!------------------------------------------------------------------- ! Start main block !

! ! ここにプログラムの終了処理部分を挿入 !

! ! End main block !-------------------------------------------------------------------

RETURN END SUBROUTINE pkm3_kkexsp_finalize !---------------------------------------------------------------------

END MODULE pkm3_kkexsp

Page 24: 多圏間・階層間結合モデル カップラーの開発

並列実行時のモデル間データ(結合変数)伝送

• MPI を用いて行う• 各モデルで master PE を定義

– 各モデルの接合ルーチン: master PE にデータを集める– カップラー: master PE 間でデータ通信– 必要に応じて新コミュニケータを作成(以下パターン2では必要)

• パターン1– 全てのモデルが MPI 非対応  (カップラーでのみMPI を利用)

• パターン2– いくつかのモデルが MPI対応

• パターン3– 全てのモデルが MPI対応  (ペタコンでは必須?)

モデル1モデル2 モデル3

BCAST (or SENDRECV)

モデル1モデル2 モデル3

BCAST (or SENDRECV)

GATHERV

モデル1 GATHERV

モデル2 GATHERV

モデル3 GATHERV

青:master PE

Page 25: 多圏間・階層間結合モデル カップラーの開発

結合変数: 更新のタイミング

t=t0

t=t0+dtcouple

磁気圏モデル 電離圏モデル 熱圏モデル

結合変数nM

結合変数はt=t0 ~ t0+dtcouple の間は固定

更新

結合変数nI

結合変数nT

nM’ nI’ nT’

Page 26: 多圏間・階層間結合モデル カップラーの開発

問題点、その他• 問題点

– MPI を理解している人が一人は必要 → 一人ぐらいいるでしょう

– 変数のネーミング → 検討中– grid converter の一般化は困難 → 個別対応– ファイル番号 → 開けたらすぐに閉める(例えば

ファイル番号 10-19 は一時的な開け閉め用とする)。開けっ放しのファイル番号はカップラーのコメント欄に明示

– 実数(整数 ? )の精度 → 結合変数に渡す際に double に統一

– grid conversion で保存則等は満たすべき → 将来の課題

Page 27: 多圏間・階層間結合モデル カップラーの開発

問題点、その他

• その他– どれぐらいの手間と時間がかかったか

• 規格を決定してからは約 10日。今やれば 2〜 3日

– 苦労したところ• MPI が絡むところがやっかい(だった)

– 他モデル開発者とのやりとり• 金田さんからは A4 で3枚の説明書きをもらった• 格子情報は電話で確認