高橋さま,みなさま: 堀之内です。 また時間が空きましたが,標記の件で少し試してみています。 以下,放射の設定に関する備忘録のようなもの,質問,数値実験の話 と続きます。実験設定は石渡さんのと似てます(灰色)が, 長波は乾燥大気の吸収ありです(ほかにもちょこちょこ違う ⇒ より「地球っぽく」はなってるようです)。ちなみに乾燥大気の 吸収係数は「経験的」に決めました。普通はどうするんだろう -- という質問も下にあります。 使ったバージョンは dcpam5-20140630-3 です。 # メールは長いです。すみません。 dcpam の地球用簡易版放射コードには DennouAGCM のほかに, Simple というのもあるのですね。Simple のデフォルトは1バンド, 1ビン(灰色大気)。それなら基本的には DennouAGCM とコンパチ だろうと考えて,まずは両者の設定を合わせるということをやって みました。 DennouAGCM の namelist 設定を次のようにすると, Simple のデフォルトとほぼ(*)対応することがわかりました。 (! の後ろは dcpam5 のデフォルトです)。 &rad_DennouAGCM_nml LongPathLengthFact = 1.66d0, ! <- 1.5 ShortAtmosAlbedo = 0.0d0 ! <- 0.2 SolarConst = 1366.0d0, ! <- 1380 DelTimeLongValue = 0.0d0, ! <- 3 hrs. DelTimeShortValue = 0.0d0, ! <- 1 hrs. LongBandNum = 1, ! <- 4 LongAbsorpCoefQVap = 0.01d0, ! <- 8.0, 1.0, 0.1, 0.0 LongAbsorpCoefDryAir = 5.0d-5, ! <- 0.0, 0.0, 0.0, 5.0e-5 LongBandWeight = 1.0d0, ! <- 0.2, 0.1, 0.1, 0.6 LongPathLengthFact = 1.66d0, ! <- 1.5 ShortAbsorpCoefQVap = 0.0d0, ! <- 0.002 ShortAtmosAlbedo = 0.0d0 ! <- 0.2 / ただし,合わせるためには Simple のほうも設定が一つ必要で ( (*) 上で「ほぼ」と書いたのはそのため), &rad_rte_nonscat_nml NumGaussNodeZAInt = 0 / としました。NumGaussNodeZAInt のデフォルト値は 3 です。 NumGaussNodeZAInt > 0 の場合は,長波放射を two stream 近似 せず,天頂角によって数値積分するようにみえます。(という認識 であってますか?) ともかく,これを 0 に (two stream に) 設定 すると,DennoAGCM と Simple の全球平均長波フラックスは結構合います (添付の radcomp_simple-vs-agcm_exp14-15_001.png 右下)。一方, NumGaussNodeZAInt = 3 だと平均でも結構ずれます(すみません, ちゃんと覚えてないのですが,O(10) W.m-2 ほどあったような...) そこで高橋さんに質問です。現実的な地球の放射計算を目指した Earth に対し,Simple は文字通り簡易計算をするものだと思いますが(つまり, 灰色大気とかいった概念モデルでディスカッションしやすい世界を作る), 必ずしも two stream にしないのはどういう背景があるからでしょうか。 いつもご面倒をおかけして大変恐縮ですが,教えて頂けると嬉しいです。 さて,上の rad_DennouAGCM_nml の設定をみていきます。 長波については,上記の rad_DennouAGCM_nml の設定において,石渡さんの http://dennou-k.gfd-dennou.org/library/dcpam/sample/2014-08-30_momoko/namelists/Gray_MCA_Omega1.0.conf と異なるのは,乾燥大気の吸収係数を 0 でなく 5e-4 に 設定していることです (Simple のデフォルトにあわせるとそうなる ということ)。もう一つ,LongPathLengthFact を DennouAGCM デフォルトの 1.5 でなく 1.66 にするというのもありますが。 上記 rad_DennouAGCM_nml 設定で,目を引くのが短波です。Simple に合わせる = 大気アルベドを 0 にし,水蒸気の短波吸収も 0 にする, です。Simple でも DennouAGCM でも,雲は考慮しないので, 要するに Simple の設定は,太陽入射がそのまま地表面に届く (途中で散乱も吸収もされない)というものです。そういう 単純設定だからか,短波フラックスの計算結果は,Simple と DennouAGCM で,全球平均値が倍精度でほぼ一致しました。 # ちなみに DennouAGCM の ShortAtmosAlbedo は デフォルト値が 0.2 で,Simple ではそういう設定はできない ですが,DennouAGCM でも太陽定数を調整してるだけなので, Simple では太陽定数を直接変更することで合わせられますね。 Simple の短波計算コードの中には,吸収や散乱の計算もあります。 ただ,上位ルーチン (RadSimpleFlux) の中で,全格子点で assymetry factor = 0, opt dep = 0, single scattering albedo = 1.0 - 1d-10 などとハードコーディングされてるので, 短波計算の本体 RadRTETwoStreamAppCore の前半は,様々な格子点値が 定数にセットされていくようになってるようです。で,結局放射伝達は 計算しないのと同じ (SSA = 1 - 1d-10 の 1d-10の効果はよくわかっ てませんが...)。でも,Simple なのでデフォルトは現状でいい と思います。 ただ,ちょっと気になるのは,短波に吸収や散乱がない設定が 上記のようにハードコーディングされていることです。そうすると RadRTETwoStreamAppCore 前半の諸計算はどれぐらい検証されてる のだろうかという意味で。 そこでお聞きしたいのですが,テストはどのようにされてる でしょうか。これに限らず,物理過程計算のテストの内容と結果が なんらかの形で見ることができるようになってると,とても参考に なると思います。(また,もしもなにか問題がある場合に, 高橋さん以外の人が気づきやすくなるのではないかと思います。) さて,数値実験は石渡さん同様,Slab Ocean でやりました。 ただし,熱容量ゼロの swamp とはせず,SOHeatCapacity に 正の値を設定しています。(∵ 今回話題の「灰色放射スキーム を用いた場合 (石渡) 」では,短波入射に年変化日変化がない からゼロでもいいかもしれませんが,その前の 「地球放射スキームを用いた場合 (石渡) 」 http://dennou-k.gfd-dennou.org/library/dcpam/sample/2013-08-01_momoko/ では短波入射が変化します。すると,swamp だと表面温度が極端に 大きく変動します(冬極は短波入射ゼロですから。日変化も大)。 それに伴って場所によって風速がすごく大きくなるので, Δt=12 min で落ちなかったのは偶然ではないかと思います (同じ設定ではないのですが,短波を変動させて swamp で走らせたら 落ちました)。 さて,two stream 設定にした rad_Simple を用い,短波アルベドが トータルで (海面反射もあわせて) ほぼ 0.3 になるように設定して 走らせたところ,最下層の全球平均気温が 0 ℃ぐらいになりました (ちなみに海氷はなしです)。 もう少し地球に合わせてみようと思って,乾燥大気の吸収係数を 0.5e-4 から 1e-4 に変えて走らせたところ, 最下層の全球平均気温が 14 ℃ ぐらいになりました。 # ひと声倍にしてみたわけですが,たまたま地球の全球気温によく合った。 (「よく」といっても,温暖化論議の精度での話ではないです。) さて,そもそも地球大気を,短波=アルベドのみ考慮,長波=水蒸気と 乾燥大気の吸収のみを考慮した灰色大気と設定するとき,もっともな 吸収係数はどれくらいかというのは,基本情報として文献に載って そうなのですが,見つけれらてません。どなたかご存知ないでしょうか? --- 水蒸気の吸収係数 0.01 というのは,いろんな研究で使われてて, 根拠もあるようですが (例えば Ingersoll 1969 は Goody のあるページを 根拠に挙げている),乾燥大気のほうが探しだせてません。 ご存知の方は教えてくださいませ。 この設定の namelist ファイルを添付します(test_exp16_nml.txt)。 その中から設定を抜粋すると, &phy_implicit_sdh_V2_nml SOHeatCapacity = 1.26d8 ! 海洋混合層深 = 30 m 相当 / &rad_simple_LW_nml AbsCoefDryCom = 1.0d-4 / &rad_rte_nonscat_nml NumGaussNodeZAInt = 0 / &set_solarconst_nml SolarConst = 956.2d0 ! 1366 * 0.7 / &surface_data_nml Albedo = 0.0d0, RoughLength = 2.0d-4, / &rad_short_income_nml FlagRadSynchronous = .false., FlagAnnualMean = .false., FlagDiurnalMean = .false., Eccentricity = 0.0d0, / &set_O3_nml FlagO3 = .false., / 添付の test_exp16_Temp_sig0.995.png は,最下層 (σ=0.995; 高さ約 40 m) の気温を示します。 海が落ち着くのに時間がかかるので,t=4〜8 year です。 下段のパネルは,細い線が北極および赤道の zonal mean, 太い線が全球平均気温です(約287K〜14℃)。 test_exp16_U_xtmean.png は zonal mean の U です(8年目の 1年間の平均)。石渡さんの灰色放射実験と違って, ジェットが分かれないのが特徴的。 石渡さんの灰色放射実験は放射は一定(年&日平均)なので, それもやってみました。設定は test_exp17_nml.txt です。 放射が一定なので,早く落ち着いてくれるよう,海洋混合層深度 は 2 m に減らしました。それ以外の設定は同じです。結果の気温を test_exp17_Temp_sig0.995.png に示します。 全球平均気温は 約286.5 K ぐらいで,上の実験より ちょっと低いですが,水蒸気を通して放射が非線形に効くで しょうから,むしろよく合うといって良いのではないかと思います。 zonal mean U は test_exp17_U_xtmean.png です(「2年目」の平均)。 これもわりと似てますね。 # 子午面流線関数も気になるかと思いますが,まだ描いてません。 ちなみに石渡さんの灰色大気の短波設定は, アルベドが 0 なので,太陽入射がまるごと吸収されます ね(太陽定数 1366 W.m-2, 離心率は地球と同じ; 私はゼロ)。 長くなってすみません。 堀之内