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

[dennou-ruby:003411] Re: GPhys での全球平均の方法



西澤様, 堀之内様,

石岡@岡山大です.


お忙しいところありがとうございます.
教えていただいた方法で絵を描くことができました.


On 2011年10月24日 17:51, Takeshi Horinouchi wrote:
堀之内です.

久々にこういう質問が流れてうれしいです.

GPhys も全球平均を計算するようなメソッドなどがあるのでしょうか?
西澤さんのメールからご想像通り,これに対する直接の回答は,

  ありません

です.(^^;)

で,西澤さんご指摘のやり方(avarage_weightを設定
し,GPhysのaverageメソッドを使う)もありますが,
他にどうすれば簡単かつわかりやすくできるかという
のを書きます.

例として,GPhysの tar ボール付属の T.jan.nc を使うとします
(チュートリアルページにおいてあるファイルです).
お望みのことは,次のように陽に重みをかけて計算すればでき
ます.

  tem = GPhys::IO.open("T.jan.nc","T")
  cos_phi = ( tem.axis("lat").to_gphys * (Math::PI/180.0) ).cos
  fact = cos_phi / cos_phi.mean
  tm = (tem * fact).mean("lon","lat")

これなら読めば何をやってるかはわかりますね.ポイントは2行目で,
座標軸を取り出して (axisメソッド),GPhys 化する(to_gphysメソッド)
ことです.すると,一次元データ(fact)でも,多次元データ(tem)と
二項演算ができます.--- 次元の対応は自動判断されます.
このように axis(dim).to_gphys はいろんなところで使えますので,
覚えておくと損しません.

# ちなみにもしも上記のコードの前に
     include NumRu::Misc::EMath 
   しておけば,2行目は次のようにも書けます:
     cos_phi = cos( tem.axis("lat").to_gphys * (PI/180.0) )

さて,ここからは,西澤さんのコメントに関連して,もしもGPhys で
今以上にサポートするならどうするのが良いかかについてです.

私は今は,球面関連の基礎的な演算は GPhys付属ライブラリ 
lib/numru/ganalysis/planet.rb に入れていくのがいいかなと
思ってます.緯度に関する平均は絶対に cos(phi) 重みを
つけるとは限らないし,また裏で自動でやってしまうと,
「そんなことやってるとは知らなかった」となるかもしれない
ので,属性による自動対処よりは(やるなら)メソッドで陽
に対応するほうが良い気がしています.--- 確信というわけでは
なく,どっちかといえばそうかなというレベルの話です.

# いずれにしても planet.rb の整理はもっと進めたほうがいいですが.

岡山大 石岡様


以下を使えばお望みのことができるのではと思います。
http://ruby.gfd-dennou.org/products/gphys/doc/axis.html#label-39
http://ruby.gfd-dennou.org/products/gphys/doc/gphys.html#label-38

netcdf にしかるべき **_weight が入っていれば、
自動で average_weight , integ_weight を設定してくれるようになってると良いのかもしれません。
これってCF か gtool4 規約等で決まっているんでしたっけ? > 識者の方

西澤誠也


2011/10/24 ISHIOKA Sho <sc420529@xxxxxxxxxxxxxxxxx>:
はじめまして,
岡山大学 B4 石岡です.

GPhys の使い方について質問させてください.

自分は大気大循環モデル(dcpam5)を使った計算を
行っています. そして, その計算結果の解析に GPhys を
使用しています.

今, データ (地表面温度など) の全球平均した値の時間変化の
絵を描きたいのですが, 全球平均をする方法がわからなくて
困っています.

全球平均 (水平方向) をする場合, 緯度によって経度方向の
格子点間隔が違うため重みをつけなければならないことは
わかります.

gtool3 には全球平均をおこなうコマンドがあるようなのですが,
GPhys も全球平均を計算するようなメソッドなどがあるのでしょうか?

ちなみに以下のページで探してみましたが見つけることができませんでした.
http://ruby.gfd-dennou.org/products/gphys/doc/

なにかわかりましたら, 教えていただけないでしょうか.
よろしくお願いします.


--
岡山大学理学部
地球科学科 BC4
石岡 翔




-- 
Seiya Nishizawa
Center for Planetary Science, Kobe University
TEL : 078-599-6730
FAX : 078-599-6735
堀之内 武
北海道大学 地球環境科学研究院 地球圏科学部門
〒060-0810 札幌市北区北10条西5丁目