「マッハ0.3までは空気は水と同じように扱っていい」
この一言、流体力学を学んだ人なら誰かから聞いたことがあるはずです。でも待ってください。空気が水と同じ? しかも「マッハ0.3まで」って、たった時速370km程度。新幹線より遅いんです。
実はこの「空気を非圧縮性として扱える」という常識、マッハ数が1を超えた瞬間に完全に崩れ去ります。密度が急変し、温度が跳ね上がり、流れの性質がガラリと変わる。そして何より「衝撃波」という壁が現れる。
今日は、この「空気の常識が破綻する瞬間」を、数式・コード・実機の数値例で徹底的に解剖します。
「圧縮性」ってつまり何?—身近な例で直感をつかむ
エアダスターを逆さにして吹くと、缶が冷たくなりますよね? あれは断熱膨張という現象で、気体が急に膨張すると温度が下がるんです。
逆に、超音速の飛行機の周りでは何が起きるか。空気が急激に圧縮されて、温度が一気に上昇します。SR-71ブラックバード(マッハ3超の偵察機)の機首は、空気との摩擦で300℃以上に熱せられたといいます。
つまり圧縮性流れとは、「流れの速さによって空気の密度・温度・圧力が全部変わってしまう」 という現象。マッハ数が大きくなるほど、この変化は劇的になります。
「マッハ数とは、流れの運動エネルギーがどれだけ熱エネルギーに変換されやすいかを示す指標」
これが本質です。
数式で理解する—等エントロピー関係式
圧縮性流れの基礎となるのが等エントロピー関係式。摩擦や熱の出入りがない理想的な流れを仮定すると、以下の関係が成り立ちます。
まず、よどみ状態(流速ゼロに減速した仮想的な状態)と静状態(実際に流れている状態)の関係:
\frac{T_0}{T} = 1 + \frac{\gamma - 1}{2} M^2
\frac{P_0}{P} = \left(1 + \frac{\gamma - 1}{2} M^2\right)^{\frac{\gamma}{\gamma-1}}
\frac{\rho_0}{\rho} = \left(1 + \frac{\gamma - 1}{2} M^2\right)^{\frac{1}{\gamma-1}}
ここで:
- $T_0, P_0, \rho_0$:よどみ温度・圧力・密度(流れを止めたときの値)
- $T, P, \rho$:静温度・静圧・密度(実際に流れている値)
- $M$:マッハ数(流速 / 音速)
- $\gamma$:比熱比(空気なら1.4)
ポイント:マッハ数が大きいほど、$T_0/T$ や $P_0/P$ の比は大きくなります。つまり「流れている場所と止めた場所で、温度や圧力の差が大きくなる」ということ。
垂直衝撃波の関係式
超音速流(M > 1)になると、衝撃波という不連続面が現れます。最もシンプルな垂直衝撃波の前後関係は以下の通り:
M_2^2 = \frac{(\gamma-1)M_1^2 + 2}{2\gamma M_1^2 - (\gamma-1)}
\frac{P_2}{P_1} = 1 + \frac{2\gamma}{\gamma+1}(M_1^2 - 1)
\frac{T_2}{T_1} = \frac{(1 + \frac{\gamma-1}{2}M_1^2)(\frac{2\gamma}{\gamma+1}M_1^2 - \frac{\gamma-1}{\gamma+1})}{M_1^2}
ここで添字1が衝撃波上流(超音速)、添字2が下流(亜音速になる)。
この式の衝撃は、$M_1$が大きいほど$P_2/P_1$が爆発的に増えること。マッハ3では約10倍、マッハ5では約29倍もの圧力上昇が起きます。
コードで実装する—JavaScriptで再現
それでは、このツールのコア計算をJavaScriptで実装してみましょう。ブラウザだけで動く、完全な計算コードです。
/**
* 圧縮性流れ計算機 コアエンジン
* 等エントロピー関係 + 垂直衝撃波
*/
class CompressibleFlowCalc {
constructor(gamma = 1.4) {
this.gamma = gamma;
}
/**
* 等エントロピー関係の計算
* @param {number} M - マッハ数
*/
isentropic(M) {
const g = this.gamma;
const T_ratio = 1 + (g - 1) / 2 * M * M;
const P_ratio = Math.pow(T_ratio, g / (g - 1));
const rho_ratio = Math.pow(T_ratio, 1 / (g - 1));
const a_ratio = Math.sqrt(T_ratio); // 音速比 = sqrt(T/T0)
return {
T_over_T0: 1 / T_ratio, // T/T0
P_over_P0: 1 / P_ratio, // P/P0
rho_over_rho0: 1 / rho_ratio, // ρ/ρ0
a_over_a0: 1 / a_ratio // a/a0
};
}
/**
* 垂直衝撃波の計算(M1 > 1 必須)
* @param {number} M1 - 衝撃波上流マッハ数
*/
normalShock(M1) {
if (M1 <= 1) {
throw new Error('M1 must be greater than 1 for shock wave');
}
const g = this.gamma;
const M2_sq = ((g - 1) * M1 * M1 + 2) / (2 * g * M1 * M1 - (g - 1));
const M2 = Math.sqrt(M2_sq);
const P_ratio = 1 + (2 * g) / (g + 1) * (M1 * M1 - 1);
const rho_ratio = ((g + 1) * M1 * M1) / (2 + (g - 1) * M1 * M1);
const T_ratio = P_ratio / rho_ratio;
// 衝撃波前後の全圧比(エントロピー生成の指標)
const P0_ratio = Math.pow(
((g + 1) * M1 * M1) / (2 + (g - 1) * M1 * M1), g / (g - 1)
) * Math.pow(
(g + 1) / (2 * g * M1 * M1 - (g - 1)), 1 / (g - 1)
);
return {
M2: M2,
P2_over_P1: P_ratio,
rho2_over_rho1: rho_ratio,
T2_over_T1: T_ratio,
P02_over_P01: P0_ratio // 全圧損失率
};
}
}
// 使用例
const calc = new CompressibleFlowCalc(1.4);
// マッハ2.0での等エントロピー関係
const result = calc.isentropic(2.0);
console.log('=== マッハ2.0 等エントロピー関係 ===');
console.log(`温度比 T/T0: ${result.T_over_T0.toFixed(4)}`);
console.log(`圧力比 P/P0: ${result.P_over_P0.toFixed(4)}`);
console.log(`密度比 ρ/ρ0: ${result.rho_over_rho0.toFixed(4)}`);
// 垂直衝撃波(上流マッハ2.5)
const shock = calc.normalShock(2.5);
console.log('\n=== 垂直衝撃波 M1=2.5 ===');
console.log(`下流マッハ数 M2: ${shock.M2.toFixed(4)}`);
console.log(`圧力比 P2/P1: ${shock.P2_over_P1.toFixed(4)}`);
console.log(`温度比 T2/T1: ${shock.T2_over_T1.toFixed(4)}`);
console.log(`全圧損失率 P02/P01: ${shock.P02_over_P01.toFixed(4)}`);
このコード、たった50行足らずで「空気の非常識」を全部計算できます。実際にブラウザのコンソールで動かしてみてください。
数値例で確かめる—SR-71ブラックバードの衝撃
実際の航空機で検証してみましょう。SR-71ブラックバードはマッハ3.2で巡航しました。機首前方にできる垂直衝撃波(厳密には斜めですが、近似として)を計算します。
条件:
- 上流マッハ数 $M_1 = 3.2$
- 比熱比 $\gamma = 1.4$
- 上流温度 $T_1 = -56.5°C = 216.65 K$(成層圏標準温度)
計算(先ほどのコードで実行):
下流マッハ数 M2: 0.4643(亜音速に減速!)
圧力比 P2/P1: 11.78(約12倍)
温度比 T2/T1: 3.71
つまり衝撃波を通過すると:
- 温度:216.65K × 3.71 = 803.8K(530.7℃) ← 機体が加熱される理由
- 圧力:成層圏の静圧約8,500Pa × 11.78 = 約100,000Pa(ほぼ大気圧)
衝撃波ひとつで、極寒の成層圏が一瞬で500℃超えの高温高圧領域に変わるんです。これが「空気の常識がひっくり返る」瞬間です。
シミュレーターで遊ぶ—3つの実験
実際にマッハ数・圧縮性流れ計算機を開いて、以下の実験を試してみてください。
実験1:マッハ0.3の壁(圧縮性の目覚め)
スライダーをゆっくり動かして、温度比 $T/T_0$ の変化を見てください。
- M=0.1 → $T/T_0 = 0.998$(ほぼ1、非圧縮性)
- M=0.3 → $T/T_0 = 0.982$(2%の差)
- M=0.8 → $T/T_0 = 0.886$(11%の差)
なぜか:マッハ数の2乗で効くから。M=0.3でも0.09の2乗効果が現れ始めます。「マッハ0.3までは非圧縮性」という基準は、誤差2%を許容するかどうかのラインだと実感できます。
実験2:衝撃波でM2が急降下する瞬間
垂直衝撃波のタブで、M1を1.0→1.1に動かしてみてください。
- M1=1.0:M2=1.0(衝撃波なし)
- M1=1.1:M2=0.9118(超音速→亜音速へ急減速)
- M1=2.0:M2=0.5774(さらに低下)
なぜか:垂直衝撃波は超音速流を亜音速に落とす「ブレーキ」の役割。しかもM1が大きいほどM2は小さくなり、エネルギー損失が大きいことを示しています。
実験3:比熱比を変えてみる(衝撃波の強さ)
ツールの比熱比を1.4(空気)→1.2(燃焼ガス)に変更し、M1=3.0で比較:
- γ=1.4:P2/P1 = 10.33
- γ=1.2:P2/P1 = 20.00
なぜか:γが小さいほど、衝撃波での圧縮が激しくなる。ロケットエンジンのノズル設計では、燃焼ガスのγが1.2程度になるため、衝撃波の影響が空気より2倍近く大きくなることを覚えておきましょう。
現場でハマるポイント—実務の落とし穴
1. 「よどみ点=よどみ状態」の誤解
ツールの「よどみ温度 $T_0$」は、流れを断熱的に止めた仮想的な値です。飛行機の機首のよどみ点では確かに流速ゼロですが、エンジン内部で使う「全温」は、流れている場所での全エネルギーを示す指標。物理的に止まっているわけではありません。
現場での失敗例:エンジンインテークの設計で、よどみ温度を「吸い込んだ空気の実際の温度」と誤認し、冷却設計を過小評価するケースがあります。
2. 比熱比γの固定化
ツールではγ=1.4固定ですが、実務では流体によって大きく変わります:
- 空気(常温):1.4
- 燃焼ガス(ロケット):1.2〜1.3
- 蒸気:1.3
- ヘリウム:1.66
特に危険なケース:ジェットエンジンのタービン後流でγが1.33程度に下がるのを見逃し、衝撃波の強さを過小評価すると、ディフューザー設計が破綻します。
3. 垂直衝撃波は「教科書の中だけ」
ツールで学ぶ垂直衝撃波は、最もシンプルなモデル。実際の超音速機周りでは:
- 斜め衝撃波(流れに対して角度を持つ)
- 剥離衝撃波(境界層との干渉)
- 衝撃波/境界層干渉(SBLI)
が複雑に組み合わさっています。垂直衝撃波に近い現象が見られるのは、超音速風洞の始動時や、ノズル出口での背面圧力が高い場合など、限定的です。
でも基礎としては最高。このモデルを理解していれば、斜め衝撃波も「垂直成分に分解して考えれば同じ」と応用が効きます。
まとめ—今日からあなたも圧縮性マスター
- マッハ数は「運動エネルギーの熱変換率」—M=1を超えると空気の性質が激変する
- 垂直衝撃波は「超音速→亜音速のブレーキ」—M1が大きいほど圧力・温度のジャンプが激しい
- 実務ではγの変化と衝撃波の種類に注意—ツールは基礎理解のための強力な武器
今回の解説で使った計算は、すべてブラウザ上で動作するツールで再現できます。
▶ マッハ数・圧縮性流れ計算機 — ブラウザで即動作、登録不要
スライダーを動かしながら、数式とコードの対応を確かめてみてください。「空気の非常識」が、手に取るようにわかるはずです。
NovaSolverでは700以上の工学シミュレーターを無料公開中 👉 一覧はこちら
P.S. 次回予告:斜め衝撃波のθ-β-M関係を、コード付きで完全解説予定。衝撃波の角度から流れの曲がり角を計算する「あのグラフ」を、ゼロから実装します。