Source code for rocketpy.prints.flight_prints

[docs] class _FlightPrints: """Class that holds prints methods for Flight class. Attributes ---------- _FlightPrints.flight : Flight Flight object that will be used for the prints. """
[docs] def __init__( self, flight, ): """Initializes _FlightPrints class Parameters ---------- flight: Flight Instance of the Flight class. Returns ------- None """ self.flight = flight return None
[docs] def initial_conditions(self): """Prints all initial conditions data available about the Flight. Returns ------- None """ print("\nInitial Conditions\n") # Post-process results if self.flight.post_processed is False: self.flight.post_process() print( "Position - x: {:.2f} m | y: {:.2f} m | z: {:.2f} m".format( self.flight.x(0), self.flight.y(0), self.flight.z(0) ) ) print( "Velocity - Vx: {:.2f} m/s | Vy: {:.2f} m/s | Vz: {:.2f} m/s".format( self.flight.vx(0), self.flight.vy(0), self.flight.vz(0) ) ) print( "Attitude - e0: {:.3f} | e1: {:.3f} | e2: {:.3f} | e3: {:.3f}".format( self.flight.e0(0), self.flight.e1(0), self.flight.e2(0), self.flight.e3(0), ) ) print( "Euler Angles - Spin φ : {:.2f}° | Nutation θ: {:.2f}° | Precession ψ: {:.2f}°".format( self.flight.phi(0), self.flight.theta(0), self.flight.psi(0) ) ) print( "Angular Velocity - ω1: {:.2f} rad/s | ω2: {:.2f} rad/s| ω3: {:.2f} rad/s".format( self.flight.w1(0), self.flight.w2(0), self.flight.w3(0) ) ) return None
[docs] def numerical_integration_settings(self): """Prints out the Numerical Integration settings available about the flight. Returns ------- None """ print("\nNumerical Integration Settings\n") print("Maximum Allowed Flight Time: {:f} s".format(self.flight.max_time)) print("Maximum Allowed Time Step: {:f} s".format(self.flight.max_time_step)) print("Minimum Allowed Time Step: {:e} s".format(self.flight.min_time_step)) print("Relative Error Tolerance: ", self.flight.rtol) print("Absolute Error Tolerance: ", self.flight.atol) print("Allow Event Overshoot: ", self.flight.time_overshoot) print("Terminate Simulation on Apogee: ", self.flight.terminate_on_apogee) print("Number of Time Steps Used: ", len(self.flight.time_steps)) print( "Number of Derivative Functions Evaluation: ", sum(self.flight.function_evaluations_per_time_step), ) print( "Average Function Evaluations per Time Step: {:3f}".format( sum(self.flight.function_evaluations_per_time_step) / len(self.flight.time_steps) ) ) return None
[docs] def surface_wind_conditions(self): """Prints out the Surface Wind Conditions available about the flight. Returns ------- None """ if self.flight.post_processed is False: self.flight.post_process() print("\nSurface Wind Conditions\n") print( "Frontal Surface Wind Speed: {:.2f} m/s".format( self.flight.frontal_surface_wind ) ) print( "Lateral Surface Wind Speed: {:.2f} m/s".format( self.flight.lateral_surface_wind ) ) return None
[docs] def launch_rail_conditions(self): """Prints out the Launch Rail Conditions available about the flight. Returns ------- None """ print("\nLaunch Rail\n") print("Launch Rail Length:", self.flight.rail_length, " m") print("Launch Rail Inclination: {:.2f}°".format(self.flight.inclination)) print("Launch Rail Heading: {:.2f}°".format(self.flight.heading)) return None
[docs] def out_of_rail_conditions(self): """Prints out the Out of Rail Conditions available about the flight. Returns ------- None """ if self.flight.post_processed is False: self.flight.post_process() print("\nRail Departure State\n") print("Rail Departure Time: {:.3f} s".format(self.flight.out_of_rail_time)) print( "Rail Departure Velocity: {:.3f} m/s".format( self.flight.out_of_rail_velocity ) ) print( "Rail Departure Stability Margin: {:.3f} c".format( self.flight.stability_margin(self.flight.out_of_rail_time) ) ) print( "Rail Departure Angle of Attack: {:.3f}°".format( self.flight.angle_of_attack(self.flight.out_of_rail_time) ) ) print( "Rail Departure Thrust-Weight Ratio: {:.3f}".format( self.flight.rocket.thrust_to_weight(self.flight.out_of_rail_time) ) ) print( "Rail Departure Reynolds Number: {:.3e}".format( self.flight.reynolds_number(self.flight.out_of_rail_time) ) ) return None
[docs] def burn_out_conditions(self): """Prints out the Burn Out Conditions available about the flight. Returns ------- None """ print("\nBurn out State\n") print("Burn out time: {:.3f} s".format(self.flight.rocket.motor.burn_out_time)) print( "Altitude at burn out: {:.3f} m (AGL)".format( self.flight.z(self.flight.rocket.motor.burn_out_time) - self.flight.env.elevation ) ) print( "Rocket velocity at burn out: {:.3f} m/s".format( self.flight.speed(self.flight.rocket.motor.burn_out_time) ) ) print( "Freestream velocity at burn out: {:.3f} m/s".format( ( self.flight.stream_velocity_x( self.flight.rocket.motor.burn_out_time ) ** 2 + self.flight.stream_velocity_y( self.flight.rocket.motor.burn_out_time ) ** 2 + self.flight.stream_velocity_z( self.flight.rocket.motor.burn_out_time ) ** 2 ) ** 0.5 ) ) print( "Mach Number at burn out: {:.3f}".format( self.flight.mach_number(self.flight.rocket.motor.burn_out_time) ) ) print( "Kinetic energy at burn out: {:.3e} J".format( self.flight.kinetic_energy(self.flight.rocket.motor.burn_out_time) ) ) return None
[docs] def apogee_conditions(self): """Prints out the Apogee Conditions available about the flight. Returns ------- None """ if self.flight.post_processed is False: self.flight.post_process() print("\nApogee State\n") print( "Apogee Altitude: {:.3f} m (ASL) | {:.3f} m (AGL)".format( self.flight.apogee, self.flight.apogee - self.flight.env.elevation ) ) print("Apogee Time: {:.3f} s".format(self.flight.apogee_time)) print( "Apogee Freestream Speed: {:.3f} m/s".format( self.flight.apogee_freestream_speed ) ) return None
[docs] def events_registered(self): """Prints out the Events Registered available about the flight. Returns ------- None """ if self.flight.post_processed is False: self.flight.post_process() print("\nParachute Events\n") if len(self.flight.parachute_events) == 0: print("No Parachute Events Were Triggered.") for event in self.flight.parachute_events: trigger_time = event[0] parachute = event[1] open_time = trigger_time + parachute.lag velocity = self.flight.free_stream_speed(open_time) altitude = self.flight.z(open_time) name = parachute.name.title() print(name + " Ejection Triggered at: {:.3f} s".format(trigger_time)) print(name + " Parachute Inflated at: {:.3f} s".format(open_time)) print( name + " Parachute Inflated with Freestream Speed of: {:.3f} m/s".format( velocity ) ) print( name + " Parachute Inflated at Height of: {:.3f} m (AGL)".format( altitude - self.flight.env.elevation ) ) return None
[docs] def impact_conditions(self): """Prints out the Impact Conditions available about the flight. Returns ------- None """ if self.flight.post_processed is False: self.flight.post_process() if len(self.flight.impact_state) != 0: print("\nImpact Conditions\n") print("X Impact: {:.3f} m".format(self.flight.x_impact)) print("Y Impact: {:.3f} m".format(self.flight.y_impact)) print("Latitude: {:.7f}°".format(self.flight.latitude(self.flight.t_final))) print( "Longitude: {:.7f}°".format(self.flight.longitude(self.flight.t_final)) ) print("Time of Impact: {:.3f} s".format(self.flight.t_final)) print("Velocity at Impact: {:.3f} m/s".format(self.flight.impact_velocity)) elif self.flight.terminate_on_apogee is False: print("End of Simulation") t_final = self.flight.solution[-1][0] print("Time: {:.3f} s".format(t_final)) print("Altitude: {:.3f} m".format(self.flight.solution[-1][3])) print("Latitude: {:.3f}°".format(self.flight.latitude(t_final))) print("Longitude: {:.3f}°".format(self.flight.longitude(t_final))) return None
[docs] def maximum_values(self): """Prints out the Maximum Values available about the flight. Returns ------- None """ print("\nMaximum Values\n") print( "Maximum Speed: {:.3f} m/s at {:.2f} s".format( self.flight.max_speed, self.flight.max_speed_time ) ) print( "Maximum Mach Number: {:.3f} Mach at {:.2f} s".format( self.flight.max_mach_number, self.flight.max_mach_number_time ) ) print( "Maximum Reynolds Number: {:.3e} at {:.2f} s".format( self.flight.max_reynolds_number, self.flight.max_reynolds_number_time ) ) print( "Maximum Dynamic Pressure: {:.3e} Pa at {:.2f} s".format( self.flight.max_dynamic_pressure, self.flight.max_dynamic_pressure_time ) ) print( "Maximum Acceleration During Motor Burn: {:.3f} m/s² at {:.2f} s".format( self.flight.max_acceleration_power_on, self.flight.max_acceleration_power_on_time, ) ) print( "Maximum Gs During Motor Burn: {:.3f} g at {:.2f} s".format( self.flight.max_acceleration_power_on / self.flight.env.standard_g, self.flight.max_acceleration_power_on_time, ) ) print( "Maximum Acceleration After Motor Burn: {:.3f} m/s² at {:.2f} s".format( self.flight.max_acceleration_power_off, self.flight.max_acceleration_power_off_time, ) ) print( "Maximum Gs After Motor Burn: {:.3f} g at {:.2f} s".format( self.flight.max_acceleration_power_off / self.flight.env.standard_g, self.flight.max_acceleration_power_off_time, ) ) print( "Maximum Stability Margin: {:.3f} c at {:.2f} s".format( self.flight.max_stability_margin, self.flight.max_stability_margin_time ) ) if ( len(self.flight.rocket.rail_buttons) == 0 or self.flight.out_of_rail_time_index == 0 ): pass else: print( "Maximum Upper Rail Button Normal Force: {:.3f} N".format( self.flight.max_rail_button1_normal_force ) ) print( "Maximum Upper Rail Button Shear Force: {:.3f} N".format( self.flight.max_rail_button1_shear_force ) ) print( "Maximum Lower Rail Button Normal Force: {:.3f} N".format( self.flight.max_rail_button2_normal_force ) ) print( "Maximum Lower Rail Button Shear Force: {:.3f} N".format( self.flight.max_rail_button2_shear_force ) ) return None
[docs] def stability_margin(self): """Prints out the maximum and minimum stability margin available about the flight.""" print("\nStability Margin\n") print( "Maximum Stability Margin: {:.3f} c at {:.2f} s".format( self.flight.max_stability_margin, self.flight.max_stability_margin_time ) ) print( "Minimum Stability Margin: {:.3f} c at {:.2f} s".format( self.flight.min_stability_margin, self.flight.min_stability_margin_time ) ) return None
[docs] def all(self): """Prints out all data available about the Flight. Returns ------- None """ # Print initial conditions self.initial_conditions() print() # Print surface wind conditions self.surface_wind_conditions() print() # Print launch rail orientation self.launch_rail_conditions() print() # Print out of rail conditions self.out_of_rail_conditions() print() # Print burn out conditions self.burn_out_conditions() print() # Print apogee conditions self.apogee_conditions() print() # Print events registered self.events_registered() print() # Print impact conditions self.impact_conditions() print() # Print stability margin self.stability_margin() print() # Print maximum values self.maximum_values() print() # Print Numerical Integration Information self.numerical_integration_settings() print() return None