本記事は生成AIと共同で執筆しています。事実関係は可能な範囲で公式ドキュメント等と照合していますが、誤りが含まれている可能性があります。重要な判断を行う前にご自身でも一次情報をご確認ください。
OpenDrift という漂流計算ライブラリを教えてもらったので、理解を深めるために試してみた記録です。具体的な題材として、奄美の名瀬港の沖を出発点にして、月別の気候値データで 10 日間の漂流計算を回しました。

★が出発点、青は 10 日後も外洋で漂流継続している粒子、赤は奄美大島に漂着した粒子を示しています。
使ったソフトとデータ
OpenDrift
ノルウェー気象研究所が公開している、Python の漂流計算ライブラリです。原油の流出、海難救助、プラスチックごみの追跡などに使われています。
OpenDrift には Leeway モデルという機能があり、漂流物が海流と風の両方に流される様子を、物体の形状ごとに較正された係数で計算できます。係数は米沿岸警備隊(USCG)による海上実験(Allen & Plourde 1999 など)のデータに基づいています。
今回は object_type=26(LIFE-RAFT-NB-1: バラスト無し小型救命いかだ)を選びました。
海流データ: OSCAR
OSCAR は Earth & Space Research(ESR)が NASA の支援で公開しているデータで、衛星で測った海面の高さ・水温・風などから海流を推定したものです。1993 年以降をカバーしています。
風データ: NCEP/NCAR Reanalysis 1
米国の長期気象再解析データで、1948 年以降の地表 10 m の風が公開されています。NOAA PSL から登録不要でダウンロードできます。
気候値(クライマトロジー)
特定の年のデータではなく、複数年を平均した「典型的な姿」のことです。「5 月の黒潮の典型像」を使えば、特定の年に縛られないシミュレーションができます。
実装の流れ
build_oscar_climatology.py # OSCARから2015–2020の月別海流気候値を作る(一度だけ)
build_wind_climatology.py # NCEP/NCARから1991–2020の月別風気候値を作る(一度だけ)
leeway_climatology.py # 月を選んで漂流計算(オフライン、各実行30秒程度)
事前準備で OPeNDAP 越しに気候値データをダウンロードし、CF 形式の NetCDF として保存します。両方合わせても 1 MB 弱のサイズで済みます。
シミュレーション本体は 150 行ほどで、月、出発座標、漂流時間、粒子数、漂流物の種類を変えるだけで条件を切り替えられます。
o = Leeway(loglevel=20)
o.add_reader(reader_netCDF_CF_generic.Reader(currents_nc, name="OSCAR"))
o.add_reader(reader_netCDF_CF_generic.Reader(wind_nc, name="NCEP"))
o.seed_elements(
lon=129.65, lat=28.30, time=start,
number=200, object_type=26,
)
o.run(duration=timedelta(hours=240),
time_step=timedelta(minutes=30),
time_step_output=timedelta(hours=1))
結果
名瀬港の沖(経度 129.65 度、緯度 28.30 度)から 200 個の粒子を放った場合、10 日後の漂着・脱出比率は次のようになりました。
| 月 | 沖に脱出 | 島に漂着 |
|---|---|---|
| 2 月(晩冬) | 194 / 200 | 6 / 200 |
| 5 月(春) | 29 / 200 | 171 / 200 |
| 8 月(盛夏) | 1 / 200 | 199 / 200 |
| 11 月(晩秋) | 186 / 200 | 14 / 200 |
通年で計算すると、夏(7–9 月)と冬(11–3 月)でほぼ反転する季節サイクルが現れました。

季節差の原因
漂流を決めるのは海流と風の合成です。月別に 2 つの力をベクトル場として描くと、原因が分かります。

青が海流(OSCAR)、赤が地表 10 m の風(NCEP/NCAR)。海流の方向は季節を通じて概ね一定(黒潮が北東へ)ですが、風は完全に方向を変えます。
名瀬港沖の地点における風速・風向を月別に調べると次の通りでした。
| 月 | 風速 | 吹いて来る方向 | 押す方向 |
|---|---|---|---|
| 2 月 | 4.1 m/s | 北 | 南 |
| 5 月 | 1.1 m/s | 東 | 西(弱い) |
| 8 月 | 2.2 m/s | 南東 | 北西 |
| 11 月 | 5.2 m/s | 北北東 | 南南西 |
8 月は南東風が粒子を奄美大島本島の方向(北西)へ押すため、漂着率が高くなります。一方 11 月・2 月は強い北寄りの風が粒子を南方向へ押し出し、海流の東向き成分と合成されて南東方向に大きく流される結果になりました。
5 月は風が弱く、ほとんどの粒子は奄美大島近海で循環し、29 個だけが沖に脱出しています。
動画
実際の漂流の様子を動画にしました(10 日間を約 20 秒に圧縮しています)。
5 月(粒子が島近海に滞留する典型例):
11 月(粒子が南東へ流される):
動画とPNGのタイトルバーに「2000-01-31 to 2000-02-10」と表示されますが、これは気候値(時代を持たないデータ)を OpenDrift に流すための仮想的な日付アンカーです。実際は「5 月の典型像」「11 月の典型像」を計算しています。
補足: 特定日の海流予報を使った版
気候値版に取り組む前に、HYCOM(米国主導の全球海流モデル)の予報データを使って 2026 年 5 月の特定日の漂流も計算しました。

凡例の英語は OpenDrift のデフォルト用語をそのまま表示しているもので、initial(緑)が出発時点、active(青)が 10 日後も外洋で漂流継続中の粒子、stranded(赤)が島の海岸に漂着した粒子という意味です。
特定日の海流予報を使うため結果はその時刻の実際の海流条件に依存します。気候値版とは挙動が少し違いますが、東〜北東方向への漂流という点は共通しています。
留意点
このシミュレーションが扱うのは「動力ゼロの漂流物が、海流と風の合成によって受動的に流される経路」です。実際の船舶のように漕ぐ・帆を張るといった能動的な要素は含まれません。
OSCAR と NCEP/NCAR Reanalysis はいずれも 1990 年代以降の観測から作られた気候値です。今回のシミュレーションは現代の気候値で計算したものとしてご理解ください。
残課題
- 風データを ERA5(解像度 0.25 度、要登録)に置き換えて精度を向上
- 海上保安庁の潮汐推算データを OpenDrift のリーダーとして組み込む
- 漂流物の種類を変えた感度解析(Leeway の object_type を切り替え)
使った技術
- Python 3.12(uv 管理)
- opendrift, xarray, numpy, matplotlib, cartopy
- データ取得: APDRC(ハワイ大学)と NOAA PSL の OPeNDAP(いずれもログイン不要)

コメント
…