流体与条件设置
正激波 (Normal Shock)
$P/P_0 = (T/T_0)^{\gamma/(\gamma-1)}$
$A/A^* = \frac{1}{M}\left[\frac{2+(γ-1)M^2}{γ+1}\right]^{\frac{γ+1}{2(γ-1)}}$
指定马赫数或面积比A/A*,实时计算等熵喷管流动中的压力比、温度比、密度比和马赫角。可视化正激波影响,适用于超音速进气道和推力喷管的初步设计分析。
rgb(0,${Math.round(100 + t*80)},255);
} else {
const t = Math.min(1, (M - 1) / 2);
return rgb(${Math.round(t*230)},${Math.round(200 - t*200)},${Math.round(255 - t*255)});
}
}
function frame() {
const { W, H } = resize();
const { M_exit } = getParams();
animT += 1/60;
ctx.clearRect(0, 0, W, H);
ctx.fillStyle = '#001F3F';
ctx.fillRect(0, 0, W, H);
const cy = H / 2;
// Draw colored Mach number background
const NX = 80;
for (let i = 0; i < NX; i++) {
const x = (i / NX) * W;
const x2 = ((i+1) / NX) * W;
const M = machAtX(x, W, M_exit);
const h = nozzleHalfHeight(x, W, H);
ctx.fillStyle = machColor(M);
ctx.globalAlpha = 0.35;
ctx.fillRect(x, cy - h, x2 - x + 1, h * 2);
}
ctx.globalAlpha = 1;
// Draw nozzle walls
ctx.strokeStyle = '#007BFF';
ctx.lineWidth = 3;
ctx.beginPath();
for (let i = 0; i <= 100; i++) {
const x = (i / 100) * W;
const h = nozzleHalfHeight(x, W, H);
if (i === 0) ctx.moveTo(x, cy - h);
else ctx.lineTo(x, cy - h);
}
ctx.stroke();
ctx.beginPath();
for (let i = 0; i <= 100; i++) {
const x = (i / 100) * W;
const h = nozzleHalfHeight(x, W, H);
if (i === 0) ctx.moveTo(x, cy + h);
else ctx.lineTo(x, cy + h);
}
ctx.stroke();
// Throat marker
ctx.strokeStyle = 'rgba(255,255,255,0.5)';
ctx.lineWidth = 1;
ctx.setLineDash([3, 3]);
const throatX = W * 0.5;
const throatH = nozzleHalfHeight(throatX, W, H);
ctx.beginPath();
ctx.moveTo(throatX, cy - throatH - 8);
ctx.lineTo(throatX, cy + throatH + 8);
ctx.stroke();
ctx.setLineDash([]);
ctx.fillStyle = 'rgba(255,255,255,0.6)';
ctx.font = '9px Roboto Mono';
ctx.textAlign = 'center';
ctx.fillText('喉部 M=1', throatX, cy - throatH - 12);
// Particles
for (let p of particles) {
const M = machAtX(p.x, W, M_exit);
const h = nozzleHalfHeight(p.x, W, H);
// Check if inside nozzle
if (Math.abs(p.y - cy) > h * 0.95) {
p.x = 2;
p.y = cy + (Math.random() - 0.5) * nozzleHalfHeight(0, W, H) * 1.8;
}
const spd = 1.5 + M * 2.5;
p.x += spd;
if (p.x > W) {
p.x = 2;
p.y = cy + (Math.random() - 0.5) * nozzleHalfHeight(0, W, H) * 1.8;
}
ctx.beginPath();
ctx.arc(p.x, p.y, 1.5, 0, Math.PI * 2);
ctx.fillStyle = 'rgba(255,255,255,0.7)';
ctx.fill();
}
// Labels
ctx.fillStyle = 'rgba(255,255,255,0.8)';
ctx.font = 'bold 10px Roboto Mono';
ctx.textAlign = 'left';
ctx.fillText('M_exit = ' + M_exit.toFixed(2), 8, 16);
requestAnimationFrame(frame);
}
frame();
})();
等熵流动的核心关系式,关联了任意位置马赫数(M)与当地静参数(压力P、TemperatureT、密度ρ)相对于总参数(滞止参数,下标0)的比值。这是分析可压缩流的基础。
$$ \frac{P}{P_0}= \left(1 + \frac{\gamma - 1}{2}M^2\right)^{-\frac{\gamma}{\gamma-1}}$$其中,$P$为静压,$P_0$为总压,$\gamma$为比热容比(空气常取1.4),$M$为马赫数。这个公式告诉你,气流速度(M)越大,静压就越低。
喷管喉部(最小截面)达到声速(M=1)的条件,由此可计算临界参数和最大质量流量。这是喷管设计的关键。
$$ \dot{m}_{max}= \frac{P_0 A_t}{\sqrt{T_0}}\sqrt{\frac{\gamma}{R}}\left( \frac{\gamma+1}{2}\right)^{-\frac{\gamma+1}{2(\gamma-1)}}$$其中,$\dot{m}_{max}$是最大质量流量,$A_t$是喉部面积,$T_0$是总温,$R$是气体常数。一旦喷管「堵塞」,流量就只取决于上游条件,不再受下游压力影响。
火箭发动机与航天推进:这是最经典的应用。大型液氢液氧火箭发动机的喷管巨大,其扩张段设计完全基于等熵流动计算,以在真空中将高温燃气加速到极高的马赫数(>4),从而获得最大推力。模拟器中的面积比与马赫数关系直接指导了喷管的型线设计。
涡轮机械(汽轮机/燃气轮机):蒸汽轮机或燃气轮机的末级叶片通道,本质上就是一个微型的收缩-扩张喷管阵列。工程师使用等熵计算来预估蒸汽或燃气在叶片间的膨胀过程,以及可能产生的激波位置,这对提高发电效率至关重要。
超音速风洞与试验设备:为了在实验室产生稳定的超音速气流,风洞的「试验段」上游必须配备一个收缩-扩张喷管(称为风洞喷管)。其型面设计直接决定了试验段马赫数的均匀性和准确性,是空气动力学研究的基础设施。
汽车涡轮增压与喷气引擎:涡轮增压器的涡轮喷嘴和喷气式发动机的尾喷管,都利用了这一原理。通过控制喷管喉部面积和出口压力,可以调节发动机的背压和流量,从而优化在不同飞行速度或发动机转速下的性能,实现省油与高功率的平衡。
模型假设:本模拟器所用数学模型基于线性、均质、各向同性等简化假设。在将计算结果直接用于设计决策之前,务必确认实际系统是否满足这些假设。
单位与量纲:许多计算错误源于单位换算错误或数量级判断失误。请时刻注意各参数输入框旁标注的单位。
结果验证:始终将模拟器输出结果与物理直觉或手算结果进行核对。若结果出乎意料,请检查输入参数或采用独立方法进行验证。
深化理论:在本工具的简化模型基础上,进一步研究非线性效应、三维行为和时间依赖现象。阅读专业教材和学术论文,掌握严格的数学推导,是提升工程解题能力的关键。
数值方法:系统学习有限元法(FEM)、有限差分法(FDM)和有限体积法(FVM),理解商业CAE求解器的内部运行机制,这将显著提升您设置有效仿真的能力。
实验验证:理论和仿真结果必须通过实验数据加以验证。养成将计算结果与测量值进行对比的习惯,这正是V&V(验证与确认)的精髓所在。
CAE工具:准备好后,可进一步探索Ansys、Abaqus、OpenFOAM、COMSOL等业界主流工具。通过本模拟器培养的物理直觉,将帮助您更有效地配置和使用这些工具。
某火箭发动机燃气喷管:γ=1.25(高温燃气),T₀=3200K,p₀=25MPa。设喉部面积A*=50mm²,出口面积A=120mm²(A/A*=2.4)。计算扩张段超声速出口条件:马赫数M≈2.65,静温T≈1080K,静压p≈2.1MPa,密度ρ≈68kg/m³,出口速度v≈2850m/s,质量流量ṁ≈9.8kg/s。若改为亚声速解则M≈0.38,出口温度升至3150K,流量大幅降低。