[ English | Japanese ] [ 地球流体電脳倶楽部 / dcmodel / SIGEN.htm ]
- 日時: 2007/12/26
- 場所: 国立天文台三鷹キャンパス, 北大, 神戸大
- 参加者:
- 天文台: 林, 森川, 佐々木, 石渡, 小高, 中島, 杉山
- 北大: 山下, 徳永
- 神戸: 高橋
- スケジュール
- 懸案事項の確認と検討
- 12/26 午前 (09:00 - 12:30)
- スケジュール確認
- 懸案事項についての検討
- gtool4 規約
- プログラム書法の検討
- dcpam と deepconv でのソースコードの見た目,
プログラム構造の違いを確認
- 確認する項目の例
- モジュールの設計方法
- 関数, サブルーチンの命名方法
- 12/26 午後 その 1 (14:30 - 18:30)
- 12/26 午後 その 2 (21:00 - 22:00)
- 現状認識
- gtool4 規約を今後どうするか
- CF 規約に準拠した GFD ユーザのための規約とする
- CF 規約と同じ意味を持つ属性で, 異なる名前を持つものは CF 規約にそろえる
- モデル開発にあたっての注意事項
- CF 規約の Standard Name Table で指定されている名前のうち, そのまま使用してもさしつかえないものであれば, それを standard name 属性値として用いる
- ただし, Standard Name Table とつきあっていくには注意が必要
- どんどん地球に特化した名前が増えていくことになると予想される. すでに "air_temperature" "sea_water_temperature" などの名前がリストされている.
- 我々が無批判に付き合って行くと "Mars air temperature" などという名前を付けていくのか, 大気と海洋の区別がつかない木星の場合はどうするのか, という問題が生じる.
そのような場合は standard name 属性を使用しない, ということになるだろう.
- spmodel のような抽象的なモデルの場合には, standard name 属性を使用しないのが正しい.
- ToDo (石渡)
- Fortran90 の関数の使い方
- 以下の Fortran90 の関数の使い方について dcmodel
プログラミングガイドに加筆する.
- Fortran90 の関数の仮引数の授受特性は in とする.
- コンパイラによっては, 仮引数の授受特性を inout,
または out にすることができるため
- deepconv
- コメント
- サブルーチンの仮引数に対する授受特性のコメントがない
- ファイルの I/O
- gt4_history のサブルーチンを call するラッパーモジュールを用意している
- メインプログラム内に gt4_history のサブルーチンがずらずら並ぶのがいやだったため, メインプログラムから分けた.
- dcpam
- ファイルの I/O
- メインプログラムで予報変数とリスタート用を出力するための gt4_history のサブルーチンを直接 call している
- 各モジュール(力学コア, 物理過程)の内部でも I/O を行っている
- モジュールを着脱したときに I/O まわりをできるだけいじらないようにするため
- gt4_history のサブルーチンがメインプログラムにずらーっと並んでいて, 読みづらい. 多少整理して読みやすくすることは可能.
- I/O 部分のプログラムの書き方
- 問題点: メインプログラム内の I/O 関連のサブルーチン call などを記述した部分が長くなってしまう
- 現状
- deepconv: メインプログラムで call していた I/O 関連サブルーチンをモジュール化して別ファイルにまとめた
- 当初はメインプログラムのサブセットだったはずが, メインプログラムで参照されていない変数を出力するようになっている. モデルの各パーツの着脱の妨げになっている.
- dcpam: 出力する変数が参照されている場所で I/O 関連サブルーチンを call する.
- メインプログラムで参照されている変数はメインプログラム内で出力
- モジュールで参照されている変数はモジュール内で出力
- メインプログラムが読む気が失せるくらい長い, 時間積分ループになかなかたどりつけない, という問題がある
- 今後の対策
- 基本方針: メインプログラムで出力するのはメインプログラムで参照されている変数だけにする. モジュールで参照されている変数はモジュール内で出力するようにする.
- dcpam 方式を採用
- メインプログラムの I/O の基本設定に関するサブルーチン call 部分は内部サブルーチンにまとめる.
- 内部サブルーチンの場合は call しているプログラム内において, 内部サブルーチンであることを明記する.
- dcpam4 におけるモジュール設計
- モジュールで初期化の際に値が確定される変数は,
構造体に定義されている要素に格納する.
- 構造体変数の初期化, 参照, 代入を行う手続きの名前は
統一する
- use 文で参照するのは手続きと型のみ. モジュール内で
定義した変数・定数を参照する場合は, 参照手続きを介
して行う. 直接参照, 代入はダメ
- コメント
- 可変性は確保できるかもしれないが, 可読性は下がっているように見える
- 情報隠蔽しすぎて読みにくい(?)
構造体の要素を定義したモジュールまでたどって
いかないと, コードを読んでも何をやっているか
わかった気がしない
- 情報隠蔽が不十分で読みにくい(?)
- 実際に計算を行っている部分にたどり着くまで時間が
かかる.
- 初期化などの手続き名がどのモジュールでも同じ
なので, 手続きを定義しているモジュールを発見
するのに手間がかかる.
- たとえば phy_ape.f90 内において, たくさん
call されている Create がどのモジュールで
定義されているのかわからない,
- 手続きの命名を工夫するだけでかなり改善できる
かもしれない.
- たとえば,
湿潤過程(積雲)の初期化手続きは CreateCumulus
など, 機能を反映しつつ固有名詞をふくまない
ような手続き名にする.
- dcpam4 におけるプログラム雛型ファイルの作成方法
- Ruby スクリプトで自動的に生成する
- dcmodel_f90sample_maker.rb
- f90 モジュール, テストプログラム,
NAMELIST ファイル,シェルスクリプト が作成される
- コメント
- 出力変数を増やす場合にどこからどこまでをコピー
ペーストすればよいのか, すぐにはわからない
- 単に変数出力するだけのことをやっているはず
なのだが, 何故か読みにくい
- 出力部分以外は内部サブルーンにすると読みやすなる?
- 雛型を用意して書き換えるスタイルに慣れていない.
- 可変性は確保できるかもしれないが, 可読性は下がって
いるように見える
- 対応策はありそうだが, これで OK という案は
現時点では思い付かない.
- deepconv における物性値の取扱方法
- とりあえずソースコードを眺めた
- モデル内では以下のパラメータの値を保持している
- 基準状態のエントロピー
- 基準状態のエンタルピー
- 温度の関数としての比熱の値を格納したテーブル
- 検討すべき課題
- deepconv で用いている方法は dcpam でも使えるか?
使えるようにするにはどうしたらよいか?
dcmodel Development Group / GFD Dennou Staff
Last Updated: 2007/12/31, Since: 2007/12/26