2009/03/19 の dcmodel ネットミーティングのメモ書き

参加者

  • 神戸
    • 森川 靖大, 納多 哲史, 高橋 芳幸, 西澤 誠也, 今関 翔, 北野 太朗
  • 北大
    • 石渡 正樹

次回日程

  • 日時
    • 3 月 24 日(木) 14:00 -
  • 場所
    • 神戸大: 自然科学 3 号館 508
    • 北大 : 理学部 8 号館コスモスタジオ
    • 九大 : 理学部 3 号館 3605

dcpam 作業報告 (森川)

  • Exner 関数の計算の整理・統合
  • 物理過程全体の構造の整理
  • リスタートのバグの修正
  • リスタートの際の時間チェック機構の追加
  • 放射過程でのリスタートファイルの入出力機構の追加.
  • practice/setup.sh の改善
  • make 時に, どこに実行ファイルができるかといった 情報をチュートリアルに記載
  • 軸対称モデル化に関する調査
    • dcpam では下記の作業が必要であるようだ
      • use 文の書き換え
      • 力学過程内のスペクトル変数の水平方向の 配列サイズを (nm+1)**2 から nm+1 に変更. (nm は最大波数)
      • 経度方向の格子点数を 1 に (これは NAMELIST の編集のみで可能なはず)

gtool5

今後の ToDo に関して

カレンダーに関する議論と ToDo

現状の実装の確認

  • dc_date モジュールで 2 種類の構造体を用意
    • DC_DATETIME (日時を表す)
    • DC_DIFFTIME (時間差を表す)
  • DC_DATETIME
    • 「秒」, 「日」と, 「暦の種類」と「1 日が何秒か」, ローカルタイムに関する情報を保持.
    • 「秒」, 「日」には, 組み込み型の整数ではなく, DC_SCALED_SEC (桁落ちを避けるため, 複数の整数を用いて 10e-6 〜 10e24 までを表現する構造体. dc_date の さらに下請として, dc_scaled_sec モジュールで用意されて いる) を用いている.
  • DC_DIFFTIME
    • 「秒」, 「日」, 「月」と, 「1 日が何秒か」という情報を保持
    • 「秒」, 「日」, 「月」には, 組み込み型の整数ではなく, DC_SCALED_SEC を用いている.

議論

  • DC_DATETIME, DC_DIFFTIME ともに, 「日」や「月」に関する 情報を持っているのは冗長. (「秒」だけで良い).
    • 変換の際の繰り上がり計算が面倒なために「日」や「月」を持っている ようであるが, 「秒」のみの方が構造が分かりやすくて良いのでは.
  • DC_DIFFTIME に「一日は何秒」に関する情報を持っているのは変である (実質的にカレンダーを持ってしまっている).
  • 1 年が何日か, 1日が何秒か, という情報はカレンダーが保持しているべき であり, DC_DATETIME とも DC_DIFFTIME とも分離されているべき.
  • DC_DATETIME が基準となる日時を表し, DC_DIFFTIME は それからの経過時間という認識であれば, 名称は DC_DIFFTIME より「経過したこと」を表す名称の方が良いのであh??
  • 現状では, ユーザが「1 年は何日か」を設定する方法はない.
    • 「1日は何秒か」を設定する手続きは用意されている.
    • 「1 月が何日か」については想定する範囲内では不要であろう.
  • 現在は, DC_DIFFTIME 自体で日, 時, 分, 秒間で変換が可能であるが, 「1日が何秒か」は DC_DIFFTIME に入っているべきではないので, 時, 分, 秒間での変換の手続きのみ残す方が良いだろう.
    • 時, 分は 60 進法で決まっているため, カレンダーに依存しないもの として考えてよいだろう
  • 備考: NCEP のデータの時刻の単位は hours である.
    • 初期時刻は大きな値が入っている
  • カレンダー用の構造体が別途必要か?
    • 単純なものとして「一年が何日か」といった情報を格納.
    • うるう年のようなものを含み, かつ gtool5 で用意されている カレンダー以外を使用する場合には, 関数を登録できるとよいが??
      • 関数やサブルーチンに関数名を渡すことは可能
  • DC_DATETIME に必要な情報とは?
    • 基準となる日時を示す「秒」 (ゼロを暗黙に仮定し, 明示的に変数を保持しないという 選択肢もあり. 現状はそのようになっている), 基準日時と示すべき日時との差を示す「秒」, どのようなカレンダーを使っているか, の 3 つ
    • ローカルタイムを表現するための zone をどういう形で保持すべきかは保留
  • DC_DIFFTIME に必要な情報とは?
    • 差を示す「秒」のみで良い.
  • 例えば火星を計算する場合, しかも, 「地球の日時で換算していついつからいついつまで計算する」 といった場合にはどうするか??
    • モデル側で地球の暦と火星の暦の 2 つを持って それを用いればどうにかなるかな??

ToDo

  • DC_DIFFTIME について
    • データとして dc_scaled_sec 型の秒だけ持つようにする
    • min, hour のみへの変換関数のみ残し, 他は削除する
      • うるう秒については保留
    • 機能により即した名前を考える
      • 候補
        • DC_ELAPSED_TIME
        • DC_ELPSTIME
  • DC_DATETIME について
    • 暦情報と基準日時と DC_DIFFTIME 型の秒を持つ
      • 暦情報そのものは DC_DATETIME とは別の構造体または モジュールで管理できるのが望ましい
    • 現在は day_seconds が暦と別に管理されているため, day_seconds も暦情報の一部として管理できるように 設計する
    • ユーザが 1 年が何日かを任意に設定できるようにする
      • 定数として渡せる
      • 関数として設定できる
    • 年や月という概念が不要な場合にも用いることができる ような暦も用意しておく
  • Gtool_historyauto について
    • 現在は HistoryAutoPut の第一引数に DC_DIFFTIME 型の 変数を与えるようになっているが, これについても変更が 必要かもしれない. (現状のままでもよいかもしれず, 上記の実装が行われてから考える).