Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 94 additions & 17 deletions aviary/subsystems/aerodynamics/gasp_based/gaspaero.py
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,9 @@ def compute(self, inputs, outputs):

delta = (static_margin + delta_cg) * h_tail_moment

# TODO handle xt < 0?
if h_tail_moment.real < 0.0:
if verbosity > Verbosity.BRIEF:
warnings.warn(f'Aircraft.HorizontalTail.MOMENT_RATIO is {h_tail_moment}.')
xt = 1 / h_tail_moment

art = AR * bbar**2 / sbar
Expand Down Expand Up @@ -740,6 +742,24 @@ def initialize(self):
self.options.declare('num_nodes', default=1, types=int)
add_aviary_option(self, Aircraft.Engine.NUM_ENGINES)
add_aviary_option(self, Aircraft.Wing.HAS_STRUT)
# drag factors
add_aviary_option(self, Aircraft.Design.HorizontalTail_DRAG_FACTOR)
add_aviary_option(self, Aircraft.Design.INTERFERENCE_DRAG_FACTOR)
add_aviary_option(self, Aircraft.Design.Nacelle_DRAG_FACTOR)
add_aviary_option(self, Aircraft.Design.PYLON_DRAG_FACTOR)
add_aviary_option(self, Aircraft.Design.STRUT_DRAG_FACTOR)
add_aviary_option(self, Aircraft.Design.VerticalTail_DRAG_FACTOR)
add_aviary_option(self, Aircraft.Design.Wing_DRAG_FACTOR)
add_aviary_option(self, Aircraft.Design.EXCRESCENCE_DRAG_FACTOR)
add_aviary_option(self, Aircraft.Design.PERCENT_EXCRESCENCE_DRAG)
# aero technology factos
add_aviary_option(self, Aircraft.Design.Fuselage_AERO_TECH_FACTOR)
add_aviary_option(self, Aircraft.Design.HorizontalTail_AERO_TECH_FACTOR)
add_aviary_option(self, Aircraft.Design.INTERFERENCE_AERO_TECH_FACTOR)
add_aviary_option(self, Aircraft.Design.Nacelle_AERO_TECH_FACTOR)
add_aviary_option(self, Aircraft.Design.STRUT_AERO_TECH_FACTOR)
add_aviary_option(self, Aircraft.Design.VerticalTail_AERO_TECH_FACTOR)
add_aviary_option(self, Aircraft.Design.Wing_AERO_TECH_FACTOR)

def setup(self):
nn = self.options['num_nodes']
Expand Down Expand Up @@ -833,6 +853,26 @@ def setup(self):
desc='SIWB: curve fitting correction factor for Oswald efficiency',
)

# drag factors
add_aviary_input(self, Aircraft.Design.Fuselage_DRAG_FACTOR)
add_aviary_input(self, Aircraft.Design.HorizontalTail_DRAG_FACTOR)
add_aviary_input(self, Aircraft.Design.INTERFERENCE_DRAG_FACTOR)
add_aviary_input(self, Aircraft.Design.Nacelle_DRAG_FACTOR)
add_aviary_input(self, Aircraft.Design.PYLON_DRAG_FACTOR)
add_aviary_input(self, Aircraft.Design.STRUT_DRAG_FACTOR)
add_aviary_input(self, Aircraft.Design.VerticalTail_DRAG_FACTOR)
add_aviary_input(self, Aircraft.Design.Wing_DRAG_FACTOR)
add_aviary_input(self, Aircraft.Design.EXCRESCENCE_DRAG_FACTOR)
add_aviary_input(self, Aircraft.Design.PERCENT_EXCRESCENCE_DRAG)
# aero technology factos
add_aviary_input(self, Aircraft.Design.Fuselage_AERO_TECH_FACTOR)
add_aviary_input(self, Aircraft.Design.HorizontalTail_AERO_TECH_FACTOR)
add_aviary_input(self, Aircraft.Design.INTERFERENCE_AERO_TECH_FACTOR)
add_aviary_input(self, Aircraft.Design.Nacelle_AERO_TECH_FACTOR)
add_aviary_input(self, Aircraft.Design.STRUT_AERO_TECH_FACTOR)
add_aviary_input(self, Aircraft.Design.VerticalTail_AERO_TECH_FACTOR)
add_aviary_input(self, Aircraft.Design.Wing_AERO_TECH_FACTOR)

# outputs
self.add_output('SA1', units='unitless', shape=nn, desc='SA1: drag param')
self.add_output('SA2', units='unitless', shape=nn, desc='SA2: drag param')
Expand Down Expand Up @@ -998,9 +1038,32 @@ def compute(self, inputs, outputs):
feintwf,
areashieldwf,
siwb,
fcffc,
fcfhtc,
fckic,
fcfnc,
fpylnd,
fcfstrc,
fcfvtc,
fcfwc,
fexcrt,
pct_excr,
fcfft,
fcfhtt,
fckit,
fcfnt,
fcfstrt,
fcfvtt,
fcfwt,
) = inputs.values()
# skin friction coeff at Re = 10**7
cf = 0.455 / 7**2.58 / (1 + 0.144 * mach**2) ** 0.65
cdfi = fcffc * fcfft * cf
cdhti = fcfhtc * fcfhtt * cf
cdni = fcfnc * fcfnt * cf
cdstrti = fcfstrc * fcfstrt * cf
cdvti = fcfvtc * fcfvtt * cf
cdwi = fcfwc * fcfwt * cf

