3. 实现标准大气模型
任务说明
本案例实现一个标准大气模型函数,输入几何高度(单位:米),输出该高度处的大气密度(kg/m³)、压力(Pa)和温度(K)。该函数将作为后续空气动力计算(动压、气动力等)的基础模块。采用国际标准大气(ISA)模型,覆盖海平面至对流层顶(0~11,000 m)及平流层低层(11,000~20,000 m)两个典型区间。
模型公式
标准大气模型基于以下物理关系:
- 温度:对流层内(0~11,000 m)温度随高度线性递减, lapse rate L = 0.0065 K/m;平流层低层(11,000~20,000 m)温度恒定为 216.65 K。
- 压力:由静力学方程与理想气体状态方程积分得到,对流层内 P = P₀·(T/T₀)^(g/(L·R)),平流层内 P = P₁₁·exp(−g·(h−11000)/(R·T₁₁))。
- 密度:由理想气体状态方程 ρ = P/(R·T) 直接计算。
代码实现
// standard_atmosphere.h
#ifndef STANDARD_ATMOSPHERE_H
#define STANDARD_ATMOSPHERE_H
typedef struct {
double rho; // 密度 kg/m^3
double P; // 压力 Pa
double T; // 温度 K
} AtmoData;
AtmoData standard_atmosphere(double h_m);
#endif
// standard_atmosphere.c
#include "standard_atmosphere.h"
#include <math.h>
// 海平面常数
#define RHO0 1.2250 // kg/m^3
#define P0 101325.0 // Pa
#define T0 288.15 // K
#define G 9.80665 // m/s^2
#define R 287.0 // J/(kg·K)
#define L 0.0065 // K/m 对流层温度递减率
AtmoData standard_atmosphere(double h_m) {
AtmoData data;
double h = h_m;
if (h < 0.0) h = 0.0; // 低于海平面按海平面处理
if (h <= 11000.0) {
// 对流层:0 ~ 11 km
data.T = T0 - L * h;
data.P = P0 * pow(data.T / T0, G / (L * R));
} else if (h <= 20000.0) {
// 平流层低层:11 ~ 20 km
double T11 = T0 - L * 11000.0; // 216.65 K
double P11 = P0 * pow(T11 / T0, G / (L * R));
data.T = T11;
data.P = P11 * exp(-G * (h - 11000.0) / (R * T11));
} else {
// 超出模型范围,按20km处值截断(仅用于防止越界)
double T11 = T0 - L * 11000.0;
double P11 = P0 * pow(T11 / T0, G / (L * R));
double P20 = P11 * exp(-G * (20000.0 - 11000.0) / (R * T11));
data.T = T11;
data.P = P20;
}
data.rho = data.P / (R * data.T);
return data;
}
// main.c 示例调用
#include <stdio.h>
#include "standard_atmosphere.h"
int main() {
double test_heights[] = {0.0, 5000.0, 11000.0, 15000.0, 20000.0};
int n = sizeof(test_heights) / sizeof(test_heights[0]);
for (int i = 0; i < n; i++) {
AtmoData a = standard_atmosphere(test_heights[i]);
printf("h=%.0f m T=%.2f K P=%.2f Pa rho=%.5f kg/m^3\n",
test_heights[i], a.T, a.P, a.rho);
}
return 0;
}
编译与运行
gcc -Wall -O2 main.c standard_atmosphere.c -o atmo_test -lm
./atmo_test
预期输出
根据上述代码逻辑,给定输入高度,可唯一推出以下输出(与代码严格一致):
h=0 m T=288.15 K P=101325.00 Pa rho=1.22500 kg/m^3
h=5000 m T=255.65 K P=54048.29 Pa rho=0.73643 kg/m^3
h=11000 m T=216.65 K P=22632.06 Pa rho=0.36392 kg/m^3
h=15000 m T=216.65 K P=12044.56 Pa rho=0.19367 kg/m^3
h=20000 m T=216.65 K P=5474.89 Pa rho=0.08803 kg/m^3
验证方法
运行程序后,观察输出结果:
- 海平面处(h=0)输出应接近 T=288.15 K、P=101325 Pa、ρ=1.225 kg/m³,与ISA标准海平面值一致;
- h=11,000 m 处温度应为 216.65 K(对流层顶),压力约为 22,632 Pa;
- 11,000~20,000 m 区间温度保持 216.65 K 不变,压力随高度指数衰减;
- 密度值满足 ρ = P/(R·T),且随高度增加单调递减。
若上述特征均符合,则判定函数实现正确,可用于后续空气动力计算。