休日の公園で、ちょっと水魔法を使って遊びたい。
せっかくなのでリヴァイアサンを呼びたい。
でも、たぶん怒られる。というか、「たぶん」で済ませてよい水量なのか。ここは調べてみるしかない。
そこで、新宿御苑でリヴァイアサンを呼び出したらどうなるか、洪水解析エンジンで水魔法をシミュレーションしてみました!
解析した結果、リヴァイアサンを放つと**「新幹線1車両(44,000 kg)が時速150.7 kmで動くときと同じ運動エネルギー」** が発生するそうです笑。
この数値は1 m区画から流出した水の運動エネルギーを132秒間積算した比較値です。衝突力でも、一瞬の攻撃力でもありません。さらに大水量ケースには数値品質の注意点が見つかりました。以下、その部分も含めて検証します。
まず、リリースZIPを本当に動かす
今回使ったのは Water Magic Simulator v0.1.0。従来の内水シミュレータから履歴を引き継いだ、水魔法用の独立リポジトリです。
GitHubから公開ZIPをダウンロードし、別フォルダに展開しました。手元の開発中ソースを使って「動きました」と言うと、配布ZIPが置いてきぼりになるからです。
確認したことは次のとおりです。
- 公開ZIPのSHA-256が添付チェックサムと一致。
- ZIPのCRC検査に合格。展開後の全511ファイルもZIP内の内容と一致。
- 展開したコードをPython 3.12.10のプロジェクト環境で実行。同梱フロントエンドは再ビルドせず使用。
- 既存の利用許可済みSFINCS 2.4.0 Galibierを指定。
- ブラウザの「解析開始」から、地形取得、地物取得、格子生成、実エンジン計算、結果表示まで実行。
- 結果ZIPを保存し、再読込後の条件・数値出力・地点照会を検査。
これはソース配布版です。Python環境とSFINCS実行ファイルは別途必要で、ZIP単体にWindows用の実行環境が全部入っているわけではありません。起動方法は 日本語ガイド にあります。
実験場所は新宿御苑、召喚体は計算しない
環境省の園内マップを確認し、新宿御苑中央付近を実験場所にしました。設定上の中心は 緯度35.685100、経度139.710600 です。厳密な現地測量点ではなく、数値実験用に選んだ地点です。
水を流すエンジンは、Deltaresの洪水モデル SFINCS。地形と背景地図には 国土地理院の地理院タイル、建物・道路には実際に取得できたPLATEAU/OpenStreetMapの情報を使いました。
もちろん、SFINCSに「リヴァイアサン」という入力項目はありません。ゲームの演出を、水量・配置範囲・初速のある水塊へ置き換えます。
今回の共通条件は、0.5 m格子、開始時の全量配置、追加給水なし、追跡12秒+緩和120秒、合計132秒。保存間隔は0.5秒で、各ケース265フレームです。Rainは静止、残りは北向き初速2 m/sとしました。
| 候補 | 設定水量 | 初期配置 | 計算領域 |
|---|---|---|---|
| Divinity: Original Sin 2 / Rain | 6.3 m³ | 半径10 mの円、静止 | 200 × 200 m |
| League of Legends / Nami · Tidal Wave | 40 m³ | 長さ7 m × 幅30 m、北向き2 m/s | 200 × 200 m |
| Final Fantasy VI Advance / Flood | 1,500 m³ | 長さ25 m × 幅30 m、北向き2 m/s | 200 × 200 m |
| Final Fantasy XV / Leviathan · Tsunami | 100,000 m³ | 長さ100 m × 幅80 m、北向き2 m/s | 500 × 500 m |
水量や寸法はアプリのカタログにある解析用の推定値です。公式設定の測定結果ではありません。 リヴァイアサンの10万 m³は、100 × 80 × 25 mの水壁に三角断面の係数0.5を掛けた仮定です。配置した水塊の平均深さは、おおよそ12.5 mになります。
ゲームでのダメージ値、召喚体の移動、海全体の津波、建物破壊は再現していません。「水塊をそこへ置いたら、地形上でどう流れるか」を調べます。
なお、0.5 mは計算格子の大きさです。元の地形が0.5 m精度になったわけではありません。リヴァイアサンの取得標高サンプルは約94.5%がDEM1A、残りはDEM5AやDEM10Bによる補完でした。
エネルギー換算は力士、プリウス、新幹線の3つ!
このアプリには「最高総エネルギー箇所」ボタンがあります。上位10地点を巡回し、その1 m区画の累積流出量と総エネルギーを、力士・プリウス・新幹線1車両へ換算してます。
| 候補 | 最大区画の累積エネルギー | アプリの比較表示 |
|---|---|---|
| Rain | 50.34 J | 力士150 kg・秒速0.82 m、100 m走122.1秒 |
| Nami · Tidal Wave | 1,482.59 J | 力士150 kg・秒速4.45 m、100 m走22.5秒 |
| FFVI Flood | 391,596.04 J | プリウス1,400 kg・時速85.1 km |
| FFXV Leviathan · Tsunami | 38,545,927.19 J | 新幹線1車両44,000 kg・時速150.7 km |
アプリが用いているのは運動エネルギーの式です。
E = 1/2 × 質量 × 速度²
換算速度 = sqrt(2E / 比較対象の質量)
力士は150 kg、プリウスは1,400 kg、新幹線1車両は比較用の44,000 kg。切り替えもアプリの規則に従います。プリウス換算で30 km/h未満なら力士、30〜120 km/hならプリウス、それを超えたら新幹線1車両です。実装はこちら。
計算しているエネルギーは、セル中心の保存流速から推定した区画外向きの流れを、保存時刻間で台形積分したものです。外周面は含めず、同じ水が循環して再流出すると再度加算します。公園全体の全エネルギーを、この1地点の値と呼んでいるわけでもありません。
また、格子0.5 mの瞬間的なセル内エネルギーと、1 m区画の時間積算を混ぜないようにしました。この記事の比較表はすべて後者です。
Rainなら水遊びっぽい。でも「小さい」の単位がおかしい
Rainの最大水深は、保存フレームでは 7.46 cm。水深1 cm以上になった場所の合計は、132秒間の履歴で636 m²でした。水深10 cm以上になった場所はありませんでした。
最高総エネルギー区画の比較は、力士が秒速0.82 mで動く程度。記事のネタとしては、リヴァイアサンよりずっと「公園で水遊び」に近い候補です。
ただし水量は 6,300 L。15 Lのバケツを仮定すると420杯です。「小さい魔法」の最小候補が、すでに人間の休日の片付け能力を超えています。
Namiの40 m³へ進むと、保存フレームの最大水深は 28.99 cm。水深10 cm以上になった場所は405.25 m²ありました。力士換算がそこまで派手でなくても、水深の結果は見逃せません。
したがって、「水量がリヴァイアサンより小さいから安全」という判定はしません。同じ公園でも、深さ、速さ、溜まる場所が変わります。検証した候補の中ではRainが比較的おとなしい、という範囲の結論です。
フラッドでプリウスが来て、リヴァイアサンで車両が増える
FFVI Advanceのフラッド1,500 m³では、アプリの比較が プリウス時速85.1 km相当 になりました。
公園の遊びを考えていたはずなのに、比較欄に高速道路の登場人物が出てきました。記事上は「プリウスミサイル」と呼びたくなりますが、実際の衝突力を計算したわけではありません。
さらにFFXVのリヴァイアサン10万 m³。アプリで「最高総エネルギー箇所」を押すと、第1位は 緯度35.685925、経度139.710208。この1 m区画から流出した水の積算量は 652.17 m³、エネルギーは 38.55 MJ でした。
比較欄には 新幹線1車両・時速150.7 km相当。
ここで挙げているのは1車両です。16両編成ではありません。そして、水そのものが時速150.7 kmで流れているという意味でもありません。この区画で132秒後に表示された水深は0.53 m、流速は0.61 m/sです。大きな積算値と、最後の瞬間の値は別物です。
真面目な検証
各ケースについて、SFINCSのNetCDFを独立に読み、保存フレームの水量・水深・流速を確認してます。
| 候補 | 保存フレームの最大水深 | アプリの内部ピーク水深 | 保存水量の最大誤差 | 負水深の最小値 |
|---|---|---|---|---|
| Rain | 0.07460 m | 0.07461 m | 0.00175%未満 | 約−2 × 10⁻¹¹ m |
| Nami | 0.28991 m | 0.30461 m | 0.00039%未満 | −0.000155 m |
| FFVI Flood | 2.55239 m | 2.61068 m | 0.00909%未満 | −0.03909 m |
| FFXV Leviathan | 18.28652 m | 21.07668 m | 0.30920%未満 | −0.74650 m |
保存フレームの最大と、SFINCSが内部の細かい計算時刻で記録したピークは一致しません。未保存の時刻を、スライダーで見たことにしないよう分けています。水量誤差は、アプリと同様に負の水深を0へ丸めた上で、指定水量との差を全保存時刻で調べた値です。
RainとNamiには−1 cmを下回る水深がなく、水深1 cm超の水は計算外周へ到達しませんでした。一方、フラッドとリヴァイアサンには、単なる微小な丸め誤差とは扱えない負水深が出ました。
特にリヴァイアサンは、1フレームで最大8,222セルが−1 cmより低くなり、その負水深の体積換算は最大約308.34 m³。アプリは表示・集計時に負値を0へ丸めるため、普通に結果が見えてしまいます。収支誤差が1%未満だからといって、それだけで数値品質に合格を出すことはできません。
また、計算外周は閉じています。フラッドとリヴァイアサンでは水が外周へ到達したため、反射や閉じ込めの影響を含みます。さらに大ケースはOSMへのフォールバック、小ケースはPLATEAUとOSMの併用でした。計算領域と地物データも異なるので、表は厳密な「水量だけを変えた比較実験」ではありません。
つまり、時速150.7 kmは この配布版・この設定で得たアプリの表示値 として記録できますが、現実の衝突被害や、収束確認済みの正確な威力としては扱えません。大水量ケースを定量評価へ使うなら、時間刻み、地形の段差、湿潤・乾燥境界、解析領域を変えた追加検証が必要です。
再現と保存データ
ソースリポジトリとv0.1.0の配布ZIPを公開しています。通常のローカル起動例は次のとおりです。SFINCSには、利用を許可された既存の実行ファイルを指定します。
mamba run -n urban-pluvial-flood-phase0 python -m scripts.run_local_review `
--port 8021 --no-browser --sfincs-bin "C:\path\to\sfincs.exe"
http://127.0.0.1:8021/?mode=water-magic を開き、上の座標・条件を設定します。今回は同梱画面をそのまま検証するため、環境と静的ファイルの確認後、展開ZIP内のFastAPIを直接起動しました。
検証対象のソースコミットは 7cd5fdd5c6b1eb5aa1ad929b319f85b2d8121cb7。配布ZIPのSHA-256は次の値です。
a7183fc45578ef43d7e951774778dc1c886fac3dd8d1783c7cead8e991de8d69
リヴァイアサンはSFINCS計算約740秒、全工程約805秒。1000 × 1000格子のうち、有効セルは966,666でした。起動しただけの検証ではなく、実際に計算して得た結果です。
手元の検証素材には、4ケースの再読込用結果ZIP、元の設定、エンジンと提供元の情報、数値統計、エネルギー上位10地点のJSON、比較欄の原文、スクリーンショットを保存しました。
再読込は結果インポートAPIから検証し、4ケースとも設定が一致、NetCDF本体のSHA-256が一致、開始・9秒・132秒の地点照会が一致しました。ブラウザのファイル選択による再読込は、拡張機能のファイルアクセス権限で止まったため未確認です。解析開始と結果の表示・地点選択・換算表示はブラウザで確認しています。
画像と検証素材はGitHubリリースに保存しています。この記事は実行結果に基づき、画像内のアプリ比較値を書き換えていません。
サンプルなしソースZIP / 記事・スクショ・検証素材ZIP
背景地図の出典:国土地理院。ゲーム名・魔法名は各作品の識別のために使用しています。



