Kenji Tanaka Seminar's Web site (田中ゼミ) : Princeton Ocean Model Top


Princeton Ocean Model (POM) について

Princeton Ocean Model (POM) は、海洋の流れを計算するための数値モデルで、海洋学・海岸工学の研究者の中で使われています。POMは、σ座標系と呼ばれる、海面から海底までの深さを水深に関係なく 0から-1までの数値として規格化して計算を行います。そのため、太平洋などの深さ数1000mの深海から水深10m以下の浅い海底や干潟のように干満の影響を受ける場所の海水の流れを効率よく計算できる利点があります。
また、拡張機能として、日射や風、気圧などの海洋気象条件を取り入れて、気象場によって生じる海洋の流れ、海水面の変化などを解析することができます。

2000年に公開された従来のPOM (POM2K)では、干潟のような干満の効果を計算することが非常に困難でした。その後のプログラムの改良が進み、2008年に公開されたPOM08では、格子点が冠水しているか干出しているかを判別するルーチン(wet and dry, 略して WAD)によって、干潟域や堤防越水を想定した計算が行うことができるようになりました。

本ページでは、POMを使って海洋の流れを計算する方のために、インストールから後処理までを概説し、利用普及を図ること目指しています。

ダウンロードとインストール

必要な計算機環境

OS

  • Windows, Linux, MacOS X など、特にOSの制限はありません。OSによっては、プログラムの内部を一部編集しなおす必要があります。

最低限必要なもの

  • Fortran コンパイラ:gfortran や Intel Fortran Compiler など。

できる限りインストールしておく方がよいもの

  • NetCDF : 気象や海洋などのデータを収録するためのデータ形式(NetCDF形式)の読み書きに使います。もし、インストールしていなくても、ソースファイルを編集し、機能を外すことで、利用することができます。
  • テキストエディタ : 使用する計算機の環境に応じて、ソースファイルや設定ファイルを編集する必要があります。Windows をお使いの方は、メモ帳以外のテキストエディタ、もしくは、Intel Fortran Compiler などの有償のコンパイラを用いるとよいでしょう。
  • MATLAB : 並列計算機能付きのプログラム (sbPOM)で、前処理(領域設定・格子点設定など)を行うための MATLAB用のスクリプトが用意されています。MATLABには、NetCDF変換ツールをインストールする必要があります。
  • Parallel-NetCDF : 並列処理計算でNetCDF形式のデータの入出力を行う時に使います。sbPOMを使って計算するときには必須です。

インストールしておくと便利なもの

  • ncview NetCDF形式のデータの簡易可視化ソフト
  • ncview以外の可視化ソフト:GMTなど

プログラムの入手

Princeton Ocean Model の公式ページhttp://www.aos.princeton.edu/WWWPUBLIC/htdocs.pom/より入手可能ですが、新しいページに移行準備中です。
 現在公開されているプログラム・コードは3種類あります。
① 並列処理機能なし(1コア)のプログラム http://www.aos.princeton.edu/WWWPUBLIC/PROFS/waddownload.html
② 並列処理機能付きのプログラム (sbPOM: Stony Brook Parallel Ocean Model)http://www.imedea.uib-csic.es/users/toni/sbpom/
③ 4次元データ同化機能付きのプログラム (4D_VAR)
http://www.aos.princeton.edu/WWWPUBLIC/htdocs.pom/apom.html

オプションツールとして、気象モデルWRF, 波浪モデル SWAN とのカップリングコードが公開されています。ここでは、最も標準的なプログラム①の場合について説明します。

ダウンロードするファイルは、①のページのうち、以下のファイルです。

  • pom08.f : メインプログラム
  • pom08.c : 計算で使用する変数のリストが格納されているファイル
  • pom08.n : NetCDF形式で入出力を行うためのサブルーチンが格納されているファイル
  • runpom08 : 実行用のスクリプト (Linux, MacOSX, ※Windows)

Windows で runpom08 を使う場合、Cygwin などのUNIX系システムのエミュレータ上でのみ利用可能です。

    以上のファイルをダウンロードして、作業用のディレクトリを作成しその中に移動します。

まずは動かしてみる

NetCDFの場所の確認

NetCDFをインストール済みで環境変数として設定していれば、端末上で、
echo $NETCDF
と入力し、パスを表示します。

pom08.n の修正

pom08.n の153行目(付近)
include '/usr/local/include/netcdf.inc'
の、/usr/local を $NETCDFの値に置き換えます。

※別の方法として、ln コマンドを使って、
ln -s $NETCDF/include/netcdf.inc /usr/local/include
と入力して、リンクを張っても構いません。

スクリプトファイル(rumpom08)の編集

runpom08には、計算を行う際のパラメータ設定 (PARAMETER FILES FOR EACH RUN)、Fortran コンパイル(COMPILE & RUN)、プログラム実行コマンド( OUTPUT FILES)の順で書かれています。

変更箇所:コンパイル部分の
ifort pom08.f -o a.out /usr/local/lib/netcdflib.a
ifort を現在使用中の fortran コンパイラのコマンドに変更。
/usr/local/lib/netcdflib.a を ${NETCDF}/lib/netcdflib.a
と書き換える。

スクリプトの実行

普段使っているシェルコマンド (bash, csh など)を使って実行します。
csh runpom08 (csh の場合)

出力されるファイル

計算によって出力される主なファイルは、次のものになります。
grid : 格子点の数の定義
param : 計算に用いるパラメータの設定ファイル
pom08.out : 計算条件や途中経過などがテキスト形式で出力されています。
pom08.nc : 計算結果の出力(NetCDF形式)
fort.71 : 計算終了後の各変数の数値を格納するファイル

NetCDFを使わずに動かす場合

NetCDF を使わずにpomを動かすこともできます。
ソースファイル pom08.f の中で
call write_netcdf
と書かれている行をすべてコメントアウトします。
コンパイルの時には
ifort pom08.f -o pom08.exe
と入力し、計算の実行は
./pom08.exe >& pom08.out
と入力します。

次のページでは、スクリプトファイルの内容を概説し、それぞれのケースに応じた変更箇所を述べます。