aerosandbox.aerodynamics.aero_3D.aero_buildup ============================================= .. py:module:: aerosandbox.aerodynamics.aero_3D.aero_buildup Attributes ---------- .. autoapisummary:: aerosandbox.aerodynamics.aero_3D.aero_buildup.aero Classes ------- .. autoapisummary:: aerosandbox.aerodynamics.aero_3D.aero_buildup.AeroBuildup Module Contents --------------- .. py:class:: AeroBuildup(airplane, op_point, xyz_ref = None, model_size = 'small', include_wave_drag = True) Bases: :py:obj:`aerosandbox.ExplicitAnalysis` A workbook-style aerodynamics buildup. Example usage: >>> import aerosandbox as asb >>> ab = asb.AeroBuildup( # This sets up the analysis, but doesn't execute calculation >>> airplane=my_airplane, # type: asb.Airplane >>> op_point=my_operating_point, # type: asb.OperatingPoint >>> xyz_ref=[0.1, 0.2, 0.3], # Moment reference and center of rotation. >>> ) >>> aero = ab.run() # This executes the actual aero analysis. >>> aero_with_stability_derivs = ab.run_with_stability_derivatives() # Same, but also gets stability derivatives. .. py:attribute:: default_analysis_specific_options This is part of AeroSandbox's "analysis-specific options" feature, which lets you "tag" geometry objects with flags that change how different analyses act on them. This variable, `default_analysis_specific_options`, allows you to specify default values for options that can be used for specific problems. This should be a dictionary, where: * keys are the geometry-like types that you might be interested in defining parameters for. * values are dictionaries, where: * keys are strings that label a given option * values are anything. These are used as the default values, in the event that the associated geometry doesn't override those. An example of what this variable might look like, for a vortex-lattice method aerodynamic analysis: >>> default_analysis_specific_options = { >>> Airplane: dict( >>> profile_drag_coefficient=0 >>> ), >>> Wing : dict( >>> wing_level_spanwise_spacing=True, >>> spanwise_resolution=12, >>> spanwise_spacing="cosine", >>> chordwise_resolution=12, >>> chordwise_spacing="cosine", >>> component=None, # type: int >>> no_wake=False, >>> no_alpha_beta=False, >>> no_load=False, >>> drag_polar=dict( >>> CL1=0, >>> CD1=0, >>> CL2=0, >>> CD2=0, >>> CL3=0, >>> CD3=0, >>> ), >>> ) >>> } .. py:attribute:: airplane .. py:attribute:: op_point .. py:attribute:: xyz_ref :value: None .. py:attribute:: model_size :value: 'small' .. py:attribute:: include_wave_drag :value: True .. py:method:: __repr__() .. py:class:: AeroComponentResults .. py:attribute:: s_ref :type: float .. py:attribute:: c_ref :type: float .. py:attribute:: b_ref :type: float .. py:attribute:: op_point :type: aerosandbox.performance.OperatingPoint .. py:attribute:: F_g :type: List[Union[float, aerosandbox.aerodynamics.aero_3D.aero_buildup_submodels.fuselage_aerodynamics_utilities.np.ndarray]] .. py:attribute:: M_g :type: List[Union[float, aerosandbox.aerodynamics.aero_3D.aero_buildup_submodels.fuselage_aerodynamics_utilities.np.ndarray]] .. py:attribute:: span_effective :type: float .. py:attribute:: oswalds_efficiency :type: float .. py:method:: __repr__() .. py:property:: F_b :type: List[Union[float, aerosandbox.aerodynamics.aero_3D.aero_buildup_submodels.fuselage_aerodynamics_utilities.np.ndarray]] An [x, y, z] list of forces in body axes [N] .. py:property:: F_w :type: List[Union[float, aerosandbox.aerodynamics.aero_3D.aero_buildup_submodels.fuselage_aerodynamics_utilities.np.ndarray]] An [x, y, z] list of forces in wind axes [N] .. py:property:: M_b :type: List[Union[float, aerosandbox.aerodynamics.aero_3D.aero_buildup_submodels.fuselage_aerodynamics_utilities.np.ndarray]] An [x, y, z] list of moments about body axes [Nm] .. py:property:: M_w :type: List[Union[float, aerosandbox.aerodynamics.aero_3D.aero_buildup_submodels.fuselage_aerodynamics_utilities.np.ndarray]] An [x, y, z] list of moments about wind axes [Nm] .. py:property:: L :type: Union[float, aerosandbox.aerodynamics.aero_3D.aero_buildup_submodels.fuselage_aerodynamics_utilities.np.ndarray] The lift force [N]. Definitionally, this is in wind axes. .. py:property:: Y :type: Union[float, aerosandbox.aerodynamics.aero_3D.aero_buildup_submodels.fuselage_aerodynamics_utilities.np.ndarray] The side force [N]. Definitionally, this is in wind axes. .. py:property:: D :type: Union[float, aerosandbox.aerodynamics.aero_3D.aero_buildup_submodels.fuselage_aerodynamics_utilities.np.ndarray] The drag force [N]. Definitionally, this is in wind axes. .. py:property:: l_b :type: Union[float, aerosandbox.aerodynamics.aero_3D.aero_buildup_submodels.fuselage_aerodynamics_utilities.np.ndarray] The rolling moment [Nm] in body axes. Positive is roll-right. .. py:property:: m_b :type: Union[float, aerosandbox.aerodynamics.aero_3D.aero_buildup_submodels.fuselage_aerodynamics_utilities.np.ndarray] The pitching moment [Nm] in body axes. Positive is nose-up. .. py:property:: n_b :type: Union[float, aerosandbox.aerodynamics.aero_3D.aero_buildup_submodels.fuselage_aerodynamics_utilities.np.ndarray] The yawing moment [Nm] in body axes. Positive is nose-right. .. py:method:: run() Computes the aerodynamic forces and moments on the airplane. Returns: a dictionary with keys: - 'F_g' : an [x, y, z] list of forces in geometry axes [N] - 'F_b' : an [x, y, z] list of forces in body axes [N] - 'F_w' : an [x, y, z] list of forces in wind axes [N] - 'M_g' : an [x, y, z] list of moments about geometry axes [Nm] - 'M_b' : an [x, y, z] list of moments about body axes [Nm] - 'M_w' : an [x, y, z] list of moments about wind axes [Nm] - 'L' : the lift force [N]. Definitionally, this is in wind axes. - 'Y' : the side force [N]. This is in wind axes. - 'D' : the drag force [N]. Definitionally, this is in wind axes. - 'l_b', the rolling moment, in body axes [Nm]. Positive is roll-right. - 'm_b', the pitching moment, in body axes [Nm]. Positive is pitch-up. - 'n_b', the yawing moment, in body axes [Nm]. Positive is nose-right. - 'CL', the lift coefficient [-]. Definitionally, this is in wind axes. - 'CY', the sideforce coefficient [-]. This is in wind axes. - 'CD', the drag coefficient [-]. Definitionally, this is in wind axes. - 'Cl', the rolling coefficient [-], in body axes - 'Cm', the pitching coefficient [-], in body axes - 'Cn', the yawing coefficient [-], in body axes Nondimensional values are nondimensionalized using reference values in the AeroBuildup.airplane object. Data types: - The "L", "Y", "D", "l_b", "m_b", "n_b", "CL", "CY", "CD", "Cl", "Cm", and "Cn" keys are: - floats if the OperatingPoint object is not vectorized (i.e., if all attributes of OperatingPoint are floats, not arrays). - arrays if the OperatingPoint object is vectorized (i.e., if any attribute of OperatingPoint is an array). - The "F_g", "F_b", "F_w", "M_g", "M_b", and "M_w" keys are always lists, which will contain either floats or arrays, again depending on whether the OperatingPoint object is vectorized or not. .. py:method:: run_with_stability_derivatives(alpha=True, beta=True, p=True, q=True, r=True) Computes the aerodynamic forces and moments on the airplane, and the stability derivatives. Arguments essentially determine which stability derivatives are computed. If a stability derivative is not needed, leaving it False will speed up the computation. :param - alpha: If True, compute the stability derivatives with respect to the angle of attack (alpha). :type - alpha: bool :param - beta: If True, compute the stability derivatives with respect to the sideslip angle (beta). :type - beta: bool :param - p: If True, compute the stability derivatives with respect to the body-axis roll rate (p). :type - p: bool :param - q: If True, compute the stability derivatives with respect to the body-axis pitch rate (q). :type - q: bool :param - r: If True, compute the stability derivatives with respect to the body-axis yaw rate (r). :type - r: bool Returns: a dictionary with keys: - 'F_g' : an [x, y, z] list of forces in geometry axes [N] - 'F_b' : an [x, y, z] list of forces in body axes [N] - 'F_w' : an [x, y, z] list of forces in wind axes [N] - 'M_g' : an [x, y, z] list of moments about geometry axes [Nm] - 'M_b' : an [x, y, z] list of moments about body axes [Nm] - 'M_w' : an [x, y, z] list of moments about wind axes [Nm] - 'L' : the lift force [N]. Definitionally, this is in wind axes. - 'Y' : the side force [N]. This is in wind axes. - 'D' : the drag force [N]. Definitionally, this is in wind axes. - 'l_b' : the rolling moment, in body axes [Nm]. Positive is roll-right. - 'm_b' : the pitching moment, in body axes [Nm]. Positive is pitch-up. - 'n_b' : the yawing moment, in body axes [Nm]. Positive is nose-right. - 'CL' : the lift coefficient [-]. Definitionally, this is in wind axes. - 'CY' : the sideforce coefficient [-]. This is in wind axes. - 'CD' : the drag coefficient [-]. Definitionally, this is in wind axes. - 'Cl' : the rolling coefficient [-], in body axes - 'Cm' : the pitching coefficient [-], in body axes - 'Cn' : the yawing coefficient [-], in body axes Along with additional keys, depending on the value of the `alpha`, `beta`, `p`, `q`, and `r` arguments. For example, if `alpha=True`, then the following additional keys will be present: - 'CLa' : the lift coefficient derivative with respect to alpha [1/rad] - 'CDa' : the drag coefficient derivative with respect to alpha [1/rad] - 'CYa' : the sideforce coefficient derivative with respect to alpha [1/rad] - 'Cla' : the rolling moment coefficient derivative with respect to alpha [1/rad] - 'Cma' : the pitching moment coefficient derivative with respect to alpha [1/rad] - 'Cna' : the yawing moment coefficient derivative with respect to alpha [1/rad] - 'x_np': the neutral point location in the x direction [m] Nondimensional values are nondimensionalized using reference values in the AeroBuildup.airplane object. Data types: - The "L", "Y", "D", "l_b", "m_b", "n_b", "CL", "CY", "CD", "Cl", "Cm", and "Cn" keys are: - floats if the OperatingPoint object is not vectorized (i.e., if all attributes of OperatingPoint are floats, not arrays). - arrays if the OperatingPoint object is vectorized (i.e., if any attribute of OperatingPoint is an array). - The "F_g", "F_b", "F_w", "M_g", "M_b", and "M_w" keys are always lists, which will contain either floats or arrays, again depending on whether the OperatingPoint object is vectorized or not. .. py:method:: wing_aerodynamics(wing, include_induced_drag = True) Estimates the aerodynamic forces, moments, and derivatives on a wing in isolation. Moments are given with the reference at Wing [0, 0, 0]. :param wing: A Wing object that you wish to analyze. :param op_point: The OperatingPoint that you wish to analyze the fuselage at. Returns: .. py:method:: fuselage_aerodynamics(fuselage, include_induced_drag = True) Estimates the aerodynamic forces, moments, and derivatives on a fuselage in isolation. Assumes: * The fuselage is a body of revolution aligned with the x_b axis. * The angle between the nose and the freestream is less than 90 degrees. Moments are given with the reference at Fuselage [0, 0, 0]. Uses methods from Jorgensen, Leland Howard. "Prediction of Static Aerodynamic Characteristics for Slender Bodies Alone and with Lifting Surfaces to Very High Angles of Attack". NASA TR R-474. 1977. :param fuselage: A Fuselage object that you wish to analyze. Returns: .. py:data:: aero