Source code for rocketpy.rocket.aero_surface.rail_buttons

import numpy as np

from rocketpy.mathutils.function import Function
from rocketpy.prints.aero_surface_prints import _RailButtonsPrints

from .aero_surface import AeroSurface


[docs] class RailButtons(AeroSurface): """Class that defines a rail button pair or group. Attributes ---------- RailButtons.buttons_distance : int, float Distance between the two rail buttons closest to the nozzle. RailButtons.angular_position : int, float Angular position of the rail buttons in degrees measured as the rotation around the symmetry axis of the rocket relative to one of the other principal axis. RailButtons.angular_position_rad : float Angular position of the rail buttons in radians. """
[docs] def __init__( self, buttons_distance, angular_position=45, name="Rail Buttons", rocket_radius=None, ): """Initializes RailButtons Class. Parameters ---------- buttons_distance : int, float Distance between the first and the last rail button in meters. angular_position : int, float, optional Angular position of the rail buttons in degrees measured as the rotation around the symmetry axis of the rocket relative to one of the other principal axis. name : string, optional Name of the rail buttons. Default is "Rail Buttons". rocket_radius : int, float, optional Radius of the rocket at the location of the rail buttons in meters. If not provided, it will be calculated when the RailButtons object is added to a Rocket object. """ super().__init__(name, None, None) self.buttons_distance = buttons_distance self.angular_position = angular_position self.name = name self.rocket_radius = rocket_radius self.evaluate_lift_coefficient() self.evaluate_center_of_pressure() self.prints = _RailButtonsPrints(self)
@property def angular_position_rad(self): return np.radians(self.angular_position)
[docs] def evaluate_center_of_pressure(self): """Evaluates the center of pressure of the rail buttons. Rail buttons do not contribute to the center of pressure of the rocket. Returns ------- None """ self.cpx = 0 self.cpy = 0 self.cpz = 0 self.cp = (self.cpx, self.cpy, self.cpz)
[docs] def evaluate_lift_coefficient(self): """Evaluates the lift coefficient curve of the rail buttons. Rail buttons do not contribute to the lift coefficient of the rocket. Returns ------- None """ self.clalpha = Function( lambda mach: 0, "Mach", f"Lift coefficient derivative for {self.name}", ) self.cl = Function( lambda alpha, mach: 0, ["Alpha (rad)", "Mach"], "Cl", )
[docs] def evaluate_geometrical_parameters(self): """Evaluates the geometrical parameters of the rail buttons. Rail buttons do not contribute to the geometrical parameters of the rocket. Returns ------- None """
def to_dict(self, include_outputs=False): # pylint: disable=unused-argument return { "buttons_distance": self.buttons_distance, "angular_position": self.angular_position, "name": self.name, "rocket_radius": self.rocket_radius, } @classmethod def from_dict(cls, data): return cls( data["buttons_distance"], data["angular_position"], data["name"], data["rocket_radius"], )
[docs] def info(self): """Prints out all the information about the Rail Buttons. Returns ------- None """ self.prints.geometry()
[docs] def all_info(self): """Returns all info of the Rail Buttons. Returns ------- None """ self.prints.all()