バンドの決定

バンド構造探索の概要

prog04.0 の sort_ac を ruby スクリプトで多数回実施することで, ラインバイライン計算と差の小さい k 分布計算を実現するバンド構造を探索する. 探索方針は以下.

  • k 分布計算結果の善し悪しを判定するための損失関数を定義.
  • 最初に十分に多数のバンド (境界) を設定して k 分布を作成し, k 分布計算により放射フラックスと加熱率を計算.
  • 設定したバンド一つを隣のバンド一つと融合して (バンド境界を一つ削除して) k 分布を作成し, k 分布計算により放射フラックスと加熱率を計算.
  • 最初に設定したバンド構造に対応する k 分布計算結果と, 境界を一つ削除したバンド構造に対応する k 分布計算結果を比較して損失関数を計算.
  • バンドを一つずつ融合して (バンド境界を一つずつ削除して) 求めた損失関数を比較し, 値が最も小さいときのバンドを融合 (バンド境界を削除).
  • 以降, バンドを一つずつ融合して (バンド境界を一つずつ削除して) k 分布計算結果の損失関数が小さいバンドの融合を見つけて削除することを繰り返す.

探索の実施

用意した ruby スクリプトはこちら. このスクリプトでは, 地球大気プロファイル 10 個に対して実施された計算で得られる, 惑星放射と太陽放射の上向き放射フラックス, 下向き放射フラックス, フラックスの収束, 放射温度変化率それぞれの二乗平均誤差の重み付き和を損失関数として用いた.

  • フラックス, フラックスの収束, 放射温度変化率に対する重みはそれぞれ 1 (1), 8333 (W m-2 (W m-3)-1), 1000 (W m-2 (K s-1)-1 ) とした.
    • フラックスの収束, 放射温度変化率の重みはそれぞれ 1/(F/H), 1/(F/(H*Cp*Rho)).
      • F = 1 (W m-2), H = R*T/g, Rho = p/(R*T), R = 10/30e-3 (J K-1 kg-1), T = 250 (K), g = 10 (m s-2), Cp = 1000 (J K-1 kg-1), p = 10 (Pa).
      • F, R, T, g, Cp, p はぞれぞれフラックス, 気体定数, 温度, 重力加速度, 定圧比熱, 圧力. 放射温度変化率は高高度ほど値が大きくなるため, 圧力 p にはモデルの上部境界付近の圧力を与えた.

下のようにしてファイルを展開する.

$ cd prog04.0_sort_ac_check
$ tar xvf Earth.varvmr.dir_optimize_band_v4.tgz

出来たディレクトリ Earth.varvmr.dir_optimize_band_v4 の中の script_search_optband_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_optband_v4.rb >& error.log &

注意: このスクリプトは並列実行され, かなり時間がかかる.

結果

  • 損失関数のバンド数依存性
    • p. 1
      • 横軸はバンド数, 縦軸は損失関数の 1/80
      • 改めて強調すると, 損失関数は各バンド数の k 分布計算結果と探索初期のバンドの k 分布計算結果の差を基にした二乗平均誤差.
        • 図の値は 10 個の大気プロファイルに対する k 分布計算結果の惑星放射/太陽放射の上向き/下向き放射フラックス, フラックスの収束, 放射温度変化率の二乗平均誤差の重み付き和の 1/80 であるため, 一つの大気プロファイルに対する上向き/下向き放射フラックスの二乗平均誤差の平均に相当する.
      • 図の基となった値はスクリプト実行後の out/loss.txt ファイルの 2 カラム目 (横軸) と 3 カラム目 (縦軸).
    • p. 2
      • 横軸はバンド数, 縦軸はラインバイライン計算結果を参照解として計算した損失関数の 1/80
      • 改めて強調すると, この図の損失関数は p.1 の損失関数およびバンド探索で用いた損失関数とは定義が異なる.
      • 図の基となった値はスクリプト実行後の out/loss_lbl.txt ファイルの 2 カラム目 (横軸) と 3 カラム目 (縦軸).

図より, k 分布計算結果とラインバイライン計算結果との差は, バンド数 >~ 20 程度ではほぼ変わらない. ここでは縦軸 0.25 W m-2 を基準とするとして 20 バンドを最適バンドとして選択する.

  • 20 バンドのバンド境界位置
    • 境界波数: 10, 100, 300, 500, 600, 700, 1000, 1100, 1200, 2000, 3500, 4500, 5500, 12500, 14500, 18500, 25500, 30500, 32500, 34500, 50000 cm-1
    • .
      • 赤, 緑, 青実線は仮定した温度分布における 1000 hPa での H2O, CO2, O3 の吸収係数. 一点鎖線はレイリー散乱係数, 波線は入射太陽放射フラックス (適当にスケーリング). 黒実線はバンド境界.
      • この図はこのスクリプトで作図.

親ディレクトリに戻る

$ cd ..