MGSkyDiverParachuteDynamics.html

MotionGenesis input/output:


   (1) % MotionGenesis file: MGSkyDiverParachuteDynamics.txt
   (2) % Purpose: Simulation of a sky-diver with free-fall then parachute deployment.
   (3) %    Note: Air-resistance forces change suddenly due to opening parachute.
   (4) % Copyright (c) 2009-2026 Motion Genesis LLC. All rights reserved.
   (5) %-------------------------------------------------------------------------------
   (6) %   Physical objects.
   (7) NewtonianFrame N        % Earth with Ny> vertically upward.
   (8) Particle       Q        % Parachutist.
   (9) %-------------------------------------------------------------------------------
   (10) %   Mathematical declarations.
   (11) Constant  vTerminal = 8 m/s  % Terminal velocity with open parachute (28.8 km/hr, 17.9 mph).
   (12) Constant  g = 9.8 m/s^2      % Earth's gravitational acceleration.
   (13) Specified b                  % Air-resistance drag constant (depends on time).
   (14) Variable  v'                 % Downward measure of Q's velocity relative to Earth.
   (15) Variable  y' = -v            % Height y is measured positive upward.
-> (16) y' = -v

   (17) Q.SetMass( m = 100 kg )
   (18) %-------------------------------------------------------------------------------
   (19) %   Set Q's velocity and acceleration relative to Earth.
   (20) Q.SetVelocityAcceleration( N,  -v*Ny> )
-> (21) v_Q_N> = -v*Ny>
-> (22) a_Q_N> = -v'*Ny>

   (23) %-------------------------------------------------------------------------------
   (24) %   Add air-resistance and gravity forces on parachutist.
   (25) Fair> = -b * Q.GetVelocity(N)
-> (26) Fair> = b*v*Ny>

   (27) Q.AddForce( -m*g*Ny> + Fair> )
-> (28) Force_Q> = (b*v-m*g)*Ny>

   (29) %-------------------------------------------------------------------------------
   (30) %   Form a statics equation -- which is relevant for terminal velocity.
   (31) Statics = Evaluate( Dot( Q.GetStatics(), Ny> ),  v = vTerminal )
-> (32) Statics = vTerminal*b - m*g

   (33) Solve( Statics = 0,  b )
-> (34) b = m*g/vTerminal

   (35) %-------------------------------------------------------------------------------
   (36) %   Create an expression for b that makes b = 0 for the first 4 seconds (free-fall),
   (37) %   and thereafter ensure b is the value determined from terminal velocity.
   (38) isTimeGreaterThan4 = IsPositive( t - 4 )
-> (39) isTimeGreaterThan4 = IsPositive(-4+t)

   (40) b *= isTimeGreaterThan4
-> (41) b = m*g*isTimeGreaterThan4/vTerminal

   (42) %-------------------------------------------------------------------------------
   (43) %   Form dynamic equations with F = m*a.
   (44) Dynamics = Dot( Q.GetDynamics(),  Ny> )
-> (45) Dynamics = m*g - b*v - m*v'

   (46) Solve( Dynamics = 0,   v' )
-> (47) v' = g - b*v/m

   (48) %-------------------------------------------------------------------------------
   (49) %   Set initial values for variables (for subsequent ODE() command).
   (50) Input   y = 200 m,  v = 0 m/s
   (51) %-------------------------------------------------------------------------------
   (52) %   List output quantities (for subsequent ODE() command).
   (53) magFAir = GetMagnitude( Fair> )   % Magnitude of the air-resistance force.
-> (54) magFAir = abs(b*v)

   (55) Output  t sec,  y m,  v m/s,  v' m/s,  magFAir Newtons
   (56) %-------------------------------------------------------------------------------
   (57) %   Set numerical integration parameters.
   (58) Input  tFinal = 9 sec,  tStep = 0.02 sec, absError = 1.0E-05 noUnits
   (59) %-------------------------------------------------------------------------------
   (60) %   Solve ODEs for y(t) and v(t) and write Output to file MGSkyDiverParachuteDynamics.1
   (61) ODE()  MGSkyDiverParachuteDynamics

   (62) %-------------------------------------------------------------------------------
   (63) %   Optional: Plot results for v(t) vs. t.
   (64) % Plot MGSkyDiverParachuteDynamics.1 [ 1, 3 ]
   (65) %-------------------------------------------------------------------------------
   (66) %   Optional: Verify dynamics with Kane's method.
   (67) SetGeneralizedSpeed( v )
   (68) KaneDynamics = System.GetDynamicsKane()
-> (69) KaneDynamics = [b*v + m*v' - m*g]

   (70) isSameDynamics = IsSimplifyEqual( KaneDynamics, Dynamics )
-> (71) isSameDynamics = true

   (72) %-------------------------------------------------------------------------------
   (73) %   Record input together with responses.
Saved by MotionGenesis 6.6 Professional user Motion Genesis LLC.
Portions (including program responses) are copyright (c) 2009-2026 Motion Genesis LLC.