aerosandbox.aerodynamics.aero_3D.nonlinear_lifting_line ======================================================= .. py:module:: aerosandbox.aerodynamics.aero_3D.nonlinear_lifting_line Attributes ---------- .. autoapisummary:: aerosandbox.aerodynamics.aero_3D.nonlinear_lifting_line.geometry_folder Classes ------- .. autoapisummary:: aerosandbox.aerodynamics.aero_3D.nonlinear_lifting_line.NonlinearLiftingLine Functions --------- .. autoapisummary:: aerosandbox.aerodynamics.aero_3D.nonlinear_lifting_line.tall aerosandbox.aerodynamics.aero_3D.nonlinear_lifting_line.wide Module Contents --------------- .. py:function:: tall(array) .. py:function:: wide(array) .. py:class:: NonlinearLiftingLine(airplane, op_point, xyz_ref = None, run_symmetric_if_possible = False, verbose = False, spanwise_resolution=8, spanwise_spacing_function = np.cosspace, vortex_core_radius = 1e-08, align_trailing_vortices_with_wind = False) Bases: :py:obj:`aerosandbox.ImplicitAnalysis` 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.NonlinearLiftingLine( >>> 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() .. py:attribute:: airplane .. py:attribute:: op_point .. py:attribute:: xyz_ref :value: None .. py:attribute:: verbose :value: False .. py:attribute:: spanwise_resolution :value: 8 .. py:attribute:: spanwise_spacing_function .. py:attribute:: vortex_core_radius :value: 1e-08 .. py:attribute:: align_trailing_vortices_with_wind :value: False .. py:attribute:: run_symmetric :value: False .. py:method:: __repr__() .. py:method:: run(solve = True) Computes the aerodynamic forces. Returns a dictionary with keys: - 'residuals': a list of residuals for each horseshoe element - '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. - 'CDi' the induced drag coefficient - 'CDp' the profile drag coefficient - '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. .. py:method:: get_induced_velocity_at_points(points, vortex_strengths = None) Computes the induced velocity at a set of points in the flowfield. :param points: A Nx3 array of points that you would like to know the induced velocities at. Given in geometry axes. Returns: A Nx3 of the induced velocity at those points. Given in geometry axes. .. py:method:: get_velocity_at_points(points, vortex_strengths = None) Computes the velocity at a set of points in the flowfield. :param points: A Nx3 array of points that you would like to know the velocities at. Given in geometry axes. Returns: A Nx3 of the velocity at those points. Given in geometry axes. .. py:method:: calculate_fuselage_influences(points) .. py:method:: calculate_streamlines(seed_points = None, n_steps = 300, length = None) 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. :param seed_points: A Nx3 ndarray that contains a list of points where streamlines are started. Will be :param auto-calculated if not specified.: :param n_steps: The number of individual streamline steps to trace. Minimum of 2. :param length: The approximate total length of the streamlines desired, in meters. Will be auto-calculated if :param not 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. :rtype: streamlines .. py:method:: draw(c = None, cmap = None, colorbar_label = None, show = True, show_kwargs = None, draw_streamlines=True, recalculate_streamlines=False, backend = 'pyvista') 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: .. py:data:: geometry_folder