[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:001814] GPhys::EP_flux



dennou-ruby の皆様

塚原@北大林研です.

気象の Eliassen-Palm Flux(EP_flux) を計算する GPhys のモジュールを堀之内さんと
共同で作成しようと思っています. 具体的には

  * デカルト座標の微分演算モジュール
    * ((<module NumRu::Spherical>)) / ((<module NumRu::GPhys::Spherical>))
  * 球面座標の微分演算モジュール
    * ((<module NumRu::Cartesian>)) / ((<module NumRu::GPhys::Cartesian>))
  * EP_flux 計算モジュール
    * ((<module NumRu::GPhys::EP_flux>))

といったモジュールを作成するつもりです. 本日作戦会議を行ったのですが, その
メモを dennou-ruby 宛にも送付させていただきます. 製品の形もない状態で申し訳
ありませんが, 宣伝ということでお許しいただきたく思います. 

# 蛇足ですが, 08/09 まで京大生存圏にお邪魔しています. それまでにβ版を完成させ
# るつもりです.

--------------------------------------
北海道大学院理学研究科 地球惑星科学専攻
地球流体力学研究室  M2  塚原大輔

email::daktu32@xxxxxxxxxxxxxxxxxxxx
--------------------------------------
=begin
= GPhys 用 EP-flux 計算モジュール作成作戦メモ

このメモは, 京大生存圏の堀之内さん部屋で行われた EP-flux モジュール作成に関する
堀之内さんと塚原の打ち合わせメモである.

== 履歴
2004/08/03(火) 塚原大輔 -- 新規作成.


== 作成するモジュール
名称は仮である.

* ((<module NumRu::Spherical>)) / ((<module NumRu::GPhys::Spherical>))
  * 球面座標での微分演算を行う関数群. NArray, GPhys の双方に対して作成.
* ((<module NumRu::Cartesian>)) / ((<module NumRu::GPhys::Cartesian>))
  * 直交直線座標での微分演算を行う関数群. NArray, GPhys の双方に対して作成.
* ((<module NumRu::GPhys::EP_flux>))
  * EP_flux を算出する関数. GPhys に対して作成.

=== 微分演算 モジュール

* NumRu::Spherical 
  * 球面座標での微分演算モジュール.
    * xderiv, yderiv, rot, div, xdiv, ydiv, grad, xgrad, ygrad, lapla, ilapla, jacobian, .., ydiv_m0, ygrad_m0, yderiv_m0, etc.
  * 等間隔グリッドデータを前提とする
    * その他のグリッド(特にガウス緯度)についてはおいおい対処.
    * ISPACK を導入しやすいよう意識して枠組みを作成
  * スペクトル変換, 微分については DCL の SHTLIB を利用
    * ((<URL|http://www.gfd-dennou.org/arch/ruby/products/ruby-dcl/ruby-dcl-doc/math2/node24.html>))
* NumRu::Cartesian 
  * デカルト座標での微分演算モジュール.
    * スタッガードに対する関数はとりあえず作らない.
  * とりあえず差分法
  * cderiv(中央差分), fderiv(前方差分)..etc.

* NumRu::GPhys::Spherical
  * NumRu::Spherical を利用
  * データの定義領域のチェック(緯度は何度から何度までか, 緯度経度なのか緯度のみか, とか)
    * メソッド化して, 下請けに応じて取り替えられるようにする
      * ISPACK と SHTLIB でデータの定義領域が(ちょっと)異なる
    * 軸の単位をチェック(角度かどうか)して, 判定
      * 北から南にデータが入っている場合(NCEP はそう)は, 逆向きにしてあげる
    * 将来的には, (可能な限り)領域を適合させられるようにする.
  * 単位, 地球半径を考慮
* NumRu::GPhys::Cartesian
  * NumRu::Cartesian を利用
  * 座標変数の自動更新
    * 例 : 半整数グリッドと整数グリッド
  * 単位を考慮

=== EP_flux モジュール(NumRu::GPhys::EP_flux)
* 基本は近似を行わない, いわゆるフルセットの EP_flux
  * 近似を導入しようとも, 微分演算モジュールは作らねばならないため, コストは一緒.
  * オプションで近似形を用いるかどうか切り替えられるようにする.
* 入力変数
  * 東西風, 南北風, 鉛直風(omega or w), 温度(temp or theta)
  * 鉛直座標は圧力座標(P or logP)
* 出力変数
  * Fy, Fz, uv_bar, ...
* divF 計算メソッドを作成
  * Fy, Fz を引数にとる

== スケジュール(目標)

(1) NArray 版微分演算モジュールの作成     -- 8/4(水)
(2) GPhys  版微分演算モジュールの作成     -- 8/5(木)
(3) EP_flux 算出モジュールの作成          -- 8/6(金), 8/7(土)
(4) チュートリアルの作成                  -- 8/8(日), 8/8(月)

=== 留意点
* コーディングとテストは同時進行
* テストの方針
  * 解析的解のデータと出力を比較する
* テストがある程度通るようになったら, ドキュメントを作成(日本語 and RD)

=end