海洋波の群速度計算
この計算ツールは、有限水深において狭い周波数帯の波群の包絡線とエネルギーが伝わる速さを求めます。波長と水深をメートル単位で入力すると、線形分散関係を解き、水深に応じた群速度係数を適用します。結果には群速度、位相速度、角周波数、波数、相対水深が含まれます。浅水近似や深水近似だけでは精度が足りない場合の海岸工学、海洋学、海上作業、学習用の確認に適しています。
無料で実行
群速度が表すもの
個々の波の峰は位相速度で進みますが、近い成分からなる識別可能な波群は、通常それとは異なる速さで移動します。群速度は包絡線の伝播を表し、線形波理論ではエネルギーが運ばれる速さにも対応します。この違いは、うねりのエネルギーが海岸へ到達する時刻を見積もる場合、観測値と予報を比較する場合、海底地形上での波の変化を追う場合に重要です。本ツールは周期ではなく波長を入力するため、画像、空間モデル、造波水槽、波数スペクトルから得たデータを扱いやすくなっています。比較用に位相速度も返します。非常に深い水域では群速度は位相速度の半分に近づき、浅い水域では長波がほぼ非分散性になるため両者は近づきます。完全な関係式を使うことで、中間の水深でも近似を早期に選ぶ必要がありません。
有限水深での計算方法
計算では、一様水深上を進む振幅の小さい表面重力波を仮定します。まず波長 L を k = 2π/L により波数 k へ変換し、次に ω² = gk tanh(kh) を解きます。ここで ω は角周波数、g は重力加速度、h は水深です。位相速度は ω/k です。群速度は、位相速度に 1 + 2kh/sinh(2kh) の半分を掛けて求めます。無次元量 kh は相対水深として出力され、海底の影響を示します。小さい値は浅水、大きい値は深水の挙動に対応します。別の正の値を指定しない限り標準重力加速度を使用します。波長から k が直接決まるため反復計算は不要です。相対水深が極端に大きい場合は極限値を安全に評価し、双曲線正弦のオーバーフローを防ぎます。
入力の選び方と結果の読み方
波長と水深はメートル単位で入力し、同じ物理スケールにそろえてください。水深とは静水面から海底までの距離であり、波高、喫水、任意の基準面からの標高ではありません。波長は同位相点間の水平距離で、通常は峰から次の峰までです。水深が 0 以下では海洋波の解が定義されないためエラーになります。波長や重力加速度が正でない場合、有限でない数値の場合も受け付けません。結果は線形理論による推定値としてご利用ください。強い流れ、大きな波形勾配、砕波、急変する海底地形、粘性、極端に短い波での表面張力、方向分散には詳細なモデルが必要です。妥当性確認では、群速度係数が浅水で 1、深水で 0.5 に近づくことを目安にできます。中間値は有限水深で自然な結果です。
活用例
うねりエネルギーの到達を見積もる
観測またはモデル化した波長と沖合水深から、監視地点まで波群が伝わる速さを求めます。
海岸工学の計算を確認する
一定水深区間のエネルギーフラックス、浅水変形、伝播時間を求める前に群速度と位相速度を比較します。
有限水深の分散を学ぶ
相対水深 kh によって波が浅水域と深水域の限界の間でどう変化するかを確認できます。
よくある質問
計算料金はいくらですか?
API は1回につき $0.002 です。決定論的な算術だけを用い、ネットワークサービスを使用しないため、ブラウザー内でも実行できます。
群速度と位相速度が異なるのはなぜですか?
位相速度は個々の峰を追い、群速度は包絡線とエネルギーを追います。分散性が両者の差を生みます。
水深が 0 以下の場合はどうなりますか?
海洋波の関係式には正の水深が必要なため、入力エラーを返します。
既定の重力加速度は何ですか?
標準重力加速度を使用します。別の規約や環境を扱う場合は、別の正の値を指定できます。
流れや砕波も計算に含まれますか?
含まれません。一様水深の線形表面重力波理論を適用し、流れ、砕波、強い非線形性、変化する海底地形はモデル化しません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/earth/wave-group-velocity \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"wavelength_m":100,"depth_m":20}'const res = await fetch("https://api.kit.forhosting.com/earth/wave-group-velocity", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"wavelength_m": 100,
"depth_m": 20
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/earth/wave-group-velocity",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"wavelength_m": 100,
"depth_m": 20
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/earth/wave-group-velocity", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"wavelength_m":100,"depth_m":20}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"wavelength_m":100,"depth_m":20}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/earth/wave-group-velocity", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"wavelength_m": 100,
"depth_m": 20
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "earth.wave_group_velocity",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |