IPSLにおける標準インタフェースの取り決め
この文書は, IPSL モデルにおける一般的インタフェース(Polcher et al. 1998)を記述するものです.
ORCHIDEEで用いられたドライバプログラム(
dim2_driver.f90,
readdim2.f90,
)およびインタフェースルーティン(
intersurf.f90
)も公開していますので,実装の実態がおわかりになるでしょう.このドライバは現在はALMA対応netCDFファイルを直接読むようになっています.
「ドライバ」はフォーシング(外力)データを読み込み,それをLand Surface Scheme(LSS)用に調整するコードです.一方,「インタフェース」はLSSに関する情報を含み,フォーシングデータをLSSにあわせる役目をします.
おそらくは,LSS本体にこれら二つのプログラムをつける形でプログラムを提供するほうがはるかによいでしょう.こうすると,インタフェースの働きがよりよく理解できるからです.私はこのドライバと組み合わせることができるバケツモデルを持ってはおりませんが,どなたかが手助けしてくれることでしょう.
さて,ドライバプログラムdim2_driver.f90はポイントスケールから全球まで,どんな空間スケールのフォーシングデータをも読むことができます.これはFortran90のallocate
命令と,汎用データフォーマットnetCDFの使用により可能となりました.ここで,フォーシングデータに求められる要件は,「netCDFに格納されていること」だけです.ORCHIDEEのWWWサイトに,いくつかのデータセットからこれらのフォーシングデータファイルを作るプログラムを公開しています.また,ISLSCP CDROMとCabauwデータをnetCDFに変換するプログラムも公開しています(訳注:2000年9月段階でバグあり.修正法は後日公開します).ここ数ヶ月のうちに,新しいデータセットが使用可能となります(訳注:ISLSCP IIのことか?).もし読者の方で,ご自分のデータセットを同じような形式で配布したい方がいらっしゃれば,ぜひ私たちにコンタクトを取ってください.
基本的な考え方
インタフェースの開発に当たっては,次のような基本理念に従っています:
- インタフェースは2つのモデル,つまり2つのモデルパーツ(component)を接続するものです:
- 大気モデルプログラム・ドライバプログラムはインタフェースを呼び出します.このいずれのコードにおいても,私たちはこの呼び出しをLSSに依存したくはありません.LSS非依存にすることによって,呼び出し側のルーチンを一行も変えることなくLSSを取り替えるようになります.一方,こちらも重要な点ですが,LSSに与えるフォーシングデータを,他の大気モデルの出力あるいは観測データに,LSS自体を全く変えることなく,変更できるのです.
- インタフェースは,大気モデルのデータ規約をLSSのデータ規約に変換する作業をすべて行います.これにより,フォーシングデータの構造・アイテムの順番・変数の単位が影響を受ける場合もあります.このサブルーチンでは,一般的な大気フォーシングをLSSに必要な変数に格納します.この変換はLSSに依存しますので,変換部分はLSS自体に付属して配布すべきものであり,またフォーシングデータ形式に依存しないものとします.
- インタフェースは大気のグリッド上で働きます.つまり,地表のサブグリッドバリエーションやその他細かい変動については扱う(トランスファーする)必要はありません.ただしその一方で,大気データが境界層(PBL)のサブグリッド属性を持っている場合,インタフェースはそれら各点のデータを独立して処理しなければなりません.これはインタフェースで処理される(通過する)数々の点はどれも同じ座標系をもち,そしておそらくいくつかの大気フォーシング変数については同じ値を持つということを意味するだけです.(It only means that a number of data points passed through the interface will have the same physical coordinates and perhaps the same value for some
atmospheric forcing variables.)
- LSSおよびドライバで用いられるデータフォーマットは,GDT規約に従ったnetCDFファイルです.その例は,たとえば,ORCHIDEEのWWWサイト で見ることができます.
インタフェースに関する現時点での仕様と制約
汎用インタフェースの実装をすることは,LSSならびに大気モデルに対して,データマネジメントに関する何らかの仮定を設けてしまうことに他なりません.この問題を克服するためにはまだまだ作業が必要ですが,しかし私たちだけではなかなか難しいことです.というのは,私たちは他の大気モデルやLSSがどのようにしてデータを取り扱っているかという知識がないためです.ですから,もし読者の方がこのインタフェースを実装することに困難を感じていたら,ぜひ私たちにコンタクトをとってください.私たちはインタフェースを改良する方策を探ります.
さて,インタフェースならびにドライバの,すべての入出力にかかわる部分はパブリックドメインのパッケージである IOIPSL(IPSLで開発されています)により行われています.このパッケージはIPSLの全てのモデルで使用されています.もし読者の方が,私たちが開発したデータハンドリング技法に興味をお持ちなら,ぜひIOIPSLをダウンロードしてください(訳者注:2000年8月の段階では,ダウンロードにはCVSのインストールが必要です).
- インタフェース呼び出しには,シングルコールのみを採用しました.初めてインタフェースがcallされたときは,インタフェース自身並びにLSSの初期化のみをおこない,計算自体はいっさいおこないません.こうすると,最初の(ステップでの)大気の計算に必要なLSS変数(たとえばアルビードや地表粗度)をLSS変数から取り出すことが可能となります(This allows to retrieve from the LSS variables
which are needed for the first calculation of the atmosphere (Albedo or
surface roughness for instance).
- LSSから診断用変数(diagnostic varables)を出力するのはLSS自身に任されています.こうすると,インタフェースはdiagnosticsを一切ハンドリングする必要がなく,構造が簡単になります.現時点では,この作業はIOIPSLのHISTモジュールで行われ,結果としてnetCDFファイルが生成されます.
- リスタートファイルに書かれる必要のある予知変数(prognostic variables)はLSS内で処理され,外部では扱われません.つまり,各LSSは固有のリスタートファイルおよびリスタート機構をもちます.これにより,すべての予知変数について扱う必要が全くなくなるので,インタフェースが大幅に簡略化されます.これらの予知変数は,極めてモデル依存性が強く,数々のLSSならびに大気モデルを統合する汎用インタフェースを構築するのはおそらく徒労に終わるでしょう.なお,AGCM,OGCM,LSSを別々かつ独立に扱うフレキシブルなリスタート機構は,確かにtrivialなものではありませんが,しかし読者の皆さんがアイデアを得たいときには,IOIPSLでどのようにしてそれがマネジメントされているかご覧になるといいでしょう.
- 正負規約は歴史的経緯を負っています.つまり論理的に定められているのではありません.これを議論し,標準を策定することはよいことでしょう.
- Fortran90インタフェースのおかげで,地表面インタフェースを2次元場を用いてもベクトルを用いてもcallすることができます.ただし,データは長方形グリッド上におかねばならないという制約はまだ存在しています.これは早いうちに改善しなければならない問題です.というのは全ての大気モデルがこのようなグリッドを用いているわけではないからです.
- ここでは,インタフェースを使用してデータをやり取りする二つのコンポーネント間においてuniversal constantsが一貫したものであるかということを確認する作業は一切行っていません(No attempt has been made here to ensure that universal constants are consistent on either side of the interface.).これは蒸発潜熱については本質的に重要なことがらです.というのは,大気モデル並びにLSSにおいて同じ値が用いられるからです.
- 地形については,まだLSSに渡されるようになっていません.このデータは将来,地表粗度計算や雪もモデリングに必要になるでしょう.
- また,インタフェースは炭素フラックスを扱っていません.これについては多少の作業が必要でしょうが,しかしインタフェース自体にはあまり大きな影響はないでしょう.というのは現在インタフェースが扱っている水フラックスと全く同様の方式で炭素フラックスを扱うことができるからです.
インタフェースサブルーチン
以下に,ドライバプログラムdim2_driver.f90からインタフェースサブルーチンを呼ぶ方法および渡される変数を紹介します.これはPILPSやGSWPといった実験で用いられたドライバと同様の形式です.変数のサイズのみが変わっています.
CALL intersurf_main &
& (istp, iim, jjm, nbindex, kindex, &
& dt, first_call, last_call, coupling, lon, lat, date0, &
! first level conditions
& zlev_vec, zlflu_vec, for_u, for_v, &
& for_qair, for_tair, for_eair, for_ccanopy, &
! Variables for the implicit coupling
& for_cdrag, petAcoef, peqAcoef, petBcoef, peqBcoef, &
! Rain, snow, radiation and surface pressure
& for_rain, for_snowf, &
& for_lwdown, for_swnet, for_swdown, for_psurf, &
! Output : Fluxes
& vevapp, fluxsens, fluxlat, run_off_tot, &
! Surface temperatures and surface properties
& tsol_rad, temp_sol_NEW, albedo, emis, z0)
-
istp
- callのタイムステップ.LSSは
istp
からistp
+1まで計算を実行します
date0
istp
が0であるときのjulian date.
dt
- タイムステップ間の時間間隔
iim
- 経度方向のグリッド数
jjm
- 緯度方向のグリッド数
nbindx
- LSSが計算するグリッド数
kindex
- LSSが計算を実行する点を格納した整数配列.たとえば全球の(海洋も陸面も含んだ)フォーシングデータを与えた場合でも,この配列によってどこを計算対象にすればいいか明示すればいいわけです.入力データのgatheringおよび出力データのscatteringはインタフェースによって行われます.
first_call
- このフラグ(
logical
型)をセットすると,そのcallが最初のコールであることをLSSに指示したことになります.これはたとえばLSSの初期化に用いられます.
last_call
- このフラグ(
logical
型)をセットすると,そのcallが最後のコールであることをLSSに指示したことになります.LSSはそれに応じて,たとえばリスタートファイルの作成などを行います.
coupling
- 文字列型(
(CHARACTER(LEN=10))
).LSSがPBLとどのようにカップリングされているか明示するものです.エネルギー収支の解法がimplicitかexplicitか,はたまた何か他のカップリング手法を用いるか指定します.
lon
- LSSに渡される全てのデータ点についての経度.単位は度.これは長方形グリッドシステムを前提としていません.ただしインタフェースルーチン自体は(現時点では)長方形グリッドシステムを仮定しています(It is not the call to the interface which uses the assumption of a rectangular grid, but the the interface subroutine itself).これは
lon
によって渡されるベクトル(サイズ=iim
×jjm
)から2次元配列(iim, jjm
)に変換されるからです.
lat
lon
と同様に全データ点の緯度を格納します.
zlev_vec
- 大気フォーシングデータが与えられている高さ.単位はmです.これはフォーシングデータと同じランクと次元を持ちます.したがって,全てのフォーシングデータが同じ高さで与えられている必要はありません.
zlflu_vec
- LSSにおいてフラックスが計算され,大気モデル側で利用される高さ.単位はmです.
for_u
- 高さ
zlev_vec
における風速東向き成分.単位はm/sです.フォーシングデータは,2次元マトリクスの形(iim, jjm
)でも,1次元ベクトル(サイズ=iim
×jjm
)の形でも構いません(以下同様).
for_v
- 高さ
zlev_vec
における風速北向き成分.単位はm/sです.
for_qair
- 高さ
zlev_vec
における比湿.単位はg/gです.
for_tair
- 高さ
zlev_vec
における気温.単位はKです.
for_eair
- 空気のエンタルピー.
for_ccanopy
- 大気下部におけるCO2濃度.単位はppmvです.
for_cdrag
- 大気モデルまたはドライバに対して,LSSにおける気温並びに湿度の拡散のためのsurface dragをインポーズすることを許可します.もしこれらの値の最大値が0だったら,surface dragはLSSによって計算されることになります.そうでない場合には,大気モデルが直前のタイムステップにおける地表粗度を用いてsurface dragを計算することになります.
これらの変数についての詳細な記述は,Polcher et al.(1998)を参照してください.
petAcoef
- 気温に関する係数A(上記論文のAppendixで説明されています.以下同様).
petBcoef
- 気温に関する係数B.
peqAcoef
- 湿度に関する係数A.
peqBcoef
- 湿度に関する係数B.
for_rain
- タイムステップ間における降雨量.単位はkg/m2です.下向きが正となります.
for_snowf
- タイムステップ間における降雪量.単位はkg/m2です.下向きが正となります.
for_lwdown
- 下向き長波放射量.単位はW/m2で,下向きが正となります.
for_swnet
- 地表面におけるネット短波放射量.単位はW/m2で,下向きが正となります.放射スキームが地表モデルに渡し,地表におけるエネルギー収支を解くのに使われなければならない値です.LSSに渡されるアルビードもこの計算に使われます.
for_swdown
- 地表面における下向き短波放射量.単位はW/m2で,下向きが正となります.これは地表アルビードの計算にのみ使われなければなりません.これは純粋に診断的変数であり,上記
for_swnet
の代わりに使ってはいけません.もしそうすると地表におけるエネルギー保存則が成り立たなくなる恐れがあります.
for_psurf
- 地表面における気圧.単位はPaです.
vevapp
- タイムステップ
istp
とistp
+1の間における蒸発量.単位はKg/m2で,上向きが正です.これは地表から大気に向かって流れたトータルの水フラックスです.LSSがsurface tilingをサポートしている場合は,全タイルにおける値の単純平均となります.これは大気側のサブグリッドバリエーションが定義されていない(not relevant)からです.
fluxsens
- 顕熱フラックス.単位はW/m2,上向きが正です.
fluxlat
- 潜熱フラックス.単位はW/m2,上向きが正です.ここで,昇華が起こっている場合は蒸発量と潜熱フラックスの関係は極めて複雑になル可能性があります.ここで,蒸発および紹介に関して大気側と陸面モデル側が同じ気化熱・昇華熱の値を使っていない場合は,潜在的な問題が存在し得ます.これは大気陸面相互作用においてエネルギー保存則が失われることになるので,調整の作業が不可欠です.
run_off_tot
- 海岸線からの流出量(The runoff along the coastline).下向きが正です(訳注:単位は書いてありませんでした).LSSから出力されて海洋に注ぐものとして,海洋モデルに与えられる水のフラックスです.各グリッドからの流出量は,LSSの内部変数です.というのは他のコンポーネントではこの値は実用的意味がない(not relevant)からです.言い換えれば,もしLSSが河川ルーティングモデル・地下水流動モデル等を持たない場合は,この値はすべて0となります.
tsol_rad
- 地表の放射温度.単位はKです.これは下記
temp_sol_NEW
と同じ温度である必要はありません.これは各LSSが地表面エネルギー収支計算に際して上向き長波放射をどのように計算しているかに依存します.大気モデルの放射スキームではグリッド平均のフラックスを計算するためにサブグリッドヴァリエーションに関する情報を用いますから,LSSにおけるこの計算もサブグリッドヴァリエーションに関する全ての情報を勘案しなければならないでしょう.なお,放射スキームとLSSのタイムステップが異なる場合は,大気モデル側が,時間平均を計算する処理を用いなければなりません.
albedo
- 時刻
istp
+1から始まるタイムステップにおける地表面アルビード.この値は大気モデルの放射スキームが用い,そして地表におけるネット短波放射フラックスを(LSSに)返します.
emis
- グリッド平均での,地表の放射率.この値自身はLSSが上向き長波放射を計算するのに使っているかもしれません.そしてこの値は,大気モデル側も,上向き長波放射を正しく再計算するために必要としています.
temp_sol_NEW
- 次のタイプステップにおける地表面温度(訳注:単位は未記載).
istp
からistp
+1のタイムステップの計算においてこの値が用いられます.大気モデルは,おそらくは診断diagnostic用(たとえば大気安定度)にのみこの値を用いるでしょう.
z0
- グリッド平均の地表面粗度.これは大気モデルが気温及び湿度のsurface dragを計算するのに用いられ,計算されたこれらの値はインタフェースを通じてまた戻されてきます.また,大気モデルはモーメントのsurface dragを計算するためにこの値を用いることがあります.
References
Polcher, J., McAvaney, B., Viterbo, P., Gaertner, M.-A., Hahmann, A., Mahfouf, J.-F., Noilhan, J., Phillips, T., Pitman, A., Schlosser, C.A. , Schulz, J.-P., Timbal, B., Verseghy, D. and Xue Y. (1998)
A proposal for a general interface between land-surface schemes and general circulation models.
Global and Planetary Change, 19, pp:263-278
原文:Jan Polcher
日本語版:AGATASHI
原文:Last modified: Thu Sep 21 13:50:26 CEST 2000