PDAS Home > Contents > Atmosphere > Atmosphere Definition > Pressure Program
Public Domain Aeronautical Software (PDAS)  

This is a copy of the computer program that I used to get accurate values for the pressure at the boundaries of the layers of the 1976 standard atmosphere. The pressure at the top of a layer is computed from the equation of hydrostatic equilibrium using the pressure at the bottom of the layer and the temperature throughout the layer. There are two different forms of the hydrostatic equation, depending upon whether the temperature gradient through the layer is zero or not.

PROGRAM PressureValues;                                  { \atmos\press.pas }
(* ----------------------------------------------------------------------- *)
(* PURPOSE - Compute the pressure ratio at the altitudes that are the      *)
(*    boundaries between layers of the 1976 Standard Atmosphere            *)
(* AUTHOR  - Ralph L. Carmichael, Public Domain Aeronautical Software      *)
(* NOTES - The type EXTENDED used in these calculations may not be         *)
(*    familiar to everyone. It was included in Turbo Pascal by Borland to  *)
(*    let us use the same 80-bit floating format that is used by the       *)
(*    Intel 8087 processor (and its descendents). The 80-bit numbers will  *)
(*    have even greater accuracy than double precision (IEEE 64 bit).      *)
(* REVISION HISTORY                                                        *)
(*   DATE  VERS PERSON  STATEMENT OF CHANGES                               *)
(* 10Aug95  1.0   RLC   Original coding                                    *)
(*  3Nov95  1.1   RLC   Added column headers                               *)
(* 21Nov96  1.2   RLC   Writes to a file (easier for Delphi)               *)
(* ----------------------------------------------------------------------- *)
  CONST
    GREETING  = 'Press - compute pressure at layer boundaries (1976 std)';
    AUTHOR    = 'Ralph L. Carmichael, Public Domain Aeronautical Software';
    VERSION   = '1.2 (21Nov96)';
    FINALMESS = 'Normal termination of press, version ' + VERSION;

PROCEDURE ComputePressures(VAR f : TEXT);
  CONST
    GRAVITY : EXTENDED = 9.80665;                       { accel. of gravity }
    MOL_WT  : EXTENDED = 28.9644;                 { molecular weight of air }
    R_GAS   : EXTENDED = 8.31432;                            { gas constant }
  VAR
    GMR     : EXTENDED;                  { factor used in calc. of pressure }
    s : EXTENDED;                               { density/sea-level density }
    tgrad : EXTENDED;                              { dT/dh in a given layer }
    t0,t11,t20,t32,t47,t51,t71,t85 : EXTENDED;               { temperatures }
    p0,p11,p20,p32,p47,p51,p71,p85 : EXTENDED; { pressure/sea-level pressure}
                                        { note that the t's are dimensional }
                                          { but the p's are non-dimensional }
BEGIN
  GMR := GRAVITY * MOL_WT / R_GAS;
  WriteLn(f, 'Hydrostatic constant = ', GMR:20:12);
  WriteLn(f);
  WriteLn(f, ' km      temp           pressure            density');

  t0:=288.15;
  p0:=1.0;
  s:=1.0;
  WriteLn(f, '  0', t0:12:5, p0:20:13, s:20:13);

  tgrad:=-6.5;
  t11:=t0+tgrad*11.0;
  p11:=p0*Exp(Ln(t0/t11)*GMR/tgrad);
  s:=p11*t0/t11;
  WriteLn(f, ' 11', t11:12:5, p11:20:13, s:20:13);

  tgrad:=0.0;
  t20:=t11;
  p20:=p11*Exp(-GMR*9.0/t11);                   { special form when tgrad=0 }
  s:=p20*t0/t20;
  WriteLn(f, ' 20', t20:12:5, p20:20:13, s:20:13);

  tgrad:=1.0;
  t32:=t20+tgrad*12.0;
  p32:=p20*Exp(Ln(t20/t32)*GMR/tgrad);
  s:=p32*t0/t32;
  WriteLn(f, ' 32', t32:12:5, p32:20:13, s:20:13);

  tgrad:=2.8;
  t47:=t32+tgrad*15.0;
  p47:=p32*Exp(Ln(t32/t47)*GMR/tgrad);
  s:=p47*t0/t47;
  WriteLn(f, ' 47', t47:12:5, p47:20:13, s:20:13);

  tgrad:=0.0;
  t51:=t47;
  p51:=p47*Exp(-GMR*4.0/t47);                   { special form when tgrad=0 }
  s:=p51*t0/t51;
  WriteLn(f, ' 51', t51:12:5, p51:20:13, s:20:13);

  tgrad:=-2.8;
  t71:=t51+tgrad*20.0;
  p71:=p51*Exp(Ln(t51/t71)*GMR/tgrad);
  s:=p71*t0/t71;
  WriteLn(f, ' 71', t71:12:5, p71:20:13, s:20:13);

  tgrad:=-2.0;
  t85:=t71+tgrad*13.852;
  p85:=p71*Exp(Ln(t71/t85)*GMR/tgrad);
  s:=p85*t0/t85;
  WriteLn(f, ' 85', t85:12:5, p85:20:13, s:20:13);
END;   (* ------------------------------ End of Procedure ComputePressures *)

(* ======================================================================= *)
  VAR
    ff : TEXT;
BEGIN                                           (* Start of Program Press. *)
  Assign(ff, 'press.out');
  Rewrite(ff);
  WriteLn(ff, 'Executing ', ParamStr(0));
  WriteLn(ff, GREETING);
  WriteLn(ff, AUTHOR);
  WriteLn(ff, 'Version ', VERSION);

  ComputePressures(ff);
  WriteLn(ff, FINALMESS);
  Close(ff);
END.  (* ------------------------------------------- End of Program Press. *)


When executed, the program produces the following output:


Executing C:\RALPH\PRESS.EXE
Press - compute pressure at layer boundaries (1976 std)
Ralph L. Carmichael, Public Domain Aeronautical Software
Version 1.2 (21Nov96)
Hydrostatic constant =      34.163194736310

 km      temp           pressure            density
  0   288.15000     1.0000000000000     1.0000000000000
 11   216.65000     0.2233611050922     0.2970759401445
 20   216.65000     0.0540329501078     0.0718651953546
 32   228.65000     0.0085666783593     0.0107959255160
 47   270.65000     0.0010945601338     0.0011653334659
 51   270.65000     0.0006606353133     0.0007033514337
 71   214.65000     0.0000390468337     0.0000524171681
 85   186.94600     0.0000036850095     0.0000056799049
Normal termination of press, version 1.2 (21Nov96)
PDAS Home > Contents > Atmosphere > Atmosphere Definition > Pressure Program
Public Domain Aeronautical Software (PDAS)