@@ -75,6 +75,49 @@ def test_load_MSIS_atmosphere(self):
7575 self .assertAlmostEqual (self .fdm ['atmosphere/rho-slugs_ft3' ]/ 0.001940318 , 1.263428 , delta = 1E-6 )
7676 self .assertAlmostEqual (self .fdm ['atmosphere/P-psf' ], 2132.294 , delta = 1E-3 )
7777
78+ def test_mars_atmosphere (self ):
79+ # Mars atmosphere via <planet><atmosphere model="Mars"/></planet>.
80+ # Reference values are the closed-form output of FGMars::Calculate at
81+ # altitude = 0:
82+ # T = -25.68 + 459.67 = 433.99 R (~241.1 K)
83+ # P = 14.62 psf (~7 mbar)
84+ # rho = P / (Reng * T), Reng = 53.5*44.01 (CO2)
85+ tripod = FlightModel (self , 'tripod' )
86+ mars_file = self .sandbox .path_to_jsbsim_file ('tests/mars.xml' )
87+ tripod .include_planet_test_file (mars_file )
88+ self .fdm = tripod .start ()
89+ self .fdm ['ic/h-agl-ft' ] = 0.0
90+ self .fdm ['ic/long-gc-deg' ] = 0.0
91+ self .fdm ['ic/lat-geod-deg' ] = 0.0
92+ self .fdm .run_ic ()
93+
94+ # Mars equatorial radius = 3396.2 km
95+ self .assertAlmostEqual (self .fdm ['metrics/terrain-radius' ]* 0.3048 / 3396200 , 1.0 )
96+ # Surface gravity ~3.71-3.72 m/s^2 (JSBSim uses oblate-spheroid gravity,
97+ # not point-mass GM/R^2, so the value is a few mGal above textbook).
98+ self .assertAlmostEqual (self .fdm ['accelerations/gravity-ft_sec2' ]* 0.3048 , 3.72 , delta = 5E-2 )
99+
100+ self .assertAlmostEqual (self .fdm ['atmosphere/T-R' ], 433.99 , delta = 1E-2 )
101+ self .assertAlmostEqual (self .fdm ['atmosphere/P-psf' ], 14.62 , delta = 1E-2 )
102+ # rho = 14.62 / (53.5*44.01 * 433.99) ~ 1.4308e-5 slugs/ft^3
103+ self .assertAlmostEqual (self .fdm ['atmosphere/rho-slugs_ft3' ], 1.4308e-5 , delta = 1E-8 )
104+
105+ def test_load_Mars_atmosphere (self ):
106+ # Same as above but using FGFDMExec::LoadPlanet at runtime instead of
107+ # including the planet file at FDM construction time.
108+ tripod = FlightModel (self , 'tripod' )
109+ mars_file = self .sandbox .path_to_jsbsim_file ('tests/mars.xml' )
110+ self .fdm = tripod .start ()
111+ self .fdm .load_planet (mars_file , False )
112+ self .fdm ['ic/h-agl-ft' ] = 0.0
113+ self .fdm ['ic/long-gc-deg' ] = 0.0
114+ self .fdm ['ic/lat-geod-deg' ] = 0.0
115+ self .fdm .run_ic ()
116+
117+ self .assertAlmostEqual (self .fdm ['atmosphere/T-R' ], 433.99 , delta = 1E-2 )
118+ self .assertAlmostEqual (self .fdm ['atmosphere/P-psf' ], 14.62 , delta = 1E-2 )
119+ self .assertAlmostEqual (self .fdm ['atmosphere/rho-slugs_ft3' ], 1.4308e-5 , delta = 1E-8 )
120+
78121 def test_planet_geographic_error1 (self ):
79122 # Check that a negative equatorial radius raises an exception
80123 tripod = FlightModel (self , 'tripod' )
0 commit comments