Source code for RCAIDE.Library.Methods.Noise.Boom.lift_equivalent_area
# RCAIDE/Methods/Noise/Boom/lift_equivalent_area.py
#
#
# Created: Jul 2023, M. Clarke
# ----------------------------------------------------------------------------------------------------------------------
# IMPORT
# ----------------------------------------------------------------------------------------------------------------------
# RCAIDE
from RCAIDE.Library.Methods.Aerodynamics.Vortex_Lattice_Method import VLM
# Python package imports
import numpy as np
# ----------------------------------------------------------------------------------------------------------------------
# Equivalent Area from lift for Sonic Boom
# ----------------------------------------------------------------------------------------------------------------------
[docs]
def lift_equivalent_area(config,analyses,conditions):
""" This method calculates the lift equivalent area for a vehicle for sonic boom analysis.
Assumptions:
X_locs is the location where lift values are taken on the x-axis
AE_x is the lift equivalent area
CP is the coefficient of pressure at the flight conditions
Source:
N/A
Inputs:
config [vehicle]
conditions
.freestream.dynamic_pressure [pascals]
.freestream.mach_number [-]
.aerodynamics.angles.alpha [radians]
analyses.aerodynamics.settings [needed for discretization]
config.total_length [m]
Outputs:
X_locs [m]
AE_x [m^2]
CP [pascals]
Properties Used:
N/A
"""
S = config.reference_area
q = conditions.freestream.dynamic_pressure
mach = conditions.freestream.mach_number
aoa = conditions.aerodynamics.angles.alpha
settings = analyses.aerodynamics.process.compute.lift.inviscid_wings.settings
length = config.total_length
results = VLM(conditions, settings, config)
CP = results.CP
VD = results.VD
areas = VD.panel_areas
normal_vec = VD.normals
XC = VD.XC
ZC = VD.ZC
z_comp = normal_vec[:,2]
lift_force_per_panel = CP[0,:]*q*z_comp*areas*np.cos(aoa[0])
# Mach angle
mach_angle = np.arcsin(1/mach[0])
# Shift all points onto the X axis
X_shift = XC + ZC*np.tan(mach_angle)
# Order the values
sort_order = np.argsort(X_shift)
X = np.take(X_shift,sort_order)
Y = np.take(lift_force_per_panel, sort_order)
u, inv = np.unique(X, return_inverse=True)
sums = np.zeros(len(u), dtype=Y.dtype)
np.add.at(sums, inv, Y)
lift_forces = sums
X_locations = u
summed_lift_forces = np.cumsum(lift_forces)
beta = np.sqrt(conditions.freestream.mach_number[0][0]**2 -1)
Ae_lift_at_each_x = (beta/(2*q[0]))*summed_lift_forces
X_max = length*1.25
X_locs = np.concatenate([[0],X_locations,[X_max]])
AE_x = np.concatenate([[0],Ae_lift_at_each_x,[Ae_lift_at_each_x[-1]]])
return X_locs, AE_x, CP