t = cs.abs(np.tan(deg2rad(sweep_c4)))
yale05 = (1 - taper_ratio) / (1 + taper_ratio)
Expand Down Expand Up @@ -1046,28 +1109,30 @@ def compute(self, inputs, outputs):

# flat plate equivalent areas
# GASP uses different values of cf for wing, nacelle, fuselage, etc.
fef = fus_SA * cf * ffre * ff_fus + fe_fus_inc
few = ff_wing * wing_area * cf * fwre
# TODO replace 2 with num_engines
fen = 2 * ff_nac * nacelle_area * cf * fnre
fevt = ff_vtail * vtail_area * cf * fvtre
feht = ff_htail * htail_area * cf * fhtre
festrt = strut_fus_intf * strut_wing_area_ratio * wing_area * cf * fstrtre
fef = fus_SA * cdfi * ffre * ff_fus + fe_fus_inc
few = ff_wing * wing_area * cdwi * fwre
# Replaced 2 with total_num_engines. Need to check. See issue #1080
total_num_engines = sum(self.options[Aircraft.Engine.NUM_ENGINES])
fen = fpylnd * total_num_engines * ff_nac * nacelle_area * cdni * fnre
fevt = ff_vtail * vtail_area * cdvti * fvtre
feht = ff_htail * htail_area * cdhti * fhtre
festrt = strut_fus_intf * strut_wing_area_ratio * wing_area * cdstrti * fstrtre

# begin INTERFERENCE - get flat plate equivalent for wing-fuselage interference
# wing profile drag coefficient
cdw0 = few / wing_area
# interference drag independent of shielded area
feshieldwf = cdw0 * areashieldwf
feiwf = wing_fus_intf * (feintwf - feshieldwf)
feiwf = fckic * fckit * (wing_fus_intf * (feintwf - feshieldwf))
# end INTERFERENCE

# total flat plate equivalent area
# In GASP, nacelle is excluded.
fe = few + fef + fevt + feht + fen + feiwf + festrt + cd0_inc * wing_area
# Excrescence Drag
feexcr = fexcrt * pct_excr * (few + fef + fevt + feht + fen + festrt)

# wfob = cabin_width / wingspan
# siwb = 1 - 0.0088 * wfob - 1.7364 * wfob**2 - 2.303 * wfob**3 + 6.0606 * wfob**4
# total flat plate equivalent area
# In GASP, nacelle is excluded. It's kept here because nacelle dimension is
# done in premission and hence does not size.
fe = few + fef + fevt + feht + fen + feiwf + festrt + cd0_inc * wing_area + feexcr

# wing-free profile drag coefficient
cdpo = (fe - few) / wing_area
Expand Down Expand Up @@ -1404,6 +1469,8 @@ def setup(self):
add_aviary_input(self, Aircraft.Design.SUPERSONIC_DRAG_COEFF_FACTOR, units='unitless')
add_aviary_input(self, Aircraft.Design.LIFT_DEPENDENT_DRAG_COEFF_FACTOR, units='unitless')
add_aviary_input(self, Aircraft.Design.ZERO_LIFT_DRAG_COEFF_FACTOR, units='unitless')
add_aviary_input(self, Aircraft.Design.INDUCED_DRAG_FACTOR, units='unitless')
add_aviary_input(self, Aircraft.Design.COMPRESSIBILITY_DRAG_FACTOR, units='unitless')

# from aero setup
self.add_input(
Expand All @@ -1430,7 +1497,15 @@ def setup_partials(self):
cols=ar,
method='cs',
)
self.declare_partials('CD', [Aircraft.Design.DRAG_DIVERGENCE_SHIFT], method='cs')
self.declare_partials(
'CD',
[
Aircraft.Design.DRAG_DIVERGENCE_SHIFT,
Aircraft.Design.INDUCED_DRAG_FACTOR,
Aircraft.Design.COMPRESSIBILITY_DRAG_FACTOR,
],
method='cs',
)

