Pythonで海面フラックス計算
2022年6月 川合義美
Pythonで海面フラックスを計算します。
Python版は、COARE3.5のプログラム(Edson et al. 2013)しか公開されていないようです。
Warm layerを考慮するオプションも無いようです。
COARE3.0や3.6、またはWarm layerオプションを使いたい方は、MATLABまたはOctaveを使いましょう(「MATLAB/Octaveで海面フラックス計算」「GNU Octaveをインストール」参照)。
(Pythonからoct2pyでmファイルのプログラムを呼び出すという手もあります:「Pythonで中立密度を計算」参照)
① 以下のウェブサイトから、pyCOARE-1.1.zipをダウンロードして解凍します。
主要な論文のPDFファイルもここに入っています。
https://github.com/noaa-psd/pyCOARE/releases/tag/v1.1
あるいは
ftp://ftp1.esrl.noaa.gov/BLO/Air-Sea/bulkalg/cor3_5/python
(こちらは圧縮されておらず、論文のファイルは含まれていません)
② まず、テストデータで動作確認します。
coare35vn.pyの533行目付近の
path = ‘/Volume/MyPassport/pyCOARE_NOAA’
を path = ‘ ‘ にします(あるいはcoare35vn.pyのあるディレクトリのパスを指定)。
③ テストデータで動作確認します。次のコマンドを打つとテストデータを読み込んで結果を出力します。
> run coare35vn.py
そのままでcoare35vn.pyを走らせると恐らくエラーが出ます。
テストデータ(test_35_data.txt)で1行毎に空の行が入っているためです。
util.pyの中で定義されている関数load_txt_fileに1行加えます。
util.pyの45行目付近
for jj in range(cols):
の前に、以下のコマンドを加えるとエラーを回避できます。
if len(fields) <= 1: continue
④ test_35_output_py_082020.txtというファイルに計算値が出力されます。
前からusr (摩擦速度), tau (風応力), hsb (顕熱フラックス), hlb (潜熱フラックス), hbb (浮力フラックス), … です。普通はこれら先頭から5つくらいしか要らないと思います。出力データの詳しい説明はプログラム中に記載されています。
⑤ ここまで出来たら任意の入力データを与えてフラックス計算ができます。パスが通っている場合には、
> import coare35vn
だけで関数を使うことができます。パスが通っていないとエラーが出ます。その場合には、
> import sys
> sys.path.append(‘ディレクトリのパス’)
> import coare35vn
としましょう。
⑥ 次のコマンドでフラックスの計算結果が配列fluxに出力されます。出力の内容は④と同じです。風速、気温、湿度、海面水温だけ与えてそれ以外はデフォルトの値を使う場合には、
> flux = coare35vn.coare35vn(u, t, rh, ts)
それ以外の引数も自分で制御したい場合には、
> flux = coare35vn.coare35vn(u, t, rh, ts, P, Rs, Rl, zu=zu, zt=zt, zq=zq, lat=lat, zi=zi, rain=rain, cp=cp, sigH=sigH, jcool=jcool)
とします。
u, t, rh, ts はベクトルで与えます。
rain は数値のベクトル、もしくはNoneを与えます。
P, Rs, Rl, lat, zi, cp, sigH はベクトルでもスカラーでもいいようです。
zu, zt, zq はスカラーで与えます。
入力変数:
u: 高度zu (m)における海上風速 (m/s)
t: 高度zt (m)における海上気温 (°C)
rh: 高度zq (m)における相対湿度 (%)
ts: 海面水温 (°C)
P: 海面気圧 (hPa) デフォルト: 1015 hPa
Rs: 下向き短波放射 (W/m2) デフォルト: 150 W/m2
Rl: 下向き長波放射 (W/m2) デフォルト: 370 W/m2
zu: 海上風速を観測した高度 (m) デフォルト: 18 m
zt: 海上気温を観測した高度 (m) デフォルト: 18 m
zq: 相対湿度を観測した高度 (m) デフォルト: 18 m
lat: 緯度 (°N) デフォルト: 45 °N
zi: 大気境界層の高度 (m) デフォルト: 600 m
rain: 降水量 (mm/hr) デフォルト: None
cp: 波浪の位相速度 (m/s) デフォルト: None
sigH: 有義波高 (m) デフォルト: None
jcool: Skin layerの影響を考慮したい場合は1(デフォルト), 考慮したくない場合は0