1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

新宿御苑でリヴァイアサンを呼んだら「新幹線1両・時速150.7km相当」と出たので、散水魔法からやり直すことにした

1
Posted at

休日の公園で、ちょっと水魔法を使って遊びたい。

せっかくなのでリヴァイアサンを呼びたい。

でも、たぶん怒られる。というか、「たぶん」で済ませてよい水量なのか。ここは調べてみるしかない。

そこで、新宿御苑でリヴァイアサンを呼び出したらどうなるか、洪水解析エンジンで水魔法をシミュレーションしてみました!

解析した結果、リヴァイアサンを放つと**「新幹線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以上になった場所はありませんでした。

Rainの最高総エネルギー地点。比較欄はゆっくり動く力士

最高総エネルギー区画の比較は、力士が秒速0.82 mで動く程度。記事のネタとしては、リヴァイアサンよりずっと「公園で水遊び」に近い候補です。

ただし水量は 6,300 L。15 Lのバケツを仮定すると420杯です。「小さい魔法」の最小候補が、すでに人間の休日の片付け能力を超えています。

Namiの40 m³へ進むと、保存フレームの最大水深は 28.99 cm。水深10 cm以上になった場所は405.25 m²ありました。力士換算がそこまで派手でなくても、水深の結果は見逃せません。

Namiの最高総エネルギー地点。力士換算でも、深さの確認は必要

したがって、「水量がリヴァイアサンより小さいから安全」という判定はしません。同じ公園でも、深さ、速さ、溜まる場所が変わります。検証した候補の中では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

背景地図の出典:国土地理院。ゲーム名・魔法名は各作品の識別のために使用しています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?