熱帯太平洋における鉛直モード展開

ここではOFES(海洋大循環再解析モデル)で出力された水温・塩分データを用いた鉛直モード展開を紹介します。

大まかな流れは、

  1. 水温・塩分データのダウンロードし、それぞれの領域平均および時間平均

  2. 水温と塩分のデータから密度の鉛直プロファイルを作成

  3. 密度の鉛直プロファイルを浮力振動数の鉛直プロファイルに変換し、固有値分解

  4. 固有値分解から固有値、固有ベクトルが得られる

となります。

 

 まずは水温・塩分データのダウンロードを行います。ここでは大気海洋分野の解析に広く用いられているGrADS (Grid Analysis and Display System)を使って、APDRC (Asia-Pacific Data-Research Center)のOPeNDAP server からダウンロードしました。APDRCのサーバーからは大気海洋に関する様々なデータのダウンロードが可能です。

 

 Link: APDRCのHP

 

 今回ダウンロードする水温・塩分データの詳細は以下のリンクから見ることができます。

http://apdrc.soest.hawaii.edu:80/dods/public_ofes/OfES/ncep_0.5_global_mmean/temp

http://apdrc.soest.hawaii.edu:80/dods/public_ofes/OfES/ncep_0.5_global_mmean/sln

 

  GrADSのコマンドプロンプト上で下記のように記述すると、 NetCDF形式のデータを使用することができ、またファイルへの書き込み(ダウンロード)も可能です。コントロールファイルの作成が必要ないことや、使用するデータの領域や時間の指定が可能で使い勝手が良いです。

 

ga-> sdfopen http://apdrc.soest.hawaii.edu:80/dods/public_ofes/OfES/ncep_0.5_global_mmean/sln

 

以下のリンク先に、参考としてスクリプトファイル(ダウンロードと平均計算)をアップロードしてあります(ファイル名:gofes-pacific.gex)。そのまま使用していただいても構いません。出来上がったデータファイルは適当な名前で保存します。

(参考スクリプトでは、水温・塩分のデータはgofes-pacific.dtaとして保存されます。) 

 

 Link: 水温・塩分データのダウンロードおよび平均計算スクリプト

 

今回は熱帯太平洋のデータを使用するため、東経125度〜西経75度、南緯30度〜北緯30度の範囲を設定してますが、任意の変更が可能です。

 

これで水温・塩分の鉛直プロファイルのデータの作成は完了しました。

  

出来上がった水温・塩分のデータから密度の鉛直プロファイル、次に浮力振動数への変換、鉛直モード展開へと進めていきます。例によって、以下のリンクに参考プログラムをアップロードしてあります。

(ファイル名:fvmode_decompose-ofes.F90)

 

 Link: 鉛直モード分解プログラム(fortran)

 

参考プログラムは、順圧モードと傾圧第3モードまでの固有値の実数部分と虚数部分、また傾圧モード(第1~3モード)の重力波速度を出力します。

 

 鉛直モード展開を行うことは、Strum-Liouvilleの固有値問題を解くことに等しいと言えます。

 

 下図が海洋における鉛直モード展開の概念図です。

  固有値分解にはLAPACK(この場合はIntel Math Kernel Library)のdgeevルーチンを用いています。このルーチンは大規模な行列(非対称行列を含む)の固有値および固有ベクトルを求めることができます。

 

 Link: dgeevの使い方

 

 大気海洋の力学において鉛直モードを展開することで、現象の理解がしやすくなるなどの利点があります。今回は重力波速度に着目した鉛直モード展開を行いました。下図が固有べ取るの計算結果をGnuplotで描画したものです。

 

  上記の鉛直モード計算のプログラムはFORTRANで記述されていましたが、下記にPythonで作成した参考スクリプトも加えてみました。参考程度に使ってください(修正必要)。

 

Link: 鉛直モード展開プログラム(Python)

 

下の二つのファイルは水深のデータです。データの格納されているグリッド特徴から、どちらとも計算に用います。

 

  Link: OFES水深データ1

  Link: OFES水深データ2

 

 作成した固有ベクトルが下の図になります(Gnuplotで描画)。

 Pythonは使い始めたばかりですが、ライブラリが充実していて、今回のプログラム(鉛直モード展開)もほぼnumpyのライブラリのみで作られています。便利ですね。

 Pythonに慣れていく中で、今回作成したものもより洗練されたプログラムに更新していきたいと思っています。