別ページで紹介した海洋の鉛直モード展開に加えて、気象データを用いた鉛直モード展開を行います。
内部Link: 熱帯太平洋の鉛直モード展開
大気と海洋の現象は様々な時空間スケールで深く結びついており、またその研究においても多くの共通した理論が用いられています。鉛直モード展開はそのうちの一つであると言えます。鉛直モード展開は、大気(もしくは海洋)の鉛直構造に関して、Strum-Liouville問題と呼ばれる固有値問題を解くことを意味します。物理的な解釈としては、ある現象をモードと呼ばれる個々の単純な現象の重ね合わせとして考える手法と言えます。固有値分解からは一つの順圧モードと無数の傾圧モードが得られます。
今回はPythonで計算を行います(固有値および固有ベクトルの計算式は上記のリンク先を参照)。用いたデータセットは、圧力高度で1000hPa地点から1.0hPaまでの37観測高度の全球平均データです(以下のリンクからダウンロード可能)。
ファイルLink: 鉛直大気データセット
列は左から順に、層の番号、圧力高度(hPa)、高度(m)、浮力振動数(1/s)です。
また、参考プログラムをアップロードしておきます。
ファイルLink: 鉛直モード展開(大気Version)
プログラム内で行われる作業は、
1.データの読み込み
2.浮力振動数に基づく大気の鉛直構造から行列式の作成
3.行列式を解き、出てきた固有ベクトルから鉛直プロファイルのデータ作成
といった流れです。
行列計算にはNumpyのlinalg.eig関数を用いています。この関数はLAPACKの_geevルーチンを実装しています。このルーチンは大規模な行列(非対称行列を含む)の固有値および固有ベクトルを求めることができます。また、Numpyのライブラリであるargsortを用いて、アウトプットされた固有ベクトル(二次元配列)を固有値に合わせて降順に並び替える作業を行なっています。
下図はアウトプットされた固有ベクトルのうち、傾圧モード(第1〜第3)の鉛直プロファイルです。