aerosandbox.aerodynamics.aero_3D.lifting_line
#
Module Contents#
Classes#
An implicit aerodynamics analysis based on lifting line theory, with modifications for nonzero sweep |
Functions#
Attributes#
- class aerosandbox.aerodynamics.aero_3D.lifting_line.LiftingLine(airplane, op_point, xyz_ref=None, model_size='medium', run_symmetric_if_possible=False, verbose=False, spanwise_resolution=4, spanwise_spacing_function=np.cosspace, vortex_core_radius=1e-08, align_trailing_vortices_with_wind=False)[source]#
Bases:
aerosandbox.ExplicitAnalysis
An implicit aerodynamics analysis based on lifting line theory, with modifications for nonzero sweep and dihedral + multiple wings.
Nonlinear, and includes viscous effects based on 2D data.
- Usage example:
>>> analysis = asb.LiftingLine( >>> airplane=my_airplane, >>> op_point=asb.OperatingPoint( >>> velocity=100, # m/s >>> alpha=5, # deg >>> beta=4, # deg >>> p=0.01, # rad/sec >>> q=0.02, # rad/sec >>> r=0.03, # rad/sec >>> ) >>> ) >>> outputs = analysis.run()
- Parameters:
airplane (aerosandbox.geometry.Airplane) –
op_point (aerosandbox.performance.OperatingPoint) –
xyz_ref (List[float]) –
model_size (str) –
run_symmetric_if_possible (bool) –
verbose (bool) –
spanwise_resolution (int) –
spanwise_spacing_function (Callable[[float, float, float], aerosandbox.geometry.np.ndarray]) –
vortex_core_radius (float) –
align_trailing_vortices_with_wind (bool) –
- class AeroComponentResults[source]#
- property F_b: List[float | aerosandbox.geometry.np.ndarray][source]#
An [x, y, z] list of forces in body axes [N]
- Return type:
List[Union[float, aerosandbox.geometry.np.ndarray]]
- property F_w: List[float | aerosandbox.geometry.np.ndarray][source]#
An [x, y, z] list of forces in wind axes [N]
- Return type:
List[Union[float, aerosandbox.geometry.np.ndarray]]
- property M_b: List[float | aerosandbox.geometry.np.ndarray][source]#
An [x, y, z] list of moments about body axes [Nm]
- Return type:
List[Union[float, aerosandbox.geometry.np.ndarray]]
- property M_w: List[float | aerosandbox.geometry.np.ndarray][source]#
An [x, y, z] list of moments about wind axes [Nm]
- Return type:
List[Union[float, aerosandbox.geometry.np.ndarray]]
- property L: float | aerosandbox.geometry.np.ndarray[source]#
The lift force [N]. Definitionally, this is in wind axes.
- Return type:
Union[float, aerosandbox.geometry.np.ndarray]
- property Y: float | aerosandbox.geometry.np.ndarray[source]#
The side force [N]. Definitionally, this is in wind axes.
- Return type:
Union[float, aerosandbox.geometry.np.ndarray]
- property D: float | aerosandbox.geometry.np.ndarray[source]#
The drag force [N]. Definitionally, this is in wind axes.
- Return type:
Union[float, aerosandbox.geometry.np.ndarray]
- property l_b: float | aerosandbox.geometry.np.ndarray[source]#
The rolling moment [Nm] in body axes. Positive is roll-right.
- Return type:
Union[float, aerosandbox.geometry.np.ndarray]
- property m_b: float | aerosandbox.geometry.np.ndarray[source]#
The pitching moment [Nm] in body axes. Positive is nose-up.
- Return type:
Union[float, aerosandbox.geometry.np.ndarray]
- run()[source]#
Computes the aerodynamic forces.
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 LiftingLine.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.
- Return type:
Dict
- run_with_stability_derivatives(alpha=True, beta=True, p=True, q=True, r=True)[source]#
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.
- Parameters:
alpha (-) – If True, compute the stability derivatives with respect to the angle of attack (alpha).
beta (-) – If True, compute the stability derivatives with respect to the sideslip angle (beta).
p (-) – If True, compute the stability derivatives with respect to the body-axis roll rate (p).
q (-) – If True, compute the stability derivatives with respect to the body-axis pitch rate (q).
r (-) – If True, compute the stability derivatives with respect to the body-axis yaw rate (r).
- Return type:
Dict[str, Union[Union[float, aerosandbox.geometry.np.ndarray], List[Union[float, aerosandbox.geometry.np.ndarray]]]]
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.
- get_induced_velocity_at_points(points, vortex_strengths=None)[source]#
Computes the induced velocity at a set of points in the flowfield.
- Parameters:
points (aerosandbox.geometry.np.ndarray) – A Nx3 array of points that you would like to know the induced velocities at. Given in geometry axes.
vortex_strengths (aerosandbox.geometry.np.ndarray) –
- Return type:
aerosandbox.geometry.np.ndarray
Returns: A Nx3 of the induced velocity at those points. Given in geometry axes.
- get_velocity_at_points(points, vortex_strengths=None)[source]#
Computes the velocity at a set of points in the flowfield.
- Parameters:
points (aerosandbox.geometry.np.ndarray) – A Nx3 array of points that you would like to know the velocities at. Given in geometry axes.
vortex_strengths (aerosandbox.geometry.np.ndarray) –
- Return type:
aerosandbox.geometry.np.ndarray
Returns: A Nx3 of the velocity at those points. Given in geometry axes.
- calculate_fuselage_influences(points)[source]#
- Parameters:
points (aerosandbox.geometry.np.ndarray) –
- Return type:
aerosandbox.geometry.np.ndarray
- calculate_streamlines(seed_points=None, n_steps=300, length=None)[source]#
Computes streamlines, starting at specific seed points.
After running this function, a new instance variable VortexLatticeFilaments.streamlines is computed
Uses simple forward-Euler integration with a fixed spatial stepsize (i.e., velocity vectors are normalized before ODE integration). After investigation, it’s not worth doing fancier ODE integration methods (adaptive schemes, RK substepping, etc.), due to the near-singular conditions near vortex filaments.
- Parameters:
seed_points (aerosandbox.geometry.np.ndarray) – A Nx3 ndarray that contains a list of points where streamlines are started. Will be
specified. (not) –
n_steps (int) – The number of individual streamline steps to trace. Minimum of 2.
length (float) – The approximate total length of the streamlines desired, in meters. Will be auto-calculated if
specified. –
- Returns:
a 3D array with dimensions: (n_seed_points) x (3) x (n_steps). Consists of streamlines data.
Result is also saved as an instance variable, VortexLatticeMethod.streamlines.
- Return type:
streamlines
- draw(c=None, cmap=None, colorbar_label=None, show=True, show_kwargs=None, draw_streamlines=True, recalculate_streamlines=False, backend='pyvista')[source]#
Draws the solution. Note: Must be called on a SOLVED AeroProblem object. To solve an AeroProblem, use opti.solve(). To substitute a solved solution, use ap = sol(ap). :return:
- Parameters:
c (aerosandbox.geometry.np.ndarray) –
cmap (str) –
colorbar_label (str) –
show (bool) –
show_kwargs (Dict) –
backend (str) –