[注(2006-12-16)] 12月21日の授業では、この内容は実習課題ではなくデータの応用例として紹介します。
[実習9]での水収支の計算では、
水蒸気収束量はラジオゾンデの観測データから単純な仮定をして計算した。
ここでは、これの代わりに
[実習7]で扱った、
GAME再解析[別ページ参照]の
データの鉛直積算した水蒸気量と水蒸気輸送ベクトルのデータを
水収支に使うことを試みる。
プログラム例は
/pub/sfc/earthobs/example/reanal_wbal/
に用意した。
ただし、急いで作ったので、まちがいが残っているかもしれない。
もしまちがいに気づいたら訂正する。
座標系は球面座標を使ったほうがよいが、 ここでは[実習9]で採用したのと同じ 直交直線座標で近似する。
注意: 今回は、ファイル名中の文字として、
アンダースコア(_
)を使っているものがたくさんあります。
ブラウザやフォントによっては空白とまぎらわしいですが、
注意して見わけてください。
まず、各格子点で水蒸気収束量を求める。 ここでいう収束とは、ベクトルの発散の符号を逆にしたものである。 発散を求めるには、 ベクトルの東西成分、南北成分を、それぞれ東西方向、南北方向の座標で微分して たしあわせればよい。 ここでは微分を中央差分で近似する。 つまり、注目している格子点の両側の値の差を、格子間隔の2倍で割る。 データの与えられている領域の端の格子点では値が求まらないが、 ここでは広めの領域のデータが用意してあるので困ることはない。 なお、鉛直積算した水蒸気収束量の単位は、国際(SI)単位では kg/(m2 s)だが、 便宜上、kg/(m2 day)で求めることにする。 液体の水の標準の密度を仮定すれば、mm / dayと見てもよい。
1時刻の水蒸気収束量を計算するプログラムは、Fortranで書き、
qconv.f
とした。
Awkは2次元格子点を扱うのにあまり向かないためである
(別記事参照)。
このプログラムをあらかじめ
f77 -o qconv.exe qconv.f
でコンパイルしておく。
ここではコンパイル結果の機械語プログラムのファイル名がqconv.exe
となるようにした。もし-o qconv.exe
をつけないと
ファイル名はa.out
となる。
教室マシンにはf77
コマンドがあるが、
それのないCNSマシンのためのf77
については
別記事参照。
この機械語プログラムを、5月16日0時から6月15日18時までそれぞれについて
順に呼び出すAwkプログラムをdo_qconv.awk
として用意した。
awk -f do_qconv.awk /dev/null
のような形で実行すると、qc1998051600.txt
のように名前のついた
ファイルが多数できる。
(rm qc1998*.txt
でまとめて消すことができる。)
このファイルの各列は左から、x座標、y座標、経度、緯度、水蒸気収束量である。
(なお、このAwkプログラムで使っている技法については、
別記事(英語)参照)。
三角形領域の空間代表値は、
ここでは、三角形の内側に含まれる格子点での値の単純平均で求めることにする。
(もう少していねいにやるとすれば、各格子点が代表する三角形内の面積を
求めて重みづけするのがよい。)
[実習7]で扱った
vertex_lola.txt
が作業ディレクトリにあることを前提として、
qc1998051600.txt
などのファイル1つを読んで領域平均値を書き出す
プログラムをqc_ave_inside.awk
として用意した。
さらに、これを5月16日0時から6月15日18時までそれぞれについて
順に呼び出すプログラムをdo_qc_ave_inside.awk
として用意した。
awk -f do_qc_ave_inside.awk /dev/null > qc_ave_inside.txt
のような形で実行する。
結果のqc_ave_inside.txt
の各列は、
年、月、日、時、領域平均の水蒸気収束量、使われた格子点の数。
これをさらに時間平均するには、もしファイルにある全時刻の単純平均でよければ、
汎用的な平均プログラムave.awk
(簡単なので内容も見ておいてほしい)
を使い、5列めを集計することを指定して
awk -v col=5 -f ave.awk qc_ave_inside.txt
とすればよい。
また、対象日時を限定したいのであれば、
ave.awk
を改造し、
年、月、日、時がそれぞれ$1, $2, $3, $4であることを利用して、
集計を条件つきにすればよい。
三角形領域の空間代表値を、
同様に、三角形の内側に含まれる格子点での値の単純平均で求める。
ファイル1つを読んで領域平均値を書き出す
プログラムをw_ave_inside.awk
として用意した。
水蒸気収束量の場合と違い、
/pub/sfc/earthobs/data/game_reanlaysis/xyv
にあるファイルを
直接Awkで読むようにしてある。
これを5月16日0時から6月15日18時までそれぞれ
順に呼び出すプログラムをdo_w_ave_inside.awk
として用意した。
awk -f do_w_ave_inside.awk /dev/null > w_ave_inside.txt
のような形で実行する。
このC, Wを使って大気の「箱」の水収支から降水量と蒸発量の差を求めることができ、 これと観測の降水量を組み合わせると蒸発量を求めることができる。 しかし、蒸発量の値として合理的なものが得られないかもしれない。 それは、この地域、この時期に関して、 GAME再解析の水蒸気収束量に系統的な誤差があるからかもしれない。