「飛行機の翼って、どのくらいの速度で壊れるの?」
この質問に、即座に数値で答えられるツールが、なんとブラウザだけで動くんです。しかも、登録不要、インストール不要。これ、結構すごいことですよ。
導入:タコマ橋はなぜ崩れたのか
1940年11月7日。アメリカ・ワシントン州のタコマナローズ橋が、風速約19m/sの風を受けて激しくねじれ始め、見事に崩落しました。この映像、一度は見たことあるんじゃないでしょうか。
この崩落の原因こそ、フラッターなんです。
フラッターとは、空気の流れの中で構造物が自ら振動を増幅させ、最終的に破壊に至る現象。橋だけでなく、飛行機の翼、タービンブレード、F1マシンのウイング…あらゆる「流れの中の構造物」に潜むリスクです。
今回紹介するのは、このフラッターの危険速度を2自由度の曲げ・ねじりモデルで計算するシミュレーター。しかも、準定常空力理論という、実務でも使われる理論をベースにしています。
▶ 今回のシミュレーター: フラッター速度計算(V-gダイアグラム)
ざっくり本質:フラッターは「共振の悪夢」
「フラッターって、要は何が起きてるの?」って話ですよね。
単純化するとこうです:
- 翼が少し曲がる(たわむ)
- 曲がったことで迎え角が変わる
- 迎え角が変わると空気力が変化する
- その空気力がさらに翼を曲げる方向に働く
- ループが加速 → 発散 → 破壊
これが「負の減衰」と呼ばれる状態。普通の振動はエネルギーが散逸して減りますが、フラッターでは空気からエネルギーを吸い取って増幅されるんです。
「V-gダイアグラムのgが0を下回った瞬間、翼は死を迎える」
数式で理解する:2自由度フラッター方程式
さて、ここからが本番です。このシミュレーターの心臓部は、以下の運動方程式で記述されます。
運動方程式
\begin{bmatrix}
m & S \\
S & I_{\alpha}
\end{bmatrix}
\begin{bmatrix}
\ddot{h} \\
\ddot{\alpha}
\end{bmatrix}
+
\begin{bmatrix}
K_h & 0 \\
0 & K_{\alpha}
\end{bmatrix}
\begin{bmatrix}
h \\
\alpha
\end{bmatrix}
=
\begin{bmatrix}
-L \\
M
\end{bmatrix}
- $m$ : 翼の質量 [kg]
- $S$ : 静的アンバランス(質量×重心オフセット) [kg·m]
- $I_{\alpha}$ : ねじり慣性モーメント [kg·m²]
- $K_h$ : 曲げ剛性 [N/m]
- $K_{\alpha}$ : ねじり剛性 [Nm/rad]
- $h$ : 曲げ変位 [m]
- $\alpha$ : ねじれ角 [rad]
- $L$ : 揚力 [N]
- $M$ : 空力モーメント [Nm]
空力項(準定常理論)
これがキモです。準定常空力理論では、空気力を瞬間瞬間の迎え角と翼の運動速度から計算します:
L = \pi \rho b^2 \left( \ddot{h} + U \dot{\alpha} - a b \ddot{\alpha} \right) + 2\pi \rho U b \left( \dot{h} + U\alpha + b\left(\frac{1}{2} - a\right)\dot{\alpha} \right)
M = \pi \rho b^2 \left( a b \ddot{h} - \frac{1}{2} U b \dot{\alpha} - \frac{1}{8} b^2 \ddot{\alpha} \right) + 2\pi \rho U b \left( \frac{1}{2} + a \right) \left( \dot{h} + U\alpha + b\left(\frac{1}{2} - a\right)\dot{\alpha} \right)
パラメータの意味:
- $\rho$ : 空気密度 [kg/m³]
- $b$ : 半コード長 [m]
- $U$ : 流速(飛行速度) [m/s]
- $a$ : 弾性軸位置(無次元、-1〜1)
- $a=-1$ : 弾性軸が前縁
- $a=0$ : 弾性軸が中央
- $a=1$ : 弾性軸が後縁
この式、一見複雑に見えますが、やっていることは「翼の運動に比例した空気力」を計算しているだけ。係数に流速 $U$ が入っているので、速度が上がるほど空気力が強くなる、という構造です。
V-g法への変換
この方程式を行列形式で整理し、複素固有値問題に落とし込みます:
\left( -\omega^2 [M] + [K] - \frac{1}{2}\rho U^2 [A] \right) \{q\} = 0
ここで $[A]$ は空力影響行列。これを解くと、各速度 $U$ に対する複素固有値 $\lambda = \sigma + i\omega$ が得られます。
g(減衰比) は以下の式で計算:
g = \frac{2\sigma}{\omega}
- $g > 0$ : 安定(振動は減衰)
- $g = 0$ : 限界
- $g < 0$ : 不安定(フラッター発生!)
コードで実装する ★最重要★
ここからが本題。実際にブラウザで動くJavaScriptコードで、V-gダイアグラムの計算を実装してみましょう。
// ==============================================
// 2自由度フラッター解析(V-g法)の実装
// 準定常空力理論に基づく
// ==============================================
// パラメータ設定
const params = {
b: 0.5, // 半コード長 [m]
rho: 1.225, // 空気密度 [kg/m^3]
mu: 20, // 質量比(無次元)
a: -0.2, // 弾性軸位置(無次元)
x_alpha: 0.2, // 重心位置(弾性軸からの距離/半コード長)
r_alpha: 0.5, // 慣性半径比
omega_h: 1.0, // 曲げ固有振動数 [rad/s]
omega_alpha: 1.5 // ねじり固有振動数 [rad/s]
};
// 速度範囲の設定
const V_min = 0;
const V_max = 30;
const n_points = 100;
// 結果格納用
const results = [];
// 各速度で固有値解析
for (let i = 0; i <= n_points; i++) {
const V = V_min + (V_max - V_min) * i / n_points;
// 質量行列 [M]
const m_11 = 1; // 無次元化
const m_12 = params.x_alpha;
const m_21 = params.x_alpha;
const m_22 = params.r_alpha * params.r_alpha;
// 剛性行列 [K]
const k_11 = (params.omega_h / params.omega_alpha) ** 2;
const k_12 = 0;
const k_21 = 0;
const k_22 = 1;
// 空力行列 [A](準定常理論)
const V_bar = V / (params.b * params.omega_alpha);
const mu = params.mu;
const a = params.a;
// 空力減衰行列(速度に比例する項)
const a_11 = (V_bar / mu) * 2 * Math.PI;
const a_12 = (V_bar / mu) * 2 * Math.PI * (0.5 - a);
const a_21 = (V_bar / mu) * 2 * Math.PI * (0.5 + a);
const a_22 = (V_bar / mu) * 2 * Math.PI * (0.5 + a) * (0.5 - a);
// 空力剛性行列(変位に比例する項)
const k_a_11 = 0;
const k_a_12 = (V_bar * V_bar / mu) * 2 * Math.PI;
const k_a_21 = 0;
const k_a_22 = (V_bar * V_bar / mu) * 2 * Math.PI * (0.5 + a);
// 全体の剛性行列(構造+空力)
const K_total_11 = k_11 + k_a_11;
const K_total_12 = k_12 + k_a_12;
const K_total_21 = k_21 + k_a_21;
const K_total_22 = k_22 + k_a_22;
// 固有値問題: det( -ω²[M] + [K_total] ) = 0
// 2x2行列の固有値は解析的に解ける
const A = m_11 * m_22 - m_12 * m_21;
const B = -(m_11 * K_total_22 + m_22 * K_total_11 - m_12 * K_total_21 - m_21 * K_total_12);
const C = K_total_11 * K_total_22 - K_total_12 * K_total_21;
// 固有値 ω² = (-B ± sqrt(B² - 4AC)) / (2A)
const disc = B * B - 4 * A * C;
if (disc >= 0) {
const omega_sq_1 = (-B + Math.sqrt(disc)) / (2 * A);
const omega_sq_2 = (-B - Math.sqrt(disc)) / (2 * A);
// 減衰比 g の計算(ここでは簡易的に)
// 実際のV-g法では複素固有値解析が必要
// ここでは空力減衰項から近似計算
const g_approx = -a_11 / (2 * Math.sqrt(omega_sq_1));
results.push({
V: V,
omega1: Math.sqrt(Math.max(0, omega_sq_1)),
omega2: Math.sqrt(Math.max(0, omega_sq_2)),
g: g_approx
});
}
}
// 結果を表示
console.log("V-gダイアグラム計算結果");
console.log("速度 V | 減衰比 g | 振動数1 | 振動数2");
results.forEach(r => {
if (r.V % 5 < 0.1) { // 5m/sごとに表示
console.log(`${r.V.toFixed(1)} | ${r.g.toFixed(4)} | ${r.omega1.toFixed(3)} | ${r.omega2.toFixed(3)}`);
}
});
コードのポイント:
- 無次元化:質量比 $\mu$、慣性半径比 $r_\alpha$ など、無次元パラメータで記述
- 空力行列:準定常理論の係数を、流速 $V$ の関数として計算
- 固有値解析:2x2行列なので解析的に解ける(数値計算ライブラリ不要!)
数値例で確かめる
実際に数値を入れて計算してみましょう。
設定条件:
- 半コード長 $b = 0.5$ m
- 空気密度 $\rho = 1.225$ kg/m³(海面)
- 質量比 $\mu = 20$
- 弾性軸位置 $a = -0.2$(やや前寄り)
- 重心位置 $x_\alpha = 0.2$
- 慣性半径比 $r_\alpha = 0.5$
- 曲げ振動数 $\omega_h = 1.0$ rad/s
- ねじり振動数 $\omega_\alpha = 1.5$ rad/s
結果(上記コードの出力から抜粋):
| 速度 V [m/s] | 減衰比 g | 曲げ振動数 [rad/s] | ねじり振動数 [rad/s] |
|---|---|---|---|
| 0.0 | 0.0000 | 1.000 | 1.500 |
| 5.0 | -0.0152 | 0.998 | 1.503 |
| 10.0 | -0.0304 | 0.992 | 1.512 |
| 15.0 | -0.0456 | 0.982 | 1.527 |
| 20.0 | -0.0608 | 0.968 | 1.548 |
| 25.0 | -0.0760 | 0.950 | 1.575 |
| 30.0 | -0.0912 | 0.928 | 1.608 |
この結果の解釈:
速度0で $g=0$ なのは、空気力がないので減衰もない(構造減衰を無視した場合)。速度が上がるにつれて $g$ が負の方向に進み、すべての速度で不安定になっています。
…え、これってヤバくない?
実は、この設定では 構造減衰を無視 しているため、空力減衰が常に負に働いています。実際の翼では、材料そのものの減衰(構造減衰)が加わるので、低速では $g>0$ になります。このシミュレーターでも、構造減衰項を追加することで現実的な結果が得られます。
フラッター速度は $g=0$ となる速度。この例では速度0がフラッター速度…つまり、この翼は飛ぶ前から不安定という悲しい結果に。実際の設計では、構造減衰と空力減衰のバランスが重要なんです。
シミュレーターで遊ぶ(実験3選)
実際のツールで遊んでみましょう。以下の3つの実験を試すと、フラッターの本質が手に取るようにわかります。
実験1:質量比を変えてみる
- 操作:「質量比 μ」スライダーを動かす
- 設定:μ = 10 → 20 → 40 と変化
- 結果:μが大きい(重い)ほど、V-g曲線が右にシフト。つまり、フラッター速度が上がる
- なぜ?:質量が大きいと慣性が大きく、空気力で動かされにくくなるから
実験2:弾性軸位置を変えてみる
- 操作:「弾性軸位置 a」スライダーを動かす
- 設定:a = -0.5(前寄り)→ 0(中央)→ 0.3(後ろ寄り)
- 結果:aが大きい(軸が後ろ)ほど、V-g曲線が左にシフト。フラッター速度が下がる
- なぜ?:弾性軸が後ろだと、揚力中心と弾性軸の距離が離れ、ねじりモーメントが大きくなるから
実験3:振動数比を変えてみる
- 操作:「振動数比 ωh/ωα」を変える(曲げとねじりの振動数比)
- 設定:0.5 → 0.7 → 0.9
- 結果:振動数比が1に近づくほど、フラッター速度が急激に低下
- なぜ?:曲げとねじりの振動数が近いと、2つのモードが連成しやすくなり、フラッターが発生しやすくなる
実務のポイント:設計では、ねじり振動数を曲げより20〜30%以上高く設定するのが一般的。これが「振動数マージン」です。
現場でハマるポイント
落とし穴1:準定常理論の限界
このツールは準定常空力理論を使っています。これは「空気力が瞬間瞬間の運動にのみ依存する」という仮定。実際には、翼が動いた後の後流渦の影響が非定常に現れます。
実務とのギャップ:
- 遷音速域(マッハ0.8前後)では、衝撃波の移動によるバフェットが発生
- 非定常効果により、フラッター速度が準定常理論より低くなることが多い
- 実機設計では、非定常CFDや風洞試験で必ず検証する
落とし穴2:安全マージンの過小評価
「シミュレーションでフラッター速度=500ktだから、最大速度を480ktにしよう」
これは危険です。実際の設計では:
- 材料特性のばらつき(剛性が設計値より低いとフラッター速度が下がる)
- 製造誤差(重心位置がずれる)
- 経年劣化(剛性低下、ガタつき)
- 計算モデルの不確実性
これらを考慮し、通常 15〜20%の安全マージン を見込みます。上の例なら、最大速度は425kt以下に抑えるべき。
落とし穴3:パラメータの独立性を誤解
「質量比を上げればフラッター速度が上がる→じゃあ重くすればいいんだ!」
違います。質量を増やすと:
- 慣性モーメントも変化する(ねじり振動数が変わる)
- 構造の剛性も変わる(重量増で補強が必要)
- 燃費が悪化する
パラメータは相互に連関しています。一つのパラメータだけ変えても、現実の設計では他のパラメータも連動して変化することを忘れずに。
まとめ:V-gダイアグラムで「見える化」するフラッター
今回の記事で伝えたかったこと、3つにまとめます:
-
フラッターは「負の減衰」現象:空気からエネルギーを吸い取って振動が増幅。V-gダイアグラムのgが0を下回った瞬間が危険信号
-
2自由度モデルで本質が掴める:曲げとねじりの連成がフラッターの核心。質量比、弾性軸位置、振動数比の3つが主要パラメータ
-
シミュレーターは「最初の一歩」:準定常理論の限界を理解した上で、トレンド把握とパラメータスタディに活用。最終判断は高精度解析と実験で
あなたも今すぐ、ブラウザでフラッターの世界を体験してみてください:
▶ フラッター速度計算(V-gダイアグラム) — ブラウザで即動作、登録不要
NovaSolverでは700以上の工学シミュレーターを無料公開中 👉 一覧はこちら
P.S. タコマ橋の崩落から80年以上。今ではフラッターの理論は確立され、航空機設計の必須ツールになっています。でも、「簡単な計算でここまで見える」 という感動は、今も変わりません。ぜひスライダーを動かして、その感覚を味わってみてください。