Ознакомившись со строением атмосферы в общих чертах, посмотрим как изменяется температура воздуха с изменением высоты.
Известно, что для проведения различных расчетов, в которых используються парамтеры воздуха пользуются стандартной атмосферой (СА) - условным распределением, не зависящим от погодных условий, времени года и времени суток.
Рассмотрим, какому закону подчиняеться изменение температуры с изменением высоты. В основу алгоритма расчёта положено распределение температуры воздуха в зависимости от высоты. Алгоритм справедлив только для высот, где состав воздуха более или менее постоянен. Конкретно в нашем случае рассматривается диапазон: -2000 .. 94000 м.
Геопотенциальная и геометрическая высоты
С подъёмом на высоту уменьшается величина ускорения силы тяжести. Это сильно усложнит расчет, поэтому для правильного определения температуры вводиться понятие геопотенциальной высоты. Суть его заключается в том, что Земля принимается как идеальный шар, при этом сила притяжения направлена прямо в его центр. В этом случае нет необходимости принимать во внимание изменение ускорения падения g.
За начало отсчета геопотенциальной высоты так же, как и геометрической, принимается средний уровень моря.
Геопотенциальную высоту H и геометрическую h описывают уравнениями:
(r - радиус Земли. Принимаем его равным 6356767 м)
Температура и вертикальный градиент температуры
Соотношение между температурами по шкале Кельвина - T и Цельсия - t выражается формулой:
,
где To = 273,15 К - температура Кельвина для точки таяния льда при давлении 101325 Па.
Как известно, атмосферу принято делить на условные слои (см. статью об атмосфере, ссылка выше). По характеру изменения температуры с высотой атмосфера делиться на: тропосферу, стратосферу и т. д. Границы слоёв задаются значениями геопотенциальной высоты. Для расчета параметров атмосферы на высотах до H = 94000 м температура каждого слоя аппроксимируется линейной функцией геопотенциальной высоты:
где B - градиент температуры по геопотенциальной высоте;
H* - высота нижней границы рассматриваемого слоя;
Т* - температура на нижней границе слоя.
составим таблицу зависимости градиента температуры В от высоты Н :
Высота геопотенциальная H | Высота геометрическая h | Температура H*, град. К | Градиент температуры К/м |
-2000 | -1999 | 301.15 | -0.0065 |
0 | 0 | 288.15 | -0.0065 |
11000 | 11019 | 216.65 | 0.000 |
20000 | 20063 | 216,65 | 0,0010 |
32000 | 32162 | 228.65 | 0.0028 |
47000 | 47350 | 270.65 | 0.000 |
51000 | 51412 | 270.65 | -0.0028 |
71000 | 71802 | 214.65 | -0.0020 |
85000 | 86152 | 186.65 | 0.000 |
94000 | 95411 | 186.65 | 0.000 |
Теперь мы располагаем всеми необходимыми данными.
Я выбрал такой путь решения: все значения заносятся в двумерный массив, тогда индекс элемента условно будет кодом (номером) слоя. Этот путь может показаться немного запутанным на первый взгляд, однако он очень удобен если потребуются дальнейшие модификации либо ловля ошибок.
Итак, получили следующий код:
const
atm: array[1..3,1..10]of real=
(( -2000, 0, 11000, 20000, 32000, 47000, 51000, 71000, 85000, 94000),
( 301.15, 288.15, 216.65, 216.65, 228.65, 270.65, 270.65, 214.65, 186.65, 186.65),
(-0.0065, -0.0065, 0, 0.0010, 0.0028, 0, -0.0028, -0.0020, 0, 0));
{ geopetential ; T*, K ; Beta-gradient }
var
Form1: TForm1;
implementation
function TForm1.geop(h_m: real):real;
var H, R: real;
begin
R:=6356767.0; {Earth rad, meters}
H:=(R*h_m)/(R+h_m);
geop:=H;
end;
function TForm1.tempr(h_g: real): real;
var i: byte;
t: real;
begin
for i:=2 to 10 do
begin
if (h_g < atm[1,i])and(h_g > atm[1,i-1]-1) then break;
end;
{T = T* + Beta*(H-H*) }
i:=i-1;
t:= atm[2,i] + atm[3,i]*(h_g - atm[1,i]);
tempr:=t;
end;
function TForm1.wlayer(H_g: real): string;
var o: integer;
begin
o:=round(h_g);
case o of
-2001..-1: Wlayer:='ниже уровня моря';
0..8500: WLayer:='Тропосфера';
8501..17000: WLayer:='Тропопауза';
17001..45000: WLayer:='Стратосфера';
45001..55000: WLayer:='Стратопауза';
55001..80000: WLayer:='Ионосфера (мезосфера)';
80001..99000: WLayer:='Ионосфера (термосфера)';
else Wlayer:='не бывает такого';
end;
end;
procedure TForm1.AltInpEnter(Sender: TObject);
begin
if AltInp.Text='' then AltInp.Text:='0';
if strtofloat(AltInp.Text)<-2000 then AltInp.Text:='-2000';
if strtofloat(AltInp.Text)>94000 then AltInp.Text:='94000';
AltGeop.Text:=floattostr(round(10000*geop(strtofloat(AltInp.text)))/10000);
Theight.Text:=floattostr(round(10000*tempr(strtofloat(AltGeop.text)))/10000);
TCels.Text:=floattostr(-273.15 + strtofloat(Theight.Text));
ALayer.Text:=Wlayer(strtofloat(AltGeop.text));
end;
end.
Кроме подсчета высоты необходимо выполнять проверку вводимых значений, а также показывать температуру в градусах шкалы Кельвина и Цельсия.
Правильность проверяется по таблице стандартной атмосферы.
[LINK=content/upload_files/Altitude.zip] [IMG]./_img/zip.gif[/IMG] скачать программу [/LINK]