def compute(self, inputs, outputs):
(
Expand All @@ -1441,6 +1516,8 @@ def compute(self, inputs, outputs):
supersonic_factor,
lift_factor,
zero_lift_factor,
fsa7c,
fcmpc,
cf,
SA1,
SA2,
Expand All @@ -1461,9 +1538,9 @@ def compute(self, inputs, outputs):
# profile drag
cd0 = SA5 + SA6 * cf
# induced drag
cdi = SA7 * CL**2
cdi = fsa7c * SA7 * CL**2

CD = cd0 * zero_lift_factor + cdi * lift_factor + delcdm
CD = cd0 * zero_lift_factor + cdi * lift_factor + fcmpc * delcdm

# scale drag
idx_sup = np.where(mach >= 1.0)
Expand Down
1 change: 1 addition & 0 deletions aviary/subsystems/aerodynamics/gasp_based/interference.py
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,7 @@ def setup(self):
)


# This component is not used
class WingFuselageInterferenceMission(om.ExplicitComponent):
"""
This calculates an additional flat plate drag area due to general aerodynamic interference for wing-fuselage interference
Expand Down
34 changes: 18 additions & 16 deletions aviary/utils/test/data/converter_test_BWB_GASP.csv
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,36 @@ aircraft:crew_and_payload:uld_mass_per_passenger,0.0667,lbm
aircraft:crew_and_payload:water_mass_per_occupant,3.0,lbm
aircraft:design:cg_delta,0.25,unitless
aircraft:design:cockpit_control_mass_coefficient,16.5,unitless
aircraft:design:compressibility_drag_factor,1.0,unitless
aircraft:design:cruise_altitude,41000.0,ft
aircraft:design:drag_coefficient_increment,0.00025,unitless
aircraft:design:drag_divergence_shift,0.025,unitless
aircraft:design:emergency_equipment_mass,100.0,lbm
aircraft:design:excrescence_drag_factor,0.8,unitless
aircraft:design:fuselage_aero_tech_factor,0.93,unitless
aircraft:design:fuselage_drag_factor,0.885,unitless
aircraft:design:gross_mass,150000.0,lbm
aircraft:design:horizontaltail_aero_tech_factor,0.926,unitless
aircraft:design:horizontaltail_drag_factor,0.75,unitless
aircraft:design:induced_drag_factor,0.85,unitless
aircraft:design:interference_aero_tech_factor,1.0,unitless
aircraft:design:interference_drag_factor,1.0,unitless
aircraft:design:mach,0.8,unitless
aircraft:design:max_structural_speed,402.5,mi/h
aircraft:design:nacelle_aero_tech_factor,0.95,unitless
aircraft:design:nacelle_drag_factor,1.15,unitless
aircraft:design:part25_structural_category,3.0,unitless
aircraft:design:pylon_drag_factor,1.15,unitless
aircraft:design:range,3500.0,NM
aircraft:design:static_margin,0.05,unitless
aircraft:design:structural_mass_increment,0.0,lbm
aircraft:design:strut_aero_tech_factor,0.926,unitless
aircraft:design:strut_drag_factor,0.9,unitless
aircraft:design:type,BWB,unitless
aircraft:design:verticaltail_aero_tech_factor,0.926,unitless
aircraft:design:verticaltail_drag_factor,0.9,unitless
aircraft:design:wing_aero_tech_factor,0.926,unitless
aircraft:design:wing_drag_factor,0.906,unitless
aircraft:design:wing_loading,70.0,lbf/ft**2
aircraft:electrical:system_mass_per_passenger,11.45,lbm
aircraft:engine:additional_mass_fraction,0.04373,unitless
Expand Down Expand Up @@ -190,23 +208,7 @@ INGASP.DCDSE,0.001
INGASP.DYR,12
INGASP.EL_FLGC,8
INGASP.EMCRU,0.8
INGASP.FCFFC,0.885
INGASP.FCFFT,0.93
INGASP.FCFHTC,0.75
INGASP.FCFHTT,0.926
INGASP.FCFNC,1.15
INGASP.FCFNT,0.95
INGASP.FCFVTC,0.9
INGASP.FCFVTT,0.926
INGASP.FCFWC,0.906
INGASP.FCFWT,0.926
INGASP.FCKIC,1
INGASP.FCKIT,1
INGASP.FCMPC,1
INGASP.FCSF,2.5
INGASP.FEXCRT,0.8
INGASP.FPYLND,1.15
INGASP.FSA7C,0.85
INGASP.HBTP,0.465
INGASP.HIR,0.015
INGASP.HNCRU,41000
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ aircraft:design:gross_mass,175400.0,lbm
aircraft:design:mach,0.8,unitless
aircraft:design:max_structural_speed,402.5,mi/h
aircraft:design:part25_structural_category,3.0,unitless
aircraft:design:pylon_drag_factor,1.0,unitless
aircraft:design:range,3675.0,NM
aircraft:design:static_margin,0.03,unitless
aircraft:design:structural_mass_increment,0.0,lbm
Expand Down Expand Up @@ -182,7 +183,6 @@ INGASP.DCDSE,-1
INGASP.DYR,12
INGASP.EMCRU,0.8
INGASP.FCSF,2.5
INGASP.FPYLND,1
INGASP.HBTP,0.333
INGASP.HIR,0.015
INGASP.HNCRU,37500
Expand Down
Loading
Loading