積分点数の決定
積分点探索の概要
prog04.0 の sort_ac を ruby スクリプトで多数回実施することで, ラインバイライン計算と差の小さい k 分布計算を実現する積分点数を探索する. 探索方針は以下.
- k 分布計算結果の善し悪しを判定するための損失関数を定義.
- 最初に十分に多数の積分点を設定して k 分布を作成し, k 分布計算により放射フラックスと加熱率を計算.
- 設定した積分点を一つ減らして k 分布を作成し, k 分布計算により放射フラックスと加熱率を計算.
- 最初に設定した積分点に対応する k 分布計算結果と, 積分点を一つ減らした場合の k 分布計算結果を比較して損失関数を計算.
- 積分点を一つずつ減らして求めた損失関数を比較し, 値が最も小さいときの積分点を減らす.
- 以降, 積分点を一つずつ減らして k 分布計算結果の損失関数が小さい積分点を見つけて削除することを繰り返す.
スクリプト
用意した ruby スクリプトはこちら. このスクリプトでは, 地球大気プロファイル 10 個に対して実施された計算で得られる, 惑星放射と太陽放射の上向き放射フラックス, 下向き放射フラックス, フラックスの収束, 放射温度変化率それぞれの二乗平均誤差の重み付き和を損失関数として用いた.
- フラックス, フラックスの収束, 放射温度変化率に対する重みはバンドの決定において用いたものと同じ.
下のようにしてファイルを展開する.
$ cd prog04.0_sort_ac_check $ tar xvf Venus.dir_optimize_ip_v4.tgz
出来たディレクトリ Venus.dir_optimize_ip_v4 の中の script_search_optip_v4.rb を実行する.
このスクリプトは, files/template_sort_ac.conf, files/template_sort_ac_file.conf を基にして sort_ac.conf, sort_ac_file.conf を生成して sort_ac を実行し, files/disp_comp_1Dresults_v1_LBL.rb, files/disp_comp_1Dresults_v1.rb で結果を評価する.
スクリプトを下のように実行する.
$ ruby script_search_optip_v4.rb >& error.log &
注意: このスクリプトは並列実行され, かなり時間がかかる.
結果
- 損失関数の積分点数依存性
- p.1
- 横軸は積分点数, 縦軸は損失関数の 1/2
- 改めて強調すると, 損失関数は各バンド数の k 分布計算結果と探索初期のバンドの k 分布計算結果の差を基にした二乗平均誤差.
- 図の値は 2 個の大気プロファイルに対する k 分布計算結果の惑星放射/太陽放射の上向き/下向き放射フラックスの二乗平均誤差の和の 1/2 であるため, 一つの大気プロファイルに対する惑星放射/太陽放射の上向き/下向き放射フラックスの二乗平均誤差の和の平均に対応する.
- 図の基となった値はスクリプト実行後の out/loss.txt ファイルの 2 カラム目 (横軸) と 3 カラム目 (縦軸).
- p.2
- 横軸はバンド数, 縦軸はラインバイライン計算結果を参照解として計算した損失関数の 1/2
- 改めて強調すると, この図の損失関数は p.1 の損失関数およびバンド探索で用いた損失関数とは定義が異なる.
- 図の基となった値はスクリプト実行後の out/loss_lbl.txt ファイルの 2 カラム目 (横軸) と 3 カラム目 (縦軸).
- p.1
図より, k 分布計算結果とラインバイライン計算結果との差は, 積分点数 >~ 120 程度ではほぼ変わらない.
ここでは縦軸 0.35 W m-2 [要確認/要再検討] を基準とするとして 147 点を最適積分点数として選択する.
- 147 積分点の各バンドごとの割り振り
- 各バンド毎の積分点数: 2, 5, 6, 4, 13, 10, 1, 13, 3, 11, 2, 14, 3, 4, 15, 6, 6, 2, 4, 3, 3, 3, 1, 1, 4, 2, 2, 1, 3
親ディレクトリに戻る
$ cd ..