├── .gitignor ├── Aerodynamic_Char_120mm_Mortar.xlsx ├── EoM.m ├── Mortar_Sim.m ├── README.md ├── images ├── console_output.png ├── initial_conditions_set.png └── output.png └── std_atm.csv /.gitignor: -------------------------------------------------------------------------------- 1 | 2 | # Ignore these files: 3 | *.asv 4 | 5 | #archive files 6 | archive/ 7 | 8 | #self 9 | .gitignor 10 | 11 | -------------------------------------------------------------------------------- /Aerodynamic_Char_120mm_Mortar.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianwade1/Ballistics_Simulation/a78c2aba36953bd39db25d959a2e371ee07895fe/Aerodynamic_Char_120mm_Mortar.xlsx -------------------------------------------------------------------------------- /EoM.m: -------------------------------------------------------------------------------- 1 | function dx=EoM(t,x) 2 | %% Documentation 3 | %Program writen by: Brian Wade 4 | %Date 9 Sept 2015 5 | 6 | %% Description and setup 7 | %This program runs as a subprogram of the TBM_Flight.m program. This 8 | %function solves the 12 simultatious ordinary differential equations that 9 | %describe the ballistic motion of a projectile. These equations are based 10 | %on the equations found in McCoy, 1998 (see citation below). The input 11 | %aerodynamic coefficeints are from McCoy's book as well. 12 | 13 | %Input data from: 14 | %1. McCoy, RL, Modern Exerioor Balistics: The Launch and Flight Dynamics 15 | %of Symmetric Projectiles, Schiffer Military History, Atglen, PA, 1998. 16 | 17 | %% Program 18 | %Get globals from the main program. 19 | global cdo_wpn 20 | global clo_wpn 21 | global cmo_wpn 22 | global cmqao_wpn 23 | global cd2_wpn 24 | global cl2_wpn 25 | global cm2_wpn 26 | global cmqa2_wpn 27 | global std_atm 28 | global d 29 | global It 30 | global m 31 | global R 32 | global gravity 33 | 34 | %Find atmospheric variables 35 | rho=interp1(std_atm(:,1),std_atm(:,7),x(11)/1000); %atmpospheric density in 36 | %kg/m^3 37 | 38 | a=interp1(std_atm(:,1),std_atm(:,8),x(11)/1000); %speed of sound in m/s 39 | 40 | %Find refrence area of projectile. 41 | S=(pi/4)*d^2; %refrence area in m^2 42 | 43 | %% Body Forces 44 | %find total velocity (does not account for winds) 45 | V=sqrt(x(1)^2+x(2)^2+x(3)^2); 46 | 47 | %Find total angle of attack 48 | alpha_t=acos((x(1)*x(7)+x(2)*x(8)+x(3)*x(9))/V); 49 | 50 | %find mach number 51 | mach=V/a; 52 | 53 | %find dynamic coefficient 54 | q=rho*V*S; 55 | 56 | %Aeroforces - all in nonrotating frame 57 | %lookup cd,cl,cm,cmqa 58 | if mach>cdo_wpn(size(cdo_wpn,1),1) 59 | M=cdo_wpn(size(cdo_wpn,1),1); 60 | else 61 | M=mach; 62 | end 63 | 64 | %Look up the aerodynamic coefficients 65 | cdo=interp1(cdo_wpn(:,1),cdo_wpn(:,2),M); 66 | cd2=interp1(cd2_wpn(:,1),cd2_wpn(:,2),M); 67 | clo=interp1(clo_wpn(:,1),clo_wpn(:,2),M); 68 | cl2=interp1(cl2_wpn(:,1),cl2_wpn(:,2),M); 69 | cmo=interp1(cmo_wpn(:,1),cmo_wpn(:,2),M); 70 | cm2=interp1(cm2_wpn(:,1),cm2_wpn(:,2),M); 71 | cmqao=interp1(cmqao_wpn(:,1),cmqao_wpn(:,2),M); 72 | cmqa2=interp1(cmqa2_wpn(:,1),cmqa2_wpn(:,2),M); 73 | 74 | cd=cdo+cd2*(sin(alpha_t))^2; %Drag 75 | cl=clo+cl2*(sin(alpha_t))^2; %lift 76 | cm=cmo+cm2*(sin(alpha_t))^2; %moment 77 | cmqa=cmqao+cmqa2*(sin(alpha_t))^2; %overturning moment 78 | 79 | Cd=(q*cd)/(2*m); %Body drag 80 | Cl=(q*cl)/(2*m); %Body lift 81 | Cm=(q*d*cm)/(2*It); %body moment 82 | Cmq=(q*d^2*cmqa)/(2*It); %Body overturning moment 83 | 84 | %gravity compenents in each axis 85 | 86 | g1=-gravity*x(10)/R; 87 | g2=-gravity*(1-(2*x(11)/R)); 88 | g3=0; 89 | % g1=0; 90 | % g2=gravity; 91 | % g3=0; 92 | 93 | %Intermediate term for below equations 94 | IpP_It=x(4)*x(7)+x(5)*x(8)+x(6)*x(9); 95 | 96 | %Equations of motion: 97 | %x(1) = x-velocity with respect (wrt) intertial frame (m/s). 98 | %x(2) = y-velocity wrt intertial frame (m/s). 99 | %x(3) = z-velocity wrt intertial frame (m/s). 100 | %x(4) = roll rate wrt intertial frame (rad/s). 101 | %x(5) = pitch rate wrt intertial frame (m/s). 102 | %x(6) = yaw rate wrt intertial frame (m/s). 103 | %x(7) = x component of projectile unit vector wrt intertial frame 104 | %x(8) = y component of projectile unit vector wrt intertial frame 105 | %x(9) = z component of projectile unit vector wrt intertial frame 106 | %x(10) = position of munition center of gravity (CG) wrt intertial 107 | %frame x-axis (m). This is the range. 108 | %x(11) = position of munition CG wrt intertial frame y-axis (m). 109 | %This is the altitude. 110 | %x(12) = position of munition CG wrt intertial frame z-axis (m). 111 | %This is the cross-range. 112 | 113 | 114 | dx(1,1)=-Cd*x(1)+Cl*(V^2*x(7)-V*x(1)*cos(alpha_t))+g1; 115 | dx(2,1)=-Cd*x(2)+Cl*(V^2*x(8)-V*x(2)*cos(alpha_t))+g2; 116 | dx(3,1)=-Cd*x(3)+Cl*(V^2*x(9)-V*x(3)*cos(alpha_t))+g3; 117 | 118 | dx(4,1)=Cm*(x(2)*x(9)-x(3)*x(8))+Cmq*(x(4)-IpP_It*x(7)); 119 | dx(5,1)=Cm*(x(3)*x(7)-x(1)*x(9))+Cmq*(x(5)-IpP_It*x(8)); 120 | dx(6,1)=Cm*(x(1)*x(8)-x(2)*x(7))+Cmq*(x(6)-IpP_It*x(9)); 121 | 122 | dx(7,1)=x(5)*x(9)-x(6)*x(8); 123 | dx(8,1)=x(6)*x(7)-x(4)*x(9); 124 | dx(9,1)=x(4)*x(8)-x(5)*x(7); 125 | 126 | dx(10,1)=x(1); 127 | dx(11,1)=x(2)+(x(1)^2)/(2*R); 128 | dx(12,1)=x(3); 129 | 130 | end 131 | -------------------------------------------------------------------------------- /Mortar_Sim.m: -------------------------------------------------------------------------------- 1 | %% Documentation 2 | %Program writen by: Brian Wade 3 | %Date 9 Sept 2015 4 | 5 | %% Description and setup 6 | %This program solves the 12 simultatious ordinary differential equations 7 | %that describe the ballistic motion of a projectile. These equations are 8 | %based on those found in McCoy, 1998 (see citation below). The input 9 | %aerodynamic coefficeints are from McCoy's book as well. 10 | 11 | %Input data from: 12 | %1. McCoy, RL, Modern Exterior Ballistics: The Launch and Flight Dynamics 13 | %of Symmetric Projectiles, Schiffer Military History, Atglen, PA, 1998. 14 | 15 | 16 | %% Program setup 17 | clear 18 | clc 19 | close all 20 | start_time=tic; %Timer 21 | 22 | %% Setup 23 | %Declare global variables needed in EoM.m code 24 | global cdo_wpn 25 | global clo_wpn 26 | global cmo_wpn 27 | global cmqao_wpn 28 | global cd2_wpn 29 | global cl2_wpn 30 | global cm2_wpn 31 | global cmqa2_wpn 32 | global std_atm 33 | global d 34 | global It 35 | global m 36 | global R 37 | 38 | %Declare global variables needed in EoM.m code. 39 | global gravity 40 | gravity=9.81; %gravity in metric units (m/s^2) 41 | 42 | %Standard Measurements 43 | R=6371220; %Radius of earth in meters 44 | 45 | %read standard atmosphere tables 46 | std_atm=readmatrix('std_atm.csv','Range','A2:k43'); 47 | 48 | % Weapon charicteristics - These are the properties of the submunissions. 49 | % These weapons charicteristics are from McCoy, 1998. See citation above. 50 | d=119.56/1000; %diameter in m 51 | Ip=0.02335; %Axial moment of inertia kg*m^2 52 | It=0.23187; %Transverse moment of inertia kg*m^2 53 | m=13.585; %mass in kg 54 | 55 | % Read subminition charicteristics from excel file. %These weapon 56 | % charicteristics are from McCoy, 1998. See citation above. 57 | cdo_wpn=xlsread('Aerodynamic_Char_120mm_Mortar.xlsx','A5:B11'); 58 | cd2_wpn=xlsread('Aerodynamic_Char_120mm_Mortar.xlsx','A15:B22'); 59 | clo_wpn=xlsread('Aerodynamic_Char_120mm_Mortar.xlsx','A26:B30'); 60 | cl2_wpn=xlsread('Aerodynamic_Char_120mm_Mortar.xlsx','A34:B41'); 61 | cmo_wpn=xlsread('Aerodynamic_Char_120mm_Mortar.xlsx','A45:B51'); 62 | cm2_wpn=xlsread('Aerodynamic_Char_120mm_Mortar.xlsx','A55:B63'); 63 | cmqao_wpn=xlsread('Aerodynamic_Char_120mm_Mortar.xlsx','A67:B72'); 64 | cmqa2_wpn=xlsread('Aerodynamic_Char_120mm_Mortar.xlsx','A76:B83'); 65 | 66 | 67 | %% Intial conditions 68 | Vo_set = 100; %initial vel at muzzle exit in m/s 69 | phi_0_set = 45; %vertical angle of departure in deg (pos up) 70 | theta_0_set = 15; %horizontal angle of departure in deg(pos to right) 71 | 72 | w_z0_set=1; %initial pitch rate in rad/s (pos nose up) 73 | w_y0_set=0.5; %initial transverse yaw rate in rad/s (pos for left yaw) 74 | 75 | alpha_0_set = 2; %Pitch angle at muzzle exit in deg 76 | beta_0_set= -0.5; %initial yaw angle at muzzle exit in deg 77 | 78 | %initial position of munition center of gravity (CG) wrt intertial frame 79 | x_0 = 0; % x-axis (m) - range direction 80 | y_0 = 0; % y-axis (m) - altitude 81 | z_0 = 0; % z-axis (m) - cross-range direction 82 | 83 | 84 | 85 | %% Run program 86 | % Read and set initial conditions 87 | t_max = 300; %max time in seconds 88 | 89 | Vo = Vo_set; %initial vel at muzzle exit in m/s 90 | phi_0 = phi_0_set; %vertical angle of departure in deg (pos up) 91 | theta_0 = theta_0_set; %horizontal angle of departure in deg(pos to right) 92 | 93 | w_z0 = w_z0_set; %initial pitch rate in rad/s (pos nose up) 94 | w_y0 = w_y0_set; %initial transverse yaw rate in rad/s (pos for left yaw) 95 | 96 | alpha_0 = alpha_0_set; %Pitch angle at muzzle exit in deg 97 | beta_0 = beta_0_set; %initial yaw angle at muzzle exit in deg 98 | 99 | p = 0; %initial spin rate in rad/s 100 | 101 | %% Intermediate Calcs 102 | %Calculate initial orientation of x-vector (vector along primary 103 | %axis). This is the orientation of the body fame relative to the 104 | %inertial frame. 105 | X1o=cosd(phi_0+alpha_0)*cosd(theta_0+beta_0); 106 | X2o=sind(phi_0+alpha_0)*cosd(theta_0+beta_0); 107 | X3o=sind(theta_0+beta_0); 108 | 109 | %Caclulate initial rate of change of x-vector. This is the initial 110 | %velocity in each x,y,and z direction. The Q variable is an 111 | %intermediate variable. 112 | Q=((sind(theta_0+beta_0))^2)+((cosd(theta_0+beta_0))^2)*... 113 | ((cosd(phi_0+alpha_0))^2); 114 | dx_1o=(1/sqrt(Q))*(-w_z0*((cosd(theta_0+beta_0))^2)*... 115 | sind(phi_0+alpha_0)*cosd(phi_0+alpha_0)+w_y0*... 116 | sind(theta_0+beta_0)); 117 | dx_2o=(1/sqrt(Q))*(w_z0*((cosd(theta_0+beta_0))^2)*... 118 | ((cosd(phi_0+alpha_0))^2)+w_z0*((sind(theta_0+beta_0))^2)); 119 | dx_3o=(1/sqrt(Q))*((-w_z0*sind(theta_0+beta_0)*... 120 | cosd(theta_0+beta_0)*sind(phi_0+alpha_0))-... 121 | (w_y0*cosd(theta_0+beta_0)*cosd(phi_0+alpha_0))); 122 | 123 | %Equations of motion: 124 | %x(1) = x-velocity with respect (wrt) intertial frame (m/s). 125 | %x(2) = y-velocity wrt intertial frame (m/s). 126 | %x(3) = z-velocity wrt intertial frame (m/s). 127 | %x(4) = roll rate wrt intertial frame (rad/s). 128 | %x(5) = pitch rate wrt intertial frame (m/s). 129 | %x(6) = yaw rate wrt intertial frame (m/s). 130 | %x(7) = x component of projectile unit vector wrt intertial frame 131 | %x(8) = y component of projectile unit vector wrt intertial frame 132 | %x(9) = z component of projectile unit vector wrt intertial frame 133 | %x(10) = position of munition center of gravity (CG) wrt intertial 134 | %frame x-axis (m). This is the range. 135 | %x(11) = position of munition CG wrt intertial frame y-axis (m). This is 136 | %the altitude. 137 | %x(12) = position of munition CG wrt intertial frame z-axis (m). This is 138 | %the cross-range. 139 | 140 | %Set initial velocities 141 | x0(1)=Vo*cosd(phi_0)*cosd(theta_0); 142 | x0(2)=Vo*sind(phi_0)*cosd(theta_0); 143 | x0(3)=Vo*sind(theta_0); 144 | 145 | %Set initial angular rates 146 | x0(4)=((Ip*p)/It)*X1o+X2o*dx_3o-X3o*dx_2o; 147 | x0(5)=((Ip*p)/It)*X2o+X1o*dx_3o+X3o*dx_1o; 148 | x0(6)=((Ip*p)/It)*X3o+X1o*dx_2o+X2o*dx_1o; 149 | 150 | %Set initial orientation pointing vector 151 | x0(7)=X1o; 152 | x0(8)=X2o; 153 | x0(9)=X3o; 154 | 155 | %Set initial position 156 | x0(10)=x_0; % initial position in range direction (m) 157 | x0(11)=y_0; % intial position in altitude (m) 158 | x0(12)=z_0; % initial position in cross-range direction (m) 159 | 160 | %Run the ODE solver to propigate the submunissions through the air. 161 | %Evaluate system of differential equations. 162 | tspan=[0 t_max]; %Time span of simulation in sec 163 | Opt = odeset('Events', @myEvent); 164 | [t,x]=ode45(@EoM,tspan,x0,Opt); %Run the ODE solver 165 | 166 | %Calcualte orientation angles 167 | alpha=acosd(x(:,2)./((x(:,1).^2+x(:,2).^2+x(:,3).^2).^0.5)); 168 | beta=acosd(x(:,3)./((x(:,1).^2+x(:,2).^2+x(:,3).^2).^0.5)); 169 | 170 | %Find the appogee of the munition's flight. 171 | [max_ht,I]=max(x(:,11)); 172 | 173 | %Find the time of impact by interpolating the time when the altitude is 174 | %zero (after appogee) 175 | impact_time=interp1(x(I:end,11),t(I:end),0); 176 | 177 | %Find the range when the munitions impacts.(distance along 178 | %interial frame x-axis when the munition impacts the ground) 179 | range=interp1(x(I:end,11),x(I:end,10),0); 180 | 181 | %Find the crossrange when the munitions impacts. (distance 182 | %along interial frame z-axis when the munition impacts the ground) 183 | cross_range=interp1(x(I:end,11),x(I:end,12),0); 184 | 185 | %Determine the orientation of the munition. Find 3D vector of impact 186 | %direction and use dot product with vertical vector. First, find alpha and 187 | %beta angles at impact. Alpha is angle of munition in x-y plane (vertical 188 | %plane) and beta is the angle of the munition in the x-z plane (horizontal 189 | %or ground plane). 190 | impact_alpha = interp1(x(I:end,11),alpha(I:end),0); 191 | impact_beta = interp1(x(I:end,11),beta(I:end),0); 192 | 193 | %Create 3D vector of impact direction 194 | impactVect_x_coord = cosd(impact_beta)*cosd(impact_alpha); 195 | impactVect_y_coord = sind(impact_beta)*cosd(impact_alpha); 196 | impactVect_z_coord = sind(impact_alpha); 197 | impactVect = [impactVect_x_coord, impactVect_y_coord, impactVect_z_coord]; 198 | 199 | vert = [0,1,0]; %vertical vector pointing down 200 | 201 | %Find total 3D impact angle in degrees using dot product 202 | impact_angle = acosd(dot(vert,impactVect)/(norm(vert)*... 203 | norm(impactVect))) - 90; 204 | 205 | %Find the impact valocity in all three axises and then 206 | %combine to get total impact velocity. 207 | vel_x_imp=interp1(x(I:end,11),x(I:end,1),0); 208 | vel_y_imp=interp1(x(I:end,11),x(I:end,2),0); 209 | vel_z_imp=interp1(x(I:end,11),x(I:end,3),0); 210 | impact_vel=sqrt(vel_x_imp^2+vel_y_imp^2+vel_z_imp^2); 211 | 212 | %Total distance vector along the x-z plane (ground plane). This takes 213 | %into account distance in the range (x-direction) and cross-range 214 | %(z-direction). 215 | total_dis = sqrt(x(:,10).^2 + x(:,12).^2); 216 | 217 | %Find total distance at impact 218 | total_dis_imact = interp1(x(I:end,11),total_dis(I:end),0); 219 | 220 | %% Outputs 221 | disp(['Total distance traveled = ',num2str(total_dis_imact),' meters']) 222 | disp(['Impact angle = ',num2str(impact_angle),' degrees']) 223 | disp(['Impact velocity = ',num2str(impact_vel),' m/s']) 224 | disp(['Range along x-axis at impact = ',num2str(range),' m']) 225 | disp(['Cross-range along z-axis at impact = ',num2str(cross_range),' m']) 226 | 227 | %Plots 228 | figure() 229 | subplot(1,3,1) 230 | plot3(x(1:end,10),x(1:end,12),x(1:end,11)) 231 | grid on 232 | xlabel('range (m)') 233 | ylabel('cross-range (m)') 234 | zlabel('altitude (m)') 235 | axis tight 236 | 237 | subplot(1,3,2) 238 | plot(total_dis(1:end),x(1:end,11)) 239 | grid on 240 | xlabel('total distance (m)') 241 | ylabel('altitude (m)') 242 | 243 | subplot(1,3,3) 244 | plot(x(1:end,10),x(1:end,12)) 245 | grid on 246 | xlabel('range (m)') 247 | ylabel('cross-range(m)') 248 | 249 | end_time = toc(start_time); 250 | 251 | %% Termination function for ODE. 252 | %Terminate when altitude is less than 0 meaning that the munition impacted 253 | %the ground. 254 | function [value, isterminal, direction] = myEvent(t, y) 255 | %value = (y(11) < 0); 256 | value = y(11); 257 | isterminal = 1; % Stop the integration 258 | direction = -1; 259 | end 260 | 261 | 262 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 6-DOF Ballistics Simulation 2 | 3 | > MATLAB Simulation of a six degree of freedom (6-DOF) ballistic flight of a 120mm mortar round. 4 | 5 | ![Sample Output](/images/output.png) 6 | 7 | ![Sample Output](/images/console_output.png) 8 | 9 | ## Files 10 | 11 | The simulation is setup, run, and controlled from the Mortar_Sim.m file. This main file uses the ODE45 solver in MATLAB with the equations of motion (EoM) specified for each time step in the EoM.m file. The file reads input data from a standard atmosphere table and a table of aerodynamic coefficients vs. Mach number (McCoy, 1998). The 6-DOF model was developed based on the methodology in McCoy, chapter 9. 12 | 13 | 1. [Mortar_Sim.m](Mortar_Sim.m) - Main program 14 | 2. [EoM.m](EoM.m) - Equations of Motion 15 | 3. [std_atm.csv](std_atm.csv) - Table of the standard atmosphere 16 | 4. [Aerodynamic_Char_120mm_Mortar.xlsx](Aerodynamic_Char_120mm_Mortar.xlsx) - Aerodynamic coefficients of the 120mm for different Mach number. Data extracted from McCoy, 1998 on page 220. 17 | 18 | ## Setup and Run 19 | 20 | The simulation is setup from within the main program ([Mortar_Sim.m](Mortar_Sim.m)). The simulation parameters are set in lines 68-81. These lines set the initial conditions of the mortar round as it exits the mortar tube and enters free flight. 21 | 22 | ![initial_conditions](/images/initial_conditions_set.png) 23 | 24 | The first variable (Vo_set) is the initial velocity at the barrel exit in meters per second. The next variable (phi_0_set) is the vertical angle of departure with respect to the inertial frame in degrees (this is the angle of the mortar tub measured from the horizontal ground plane). The third variable (theta_0_set) is the horizontal angle of departure in degrees (this is the angle of the mortar tub measured from a vertical plan perpendicular to the ground and along the x-axis). 25 | 26 | The next two variables (w_z_0_set and w_y0_set) are the initial pitch and yaw of the mortar round as it exists the barrel both in radians per second. The sign convention is positive for a nose-up or left-yaw rate. 27 | 28 | The third set of variables (alpha_0_set and beta_0_set) are the pitch and yaw angles of the round at the barrel exit. These are measures of the angular difference between the mortar body axis and the inertial (gun tube) axis. Both angles are in degrees. These use the same sign convention as above where a nose-up or left-yaw are positive. Note that these angles establish an initial off-axis flight of the round. 29 | 30 | The final set of variables (x_0, y_0, and z_0) are the x, y, and z locations of the end of the mortar barrel (where the round enters free flight). These are all measured in meters. 31 | 32 | ## MATLAB version and add-ons 33 | 34 | This simulation was built using MATLAB 2019b. No other MATLAB add ons should be needed to run the simulation. 35 | 36 | ## References 37 | 38 | 1. McCoy, RL, Modern Exterior Ballistics: The Launch and Flight Dynamics of Symmetric Projectiles, Schiffer Military History, Atglen, PA, 1998. 39 | -------------------------------------------------------------------------------- /images/console_output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianwade1/Ballistics_Simulation/a78c2aba36953bd39db25d959a2e371ee07895fe/images/console_output.png -------------------------------------------------------------------------------- /images/initial_conditions_set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianwade1/Ballistics_Simulation/a78c2aba36953bd39db25d959a2e371ee07895fe/images/initial_conditions_set.png -------------------------------------------------------------------------------- /images/output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianwade1/Ballistics_Simulation/a78c2aba36953bd39db25d959a2e371ee07895fe/images/output.png -------------------------------------------------------------------------------- /std_atm.csv: -------------------------------------------------------------------------------- 1 | alt (km),sigma,delta,theta,temp (K),press (N/m^2),dens (kg/m^3),a (m/s),visc (10^-6 m/s),k.visc (m^2/2),ratio 2 | -0.5,1.0489,1.0607,1.0113,291.4,107477,1.285,342.2,18.05,1.40E-05,24.36 3 | 0,1,1,1,288.1,101325,1.225,340.3,17.89,1.46E-05,23.3 4 | 0.5,0.9529,0.9421,0.9887,284.9,95461,1.167,338.4,17.74,1.52E-05,22.27 5 | 1,0.9075,0.887,0.9774,281.7,89876,1.112,336.4,17.58,1.58E-05,21.28 6 | 1.5,0.8638,0.8345,0.9662,278.4,84559,1.058,334.5,17.42,1.65E-05,20.32 7 | 2,0.8217,0.7846,0.9549,275.2,79501,1.007,332.5,17.26,1.71E-05,19.39 8 | 2.5,0.7812,0.7372,0.9436,271.9,74691,0.957,330.6,17.1,1.79E-05,18.5 9 | 3,0.7422,0.692,0.9324,268.7,70121,0.909,328.6,16.94,1.86E-05,17.64 10 | 3.5,0.7048,0.6492,0.9211,265.4,65780,0.863,326.6,16.78,1.94E-05,16.81 11 | 4,0.6689,0.6085,0.9098,262.2,61660,0.819,324.6,16.61,2.03E-05,16.01 12 | 4.5,0.6343,0.57,0.8986,258.9,57752,0.777,322.6,16.45,2.12E-05,15.24 13 | 5,0.6012,0.5334,0.8873,255.7,54048,0.736,320.5,16.28,2.21E-05,14.5 14 | 5.5,0.5694,0.4988,0.876,252.4,50539,0.697,318.5,16.12,2.31E-05,13.78 15 | 6,0.5389,0.466,0.8648,249.2,47217,0.66,316.5,15.95,2.42E-05,13.1 16 | 6.5,0.5096,0.435,0.8535,245.9,44075,0.624,314.4,15.78,2.53E-05,12.44 17 | 7,0.4816,0.4057,0.8423,242.7,41105,0.59,312.3,15.61,2.65E-05,11.8 18 | 7.5,0.4548,0.378,0.831,239.5,38299,0.557,310.2,15.44,2.77E-05,11.19 19 | 8,0.4292,0.3519,0.8198,236.2,35651,0.526,308.1,15.27,2.90E-05,10.61 20 | 8.5,0.4047,0.3272,0.8085,233,33154,0.496,306,15.1,3.05E-05,10.05 21 | 9,0.3813,0.304,0.7973,229.7,30800,0.467,303.8,14.93,3.20E-05,9.51 22 | 9.5,0.3589,0.2821,0.786,226.5,28584,0.44,301.7,14.75,3.36E-05,8.99 23 | 10,0.3376,0.2615,0.7748,223.3,26499,0.414,299.5,14.58,3.53E-05,8.5 24 | 10.5,0.3172,0.2422,0.7635,220,24540,0.389,297.4,14.4,3.71E-05,8.02 25 | 11,0.2978,0.224,0.7523,216.8,22699,0.365,295.2,14.22,3.90E-05,7.57 26 | 11.5,0.2755,0.2071,0.7519,216.6,20984,0.337,295.1,14.22,4.21E-05,7 27 | 12,0.2546,0.1915,0.7519,216.6,19399,0.312,295.1,14.22,4.56E-05,6.47 28 | 12.5,0.2354,0.177,0.7519,216.6,17933,0.288,295.1,14.22,4.93E-05,5.99 29 | 13,0.2176,0.1636,0.7519,216.6,16579,0.267,295.1,14.22,5.33E-05,5.53 30 | 13.5,0.2012,0.1513,0.7519,216.6,15327,0.246,295.1,14.22,5.77E-05,5.12 31 | 14,0.186,0.1398,0.7519,216.6,14170,0.228,295.1,14.22,6.24E-05,4.73 32 | 14.5,0.172,0.1293,0.7519,216.6,13100,0.211,295.1,14.22,6.75E-05,4.37 33 | 15,0.159,0.1195,0.7519,216.6,12111,0.195,295.1,14.22,7.30E-05,4.04 34 | 15.5,0.147,0.1105,0.7519,216.6,11197,0.18,295.1,14.22,7.90E-05,3.74 35 | 16,0.1359,0.1022,0.7519,216.6,10352,0.166,295.1,14.22,8.54E-05,3.46 36 | 16.5,0.1256,0.0945,0.7519,216.6,9571,0.154,295.1,14.22,9.24E-05,3.19 37 | 17,0.1162,0.0873,0.7519,216.6,8849,0.142,295.1,14.22,9.99E-05,2.95 38 | 17.5,0.1074,0.0808,0.7519,216.6,8182,0.132,295.1,14.22,1.08E-04,2.73 39 | 18,0.0993,0.0747,0.7519,216.6,7565,0.122,295.1,14.22,1.17E-04,2.52 40 | 18.5,0.0918,0.069,0.7519,216.6,6994,0.112,295.1,14.22,1.26E-04,2.33 41 | 19,0.0849,0.0638,0.7519,216.6,6467,0.104,295.1,14.22,1.37E-04,2.16 42 | 19.5,0.0785,0.059,0.7519,216.6,5979,0.096,295.1,14.22,1.48E-04,2 43 | 20,0.0726,0.0546,0.7519,216.6,5529,0.089,295.1,14.22,1.60E-04,1.85 44 | ,,,,,,,,,, 45 | ,,,,,,,,,, 46 | alt is altitude in kilometers.,,,,,,,,,, 47 | sigma is density divided by sea-level density.,,,,,,,,,, 48 | delta is pressure divided by sea-level pressure.,,,,,,,,,, 49 | theta is temperature divided by sea-level temperature.,,,,,,,,,, 50 | temp is temperature in kelvins.,,,,,,,,,, 51 | press is pressure in newtons per square meter.,,,,,,,,,, 52 | dens is density in kilograms per cubic meter.,,,,,,,,,, 53 | a is the speed of sound in meters per second.,,,,,,,,,, 54 | visc is viscosity in 10**(-6) kilograms per meter-second.,,,,,,,,,, 55 | k.visc is kinematic viscosity in square meters per second.,,,,,,,,,, 56 | ratio is 10**(-6) times speed of sound divided by kinematic viscosity (1/m),,,,,,,,,, 57 | --------------------------------------------------------------------------------