Comments
Description
Transcript
気象研海洋モデルにおいて、 物質循環モデルを構築しやすくする取り組み
気象研海洋モデルにおいて、 物質循環モデルを構築しやすくする取り組み 気象研究所 海洋・地球化学研究部 中野英之 話の流れ • OGCMにおけるトレーサーの特徴 • 気象研の海洋モデルにおける、トレーサー開発の目標と現状 • 利用可能なオプション • 現在トレーサーごとに替えることができること • オフライントレーサーモデル • 新たにトレーサーを導入する際に注意していること。 • 3次元モデルに導入するまえに、簡易モデルを • MRI.COM特有の面倒な点 • 将来に整備できればと考えていること この発表の意図 • 現時点でのMRI.COM でのトレーサー関係のイメージを具体的に伝える。 • 開発の方向性のヒアリング OGCMにおけるトレーサーの特徴 • 流速場の計算するには、密度を決める温度と塩分が必要。 • 密度に寄与しないトレーサーとしては、無数に増やす可能性がある。 • (特に気候モデルでは), 海洋全体での全量の保存が求められる。 • 多くの場合正の値が望まれる。 • 場所によって濃度の桁が違う場合も多い。 比較的基本的な機能だけが NPZD + 炭素循環モデル さらに複雑な構造を表現した 高次生態系+炭素循環モデル この矢印(の合計)が生成消滅項 N: 栄養塩 P: 植物プランクトン Z: 動物プランクトン D: 沈降粒子など 生態系のエッセンスを表現 (計算コストが比較的少なく、 気候研究に向く) 赤紫:栄養塩(Si(OH)4, NO3......) 緑 : 植物プランクトン(PL, PS) 茶 : 動物プランクトン(ZS, ZL, ZP) 青紫:沈降粒子(OPAL,DOM,POMs....) より詳細な生態系の相互作用を表現 目標 1. モデルコードを修正せずとも、コンパイルオプションやnamelist などの書き換えだ けで、ある程度多様な設定で動かせること。(汎用性) 2. モデルの構造が複雑でなく、管理しやすいこと。あまり内部の構造に熟知しなくと も、簡単にトレーサーを付け足すようになっていること。(簡便性) 上と相反する要求 1. トレーサーの数を増やしても、十分高速なこと。(高速) 2. 余分なメモリーを確保しないこと。 3. パフォーマンスがよいこと。 (精度) (CPP (#ifdef) の使用) (省メモリー) 注: 以下、話の一部は(海洋)モデルの構造に関心がある人を主な対象としています。 現在できること (汎用性) 温度・塩分以外に計算可能なトレーサー • 生物化学 • 栄養塩モデル • NPZD • NEMURO • CFC11,12 + O2 + Carbon • age tracer • 仮想トレーサー • 放射性元素 (コードの微修正が必要な段階) • 密度のみのトレーサー # これらは、(原理的に)全部同時に実行可能(のはず)。 # コンパイル時に決定。(メモリーの観点から) configure.in (コンパイル時の設定) (汎用性) DEFAULT_OPTIONS=" ISOPYCNAL GMVAR VARHID SMAGOR VIS9P NOHKIM VVDIMP JOT HIST HISTFLUX HFLUX WFLUX TAUBULK BULKNCAR BULKITER SFLUXR LWDOWN ICE SIDYN CALALBSI SLIMIT INILEV CYCLIC BBL CLMFRC Y365D RUNOFF CARBON CBNHSTRUN O2 SOMADVEC QUICKADVEC PPMADVEC UTZQADVEC NPZD WIDECELL SOLARANGLE PARALLEL" IMUT=184 JMUT=152 KM=51 KSGM=5 NSFMRGN=4 KBBL=1 SLAT0=-78.D0 酸素の計算を追加する場合には、 O2 の追加し,およびNUMTRC_P を 一つ増加させる。 SLON0=0.D0 NPARTX=1 NPARTY=6 DXTDGC=2.0D0 DYTDGC=1.0D0 NPLAT=20.D0 NPLON=80.D0 SPLAT=-90.D0 SPLON=0.D0 NUMTRC_P=8 比較的に簡単に できると言いたい。 トレーサーごとの設定 (汎用性, 簡便性) トレーサーごとに設定できるもの。 • 移流スキーム (計算負荷が重い移流スキームを,トレーサーによっては軽いものに) • 観測値などへの緩和条件の与え方 • 内部の生成消滅項 • 海面の境界条件 これらはnamelist で指定する。その指定に際しては、一連の処理をトレーサ ーの数だけ繰り返すのではなく、トレーサーごとに処理をまとめる方向にコ ードを変更中。 (オブジェクト指向的な考え) 一括で設定されるもの。(トレーサーごとに変えるのは難しくないが需要はある?) • 拡散係数 • 対流調節 イメージ 移流の設定 トレーサー1 トレーサー1の設定 移流 緩和 トレーサー2 トレーサー3 緩和の設定 トレーサー2の設定 移流 緩和 トレーサー1 トレーサー2 だだし、内部のプログラムでは、左の図のように処理されている。 あくまで、設定の部分だけ。 構造体 tracer_data (汎用性, 簡便性) 汎用性を担保して、見通しよくプログラムするには、構造体の利用が便利。 type:: type_tracer_data private logical :: ldef character(len=64) :: name ! this object is registered or not ! name of this object ! ! Advection scheme type(type_adv_scheme) :: adv_scheme 移流に関する構造体 ! ! Reference value for body forcing type(type_trcref) :: trcref ! not used at this moment. ! end type type_tracer_data ! type(type_tracer_data) :: trc_data(numtrc) 緩和に関する構造体 NAMELIST.OGCM (実行時の設定) (汎用性, 簡便性) トレーサーごとの指定 手続きごとの指定 &nml_tracer_data #-- restoring condition -- name="Potential Temperature", &nml_force_trcref_surf file_data='../data/file_tsurf.grd', file_data_grid='dummy.d', imfrc=184, jmfrc=152, interval=-1, ifstart=1947,12,1,0,0,0, num_data_max=1, lrepeat=.false., linterp=.false., ilinear=1, iverbose=1 / &nml_force_trcref_surf file_data='../data/file_ssurf.grd', file_data_grid='dummy.d', imfrc=184, jmfrc=152, interval=-1, ifstart=1947,12,1,0,0,0, num_data_max=1, lrepeat=.false., linterp=.false., ilinear=1, iverbose=1 / &nml_force_trcref_surf ldefined=.false. / &nml_force_trcref_surf ldefined=.false. / &nml_force_trcref_surf ldefined=.false. / &nml_force_trcref_surf ldefined=.false. / &nml_force_trcref_surf ldefined=.false. / &nml_force_trcref_surf ldefined=.false. / &nml_force_trcref_surf ldefined=.false. / &nml_force_trcref_surf ldefined=.false. / adv_scheme%name="som", adv_scheme%limiter_som=.false., adv_scheme%lrstin_som=.false., adv_scheme%lrstout_som=.true., / &nml_tracer_data name="Salinity", adv_scheme%name="som", adv_scheme%limiter_som=.true., adv_scheme%lrstin_som=.false., adv_scheme%lrstout_som=.true., / &nml_tracer_data name="Dissolved Inorganic Carbon", adv_scheme%name="quick", / &nml_force_rstcoef_surf file_data='../data/rstcoef_surf_t.grd', file_data_grid='dummy.d', imfrc=1, jmfrc=1, interval=-999, num_data_max=1, iverbose=1, luniform=.true., ldouble=.true., / &nml_force_rstcoef_surf file_data='../data/rstcoef_surf_s.grd', file_data_grid='dummy.d', imfrc=1, jmfrc=1, interval=-999, num_data_max=1, iverbose=1, luniform=.true., ldouble=.true., / &nml_force_rstcoef_surf ldefined=.false. / &nml_force_rstcoef_surf ldefined=.false. / &nml_force_rstcoef_surf ldefined=.false. / &nml_force_rstcoef_surf ldefined=.false. / &nml_force_rstcoef_surf ldefined=.false. / &nml_force_rstcoef_surf ldefined=.false. / &nml_force_rstcoef_surf ldefined=.false. / &nml_force_rstcoef_surf ldefined=.false. / 例:トレーサーごとに移流スキームを変えられるようにする do ntrc = ntrc_strt, numtrc #ifdef OGCM_SOMADVEC if (ADV_SCHM(ntrc)==“som”) then call somadv__predic(ntrc) endif #endif OGCM_SOMADVEC #ifdef OGCM_QUICKADVEC if( ADV_SCHM(ntrc)==“quick”) then call quickmadv__predic(ntrc) endif #endif OGCM_QUICKADVEC end do トレーサーのループ 新しいトレーサースキーム導入時の開発のポリシー (簡便性, 精度) • できれば、生態系など複雑なものは、一次元モデルを組んで挙動 を確かめてから、3次元化する。 • 水平の海流の影響が少ないstation などで、過去の研究と比較。 • パラメーター変更の感触を確かめる。 (やはり一次元モデルの方が全然計算負荷が軽い) • もちろん、最終パラメーターなどは三次元バージョンで行う。 Ocean Station Papa での比較 (phytoplnakton) 観測 Oschiles (2001) Schmittner et al. 2005 Tuning Kawamiya et al. (1995) 一次元モデルの研究(Kawamiya et al .) 新しいトレーサー導入:programing (簡便性) 基本的に、一つのトレーサーのオプションでは追加ファイルは一つ。 例: CFC CFC.F90 例: 生態系モデル bioNPZD.F90, o2.F90, cbn.F90 • 海面での境界条件、内部での生成消滅項はここで定義。 • 特有の診断量の保存、書き出し。 • 単位の違いもここで吸収。 いまのところ、境界条件(大気のpCO2など)に関しては、外力を制 御するルーチンで一括管理。(これも移す方がよい?) tracer_vars.F90 (汎用性, 簡便性) ntrc = 0 !=========== Potential Temperature =========================== ntrc = ntrc + 1; nTemp = ntrc if(lproot) write(6,*) ntrc, ': Potential Temperature' write(name, '(a)') 'Potential Temperature' call tracer_data__set_name(trc_data(ntrc), name) call tracer_data__set_lpositive(trc_data(ntrc), .false.) !------------------------------------------------------------!================= Salinity ================================== ntrc = ntrc + 1; nSal = ntrc !------------------------------------------------------------#ifdef OGCM_CFC if(lproot) write(6,*) 'CFC option is set.' !================= CFC11 ===================================== ntrc = ntrc + 1; nCFC11 = ntrc ! CFC11 if(lproot) write(6,*) ntrc, ': CFC11' write(name, '(a)') 'CFC11' call tracer_data__set_name(trc_data(ntrc), name) !------------------------------------------------------------#endif /* OGCM_CFC */ 例:CFCの追加 MRI.COMの特有の面倒な点 (非簡便性) • 地形がUboxで作られているために、海岸付近ではT box が小さい。 MRI.COMの格子配置 1. CFL に不利。 U-box T-box 2. 沈降粒子などの評価の際に、深くなるにつれて面積が小さくなること を考えなければいけない。 • 海面付近でのσ-layer 付近での取り扱い 1. コードをσ-layer とそれ以外で分けて書く必要があることがある。 2. 保存則と正の保証が難しい。 オフラインモデル (汎用性) 適当な間隔(5日平均を主に用いている)で保存した履歴ファイル 海洋の状態 t, s, u, v, ssh, avd 海面での外力に関するいくつかの変数 を元に、パッシブトレーサーだけを動かす。 テスト 海面における植物プランクトン濃度の3月の平均値 (積分開始時9年目) shade と黒のcontourが online model 赤のcontour が offline model ほぼon-lineの結果を再現。 ただし、対流が大きく起きる場所では、 少しずれが目立つ。 さらなる発展 • 内部のトレーサー場を高速に収束させるmethod Transport Matrix Method (Khatiwala et al. 2005) など。 • 限られた領域でのoffline-tracer • 粒子追跡法などのパッケージとの統合 • 鉛直一次元モデルパッケージとの統合。 人為起源全炭酸のinventory (1994) • GLODAP (118±19Pg ) GLODAP OCMIPに参加したmodelの平均 ( 96--128Pg) 今回の実験(106 Pg) mol C m-2 矩形のチャネルの海を用いた実験。 矩形チャネルモデルの初期値 白線のContour: 温度場 Shade 仮想トレーサーの分布(9つ) 主な仕様 ・東西 20度、南北10度 ・初期成層(東西一様+ノイズ) から外力を加えずに200日積分 ・9つの仮想トレーサー ・解像度 ○中期渦解像 :1/10度 x 1/10度 ○サブメソスケール解像:1/50度 x 1/50度 注:今回の話の範囲内では、1/10 でも1/50 でも本質的には変わらなかった。 先ほどでの一次元モデルで見つかった課題: 巨大なブルームおよび、硝酸が食い尽くされる問題 (HNLCを再現できていない) 試した物 Detritus を二つに増やす NH4 の導入 短波を減らす Growthrate の最大を減らす Schmitter (2008)の値だけを使う 結果 Schmitter (2008)の値を使うとbroomが起きなくなった。 Schmitter(2008) の値はFlagellatesに最適化? (Initial slope of P-I curve を4倍に Growthrate のmax を1/6に、 植物プランクトンを死ににくくし、(λpを下げ) 動物クランクトンの捕食効率を1.6倍に増やす)