SPRINGは正式名称を「SPheroidal coordinates Regridding INterpolation table Generator」といい,日本語にすると「回転楕円面格子変換内挿テーブル作成パッケージ」となります.
その名のとおり,地球のような回転楕円体の面上で定義される格子系である回転楕円面格子の変換内挿テーブルを作成することを目的として開発されたプログラムです.回転楕円面格子は球面上で定義される球面格子を含みます.
簡単のため,以下では変換内挿テーブルを内挿テーブルと表記します.
基本的な機能は以下の4つです.
+
回転楕円面格子の内挿テーブルを作成し,データの格子変換を行う
+
複数の内挿テーブルを統合する
+
格子データを作成する
+
格子データをラスター化する
クリックすると設定ファイルの詳細な記述方法を見ることができます.
設定ファイルの基本的な書式は本項に記載されていますので,そちらを先にご覧ください.
その他,下記の拡張機能を備えています.
+
ILSの境界条件を作成する
+
デフォルトのILS用の内挿テーブルを作成する
+
AOGCM結合用のILSの境界条件及び内挿テーブルを作成する(ページ作成中)
今のところ自由度は低いですが,今後必要に応じて拡張していく予定です.
パッケージの入手
パッケージは以下から入手できます.
ウェブサイト:
+
/~akira/pub/SPRING/SPRING.v01.03.04.tar.gz
GitHub:
+
(内部関係者用)
芳村研サーバー isotope2/3:
- /data7/akira/SPRING/pkg/SPRING.v01.03.04.tar.gz
沖研サーバー rainbow:
- /data4/akira/work/SPRING/pkg/SPRING.v01.03.04.tar.gz
展開
SPRING.v01.03.04に入ると,以下の6つのディレクトリがあります.
adm
コンパイラやコンパイルオプション,各種コマンドを設定するファイルを置くためのディレクトリです.
bin
実行プログラムを置くためのディレクトリです.
作図用の
Pythonスクリプトもここに置かれます.
dat
入力データを置くためのディレクトリです.
サンプルスクリプトで用いる入力データは全てここに置かれています.
out
出力データを置くためのディレクトリです.
サンプルスクリプトでは全てここに出力することにしています.
run
データセットの作成など,特定の目的のために用意されたスクリプト等を置くためのディレクトリです.
陸面モデル
MATSIROの境界条件の作成や,ILSでのモデル結合用の内挿テーブルの作成に用いるスクリプトなどが用意されています.
set
設定ファイルを置くためのディレクトリです.
設定ファイルのサンプルは全てここに置かれています.
src
ソースコードを置くためのディレクトリです.
ソースコードは全てここに置かれています.
pkg
外部ツールを置くためのディレクトリです.
今は河道網の生成に用いる
FLOWというプログラムが置かれています.
コンパイル
srcのソースコードをコンパイル・インストールすると実行プログラムが
binの中に作成されます.
基本的な機能を提供する実行ファイルは
bin/main_stdに,拡張機能を提供するものは
bin/main_extに置かれます.
実行
T85から
GSWP3への格子変換をしてみます.
両者ともいわゆる緯度経度格子と呼ばれる格子系で,緯度経度平面を水平な線と鉛直な線で分割して定義される格子系です.
T85は格子数
(nx,ny) = (256,128)で,格子線は非等間隔です.
GSWP3は格子数
(nx,ny) = (720,360)で,格子線は等間隔です.
メインプログラムは,実行ファイルに設定ファイルをコマンドライン引数として与えることで実行します.
作図プログラムは
Pythonで書かれています.同様に設定ファイルをコマンドライン引数として与えて実行します.
設定ファイルはカレントディレクトリからの相対パスまたは絶対パスで指定します.
以下で実行プログラム
bin/std/regrid/main.exeに設定ファイル
set/regrid/T85_to_GSWP3.confを与え,
T85から
GSWP3への内挿テーブルの作成,及び格子データの変換を行います.
また変換前のデータ(
T85の格子データ)と変換後のデータ(
GSWP3の格子データ)の作図を行います.
Python環境が無い場合は作図はスキップしてください.
設定ファイルはテキストファイルです.
書式は
namelistや
JSONファイルではなく,
SPRING独自のものとなっています.
先ほど実行した
T85から
GSWP3への格子変換に用いる設定ファイルを例に,基本的な構造を見てみます.
簡単のため一部省略しています.
レポートファイル
最初にレポートファイルのパスを
path_report: '
'
という形で指定します.
レポートファイルに出力される情報は実行するプログラムによって異なりますが,主に出力データの基本的な情報などが書き出されます.
ブロック
続いて各種設定をブロックを用いて次のように記述します.
[]
:
:
...
[end]
ブロックは[]で開始します.
ブロック名block_nameでこのブロックが何に関する設定をするものなのかを示し,その中で各種設定,例えば入出力データのパスや付属情報,オプションなどを記述します.
最後に[end]でブロックを閉じます.
ブロックは基本的に複数記述することになります.
レポートファイルのパスを除く全ての設定はブロックで記述されます.
キーと値
ブロック内でキーとそれに対応する値を記述することで各種設定を行います.
基本的にキーと値は一対一で対応していますが,一部例外もあります.
なお設定ファイルのサンプルではインデントを入れていますが,設定には影響しません.
先に述べたように,GSWP3は解像度0.5°,つまり格子数(nx,ny) = (720,360)の緯度経度格子系です.
領域は全球で,東端・西端はそれぞれ-180°・180°,南端・北端はそれぞれ-90°・90°です.
したがってGSWP3の格子系の情報は次のように記述されます.
nx: 720
ny: 360
west: -180
east: 180
south: -90
north: 90
キーと値が一対一で対応しない場合には,以下のようなものがあります.
(1) ファイルを指定するとき
本パッケージではレポートファイル以外のファイルの形式はプレーンバイナリに限定されています(Fortran式に言うと書式指定なし,直接探査).
入力元または出力先としてファイルを指定するために必要な情報は,パスのほかにデータ型,レコード番号,エンディアンがあり,ファイルを指定する際にはこれらを同時に指定することになります.具体的には次のようになります.
f_lon_bound: 'dat/T85/T85_lon_bound.bin', dble, 1, little
左から順にパス,データ型,レコード番号,エンディアンを示します.dbleは倍精度浮動小数点数です.
パス以外の値は場合によっては省略することができます(詳細は後述).
(2) ファイルの形状等を指定するとき
やや発展的な使い方になります.
ラスターデータの一部のみを読み込んで使いたいときや,検証データの整形に用いる格子番号データの形状を与えるときなどに用います.
詳細は各機能の設定ファイルの説明で行いますが,例えば以下のようにカンマで区切って複数の整数を指定します.
in_grid_sz: 720, 360
データ型
キーに対応する値には,以下の種類があります.
(1) integer
(2) real
(3) logical
(4) character
(5) path
(6) file
(1) integer
8バイト整数.
(2) real
8バイト浮動小数点数です.
整数で与えても問題ありません.
(例)
2.0
1
1.d-10
6371.e3
(3) logical
論理値.
.true.か.false.で与えます.
(4) character (文字列)
ファイルのデータ型やエンディアン,格子系の名前などを与えます.
基本的にシングルクォートやダブルクォートで囲む必要はありません(囲んでもよい)が,文字列がカンマを含む場合は囲む必要があります.
(例)
name: COCO 1deg
earth_shape: sphere
(5) path (パス)
レポートファイル,ディレクトリ,ファイルのパスが該当します(詳細は後述).
必ずシングルクォートかダブルクォートで囲まなければなりません.
(正しい例)
dir: "dat/T85"
dir: 'dat/T85'
(誤った例)
dir: dat/T85
(6) file (ファイル)
パスやデータ型等の複数の情報から成るデータの組です.
先に述べたように,本パッケージではレポートファイル以外のファイルの形式はプレーンバイナリに限定されており,この形式は付属情報を持たないため,パスに加えてデータ型,レコード番号,エンディアンを指定する必要があります.これらの値はカンマで区切って与えます.
次のように順に書いていくのが最も基本的な書き方になります.
: '<パス>', <データ型>, <レコード番号>, <エンディアン>
(例)
f_lon_bound: 'dat/T85/T85_lon_bound.bin', dble, 1, little
各変数のデータ型は以下のとおりです.
変数 |
データ型 |
パス |
path |
データ型 |
character |
レコード番号 |
integer |
エンディアン |
character |
パスはシングルクォートかダブルクォートで囲みます.
データ型として指定可能なのは以下の6つです.
値 |
意味 |
int1 |
1バイト整数 |
int2 |
2バイト整数 |
int4 |
4バイト整数 |
int8 |
8バイト整数 |
real |
単精度浮動小数点数 |
dble |
倍精度浮動小数点数 |
レコード番号は1以上の整数で与えます.
エンディアンはリトルエンディアン,ビッグエンディアンの2通りが指定可能で,それぞれlittle,bigとします.
これらの値は常に全て指定しなければならないわけではなく,各ファイルにはデフォルト値が与えられているため,それと同じ値を取る場合は省略できます.
例えばf_lon_boundのデフォルト値が
パス : ''
データ型: dble (倍精度浮動小数点数)
レコード番号: 1
エンディアン: little (リトルエンディアン)
で,入力ファイルもパス以外これと同じだった場合,次のように簡略化して記述することができます.
f_lon_bound: 'dat/T85/T85_lon_bound.bin'
パスとデータ型だけを指定したい場合は
f_lon_bound: 'dat/T85/T85_lon_bound.bin', dble
とすることができます.
キーを使って指定することも可能です.
値をカンマで区切って並べたとき,左から1番目がパス,2番目がデータ型,3番目がレコード番号,4番目がエンディアンと解釈されますが,次のようにキーを用いることで順番を無視することができます.
f_lon_bound: 'dat/T85/T85_lon_bound.bin', endian=big
このときこのデータは,データ型はdble,レコード番号は1,エンディアンはbigとして読み込まれます.
各変数を指定するキーは以下のとおりです.
変数 |
キー |
パス |
path |
データ型 |
dtype |
レコード番号 |
rec |
エンディアン |
endian |
なお,ファイルのデフォルト値は基本的に,パスが空文字列,レコード番号が1,エンディアンがlittleで,データ型は整数のデータならint4,浮動小数点数のデータならdbleとなっています.
具体的な値は各機能のページを参照してください.