aerosandbox.aerodynamics.aero_3D.vortex_lattice_method#

Module Contents#

Classes#

VortexLatticeMethod

An explicit (linear) vortex-lattice-method aerodynamics analysis.

Functions#

tall(array)

wide(array)

Attributes#

aerosandbox.aerodynamics.aero_3D.vortex_lattice_method.tall(array)[source]#
aerosandbox.aerodynamics.aero_3D.vortex_lattice_method.wide(array)[source]#
class aerosandbox.aerodynamics.aero_3D.vortex_lattice_method.VortexLatticeMethod(airplane, op_point, xyz_ref=None, run_symmetric_if_possible=False, verbose=False, spanwise_resolution=10, spanwise_spacing_function=np.cosspace, chordwise_resolution=10, chordwise_spacing_function=np.cosspace, vortex_core_radius=1e-08, align_trailing_vortices_with_wind=False)[source]#

Bases: aerosandbox.ExplicitAnalysis

An explicit (linear) vortex-lattice-method aerodynamics analysis.

Usage example:
>>> analysis = asb.VortexLatticeMethod(
>>>     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
>>>     )
>>> )
>>> aero_data = analysis.run()
>>> analysis.draw()
Parameters:
  • airplane (aerosandbox.geometry.Airplane) –

  • op_point (aerosandbox.performance.OperatingPoint) –

  • xyz_ref (List[float]) –

  • run_symmetric_if_possible (bool) –

  • verbose (bool) –

  • spanwise_resolution (int) –

  • spanwise_spacing_function (Callable[[float, float, float], aerosandbox.geometry.np.ndarray]) –

  • chordwise_resolution (int) –

  • chordwise_spacing_function (Callable[[float, float, float], aerosandbox.geometry.np.ndarray]) –

  • vortex_core_radius (float) –

  • align_trailing_vortices_with_wind (bool) –

__repr__()[source]#

Return repr(self).

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 VortexLatticeMethod.airplane object.

Return type:

Dict[str, Any]

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).

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 VortexLatticeMethod.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)[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.

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)[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.

Return type:

aerosandbox.geometry.np.ndarray

Returns: A Nx3 of the velocity at those points. Given in geometry axes.

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) –

aerosandbox.aerodynamics.aero_3D.vortex_lattice_method.geometry_folder[source]#