diff --git a/aviary/docs/theory_guide/gasp_based_bwb.ipynb b/aviary/docs/theory_guide/gasp_based_bwb.ipynb index edc3b22942..2b715a71a5 100644 --- a/aviary/docs/theory_guide/gasp_based_bwb.ipynb +++ b/aviary/docs/theory_guide/gasp_based_bwb.ipynb @@ -439,7 +439,7 @@ "- Aviary does not have winglet geometry.\n", "- In GASP, a pilot weight is 170 lb and in Aviary it is 198 lb. In GASP, each attendant weights 130 lb and in Aviary it is 177 lb.\n", "- GASP has fuselage acoustic treatment.\n", - "- GASP conputes tip tank weight.\n", + "- GASP computes tip tank weight.\n", "- GASP allows canard configurations.\n" ] } diff --git a/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.csv b/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.csv new file mode 100644 index 0000000000..ddfb7c4b27 --- /dev/null +++ b/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.csv @@ -0,0 +1,662 @@ +# created 02/11/26 +# FLOPS-derived aircraft input deck converted from bwb300_baseline_FLOPS.inp + +# Input Values +aircraft:air_conditioning:mass_scaler,1.0,unitless +aircraft:anti_icing:mass_scaler,1.0,unitless +aircraft:apu:mass_scaler,1.0,unitless +aircraft:avionics:mass_scaler,1.0,unitless +aircraft:blended_wing_body_design:detailed_wing_provided,True,unitless +aircraft:blended_wing_body_design:passenger_leading_edge_sweep,60.0,deg +aircraft:canard:area,0.0,ft**2 +aircraft:canard:aspect_ratio,0.0,unitless +aircraft:canard:laminar_flow_lower,0.0,unitless +aircraft:canard:laminar_flow_upper,0.0,unitless +aircraft:canard:mass_scaler,1.0,unitless +aircraft:canard:taper_ratio,0.0,unitless +aircraft:canard:thickness_to_chord,0.0,unitless +aircraft:canard:wetted_area_scaler,1.0,unitless +aircraft:crew_and_payload:cabin_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless +aircraft:crew_and_payload:cargo_container_mass,23500.0,lbm +aircraft:crew_and_payload:design:num_business_class,76,unitless +aircraft:crew_and_payload:design:num_economy_class,200,unitless +aircraft:crew_and_payload:design:num_first_class,24,unitless +aircraft:crew_and_payload:design:num_seats_abreast_business,0,unitless +aircraft:crew_and_payload:design:num_seats_abreast_economy,0,unitless +aircraft:crew_and_payload:design:num_seats_abreast_first,0,unitless +aircraft:crew_and_payload:design:seat_pitch_business,0,inch +aircraft:crew_and_payload:design:seat_pitch_economy,0,inch +aircraft:crew_and_payload:design:seat_pitch_first,0,inch +aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:mass_per_passenger,165.0,lbm +aircraft:crew_and_payload:misc_cargo,0.0,lbm +aircraft:crew_and_payload:num_business_class,76,unitless +aircraft:crew_and_payload:num_economy_class,200,unitless +aircraft:crew_and_payload:num_first_class,24,unitless +aircraft:crew_and_payload:num_flight_crew,2,unitless +aircraft:crew_and_payload:num_galley_crew,2,unitless +aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless +aircraft:crew_and_payload:wing_cargo,0.0,lbm +aircraft:design:base_area,0.0,ft**2 +aircraft:design:empty_mass_margin_scaler,0.0,unitless +aircraft:design:landing_to_takeoff_mass_ratio,0.7,unitless +aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless +aircraft:design:subsonic_drag_coeff_factor,1.0,unitless +aircraft:design:supersonic_drag_coeff_factor,1.0,unitless +aircraft:design:type,BWB,unitless +aircraft:design:use_alt_mass,False,unitless +aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless +aircraft:electrical:mass_scaler,1.0,unitless +aircraft:engine:additional_mass_fraction,0.0,unitless +aircraft:engine:constant_fuel_consumption,0.0,lbm/h +aircraft:engine:data_file,'models/engines/PAX300_baseline_ENGDEK.csv,unitless +aircraft:engine:flight_idle_max_fraction,1.0,unitless +aircraft:engine:flight_idle_min_fraction,0.08,unitless +aircraft:engine:flight_idle_thrust_fraction,0.0,unitless +aircraft:engine:fuel_flow_scaler_constant_term,0.0,unitless +aircraft:engine:fuel_flow_scaler_linear_term,0.0,unitless +aircraft:engine:generate_flight_idle,True,unitless +aircraft:engine:geopotential_alt,False,unitless +aircraft:engine:ignore_negative_thrust,False,unitless +aircraft:engine:interpolation_method,slinear,unitless +aircraft:engine:mass_scaler,1.0,unitless +aircraft:engine:num_fuselage_engines,2,unitless +aircraft:engine:num_wing_engines,0,unitless +aircraft:engine:reference_mass,22089.3,lbm +aircraft:engine:reference_sls_thrust,86786.4,lbf +aircraft:engine:scale_factor,1.0082224864725349,unitless +aircraft:engine:scale_mass,True,unitless +aircraft:engine:scale_performance,True,unitless +aircraft:engine:scaled_sls_thrust,87500.0,lbf +aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless +aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless +aircraft:engine:thrust_reversers_mass_scaler,0.0,unitless +aircraft:engine:wing_locations,0.2,unitless +aircraft:fins:area,184.89,ft**2 +aircraft:fins:mass_scaler,1.0,unitless +aircraft:fins:num_fins,2,unitless +aircraft:fins:taper_ratio,0.464,unitless +aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm +aircraft:fuel:fuel_system_mass_scaler,1.0,unitless +aircraft:fuel:fuselage_fuel_capacity,0.0,lbm +aircraft:fuel:ignore_fuel_capacity_constraint,False,unitless +aircraft:fuel:num_tanks,7,unitless +aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless +aircraft:fuel:wing_fuel_fraction,0.6883549569366508,unitless +aircraft:fuel:wing_ref_capacity,0.0,lbm +aircraft:fuel:wing_ref_capacity_term_a,0.0,unitless +aircraft:fuel:wing_ref_capacity_term_b,0.0,unitless +aircraft:furnishings:mass_scaler,1.118,unitless +aircraft:fuselage:sidebody_thickness_to_chord,0.1792,unitless +aircraft:fuselage:laminar_flow_lower,0.0,unitless +aircraft:fuselage:laminar_flow_upper,0.0,unitless +aircraft:fuselage:mass_scaler,1.0,unitless +# aircraft:fuselage:max_height,14.16,ft +# aircraft:fuselage:max_width,50.0,ft +aircraft:fuselage:military_cargo_floor,False,unitless +aircraft:fuselage:num_fuselages,1,unitless +aircraft:fuselage:simple_layout,False,unitless +aircraft:fuselage:wetted_area_scaler,1.0,unitless +aircraft:horizontal_tail:area,700.0,ft**2 +aircraft:horizontal_tail:aspect_ratio,1.0,unitless +aircraft:horizontal_tail:laminar_flow_lower,0.0,unitless +aircraft:horizontal_tail:laminar_flow_upper,0.0,unitless +aircraft:horizontal_tail:mass_scaler,1.0,unitless +aircraft:horizontal_tail:num_tails,1,unitless +aircraft:horizontal_tail:sweep,0.0,deg +aircraft:horizontal_tail:taper_ratio,0.714,unitless +aircraft:horizontal_tail:thickness_to_chord,0.1,unitless +aircraft:horizontal_tail:vertical_tail_fraction,0.0,unitless +aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless +aircraft:hydraulics:mass_scaler,1.0,unitless +aircraft:hydraulics:system_pressure,3000.0,psi +aircraft:instruments:mass_scaler,1.0,unitless +aircraft:landing_gear:drag_coefficient,0.005,unitless +aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless +aircraft:landing_gear:main_gear_oleo_length,85.0,inch +aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless +aircraft:landing_gear:nose_gear_oleo_length,87.0,inch +aircraft:nacelle:avg_diameter,12.569,ft +aircraft:nacelle:avg_length,17.297,ft +aircraft:nacelle:laminar_flow_lower,0.0,unitless +aircraft:nacelle:laminar_flow_upper,0.0,unitless +aircraft:nacelle:mass_scaler,0.0,unitless +aircraft:nacelle:wetted_area_scaler,1.0,unitless +aircraft:paint:mass_per_unit_area,0.0,lbm/ft**2 +aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless +aircraft:propulsion:misc_mass_scaler,0.0,unitless +aircraft:vertical_tail:area,0.0,ft**2 +aircraft:vertical_tail:aspect_ratio,0.5,unitless +aircraft:vertical_tail:laminar_flow_lower,0.0,unitless +aircraft:vertical_tail:laminar_flow_upper,0.0,unitless +aircraft:vertical_tail:mass_scaler,1.0,unitless +aircraft:vertical_tail:num_tails,0,unitless +aircraft:vertical_tail:sweep,0.0,deg +aircraft:vertical_tail:taper_ratio,0.714,unitless +aircraft:vertical_tail:thickness_to_chord,0.11,unitless +aircraft:vertical_tail:wetted_area,125.0,ft**2 +aircraft:vertical_tail:wetted_area_scaler,1.0,unitless +aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless +aircraft:wing:airfoil_technology,2.0,unitless +# aircraft:wing:aspect_ratio,5.4252,unitless +aircraft:wing:aspect_ratio_reference,0.0,unitless +aircraft:wing:bending_material_mass_scaler,1.0,unitless +aircraft:wing:chord_per_semispan_distribution,-1.0,48.25,33.2,18.97,14.19,10.2,3.22,unitless +aircraft:wing:composite_fraction,0.85,unitless +aircraft:wing:control_surface_area_ratio,0.3,unitless +aircraft:wing:detailed_wing,True,unitless +aircraft:wing:dihedral,3.0,deg +aircraft:wing:glove_and_bat,1230.5,ft**2 +aircraft:wing:input_station_distribution,0.0,0.0,0.2075,0.415,0.6927,0.928,1.0,unitless +aircraft:wing:laminar_flow_lower,0.0,unitless +aircraft:wing:laminar_flow_upper,0.0,unitless +aircraft:wing:load_distribution_control,2.0,unitless +aircraft:wing:load_fraction,1.0,unitless +aircraft:wing:load_path_sweep_distribution,0.0,0.0,0.0,17.0,17.0,17.0,deg +aircraft:wing:mass_scaler,1.0,unitless +aircraft:wing:max_camber_at_70_semispan,2.0,unitless +aircraft:wing:misc_mass_scaler,1.0,unitless +aircraft:wing:num_integration_stations,50,unitless +aircraft:wing:outboard_semispan,68.43,ft +# aircraft:wing:root_chord,50.0,ft +aircraft:wing:shear_control_mass_scaler,1.0,unitless +aircraft:wing:span,186.631829293424,ft +aircraft:wing:span_efficiency_factor,1.0,unitless +aircraft:wing:span_efficiency_reduction,False,unitless +aircraft:wing:strut_bracing_factor,0.0,unitless +aircraft:wing:surface_control_mass_scaler,1.0,unitless +aircraft:wing:sweep,35.7,deg +aircraft:wing:taper_ratio,0.311,unitless +aircraft:wing:thickness_to_chord,0.11,unitless +aircraft:wing:thickness_to_chord_distribution,-1.0,0.125,0.125,0.076,0.076,0.076,0.06,unitless +aircraft:wing:thickness_to_chord_reference,0.0,unitless +aircraft:wing:ultimate_load_factor,3.75,unitless +aircraft:wing:var_sweep_mass_penalty,0.0,unitless +aircraft:wing:wetted_area_scaler,0.61,unitless +mission:constraints:max_mach,0.9,unitless +aircraft:design:gross_mass,600000.0,lbm +aircraft:design:range,7500.0,NM +aircraft:design:thrust_takeoff_per_eng,0.0,lbf +mission:landing:drag_coefficient_min,0.0,unitless +mission:landing:flare_rate,3.0,deg/s +mission:landing:initial_velocity,150.0,ft/s +mission:landing:lift_coefficient_max,3.0,unitless +aircraft:design:cruise_mach,0.85,unitless +mission:fuel_flow_scaler,1.0,unitless +mission:takeoff:angle_of_attack_runway,4.0,deg +mission:takeoff:braking_friction_coefficient,0.35,unitless +mission:takeoff:drag_coefficient_min,0.035258,unitless +mission:takeoff:final_altitude,35.0,ft +mission:takeoff:lift_coefficient_max,1.3,unitless +mission:takeoff:rolling_friction_coefficient,0.025,unitless +mission:takeoff:spoiler_drag_coefficient,0.0,unitless +mission:takeoff:spoiler_lift_coefficient,0.0,unitless +mission:takeoff:thrust_incidence,4.0,deg +settings:aerodynamics_method,FLOPS,unitless +settings:equations_of_motion,energy_state,unitless +settings:mass_method,FLOPS,unitless + +# Unconverted Values +AERIN.CLAPP,0.0 +AERIN.DRATIO,1.0 +AERIN.ELODMA,0.0 +AERIN.ELODSS,0.0 +AERIN.FLLDG,9900.0 +AERIN.FLTO,9900.0 +AERIN.FWAVE,1.0 +AERIN.IBO,0 +AERIN.ITPAER,2 +AERIN.IWAVE,0 +AERIN.MYAERO,0 +AERIN.THRMA,0.0 +AERIN.THRSS,0.0 +AERIN.XLLAM,0.0 +ASCLIN.AWETN,0.0 +ASCLIN.AWETT,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +ASCLIN.AWETW,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +ASCLIN.CDWAV,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +ASCLIN.DCDNAC,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +ASCLIN.ELTOT,0.0 +ASCLIN.ELW,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +ASCLIN.EQL,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +ASCLIN.FORM,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +ASCLIN.SREF,0.0 +ASCLIN.TREF,0.0 +ASCLIN.VOLTOT,0.0 +ASCLIN.VOLW,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +CONFIN.CH,45000.0,0.0,0.0,0.0,0.0,0.0 +CONFIN.EBLA,0.0,0.0,0.0,0.0,0.0,0.0 +CONFIN.EBPR,0.0,0.0,0.0,0.0,0.0,0.0 +CONFIN.EFPR,0.0,0.0,0.0,0.0,0.0,0.0 +CONFIN.EOPR,0.0,0.0,0.0,0.0,0.0,0.0 +CONFIN.ETIT,0.0,0.0,0.0,0.0,0.0,0.0 +CONFIN.ETTR,0.0,0.0,0.0,0.0,0.0,0.0 +CONFIN.FIXFUL,0.0 +CONFIN.FIXSPN,0.0 +CONFIN.GW,600000.0,0.0,0.0,0.0,0.0,0.0 +CONFIN.HTVC,0.0 +CONFIN.OAREA,0.0 +CONFIN.OFC,0.0 +CONFIN.OFF,0.0 +CONFIN.OFG,1.0 +CONFIN.OFH,0.0 +CONFIN.OFM,0.0 +CONFIN.OFNF,0.0 +CONFIN.OFNFOM,0.0 +CONFIN.OFNOX,0.0 +CONFIN.OFNS,0.0 +CONFIN.OFR,0.0 +CONFIN.OSFC,0.0 +CONFIN.PGLOV,0.0 +CONFIN.PLR,0.0,0.0,0.0,0.0,0.0,0.0 +CONFIN.ROTVEL,0.0,0.0,0.0,0.0,0.0,0.0 +CONFIN.TWR,0.0 +CONFIN.VARTH,0.0,0.0,0.0,0.0,0.0,0.0 +CONFIN.VTVC,0.0 +CONFIN.WSR,0.0 +ENGDIN.IFILL,2 +ENGDIN.MAXCR,1 +ENGDIN.NGPRT,1 +FUSEIN.TCF,0.1792 +FUSEIN.XLW,50.0 +MISSIN.ACTAB,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.ADTAB,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.ALTBM,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.ALTRAN,200.0 +MISSIN.APPFFF,2.0 +MISSIN.APPRTM,4.0 +MISSIN.CDFETH,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.CDST,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.CLAMAX,0.0,0.0,0.0,0.0 +MISSIN.CLAMIN,0.0,0.0,0.0,0.0 +MISSIN.CLDCD,0.0,0.0,0.0,0.0 +MISSIN.CLMMAX,0.0,0.0,0.0,0.0 +MISSIN.CLMMIN,0.3,0.3,0.3,0.3 +MISSIN.CRALT,45000.0,25000.0,1500.0,-1.0,-1.0,-1.0 +MISSIN.CRCLMX,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.CRDCD,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.CRMACH,0.85,0.6,0.0,0.0,0.0,0.0 +MISSIN.CRMMIN,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.DCWT,1000.0 +MISSIN.DEAMAX,0.0 +MISSIN.DEAMIN,0.0 +MISSIN.DECL,0.8 +MISSIN.DEDCD,0.0 +MISSIN.DEMMAX,0.0 +MISSIN.DEMMIN,0.3 +MISSIN.DIVLIM,0.0 +MISSIN.DTC,0.0 +MISSIN.DWT,1.0 +MISSIN.EREALT,-1.0 +MISSIN.EREMCH,-1.0 +MISSIN.FEATHF,0.5,0.5,0.5,0.5,0.5,0.5 +MISSIN.FFUEL,1.0,1.0,1.0,1.0,1.0,1.0 +MISSIN.FLRCR,1.0,1.0,1.0,1.0,1.0,1.0 +MISSIN.FNOX,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.FUEMAX,0.0 +MISSIN.FWF,-0.001,-0.001,-0.001,-0.001 +MISSIN.HOLDTM,30.0 +MISSIN.HPMIN,1000.0,1000.0,1000.0,1000.0,1000.0,1000.0 +MISSIN.IATA,0 +MISSIN.ICRON,0 +MISSIN.IDOQ,0 +MISSIN.IFAACL,1 +MISSIN.IFAADE,-1 +MISSIN.IFEATH,0,0,0,0,0,0 +MISSIN.IFLAG,2 +MISSIN.IHOPOS,1 +MISSIN.INDR,0 +MISSIN.IOC,1,4,4,1,1,1 +MISSIN.IPPCL,1,1,1,1 +MISSIN.IRADAC,0 +MISSIN.IRS,1 +MISSIN.IRW,1 +MISSIN.ISKAL,1 +MISSIN.ISTCL,0,0,0,0 +MISSIN.ISTCR,0,0,0,0,0,0 +MISSIN.ISTDE,0 +MISSIN.ITTFF,1 +MISSIN.IVS,1 +MISSIN.MAXCL,1,1,1,1 +MISSIN.MIRROR,0 +MISSIN.MSUMPT,1 +MISSIN.MYWTS,1 +MISSIN.NCLIMB,1 +MISSIN.NCLRES,1 +MISSIN.NCRCL,1,1,1,1 +MISSIN.NCRHOL,3 +MISSIN.NCRRES,2 +MISSIN.NCRTH,1 +MISSIN.NCRUSE,3 +MISSIN.NHOLD,0 +MISSIN.NINCL,31,31,31,31 +MISSIN.NINDE,31 +MISSIN.NO,0,0,0,0 +MISSIN.NODIVE,0 +MISSIN.NPCON,0 +MISSIN.NQL,0 +MISSIN.NS,0 +MISSIN.NSADJ,0 +MISSIN.NSOUT,0 +MISSIN.OFFDR,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.OWFACT,1.0 +MISSIN.PAYLOD,0.0 +MISSIN.QLALT,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.QLIM,0.0 +MISSIN.RAMPWT,0.0 +MISSIN.RCIN,300.0 +MISSIN.RDLIM,-99999.0 +MISSIN.REARTH,20890000.0 +MISSIN.RESRFU,0.0 +MISSIN.RESTRP,0.05 +MISSIN.RTOL,0.001 +MISSIN.SPDLIM,0.0 +MISSIN.SREALT,-1.0 +MISSIN.SREMCH,-1.0 +MISSIN.STMA,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.TAKOFF,0.0 +MISSIN.TAKOTM,2.0 +MISSIN.TAXITM,5.0 +MISSIN.TAXOTM,9.0 +MISSIN.THOLD,0.1 +MISSIN.TIMMAP,2.0 +MISSIN.TLWIND,0.0 +MISSIN.TXFUFL,0.0 +MISSIN.VCTAB,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.VDTAB,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.VQLM,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.WTBM,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.XCL,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.XMACH,0.0,5.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +MISSIN.XNZ,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +OPTION.APFILE,"""POLPLOT""" +OPTION.CNFILE,"""FLPPLOT""" +OPTION.CRFILE,"""CRUPLOT""" +OPTION.HSFILE,"""HISPLOT""" +OPTION.IANAL,3 +OPTION.IANOPP,0 +OPTION.ICOST,0 +OPTION.ILAND,1 +OPTION.INENG,0 +OPTION.IPLTHS,0 +OPTION.IPLTPS,0 +OPTION.IPLTSG,0,0,0,0,0,0,0,0,0,0 +OPTION.IPLTTH,0 +OPTION.IPSTDG,0,0,0,0,0,0,0,0,0,0 +OPTION.ITAKOF,1 +OPTION.IXFL,0 +OPTION.MPRINT,1 +OPTION.MSFILE,"""MSMPLOT""" +OPTION.NMACH,0 +OPTION.NOFILE,'TO.NPR' +OPTION.NOPRO,1 +OPTION.NPFILE,1 +OPTION.PLTFM,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +OPTION.PLTNZ,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0 +OPTION.PLTPC,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +OPTION.PLTWT,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +OPTION.PLTWTA,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +OPTION.PMACH,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +OPTION.POLALT,0.0 +OPTION.PSFILE,"""PSPLOT""" +OPTION.THFILE,"""THRPLOT""" +OPTION.TOFILE,"""TOLPLOT""" +OPTION.XINC,0.2 +OPTION.XMAX,0.9 +OPTION.XMIN,0.3 +OPTION.YINC,10000.0 +OPTION.YMAX,40000.0 +OPTION.YMIN,0.0 +PCONIN.CONALT,35000.0 +PCONIN.CONAUX,0.0 +PCONIN.CONFM,0.0 +PCONIN.CONLIM,0.0 +PCONIN.CONMCH,0.85 +PCONIN.CONNZ,1.0 +PCONIN.CONPC,1.0 +PCONIN.CONWT,0.0 +PCONIN.CONWTA,0.0 +PCONIN.ICONSG,2 +PCONIN.ICONTP,5 +PCONIN.ICSTDG,0 +PCONIN.NEO,2 +PROIN.ALPMIN,0.0 +PROIN.ALPRO,0.0,4.0,6.0,8.0,10.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,30.0,32.0,34.0,36.0,-100.0,-100.0,-100.0,-100.0 +PROIN.CDPRO,0.031664,0.025258,0.026053,0.029529,0.036235,0.045467,0.051257,0.057003,0.063994,0.070955,0.080059,0.089179,0.11585,0.142313,0.16197,0.176325,0.196659,0.213941,0.229069,0.247171,0.268876,0.297378,0.346767,0.400762,0.442503,0.483076,0.0,0.0,0.0,0.0 +PROIN.CLPRO,-0.056782,0.176206,0.28103,0.395085,0.505416,0.609138,0.658895,0.709463,0.760166,0.810948,0.859611,0.908241,0.933666,0.958067,0.972702,0.954969,0.93792,0.936314,0.931608,0.943601,0.956648,0.984358,0.988573,0.980125,0.962508,0.942321,0.0,0.0,0.0,0.0 +PROIN.DFLAP,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 +PROIN.FLAPID,"""TOFF""","""FlapID""","""FlapID""","""FlapID""","""FlapID""","""FlapID""","""FlapID""","""FlapID""","""FlapID""","""FlapID""" +PROIN.GAMLIM,0.0 +PROIN.IATR,0 +PROIN.INM,0 +PROIN.IPCMAX,1 +PROIN.KEAS,0 +PROIN.NPOL,1 +PROIN.NTIME,1 +PROIN.SPRATE,0.1 +PROIN.TXF,-1.0 +RERUN.DESRNG,3000.0 +RERUN.ICOST,0 +RERUN.ILAND,1 +RERUN.ITAKOF,1 +RERUN.MYWTS,1 +RERUN.NOISE,0 +RERUN.NOPRO,1 +RERUN.TWR,0.0 +RERUN.WSR,0.0 +SEGIN.AFIX,0.0 +SEGIN.DELT,1.0 +SEGIN.DSTOP,50000.0 +SEGIN.ENGSCL,0.95 +SEGIN.GFIX,0.0 +SEGIN.GRDAEO,2.29061 +SEGIN.GRDOEO,0.0 +SEGIN.HMIN,0.0 +SEGIN.HSTOP,0.0 +SEGIN.IFIX,1 +SEGIN.IPLR,0 +SEGIN.KEY,'LAST' +SEGIN.NFLAP,1 +SEGIN.NOYCAL,0 +SEGIN.SPRATE,0.1 +SEGIN.TSTOP,0.0 +SEGIN.VFIX,0.0 +SEGIN.VSTOP,0.0 +SYNTIN.ACCUX,1e-05 +SYNTIN.ADFUN,0.001 +SYNTIN.AMULT,1.2 +SYNTIN.ARMAX,99999.0 +SYNTIN.AUTSCL,1.0 +SYNTIN.CDPMAX,99999.0 +SYNTIN.CDTMAX,99999.0 +SYNTIN.DEP,0.001 +SYNTIN.DESRNG,7500.0 +SYNTIN.DHDTLM,100.0 +SYNTIN.EF,3.0 +SYNTIN.EMOVE,0.05 +SYNTIN.EPS,0.002 +SYNTIN.EXFCAP,0.0 +SYNTIN.FDD,0.2 +SYNTIN.FDELT,0.0 +SYNTIN.FDMIN,0.0 +SYNTIN.FLLDG,9900.0 +SYNTIN.FLTO,9900.0 +SYNTIN.GFACT,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +SYNTIN.GLM,0.002 +SYNTIN.GNOX,0.0 +SYNTIN.IBFGS,1 +SYNTIN.ICENT,0 +SYNTIN.IG,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +SYNTIN.IGRAD,0 +SYNTIN.ISDRST,0 +SYNTIN.ITFINE,0 +SYNTIN.ITMAX,30 +SYNTIN.JPRNT,2 +SYNTIN.JVKC,0 +SYNTIN.NDD,4 +SYNTIN.NLIN,4 +SYNTIN.NSCALE,98765 +SYNTIN.NSTEP,20 +SYNTIN.RDFUN,0.01 +SYNTIN.RHODEL,0.0 +SYNTIN.RHOMAX,300.0 +SYNTIN.RHOMIN,0.0 +SYNTIN.RK,0.0 +SYNTIN.ROCLIM,100.0 +SYNTIN.STMIN,1.0 +SYNTIN.TMGLIM,0.1 +SYNTIN.VAPPR,150.0 +SYNTIN.VJMAX,99999.0 +TOLIN.ACCLIM,16.0 +TOLIN.ALMXLD,25.0 +TOLIN.ALMXTO,25.0 +TOLIN.ALPLD,0.0,4.0,6.0,8.0,10.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,30.0,32.0,34.0,36.0,-100.0,-100.0,-100.0,-100.0 +TOLIN.ALPROT,14.0 +TOLIN.ALPTO,0.0,4.0,6.0,8.0,10.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,30.0,32.0,34.0,36.0,-100.0,-100.0,-100.0,-100.0 +TOLIN.APA,0.0 +TOLIN.APRANG,-3.0 +TOLIN.APRHGT,1500.0 +TOLIN.ARGEF,1.0 +TOLIN.ARRET,0.0 +TOLIN.CDEOUT,0.005 +TOLIN.CDLD,0.031664,0.025258,0.026053,0.029529,0.036235,0.045467,0.051257,0.057003,0.063994,0.070955,0.080059,0.089179,0.11585,0.142313,0.16197,0.176325,0.196659,0.213941,0.229069,0.247171,0.268876,0.297378,0.346767,0.400762,0.442503,0.483076,0.0,0.0,0.0,0.0 +TOLIN.CDREV,0.0 +TOLIN.CDTO,0.031664,0.025258,0.026053,0.029529,0.036235,0.045467,0.051257,0.057003,0.063994,0.070955,0.080059,0.089179,0.11585,0.142313,0.16197,0.176325,0.196659,0.213941,0.229069,0.247171,0.268876,0.297378,0.346767,0.400762,0.442503,0.483076,0.0,0.0,0.0,0.0 +TOLIN.CLLD,-0.056782,0.176206,0.28103,0.395085,0.505416,0.609138,0.658895,0.709463,0.760166,0.810948,0.859611,0.908241,0.933666,0.958067,0.972702,0.954969,0.93792,0.936314,0.931608,0.943601,0.956648,0.984358,0.988573,0.980125,0.962508,0.942321,0.0,0.0,0.0,0.0 +TOLIN.CLLDM,1.3 +TOLIN.CLREV,0.0 +TOLIN.CLTO,-0.056782,0.176206,0.28103,0.395085,0.505416,0.609138,0.658895,0.709463,0.760166,0.810948,0.859611,0.908241,0.933666,0.958067,0.972702,0.954969,0.93792,0.936314,0.931608,0.943601,0.956648,0.984358,0.988573,0.980125,0.962508,0.942321,0.0,0.0,0.0,0.0 +TOLIN.DELDFL,5.0 +TOLIN.DELHAP,5.0 +TOLIN.DELTCL,0.2 +TOLIN.DELTRN,0.25 +TOLIN.DELTRO,0.2 +TOLIN.DELVTO,4.0 +TOLIN.DTCT,15.0 +TOLIN.FCDMLD,-1.0 +TOLIN.FCDMTO,0.2 +TOLIN.FLDCD,1.8246 +TOLIN.FLDCL,1.8246 +TOLIN.FTOCD,1.8246 +TOLIN.FTOCL,1.8246 +TOLIN.IBAL,1 +TOLIN.IGOBS,0 +TOLIN.INCGEF,1 +TOLIN.INTHLD,2 +TOLIN.INTHRV,2 +TOLIN.INTHTO,2 +TOLIN.IREV,1 +TOLIN.ISPOL,0 +TOLIN.ITIME,1 +TOLIN.ITXOUT,1 +TOLIN.MAGRUP,0 +TOLIN.NOFLAR,0 +TOLIN.OBSLD,50.0 +TOLIN.PILOTT,0.85 +TOLIN.REVCUT,-1000.0 +TOLIN.RVFACT,-0.4 +TOLIN.SWREF,3655.4 +TOLIN.TDELG,0.0 +TOLIN.TDSINK,0.0 +TOLIN.THDRY,0.0 +TOLIN.THFACT,1.0 +TOLIN.THRLD,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +TOLIN.THRRV,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +TOLIN.THRTO,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +TOLIN.TIBRA,3.0 +TOLIN.TIBRAK,4.0 +TOLIN.TICUT,3.0 +TOLIN.TIGEAR,9.0 +TOLIN.TIRVA,1000.0 +TOLIN.TIRVRS,5.0 +TOLIN.TISPA,3.0 +TOLIN.TISPOL,2.0 +TOLIN.VANGL,3.0 +TOLIN.VELLD,0.0,50.0,100.0,150.0,200.0,250.0,300.0,350.0,400.0,450.0 +TOLIN.VELRV,0.0,50.0,100.0,150.0,200.0,250.0,300.0,350.0,400.0,450.0 +TOLIN.VELTO,0.0,50.0,100.0,150.0,200.0,250.0,300.0,350.0,400.0,450.0 +TOLIN.VROTAT,1.05 +TOLIN.WHGT,7.0 +WTIN.ARFIN,1.952 +WTIN.CGACON,0.0 +WTIN.CGAIS,0.0 +WTIN.CGAMMO,0.0 +WTIN.CGAP,0.0 +WTIN.CGARM,0.0 +WTIN.CGAV,0.0 +WTIN.CGAXG,0.0 +WTIN.CGAXT,0.0 +WTIN.CGCAN,0.0 +WTIN.CGCF,0.0 +WTIN.CGCR,0.0 +WTIN.CGCW,0.0 +WTIN.CGEA,0.0 +WTIN.CGEF,0.0 +WTIN.CGF,0.0 +WTIN.CGFIN,0.0 +WTIN.CGFWF,0.0 +WTIN.CGHT,0.0 +WTIN.CGLGM,0.0 +WTIN.CGLGN,0.0 +WTIN.CGMIS,0.0 +WTIN.CGP,0.0 +WTIN.CGREFL,0.0 +WTIN.CGREFX,0.0 +WTIN.CGVT,0.0 +WTIN.CGW,0.0 +WTIN.CGZWF,0.0 +WTIN.DLDWT,0.0 +WTIN.EINL,1.0 +WTIN.ENOZ,1.0 +WTIN.ETAP,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +WTIN.INCPAY,0 +WTIN.INRTIA,0 +WTIN.ISPOWE,0 +WTIN.ITANK,1 +WTIN.MLDWT,0 +WTIN.MYWTS,0 +WTIN.NETAP,0 +WTIN.NETAW,6 +WTIN.NFCON,1 +WTIN.NSWR,0 +WTIN.NTHR,0 +WTIN.NTOW,0 +WTIN.NWREF,39 +WTIN.PVAL,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +WTIN.SPWCON,38584.0 +WTIN.SPWGW,0.104087 +WTIN.SPWSW,9.5 +WTIN.SPWTH,2.23439 +WTIN.SWPCAN,0.0 +WTIN.SWPFIN,39.42 +WTIN.SWTFF,0.0 +WTIN.TCFIN,0.08 +WTIN.TCR,0.0 +WTIN.TCT,0.0 +WTIN.TD,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +WTIN.TF,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +WTIN.TL,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +WTIN.TW,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +WTIN.TX,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +WTIN.TY,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +WTIN.TZ,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +WTIN.WARM,0.0 +WTIN.WAUXT,1.0 +WTIN.WINL,0.0 +WTIN.WNOZ,0.0 +WTIN.WTFILE,"""WTDAT""" +WTIN.YEA,0.0 +WTIN.YEF,0.0 +WTIN.YFIN,0.0 +WTIN.YFUSE,0.0 +WTIN.YMLG,0.0 +WTIN.YVERT,0.0 +WTIN.ZAP,0.0 +WTIN.ZBW,0.0 +WTIN.ZEA,0.0 +WTIN.ZEF,0.0 +WTIN.ZFIN,0.0 +WTIN.ZHT,0.0 +WTIN.ZRVT,0.0 +WTIN.ZVT,0.0 diff --git a/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.inp b/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.inp new file mode 100644 index 0000000000..51af9f0e27 --- /dev/null +++ b/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.inp @@ -0,0 +1,1199 @@ +! BWB300-N1 + &OPTION + MPRINT = 1, + IOPT = 3, + IANAL = 3, + INENG = 0, + ITAKOF = 1, + ILAND = 1, + NOPRO = 1, + NOISE = 0, + ICOST = 0, + IFITE = 3, + + ! Plot File Input Data + CNFILE = "FLPPLOT", + IXFL = 0, + MSFILE = "MSMPLOT", + CRFILE = "CRUPLOT", + TOFILE = "TOLPLOT", + NPFILE = 1, + NOFILE = 'TO.NPR', + + ! Drag Polar Plot File + IPOLP = 0, + APFILE = "POLPLOT", + POLALT = 0.0, + NMACH = 0, + PMACH = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + IPLTTH = 0, + THFILE = "THRPLOT", + + ! Additional Plot files + IPLTHS = 0, + HSFILE = "HISPLOT", + IPLTPS = 0, + PSFILE = "PSPLOT", + XMAX = 0.9, + XMIN = 0.3, + XINC = 0.2, + YMAX = 40000.0, + YMIN = 0.0, + YINC = 10000.0, + PLTNZ = -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, + PLTPC = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + IPSTDG = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + PLTWT = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + IPLTSG = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + PLTFM = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + PLTWTA = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + IANOPP = 0, + / + &WTIN + ULF = 3.75, + DGW = 1.0, + VMMO = 0.9, + NWREF = 39, + CGREFL = 0.0, + CGREFX = 0.0, + MYWTS = 0, + HYDPR = 3000.0, + WPAINT = 0.0, + IALTWT = 0, + ISPOWE = 0, + SPWTH = 2.23439, + SPWSW = 9.5, + SPWGW = 0.104087, + SPWCON = 38584.0, + ! IFITE = 0, + + ! Wing Data + ! SPAN = 186.3, + SPAN = 186.3, + DIH = 3.0, + FLAPR = 0.3, + GLOV = 0.0, + VARSWP = 0.0, + FCOMP = 0.85, + FAERT = 0.0, + FSTRT = 0.0, + + ! Detailed Wing Data + ! ETAW = 0.0, 14.20, 28.40, 47.40, 63.50, 68.43, + NETAW = 6, + ETAW = 0.0, .2075, .4150, .6927, .9280, 1.000, + CHD = 48.25, 33.20, 18.97, 14.19, 10.20, 3.220, + TOC = 0.125, 0.125, 0.076, 0.076, 0.076, 0.060, + SWL = 0.0, 0.0, 17.0, 17.0, 17.0, 17.0, + ETAE = 0.2, 0.0, 0.0, 0.0, + PCTL = 1.0, + ARREF = 0.0, + TCREF = 0.0, + NSTD = 50, + PDIST = 2.0, + NETAP = 0, + ETAP = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + PVAL = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + ! Tails, Fins, Canards + SHT = 700.0, + SWPHT = 0.0, + ARHT = 1.0, + TRHT = 0.714, + TCHT = 0.1, + HHT = -100.0, + NVERT = 0, + SVT = 0.0, + SWPVT = -100.0, + ARVT = -100.0, + TRVT = -100.0, + TCVT = 0.0, + NFIN = 2, + SFIN = 184.89, + ARFIN = 1.952, + TRFIN = 0.464, + SWPFIN = 39.42, + TCFIN = 0.08, + SCAN = 0.0, + SWPCAN = 0.0, + ARCAN = 0.0, + TRCAN = 0.0, + TCCAN = 0.0, + + ! Fuselage Data + NFUSE = 1, + XL = 0.0, + WF = 0.0, ! WF = 50.0 + DF = 14.16, + ! XLP = 72.7, + + ! Landing Gear Data + XMLG = 85.0, + XNLG = 87.0, + WLDG = 0.0, + MLDWT = 0, + DLDWT = 0.0, + CARBAS = 0.0, + + ! Propulsion System Data + NEW = 0, + NEF = 2, + THRSO = 86786.4, + WENG = 22089.3, + EEXP = 1.0, + WINL = 0.0, + EINL = 1.0, + WNOZ = 0.0, + ENOZ = 1.0, + XNAC = 17.297, + DNAC = 12.569, + WPMISC = 0.0, + + ! Fuel System Data + NTANK = 7, + FULWMX = -1.0, + FUELRF = 0.0, + FSWREF = -1.0, + FUSCLA = 0.0, + FUSCLB = 0.0, + FULFMX = 0.0, + IFUFU = 0, + FULAUX = 0.0, + + ! Crew and Payload Data + NPF = 24, + NPB = 76, + NPT = 200, + NSTU = -1, + NGALC = -1, + NFLCR = 2, + WPPASS = 165.0, + BPP = -1.0, + CARGF = 0.0, + CARGOW = 0.0, + CARGOF = 0.0, + + ! Override Parameters + FRWI = 1.0, + FRWI1 = 1.0, + FRWI2 = 1.0, + FRWI3 = 1.0, + FRHT = 1.0, + FRVT = 1.0, + FRFIN = 1.0, + FRCAN = 1.0, + FRFU = 1.0, + FRLGN = 1.0, + FRLGM = 1.0, + FRNA = 0.0, + WTHR = 0.0, + WPMSC = 0.0, + WFSYS = 1.0, + FRSC = 1.0, + WAPU = 1.0, + WIN = 1.0, + WHYD = 1.0, + WELEC = 1.0, + WAVONC = 1.0, + WARM = 0.0, + WFURN = 1.118, + WAC = 1.0, + WAI = 1.0, + WUF = 1.0, + WOIL = 1.0, + WSRV = 1.0, + WCON = 23500., + WAUXT = 1.0, + WFLCRB = 1.0, + WSTUAB = 1.0, + EWMARG = 0.0, + + ! Center of Gravity Data + CGW = 0.0, + CGHT = 0.0, + CGVT = 0.0, + CGFIN = 0.0, + CGCAN = 0.0, + CGF = 0.0, + CGLGN = 0.0, + CGLGM = 0.0, + CGEF = 0.0, + CGEA = 0.0, + CGAP = 0.0, + CGAV = 0.0, + CGARM = 0.0, + CGCR = 0.0, + CGP = 0.0, + CGCW = 0.0, + CGCF = 0.0, + CGZWF = 0.0, + CGFWF = 0.0, + CGAIS = 0.0, + CGACON = 0.0, + CGAXG = 0.0, + CGAXT = 0.0, + CGAMMO = 0.0, + CGMIS = 0.0, + + ! Inertia Data + INRTIA = 0, + ZHT = 0.0, + ZVT = 0.0, + ZFIN = 0.0, + YFIN = 0.0, + ZEF = 0.0, + YEF = 0.0, + ZEA = 0.0, + YEA = 0.0, + ZBW = 0.0, + ZAP = 0.0, + ZRVT = 0.0, + YMLG = 0.0, + YFUSE = 0.0, + YVERT = 0.0, + SWTFF = 0.0, + TCR = 0.0, + TCT = 0.0, + + INCPAY = 0, + ITANK = 1, + NFCON = 1, + TX = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + TY = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + TZ = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + TL = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + TW = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + TD = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + TF = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + ! Undocumented Input + NTOW = 0, + NSWR = 0, + NTHR = 0, + WTFILE = "WTDAT", + / + &FUSEIN + TCF=0.1792, + SWPLE=60., + OSSPAN=68.43, + XLW=50.0, + / + &CONFIN ! TITLE = title + DESRNG = 7500.0, + WSR = 0.0, + TWR = 0.0, + HTVC = 0.0, + VTVC = 0.0, + PGLOV = 0.0, + FIXSPN = 0.0, + FIXFUL = 0.0, + ! ICOST = 0, + + ! Objective function weight + OFG = 1.0, + OFF = 0.0, + OFM = 0.0, + OFR = 0.0, + OFC = 0.0, + OSFC = 0.0, + OFNOX = 0.0, + OFNF = 0.0, + OFNS = 0.0, + OFNFOM = 0.0, + OAREA = 0.0, + OFH = 0.0, + + ! Vehicle/mission design variables + GW = 600000.0, 0.0, 0.0, 0.0, 0.0, 0.0, + AR = 5.4252, 0.0, 0.0, 0.0, 0.0, 0.0, + THRUST = 87500.0, 1.0, 0.0, 0.0, 0.0, 0.0, + SW = 7628., 1.0, 0.0, 0.0, 0.0, 0.0, + TR = 0.311, 0.0, 0.0, 0.0, 0.0, 0.0, + SWEEP = 35.7, 0.0, 0.0, 0.0, 0.0, 0.0, + TCA = 0.11, 0.0, 0.0, 0.0, 0.0, 0.0, + VCMN = 0.85, 0.0, 0.0, 0.0, 0.0, 0.0, + CH = 45000.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + ! Engine cycle design variables + ETIT = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + EOPR = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + EFPR = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + EBPR = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + ETTR = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + EBLA = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + ! IC Engine cycle design variables + ! ETIT = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + ! EOPR = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + ! EFPR = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + ! EBPR = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + ! ETTR = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + ! EBLA = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + ! Takeoff and landing variables + VARTH = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + ROTVEL = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + PLR = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + / + &AERIN + MYAERO = 0, + IWAVE = 0, + FWAVE = 1.0, + + ! INENG = 0, + ! NFUSE = 1, + ! NVERT = 1, + + ITPAER = 2, + IBO = 0, + CAM = 2.0, + SBASE = 0.0, + AITEK = 2.0, + E = 1.0, + MODARO = 0, + FCLDES = -1.0, + FMDES = -1.0, + + XLLAM = 0.0, + TRUW = 0.0, + TRLW = 0.0, + TRUH = 0.0, + TRLH = 0.0, + TRUV = 0.0, + TRLV = 0.0, + TRUB = 0.0, + TRLB = 0.0, + TRUN = 0.0, + TRLN = 0.0, + TRUC = 0.0, + TRLC = 0.0, + + SWETW = 0.61, ! was 1.0, changed to match the AERO from old version of FLOPS + SWETH = 1.0, + SWETV = 125.0, + SWETF = 1.0, + SWETN = 1.0, + SWETC = 1.0, + + WRATIO = 0.7, + VAPPR = 150.0, + FLTO = 9900.0, + FLLDG = 9900.0, + CLTOM = 2.0, + CLLDM = 3.0, + CLAPP = 0.0, + DRATIO = 1.0, + ELODSS = 0.0, + ELODMA = 0.0, + THRSS = 0.0, + THRMA = 0.0, + THROFF = 0.0, + + ! ITAKOF = 1, + ! ILAND = 1, + ! NOPRO = 1, + ! NOISE = 1, + MIKE = 0, + / + &ENGDIN + NGPRT = 1, + IGENEN = -1, + EIFILE = "/users1/karlg/sfw/b777/PAX300_outputFLOPS_baseline.txt", + EXTFAC = 1.0, + FFFSUB = 1.0, + FFFSUP = 1.0, + IDLE = 1, + NONEG = 0, + FIDMIN = 0.08, + FIDMAX = 1.0, + IXTRAP = 1, + IFILL = 2, + MAXCR = 1, + NOX = 1, + NPCODE = 0, + PCODE = 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, + BOOST = 0.0, + IGEO = 0, + DFFAC = 0.0, + FFFAC = 0.0, + / + &MISSIN + IRW = 1, + MSUMPT = 1, + IFLAG = 2, + + FACT = 1.0, + FLEAK = 0.0, + FCDO = 1.0, + FCDI = 1.0, + FCDSUB = 1.0, + FCDSUP = 1.0, + + INDR = 0, + ISKAL = 1, + OWFACT = 1.0, + DTC = 0.0, + RTOL = 0.0010, + NHOLD = 0, + IATA = 0, + TLWIND = 0.0, + NPCON = 1, + DWT = 1.0, + OFFDR = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + IDOQ = 0, + + NSOUT = 0, + NSADJ = 0, + MIRROR = 0, + + STMA = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + CDST = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + ISTCL = 0, 0, 0, 0, + ISTCR = 0, 0, 0, 0, 0, 0, + ISTDE = 0, + + MYWTS = 0, + RAMPWT = 0.0, + ! DOWE = 0.0, + PAYLOD = 0.0, + FUEMAX = 0.0, + + TAKOTM = 2.0, + TAXOTM = 9.0, + APPRTM = 4.0, + APPFFF = 2.0, + TAXITM = 5.0, + ITTFF = 1, + TAKOFF = 0.0, + TXFUFL = 0.0, + + XNZ = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + XCL = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + XMACH = 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + NCLIMB = 1, + CLMMIN = 0.3, 0.3, 0.3, 0.3, + CLMMAX = 0.0, 0.0, 0.0, 0.0, + CLAMIN = 0.0, 0.0, 0.0, 0.0, + CLAMAX = 0.0, 0.0, 0.0, 0.0, + NINCL = 31, 31, 31, 31, + FWF = -0.0010, -0.0010, -0.0010, -0.0010, + NCRCL = 1, 1, 1, 1, + CLDCD = 0.0, 0.0, 0.0, 0.0, + IPPCL = 1, 1, 1, 1, + MAXCL = 1, 1, 1, 1, + + ! Input Climb Schedules + NO = 0, 0, 0, 0, + ACTAB = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + VCTAB = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + IFAACL = 1, + IFAADE = -1, + NODIVE = 0, + DIVLIM = 0.0, + QLIM = 0.0, + SPDLIM = 0.0, + NQL = 0, + QLALT = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + VQLM = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + NCRUSE = 3, + IOC = 1, 4, 4, 1, 1, 1, + CRMACH = 0.85, 0.6, 0.0, 0.0, 0.0, 0.0, + CRALT = 45000.0, 25000.0, 1500.0, -1.0, -1.0, -1.0, + CRDCD = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + FLRCR = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + CRMMIN = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + CRCLMX = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + HPMIN = 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, + FFUEL = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + FNOX = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + IFEATH = 0, 0, 0, 0, 0, 0, + FEATHF = 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, + CDFETH = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + DCWT = 1.0, + RCIN = 300.0, + + WTBM = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + ALTBM = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + IVS = 1, + DECL = 0.8, + DEMMIN = 0.3, + DEMMAX = 0.0, + DEAMIN = 0.0, + DEAMAX = 0.0, + NINDE = 31, + DEDCD = 0.0, + RDLIM = -99999.0, + + NS = 0, + ADTAB = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + VDTAB = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + IRS = 1, + RESRFU = 0.0, + RESTRP = 0.05, + TIMMAP = 2.0, + ALTRAN = 200.0, + NCLRES = 1, + NCRRES = 2, + SREMCH = -1.0, + EREMCH = -1.0, + SREALT = -1.0, + EREALT = -1.0, + HOLDTM = 30.0, + NCRHOL = 3, + IHOPOS = 1, + ICRON = 0, + THOLD = 0.1, + NCRTH = 1, + + REARTH = 20890000., + IRADAC = 0, + / +START 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +CLIMB 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +CRUISE 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +DESCENT0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 + &PCONIN + CONALT = 35000.0, + CONMCH = 0.85, + CONNZ = 1.0, + CONPC = 1.0, + NEO = 2, + ICSTDG = 0, + CONWT = 0.0, + ICONSG = 2, + CONFM = 0.0, + CONWTA = 0.0, + ICONTP = 5, + CONLIM = 300.0, + CONAUX = 0.0, + / + &PCONIN + CONALT = 35000.0, + CONMCH = 0.85, + CONNZ = 1.0, + CONPC = 1.0, + NEO = 2, + ICSTDG = 0, + CONWT = 0.0, + ICONSG = 2, + CONFM = 0.0, + CONWTA = 0.0, + ICONTP = 5, + CONLIM = 0.0, + CONAUX = 0.0, + / + &PCONIN + CONALT = 35000.0, + CONMCH = 0.85, + CONNZ = 1.0, + CONPC = 1.0, + NEO = 2, + ICSTDG = 0, + CONWT = 0.0, + ICONSG = 2, + CONFM = 0.0, + CONWTA = 0.0, + ICONTP = 5, + CONLIM = 0.0, + CONAUX = 0.0, + / + &PCONIN + CONALT = 35000.0, + CONMCH = 0.85, + CONNZ = 1.0, + CONPC = 1.0, + NEO = 2, + ICSTDG = 0, + CONWT = 0.0, + ICONSG = 2, + CONFM = 0.0, + CONWTA = 0.0, + ICONTP = 5, + CONLIM = 0.0, + CONAUX = 0.0, + / + &PCONIN + CONALT = 35000.0, + CONMCH = 0.85, + CONNZ = 1.0, + CONPC = 1.0, + NEO = 2, + ICSTDG = 0, + CONWT = 0.0, + ICONSG = 2, + CONFM = 0.0, + CONWTA = 0.0, + ICONTP = 5, + CONLIM = 0.0, + CONAUX = 0.0, + / + &PCONIN + CONALT = 35000.0, + CONMCH = 0.85, + CONNZ = 1.0, + CONPC = 1.0, + NEO = 2, + ICSTDG = 0, + CONWT = 0.0, + ICONSG = 2, + CONFM = 0.0, + CONWTA = 0.0, + ICONTP = 5, + CONLIM = 0.0, + CONAUX = 0.0, + / + &ASCLIN + SREF = 0.0, + TREF = 0.0, + AWETN = 0.0, + ELTOT = 0.0, + VOLTOT = 0.0, + AWETT = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + AWETW = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + ELW = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + VOLW = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + FORM = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + EQL = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + CDWAV = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + DCDNAC = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + / + &TOLIN + APA = 0.0, + DTCT = 15.0, + SWREF = 3655.4, + ARRET = 0.0, + WHGT = 7.0, + ALPRUN = 4.0, + TINC = 4.0, + ROLLMU = 0.025, + BRAKMU = 0.35, + CDGEAR = 0.0050, + CDEOUT = 0.0050, + CLSPOL = 0.0, + CDSPOL = 0.0, + INCGEF = 1, + ARGEF = 1.0, + ITIME = 1, + + ! Thrust Reverser + INTHRV = 2, + RVFACT = -0.4, + VELRV = 0.0, 50.0, 100.0, 150.0, 200.0, 250.0, 300.0, 350.0, 400.0, 450.0, + THRRV = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + TIRVRS = 5.0, + REVCUT = -1000.0, + CLREV = 0.0, + CDREV = 0.0, + + ! Integration Intervals + DELVTO = 4.0, + DELTCL = 0.2, + DELTRO = 0.2, + DELHAP = 5.0, + DELDFL = 5.0, + DELTRN = 0.25, + + ! Takeoff Data + CLTOM = 1.3, + CDMTO = 0.035258, + FCDMTO = 0.2, ! was 0.40 + ALMXTO = 25.0, + OBSTO = 35.0, + ALPTO = 0.0, 4.0, 6.0, 8.0, 10.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 30.0, 32.0, 34.0, 36.0, -100.0, -100.0, -100.0, -100.0, + CLTO = -0.056782, 0.176206, 0.28103, 0.395085, 0.505416, 0.609138, 0.658895, 0.709463, 0.760166, 0.810948, 0.859611, 0.908241, 0.933666, 0.958067, 0.972702, 0.954969, 0.93792, 0.936314, 0.931608, 0.943601, 0.956648, 0.984358, 0.988573, 0.980125, 0.962508, 0.942321, 0.0, 0.0, 0.0, 0.0, + CDTO = 0.031664, 0.025258, 0.026053, 0.029529, 0.036235, 0.045467, 0.051257, 0.057003, 0.063994, 0.070955, 0.080059, 0.089179, 0.11585, 0.142313, 0.16197, 0.176325, 0.196659, 0.213941, 0.229069, 0.247171, 0.268876, 0.297378, 0.346767, 0.400762, 0.442503, 0.483076, 0.0, 0.0, 0.0, 0.0, + INTHTO = 2, + VELTO = 0.0, 50.0, 100.0, 150.0, 200.0, 250.0, 300.0, 350.0, 400.0, 450.0, + THRTO = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + ALPROT = 14.0, + VROTAT = 1.05, + VANGL = 3.0, + THFACT = 1.0, + FTOCL = 1.8246, + FTOCD = 1.8246, + IGOBS = 0, + TDELG = 0.0, + TIGEAR = 9.0, + IBAL = 1, + ITXOUT = 1, + + ! Aborted Takeoff + PILOTT = 0.85, + ISPOL = 0, + IREV = 1, + ! Not wrapped and not currently used. + TISPA = 3., + TIBRA = 3., + TIRVA = 1000., + + ! Landing Data + CLLDM = 1.3, + CDMLD = 0.0, + FCDMLD = -1.0, + ALMXLD = 25.0, + OBSLD = 50.0, + ALPLD = 0.0, 4.0, 6.0, 8.0, 10.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 30.0, 32.0, 34.0, 36.0, -100.0, -100.0, -100.0, -100.0, + CLLD = -0.056782, 0.176206, 0.28103, 0.395085, 0.505416, 0.609138, 0.658895, 0.709463, 0.760166, 0.810948, 0.859611, 0.908241, 0.933666, 0.958067, 0.972702, 0.954969, 0.93792, 0.936314, 0.931608, 0.943601, 0.956648, 0.984358, 0.988573, 0.980125, 0.962508, 0.942321, 0.0, 0.0, 0.0, 0.0, + CDLD = 0.031664, 0.025258, 0.026053, 0.029529, 0.036235, 0.045467, 0.051257, 0.057003, 0.063994, 0.070955, 0.080059, 0.089179, 0.11585, 0.142313, 0.16197, 0.176325, 0.196659, 0.213941, 0.229069, 0.247171, 0.268876, 0.297378, 0.346767, 0.400762, 0.442503, 0.483076, 0.0, 0.0, 0.0, 0.0, + INTHLD = 2, + VELLD = 0.0, 50.0, 100.0, 150.0, 200.0, 250.0, 300.0, 350.0, 400.0, 450.0, + THRLD = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + THDRY = 0.0, + APRHGT = 1500.0, + APRANG = -3.0, + FLDCL = 1.8246, + FLDCD = 1.8246, + TDSINK = 0.0, + VANGLD = 3.0, + NOFLAR = 0, + TISPOL = 2.0, + TICUT = 3.0, + TIBRAK = 4.0, + ACCLIM = 16.0, + MAGRUP = 0, + + ! NOPRO = 1, + ! NOISE = 1, + ! MAPCAL = 1, + / + &PROIN + NPOL = 1, + + ALPRO = 0.0, 4.0, 6.0, 8.0, 10.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 30.0, 32.0, 34.0, 36.0, -100.0, -100.0, -100.0, -100.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + CLPRO = -0.056782, 0.176206, 0.28103, 0.395085, 0.505416, 0.609138, 0.658895, 0.709463, 0.760166, 0.810948, 0.859611, 0.908241, 0.933666, 0.958067, 0.972702, 0.954969, 0.93792, 0.936314, 0.931608, 0.943601, 0.956648, 0.984358, 0.988573, 0.980125, 0.962508, 0.942321, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + CDPRO = 0.031664, 0.025258, 0.026053, 0.029529, 0.036235, 0.045467, 0.051257, 0.057003, 0.063994, 0.070955, 0.080059, 0.089179, 0.11585, 0.142313, 0.16197, 0.176325, 0.196659, 0.213941, 0.229069, 0.247171, 0.268876, 0.297378, 0.346767, 0.400762, 0.442503, 0.483076, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + DFLAP = 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, + + NTIME = 1, + IPCMAX = 1, + KEAS = 0, + TXF = -1.0, + ALPMIN = 0.0, + GAMLIM = 0.0, + INM = 0, + IATR = 0, + FLAPID = "TOFF ", "FlapID", "FlapID", "FlapID", "FlapID", "FlapID", "FlapID", "FlapID", "FlapID", "FlapID", + + SPRATE = 0.10, + ! NPFILE = 0, + / + &SEGIN + KEY = 'ROTATE', + NFLAP = 1, + IFIX = 1, + ENGSCL = 0.0, + AFIX = 0.0, + GFIX = 0.0, + VFIX = 0.0, + HSTOP = 0.0, + DSTOP = 0.0, + TSTOP = 0.0, + VSTOP = 0.0, + HMIN = 0.0, + SPRATE = 0.1, + IPLR = 0, + NOYCAL = 0, + DELT = 1.0, + GRDAEO = 2.29061, + GRDOEO = 0.0, + / + &SEGIN + KEY = 'LIFTOFF', + NFLAP = 1, + IFIX = 1, + ENGSCL = 0.0, + AFIX = 0.0, + GFIX = 0.0, + VFIX = 0.0, + HSTOP = 0.0, + DSTOP = 0.0, + TSTOP = 0.0, + VSTOP = 0.0, + HMIN = 0.0, + SPRATE = 0.1, + IPLR = 0, + NOYCAL = 0, + DELT = 1.0, + GRDAEO = 2.29061, + GRDOEO = 0.0, + / + &SEGIN + KEY = 'OBSTACLE', + NFLAP = 1, + IFIX = 1, + ENGSCL = 0.0, + AFIX = 0.0, + GFIX = 0.0, + VFIX = 0.0, + HSTOP = 0.0, + DSTOP = 0.0, + TSTOP = 0.0, + VSTOP = 0.0, + HMIN = 0.0, + SPRATE = 0.1, + IPLR = 0, + NOYCAL = 0, + DELT = 1.0, + GRDAEO = 2.29061, + GRDOEO = 0.0, + / + &SEGIN + KEY = 'CHANGE', + NFLAP = 1, + IFIX = 1, + ENGSCL = 0.0, + AFIX = 0.0, + GFIX = 0.0, + VFIX = 0.0, + HSTOP = 0.0, + DSTOP = 18000.0, + TSTOP = 0.0, + VSTOP = 0.0, + HMIN = 0.0, + SPRATE = 0.1, + IPLR = 0, + NOYCAL = 0, + DELT = 1.0, + GRDAEO = 2.29061, + GRDOEO = 0.0, + / + &SEGIN + KEY = 'CUTBACK', + NFLAP = 1, + IFIX = 1, + ENGSCL = 0.0, + AFIX = 0.0, + GFIX = 0.0, + VFIX = 0.0, + HSTOP = 0.0, + DSTOP = 0.0, + TSTOP = 0.0, + VSTOP = 0.0, + HMIN = 0.0, + SPRATE = 0.1, + IPLR = 0, + NOYCAL = 0, + DELT = 1.0, + GRDAEO = 2.29061, + GRDOEO = 0.0, + / + &SEGIN + KEY = 'CHANGE', + NFLAP = 1, + IFIX = 1, + ENGSCL = 0.0, + AFIX = 0.0, + GFIX = 0.0, + VFIX = 0.0, + HSTOP = 0.0, + DSTOP = 28000.0, + TSTOP = 0.0, + VSTOP = 0.0, + HMIN = 0.0, + SPRATE = 0.1, + IPLR = 0, + NOYCAL = 0, + DELT = 1.0, + GRDAEO = 2.29061, + GRDOEO = 0.0, + / + &SEGIN + KEY = 'LAST', + NFLAP = 1, + IFIX = 1, + ENGSCL = 0.95, + AFIX = 0.0, + GFIX = 0.0, + VFIX = 0.0, + HSTOP = 0.0, + DSTOP = 50000.0, + TSTOP = 0.0, + VSTOP = 0.0, + HMIN = 0.0, + SPRATE = 0.1, + IPLR = 0, + NOYCAL = 0, + DELT = 1.0, + GRDAEO = 2.29061, + GRDOEO = 0.0, + / + &SYNTIN + IG = 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + DESRNG = 7500.0, + VAPPR = 150.0, + FLTO = 9900.0, + FLLDG = 9900.0, + EXFCAP = 0.0, + CDTMAX = 99999.0, + CDPMAX = 99999.0, + VJMAX = 99999.0, + STMIN = 1.0, + ARMAX = 99999.0, + GNOX = 0.0, + ROCLIM = 100.0, + DHDTLM = 100.0, + TMGLIM = 0.1, + + IBFGS = 1, + ITFINE = 0, + NDD = 4, + RK = 0.0, + FDD = 0.2, + NLIN = 4, + NSTEP = 20, + EF = 3.0, + EPS = 0.0020, + AMULT = 1.2, + DEP = 0.0010, + ACCUX = 1.0E-5, + GLM = 0.0020, + + GFACT = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + AUTSCL = 1.0, + ICENT = 0, + + RHOMIN = 0.0, + RHOMAX = 300.0, + RHODEL = 0.0, + ITMAX = 30, + JPRNT = 2, + RDFUN = 0.01, + ADFUN = 0.0010, + + JVKC = 0, + EMOVE = 5.00E-2, + FDELT = 0.0, + FDMIN = 0.0, + NSCALE = 98765, + ISDRST = 0, + IGRAD = 0, + / + &RERUN + DESRNG = 3000.0, + MYWTS = 1, + ! RAMPWT = 637866.2, + ! DOWE = 314628.9, + ! PAYLOD = 62700.0, + ! FUEMAX = 260537.3, + ITAKOF = 1, + ILAND = 1, + NOPRO = 1, + NOISE = 0, + ICOST = 0, + WSR = 0.0, + TWR = 0.0, + / + &MISSIN + IRW = 1, + MSUMPT = 1, + IFLAG = 2, + + FACT = 1.0, + FLEAK = 0.0, + FCDO = 1.0, + FCDI = 1.0, + FCDSUB = 1.0, + FCDSUP = 1.0, + + INDR = 0, + ISKAL = 1, + OWFACT = 1.0, + DTC = 0.0, + RTOL = 0.0010, + NHOLD = 0, + IATA = 0, + TLWIND = 0.0, + NPCON = 0, + DWT = 1.0, + OFFDR = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + IDOQ = 0, + + NSOUT = 0, + NSADJ = 0, + MIRROR = 0, + + STMA = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + CDST = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + ISTCL = 0, 0, 0, 0, + ISTCR = 0, 0, 0, 0, 0, 0, + ISTDE = 0, + + MYWTS = 1, + ! RAMPWT = 631389.1, + ! DOWE = 309088.2, + ! PAYLOD = 62700.0, + ! FUEMAX = 259600.9, + + TAKOTM = 2.0, + TAXOTM = 9.0, + APPRTM = 4.0, + APPFFF = 2.0, + TAXITM = 5.0, + ITTFF = 1, + TAKOFF = 0.0, + TXFUFL = 0.0, + + XNZ = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + XCL = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + XMACH = 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + NCLIMB = 1, + CLMMIN = 0.3, 0.3, 0.3, 0.3, + CLMMAX = 0.0, 0.0, 0.0, 0.0, + CLAMIN = 0.0, 0.0, 0.0, 0.0, + CLAMAX = 0.0, 0.0, 0.0, 0.0, + NINCL = 31, 31, 31, 31, + FWF = -0.0010, -0.0010, -0.0010, -0.0010, + NCRCL = 1, 1, 1, 1, + CLDCD = 0.0, 0.0, 0.0, 0.0, + IPPCL = 1, 1, 1, 1, + MAXCL = 1, 1, 1, 1, + + ! Input Climb Schedules + NO = 0, 0, 0, 0, + ACTAB = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + VCTAB = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + IFAACL = 1, + IFAADE = -1, + NODIVE = 0, + DIVLIM = 0.0, + QLIM = 0.0, + SPDLIM = 0.0, + NQL = 0, + QLALT = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + VQLM = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + NCRUSE = 3, + IOC = 1, 4, 4, 1, 1, 1, + CRMACH = 0.85, 0.6, 0.0, 0.0, 0.0, 0.0, + CRALT = 45000.0, 25000.0, 1500.0, -1.0, -1.0, -1.0, + CRDCD = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + FLRCR = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + CRMMIN = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + CRCLMX = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + HPMIN = 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, + FFUEL = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + FNOX = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + IFEATH = 0, 0, 0, 0, 0, 0, + FEATHF = 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, + CDFETH = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + DCWT = 1000.0, + RCIN = 300.0, + + WTBM = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + ALTBM = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + IVS = 1, + DECL = 0.8, + DEMMIN = 0.3, + DEMMAX = 0.0, + DEAMIN = 0.0, + DEAMAX = 0.0, + NINDE = 31, + DEDCD = 0.0, + RDLIM = -99999.0, + + NS = 0, + ADTAB = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + VDTAB = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + IRS = 1, + RESRFU = 0.0, + RESTRP = 0.05, + TIMMAP = 2.0, + ALTRAN = 200.0, + NCLRES = 1, + NCRRES = 2, + SREMCH = -1.0, + EREMCH = -1.0, + SREALT = -1.0, + EREALT = -1.0, + HOLDTM = 30.0, + NCRHOL = 3, + IHOPOS = 1, + ICRON = 0, + THOLD = 0.1, + NCRTH = 1, + + REARTH = 20890000., + IRADAC = 0, + / +START 0 0 0.100 0.000 0.00000 0.0 0.000000 0.0 +CLIMB 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +CRUISE 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +DESCENT0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.100 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 +END 0 0 0.000 0.000 0.00000 0.0 0.000000 0.0 diff --git a/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS_data.py b/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS_data.py new file mode 100644 index 0000000000..df0963aa39 --- /dev/null +++ b/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS_data.py @@ -0,0 +1,431 @@ +import numpy as np + +from aviary.utils.aviary_values import AviaryValues +from aviary.utils.functions import get_path +from aviary.variable_info.enums import AircraftTypes, EquationsOfMotion, LegacyCode +from aviary.variable_info.variables import Aircraft, Mission, Settings + +BWB300FLOPS = {} +inputs = BWB300FLOPS['inputs'] = AviaryValues() +outputs = BWB300FLOPS['outputs'] = AviaryValues() + +# Overall Aircraft +# --------------------------- +inputs.set_val(Aircraft.Design.BASE_AREA, 0.0, 'ft**2') # SBASE +inputs.set_val(Aircraft.Design.EMPTY_MASS_MARGIN_SCALER, 0.0) # EWMARG +inputs.set_val( + Aircraft.Design.GROSS_MASS, 600000.0, 'lbm' +) # DGW, value taken from GW which is not in Aviary +inputs.set_val(Aircraft.Design.USE_ALT_MASS, False) +inputs.set_val(Aircraft.Design.LIFT_DEPENDENT_DRAG_COEFF_FACTOR, 1.0) # FCDI +inputs.set_val(Aircraft.Design.SUBSONIC_DRAG_COEFF_FACTOR, 1.0) # FCDSUB +inputs.set_val(Aircraft.Design.SUPERSONIC_DRAG_COEFF_FACTOR, 1.0) # FCDSUP +inputs.set_val(Aircraft.Design.ZERO_LIFT_DRAG_COEFF_FACTOR, 1.0) # FCDO +inputs.set_val(Aircraft.Design.TYPE, AircraftTypes.BLENDED_WING_BODY) +inputs.set_val(Aircraft.Fuselage.SIMPLE_LAYOUT, False) +inputs.set_val(Aircraft.BWB.DETAILED_WING_PROVIDED, True) + +# Air Conditioning +# --------------------------- +inputs.set_val(Aircraft.AirConditioning.MASS_SCALER, 1.0) # WAC + +# Anti-Icing +# --------------------------- +inputs.set_val(Aircraft.AntiIcing.MASS_SCALER, 1.0) # WAI + +# APU +# --------------------------- +inputs.set_val(Aircraft.APU.MASS_SCALER, 1.0) # WAPU + +# Avionics +# --------------------------- +inputs.set_val(Aircraft.Avionics.MASS_SCALER, 1.0) # WAVONC + +# Canard +# --------------------------- +inputs.set_val(Aircraft.Canard.AREA, 0.0, 'ft**2') # SCAN +inputs.set_val(Aircraft.Canard.ASPECT_RATIO, 0.0) # ARCAN +inputs.set_val(Aircraft.Canard.THICKNESS_TO_CHORD, 0.0) # TCCAN +inputs.set_val(Aircraft.Canard.LAMINAR_FLOW_LOWER, 0.0) # TRLC +inputs.set_val(Aircraft.Canard.LAMINAR_FLOW_UPPER, 0.0) # TRUC +inputs.set_val(Aircraft.Canard.MASS_SCALER, 1.0) # FRCAN +inputs.set_val(Aircraft.Canard.TAPER_RATIO, 0.0) # TRCAN +inputs.set_val(Aircraft.Canard.WETTED_AREA_SCALER, 1.0) # SWETC + +# Crew and Payload +# --------------------------- +inputs.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 76) # NPB +inputs.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 24) # NPF +inputs.set_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 200) # NPT +inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 76) # NPB +inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 24) # NPF +inputs.set_val(Aircraft.CrewPayload.NUM_ECONOMY_CLASS, 200) # NPT +inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 0) # NBABR +inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 0) # NFABR +inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 0) # NTABR +inputs.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, 0.0, 'inch') # BPITCH +inputs.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 0.0, 'inch') # FPITCH +inputs.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 0.0, 'inch') # TPITCH + +inputs.set_val(Aircraft.CrewPayload.CARGO_CONTAINER_MASS_SCALER, 1.0) # WCON +inputs.set_val(Aircraft.CrewPayload.CARGO_CONTAINER_MASS, 23500.0, 'lbm') # WCON +inputs.set_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW, 2) # NFLCR +inputs.set_val(Aircraft.CrewPayload.FLIGHT_CREW_MASS_SCALER, 1.0) # WFLCRB +inputs.set_val(Aircraft.CrewPayload.NUM_GALLEY_CREW, 2) # NGALC +inputs.set_val(Aircraft.CrewPayload.MISC_CARGO, 0.0, 'lbm') # CARGOF +inputs.set_val(Aircraft.CrewPayload.CABIN_CREW_MASS_SCALER, 1.0) # WSTUAB +inputs.set_val(Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_SCALER, 1.0) # WSRV +inputs.set_val(Aircraft.CrewPayload.MASS_PER_PASSENGER, 165.0, 'lbm') # WPPASS +inputs.set_val(Aircraft.CrewPayload.WING_CARGO, 0.0, 'lbm') # CARGOW + +# Electrical +# --------------------------- +inputs.set_val(Aircraft.Electrical.MASS_SCALER, 1.0) # WELEC + +# Fins +# --------------------------- +inputs.set_val(Aircraft.Fins.AREA, 184.89, 'ft**2') # SFIN +inputs.set_val(Aircraft.Fins.NUM_FINS, 2) # NFIN +inputs.set_val(Aircraft.Fins.TAPER_RATIO, 0.464) # TRFIN +inputs.set_val(Aircraft.Fins.MASS_SCALER, 1.0) # FRFIN + +# Fuel +# --------------------------- +inputs.set_val(Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY, 0.0, 'lbm') # FULAUX +inputs.set_val(Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, 1.0) # WFSYS +inputs.set_val(Aircraft.Fuel.FUSELAGE_FUEL_CAPACITY, 0.0, 'lbm') # FULFMX +inputs.set_val(Aircraft.Fuel.NUM_TANKS, 7) # NTANK +inputs.set_val(Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER, 1.0) # WUF +inputs.set_val(Aircraft.Fuel.IGNORE_FUEL_CAPACITY_CONSTRAINT, False) # IFUFU +inputs.set_val(Aircraft.Fuel.WING_FUEL_FRACTION, 0.6883549569366508, 'unitless') +inputs.set_val(Aircraft.Fuel.WING_REF_CAPACITY, 0.0, 'lbm') # FUELRF +inputs.set_val(Aircraft.Fuel.WING_REF_CAPACITY_TERM_A, 0.0) # FUSCLA +inputs.set_val(Aircraft.Fuel.WING_REF_CAPACITY_TERM_B, 0.0) # FUSCLB + + +# Furnishings +# --------------------------- +inputs.set_val(Aircraft.Furnishings.MASS_SCALER, 1.118) # WFURN + +# Fuselage +# --------------------------- +inputs.set_val(Aircraft.Fuselage.NUM_FUSELAGES, 1) # NFUSE +inputs.set_val(Aircraft.Fuselage.MILITARY_CARGO_FLOOR, False) # CARGF +inputs.set_val(Aircraft.Fuselage.MASS_SCALER, 1.0) # FRFU +inputs.set_val(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, 60.0, 'deg') # SWPLE +inputs.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, 0.1792) # TCF +inputs.set_val(Aircraft.Fuselage.WETTED_AREA_SCALER, 1.0) # SWETF +inputs.set_val(Aircraft.Fuselage.LAMINAR_FLOW_LOWER, 0.0) # TRLB +inputs.set_val(Aircraft.Fuselage.LAMINAR_FLOW_UPPER, 0.0) # TRUB + +# Horizontal Tail +# --------------------------- +inputs.set_val(Aircraft.HorizontalTail.AREA, 700.0, 'ft**2') # SHT +inputs.set_val(Aircraft.HorizontalTail.ASPECT_RATIO, 1.0) # ARHT +inputs.set_val(Aircraft.HorizontalTail.TAPER_RATIO, 0.7140) # TRHT +inputs.set_val(Aircraft.HorizontalTail.THICKNESS_TO_CHORD, 0.1) # TCHT +inputs.set_val(Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, 0.0) # HHT +inputs.set_val(Aircraft.HorizontalTail.MASS_SCALER, 1.0) # FRHT +inputs.set_val(Aircraft.HorizontalTail.NUM_TAILS, 1) +inputs.set_val(Aircraft.HorizontalTail.WETTED_AREA_SCALER, 1.0) # SWETH +inputs.set_val(Aircraft.HorizontalTail.SWEEP, 0.0, 'deg') # SWPHT +inputs.set_val(Aircraft.HorizontalTail.LAMINAR_FLOW_LOWER, 0.0) # TRLH +inputs.set_val(Aircraft.HorizontalTail.LAMINAR_FLOW_UPPER, 0.0) # TRUH + +# Hydraulics +# --------------------------- +inputs.set_val(Aircraft.Hydraulics.SYSTEM_PRESSURE, 3000.0, 'psi') # HYDPR +inputs.set_val(Aircraft.Hydraulics.MASS_SCALER, 1.0) # WHYD + +# Instruments +# --------------------------- +inputs.set_val(Aircraft.Instruments.MASS_SCALER, 1.0) # WIN + +# Landing Gear +# --------------------------- +inputs.set_val(Aircraft.LandingGear.MAIN_GEAR_OLEO_LENGTH, 85.0, 'inch') # XMLG +inputs.set_val(Aircraft.LandingGear.MAIN_GEAR_MASS_SCALER, 1.0) # FRLGM +inputs.set_val(Aircraft.LandingGear.NOSE_GEAR_OLEO_LENGTH, 87.0, 'inch') # XNLG +inputs.set_val(Aircraft.LandingGear.NOSE_GEAR_MASS_SCALER, 1.0) # FRLGN + +# Nacelle +# --------------------------- +inputs.set_val(Aircraft.Nacelle.AVG_DIAMETER, 12.569, 'ft') # DNAC +inputs.set_val(Aircraft.Nacelle.AVG_LENGTH, 17.297, 'ft') # XNAC +inputs.set_val(Aircraft.Nacelle.MASS_SCALER, 0.0) # FRNA +inputs.set_val(Aircraft.Nacelle.WETTED_AREA_SCALER, 1.0) # SWETN +inputs.set_val(Aircraft.Nacelle.LAMINAR_FLOW_LOWER, 0.0) # TRLN +inputs.set_val(Aircraft.Nacelle.LAMINAR_FLOW_UPPER, 0.0) # TRUN + +# Paint +# --------------------------- +inputs.set_val(Aircraft.Paint.MASS_PER_UNIT_AREA, 0.0, 'lbm/ft**2') # WPAINT + +# Propulsion and Engine +# --------------------------- +inputs.set_val(Aircraft.Propulsion.ENGINE_OIL_MASS_SCALER, 1.0) # WOIL +inputs.set_val(Aircraft.Propulsion.MISC_MASS_SCALER, 0.0) # WPMSC + +filename = get_path('models/engines/PAX300_baseline_ENGDEK.csv') +inputs.set_val(Aircraft.Engine.DATA_FILE, filename) +inputs.set_val(Aircraft.Engine.REFERENCE_MASS, 22089.3, 'lbm') # WENG +inputs.set_val(Aircraft.Engine.SCALED_SLS_THRUST, 87500.0, 'lbf') # THRUST +inputs.set_val(Aircraft.Engine.REFERENCE_SLS_THRUST, 86786.4, 'lbf') # THRSO +inputs.set_val(Aircraft.Engine.NUM_FUSELAGE_ENGINES, 2) # NEF +inputs.set_val(Aircraft.Engine.NUM_WING_ENGINES, np.array([0])) # NEW +inputs.set_val(Aircraft.Engine.THRUST_REVERSERS_MASS_SCALER, 0.0) # WTHR +inputs.set_val(Aircraft.Engine.WING_LOCATIONS, np.array([0.2])) # ETAE +inputs.set_val(Aircraft.Engine.SCALE_FACTOR, 1.0082224864725349) # THRUST/THRSO +inputs.set_val(Aircraft.Engine.SCALE_MASS, True) +inputs.set_val(Aircraft.Engine.MASS_SCALER, 1.0) # EEXP +inputs.set_val(Aircraft.Engine.SCALE_PERFORMANCE, True) +inputs.set_val(Aircraft.Engine.SUBSONIC_FUEL_FLOW_SCALER, 1.0) # FFFSUB +inputs.set_val(Aircraft.Engine.SUPERSONIC_FUEL_FLOW_SCALER, 1.0) # FFFSUP +inputs.set_val(Aircraft.Engine.FUEL_FLOW_SCALER_CONSTANT_TERM, 0.0) # DFFAC +inputs.set_val(Aircraft.Engine.FUEL_FLOW_SCALER_LINEAR_TERM, 0.0) # FFFAC +inputs.set_val(Aircraft.Engine.CONSTANT_FUEL_CONSUMPTION, 0.0, units='lbm/h') # FLEAK +inputs.set_val(Aircraft.Engine.ADDITIONAL_MASS_FRACTION, 0.0) # WPMISC +inputs.set_val(Aircraft.Engine.GENERATE_FLIGHT_IDLE, True) # IDLE +inputs.set_val(Aircraft.Engine.IGNORE_NEGATIVE_THRUST, False) # NONEG +inputs.set_val(Aircraft.Engine.FLIGHT_IDLE_THRUST_FRACTION, 0.0) +inputs.set_val(Aircraft.Engine.FLIGHT_IDLE_MAX_FRACTION, 1.0) # FIDMAX +inputs.set_val(Aircraft.Engine.FLIGHT_IDLE_MIN_FRACTION, 0.08) # FIDMIN +inputs.set_val(Aircraft.Engine.GEOPOTENTIAL_ALT, False) # IGEO +inputs.set_val(Aircraft.Engine.INTERPOLATION_METHOD, 'slinear') + +# Vertical Tail +# --------------------------- +inputs.set_val(Aircraft.VerticalTail.NUM_TAILS, 0) # NVERT +inputs.set_val(Aircraft.VerticalTail.AREA, 0.0, 'ft**2') # SVT +inputs.set_val(Aircraft.VerticalTail.ASPECT_RATIO, 0.5) # ARVT +inputs.set_val(Aircraft.VerticalTail.TAPER_RATIO, 0.714) # TRVT +inputs.set_val(Aircraft.VerticalTail.THICKNESS_TO_CHORD, 0.11) # TCVT +inputs.set_val(Aircraft.VerticalTail.MASS_SCALER, 1.0) # FRVT +inputs.set_val(Aircraft.VerticalTail.WETTED_AREA_SCALER, 1.0) # SWETV +inputs.set_val(Aircraft.VerticalTail.WETTED_AREA, 125.0, 'ft**2') # SWETV +inputs.set_val(Aircraft.VerticalTail.SWEEP, 0.0, 'deg') # SWPVT +inputs.set_val(Aircraft.VerticalTail.LAMINAR_FLOW_LOWER, 0.0) # TRLV +inputs.set_val(Aircraft.VerticalTail.LAMINAR_FLOW_UPPER, 0.0) # TRUV + +# Wing +# --------------------------- +inputs.set_val(Aircraft.Wing.AEROELASTIC_TAILORING_FACTOR, 0.0) # FAERT +inputs.set_val(Aircraft.Wing.AIRFOIL_TECHNOLOGY, 2.0) # AITEK +inputs.set_val(Aircraft.Wing.BENDING_MATERIAL_MASS_SCALER, 1.0) # FRWI1 +inputs.set_val(Aircraft.Wing.SPAN, 186.631829293424, 'ft') # SPAN +inputs.set_val(Aircraft.Wing.LOAD_FRACTION, 1.0) # PCTL + +inputs.set_val( + Aircraft.Wing.CHORD_PER_SEMISPAN_DISTRIBUTION, + np.array([-1.0, 48.25, 33.20, 18.97, 14.19, 10.20, 3.220]), +) # CHD +inputs.set_val(Aircraft.Wing.COMPOSITE_FRACTION, 0.85) # FCOMP +inputs.set_val(Aircraft.Wing.CONTROL_SURFACE_AREA_RATIO, 0.3) # FLAPR +inputs.set_val(Aircraft.Wing.DETAILED_WING, True) +inputs.set_val( + Aircraft.Wing.GLOVE_AND_BAT, 1230.5, 'ft**2' +) # GLOV, it was 0.0 as input and computed + +inputs.set_val( + Aircraft.Wing.INPUT_STATION_DISTRIBUTION, + np.array([0.0, 0.0, 0.2075, 0.415, 0.6927, 0.928, 1.0]), # ETAW +) + +inputs.set_val(Aircraft.Wing.LOAD_DISTRIBUTION_CONTROL, 2.0) # PDIST + +inputs.set_val( + Aircraft.Wing.LOAD_PATH_SWEEP_DISTRIBUTION, + np.array([0.0, 0.0, 0.0, 17.0, 17.0, 17.0]), + 'deg', # SWL +) +inputs.set_val(Aircraft.Wing.MAX_CAMBER_AT_70_SEMISPAN, 2.0) # CAM +inputs.set_val(Aircraft.Wing.MISC_MASS_SCALER, 1.0) # FRWI3 +inputs.set_val(Aircraft.Wing.NUM_INTEGRATION_STATIONS, 50) # NSTD +inputs.set_val(Aircraft.Wing.SHEAR_CONTROL_MASS_SCALER, 1.0) # FRWI2 +inputs.set_val(Aircraft.Wing.OUTBOARD_SEMISPAN, 68.43, 'ft') # OSSPAN +inputs.set_val(Aircraft.Wing.SPAN_EFFICIENCY_REDUCTION, False) # MIKE +inputs.set_val(Aircraft.Wing.STRUT_BRACING_FACTOR, 0.0) # FSTRT +inputs.set_val(Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, 1.0) # FRSC +inputs.set_val(Aircraft.Wing.SWEEP, 35.7, 'deg') # SWEEP +inputs.set_val(Aircraft.Wing.TAPER_RATIO, 0.311) # TR +inputs.set_val(Aircraft.Wing.THICKNESS_TO_CHORD, 0.11) # TCA +inputs.set_val(Aircraft.Wing.THICKNESS_TO_CHORD_REFERENCE, 0.0) # TCREF + +inputs.set_val( + Aircraft.Wing.THICKNESS_TO_CHORD_DISTRIBUTION, + np.array([-1.0, 0.125, 0.125, 0.076, 0.076, 0.076, 0.06]), # TOC +) +inputs.set_val(Aircraft.Wing.ULTIMATE_LOAD_FACTOR, 3.75) # ULF +inputs.set_val(Aircraft.Wing.VAR_SWEEP_MASS_PENALTY, 0.0) # VARSWP +inputs.set_val(Aircraft.Wing.MASS_SCALER, 1.0) # FRWI +inputs.set_val( + Aircraft.Wing.WETTED_AREA_SCALER, 0.61 +) # SWETW was 1.0, changed to match the AERO from old version of FLOPS +inputs.set_val(Aircraft.Wing.DIHEDRAL, 3.0, 'deg') # DIH +inputs.set_val(Aircraft.Wing.SPAN_EFFICIENCY_FACTOR, 1.0) # E +inputs.set_val(Aircraft.Wing.LAMINAR_FLOW_LOWER, 0.0) # TRLW +inputs.set_val(Aircraft.Wing.LAMINAR_FLOW_UPPER, 0.0) # TRUW +inputs.set_val(Aircraft.Wing.ASPECT_RATIO_REFERENCE, 0.0) # ARREF + +# Mission +# --------------------------- +inputs.set_val(Mission.Summary.CRUISE_MACH, 0.85) # VCMN +inputs.set_val(Mission.Summary.FUEL_FLOW_SCALER, 1.0) # FACT +inputs.set_val(Aircraft.Design.RANGE, 7500.0, 'NM') # DESRNG +inputs.set_val(Mission.Constraints.MAX_MACH, 0.9) # VMMO + +inputs.set_val(Mission.Landing.LIFT_COEFFICIENT_MAX, 3.0) # CLLDM +inputs.set_val(Mission.Takeoff.LIFT_COEFFICIENT_MAX, 1.3) # CLTOM +inputs.set_val(Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 0.7) # WRATIO +inputs.set_val(Mission.Landing.INITIAL_VELOCITY, 150.0, 'ft/s') # VAPPR +inputs.set_val(Mission.Takeoff.ROLLING_FRICTION_COEFFICIENT, 0.025) # ROLLMU +inputs.set_val(Aircraft.Design.THRUST_TAKEOFF_PER_ENG, 0.0, 'lbf') # THROFF +inputs.set_val(Mission.Takeoff.ANGLE_OF_ATTACK_RUNWAY, 4.0, 'deg') # ALPRUN +inputs.set_val(Mission.Takeoff.THRUST_INCIDENCE, 4.0, 'deg') # TINC +inputs.set_val(Mission.Takeoff.BRAKING_FRICTION_COEFFICIENT, 0.35) # BRAKMU +inputs.set_val(Aircraft.LandingGear.DRAG_COEFFICIENT, 0.005) # CDGEAR +inputs.set_val(Mission.Takeoff.SPOILER_LIFT_COEFFICIENT, 0.0) # CLSPOL +inputs.set_val(Mission.Takeoff.SPOILER_DRAG_COEFFICIENT, 0.0) # CDSPOL +inputs.set_val(Mission.Takeoff.DRAG_COEFFICIENT_MIN, 0.035258) # CDMTO +inputs.set_val(Mission.Takeoff.FINAL_ALTITUDE, 35.0, 'ft') # OBSTO +inputs.set_val(Mission.Landing.DRAG_COEFFICIENT_MIN, 0.0) # CDMLD +inputs.set_val(Mission.Landing.FLARE_RATE, 3.0, 'deg/s') # VANGLD + +# Settings +# --------------------------- +inputs.set_val(Settings.EQUATIONS_OF_MOTION, EquationsOfMotion.HEIGHT_ENERGY) +inputs.set_val(Settings.MASS_METHOD, LegacyCode.FLOPS) +inputs.set_val(Settings.AERODYNAMICS_METHOD, LegacyCode.FLOPS) + +# --------------------------- +# OUTPUTS +# --------------------------- + +outputs.set_val(Aircraft.Design.EMPTY_MASS, 286969.99768419, 'lbm') +outputs.set_val(Aircraft.Design.EMPTY_MASS_MARGIN, 0.0, 'lbm') # WMARG +outputs.set_val(Aircraft.Design.STRUCTURE_MASS, 162969.90469722, 'lbm') # WSTRCT 158921.83401643133 +outputs.set_val(Aircraft.Design.SYSTEMS_AND_EQUIPMENT_MASS, 75801.466406974854, 'lbm') # WSYS +outputs.set_val(Aircraft.Design.TOTAL_WETTED_AREA, 19637.79833526, 'ft**2') # TWET +outputs.set_val(Aircraft.Design.TOUCHDOWN_MASS, 420000.0, 'lbm') # WLDG = GW*WRATIO + +outputs.set_val(Aircraft.AirConditioning.MASS, 3781.61256774, 'lbm') # WAC +outputs.set_val(Aircraft.AntiIcing.MASS, 400.3921819029477, 'lbm') # WAI +outputs.set_val(Aircraft.APU.MASS, 1578.8098560285962, 'lbm') # WAPU +outputs.set_val(Aircraft.Avionics.MASS, 2280.13561342, 'lbm') # WAVONC + +outputs.set_val(Aircraft.BWB.NUM_BAYS, 4.0, 'unitless') # NBAY +outputs.set_val(Aircraft.Canard.CHARACTERISTIC_LENGTH, 0.0, 'ft') # EL[-1] +outputs.set_val(Aircraft.Canard.FINENESS, 0.0) # FR[-1] +outputs.set_val(Aircraft.Canard.WETTED_AREA, 0.0, 'ft**2') # SWTCN +outputs.set_val(Aircraft.Canard.MASS, 0.0, 'lbm') # WCAN + +outputs.set_val(Aircraft.CrewPayload.BAGGAGE_MASS, 13200.0, 'lbm') # WPBAG +outputs.set_val(Aircraft.CrewPayload.CARGO_MASS, 0.0, 'lbm') # WCARGO +outputs.set_val(Aircraft.CrewPayload.FLIGHT_CREW_MASS, 450.0, 'lbm') # WFLCRB +outputs.set_val(Aircraft.CrewPayload.CABIN_CREW_MASS, 1640.0, 'lbm') # WSTUAB +outputs.set_val(Aircraft.CrewPayload.PASSENGER_SERVICE_MASS, 7029.593528180887, 'lbm') # WSRV +outputs.set_val(Aircraft.CrewPayload.PASSENGER_MASS_TOTAL, 49500.0, 'lbm') # WPASS +outputs.set_val(Aircraft.CrewPayload.TOTAL_PAYLOAD_MASS, 62700.0, 'lbm') # WPASS+WPBAG+WCARGO +outputs.set_val(Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS, 62700.0, 'lbm') # WPASS+WPBAG + +outputs.set_val(Aircraft.Electrical.MASS, 2646.5272348061812, 'lbm') # WELEC + +outputs.set_val(Aircraft.Fuel.TOTAL_CAPACITY, 787493.65267017565, 'lbm') # FMXTOT +outputs.set_val(Aircraft.Fuel.FUEL_SYSTEM_MASS, 3656.7260445688612, 'lbm') # WFSYS +outputs.set_val(Aircraft.Fuel.UNUSABLE_FUEL_MASS, 1732.78186198, 'lbm') # WUF +outputs.set_val(Aircraft.Fuel.WING_FUEL_CAPACITY, 787493.65267018, 'lbm') # FULWMX + +outputs.set_val(Aircraft.Fins.MASS, 2822.1415450307886, 'lbm') # WFIN +outputs.set_val(Aircraft.Furnishings.MASS, 52096.553437128503, 'lbm') # WFURN + +outputs.set_val(Aircraft.Fuselage.CABIN_AREA, 2988.87966179, 'ft**2') # ACABIN +ref_diameter = 35.331132876385297 +outputs.set_val(Aircraft.Fuselage.REF_DIAMETER, ref_diameter, 'ft') # XD +outputs.set_val(Aircraft.Fuselage.CHARACTERISTIC_LENGTH, 116.5760963133181, 'ft') # EL(4) +outputs.set_val(Aircraft.Fuselage.CROSS_SECTION, np.pi * (ref_diameter / 2.0) ** 2.0, 'ft**2') +outputs.set_val(Aircraft.Fuselage.DIAMETER_TO_WING_SPAN, 0.18930926) # DB +outputs.set_val(Aircraft.Fuselage.FINENESS, 3.2995289656062941) # FR(4) +outputs.set_val(Aircraft.Fuselage.LENGTH_TO_DIAMETER, 3.29952897) # BODYLD +outputs.set_val(Aircraft.Fuselage.MASS, 80216.313556241628, 'lbm') # WFUSE +outputs.set_val(Aircraft.Fuselage.MAX_HEIGHT, 20.89043646, 'ft') # DF +outputs.set_val(Aircraft.Fuselage.PLANFORM_AREA, 4269.82808827, 'ft**2') # FPAREA +outputs.set_val(Aircraft.Fuselage.AFTBODY_MASS, 10384.964957095559, 'lbm') # WAFTB +outputs.set_val(Aircraft.Fuselage.LENGTH, 116.57609631, 'ft') # XL +outputs.set_val(Aircraft.Fuselage.MAX_WIDTH, 49.77182929, 'ft') # WF +outputs.set_val(Aircraft.Fuselage.PASSENGER_COMPARTMENT_LENGTH, 81.60326742, 'ft') # XLP + +outputs.set_val(Aircraft.HorizontalTail.CHARACTERISTIC_LENGTH, 26.45751311065, 'ft') # EL(2) +outputs.set_val(Aircraft.HorizontalTail.FINENESS, 0.1) # FR(2) +outputs.set_val(Aircraft.HorizontalTail.MASS, 6444.9988831532046, 'lbm') # WHT +outputs.set_val(Aircraft.HorizontalTail.WETTED_AREA, 983.26501, 'ft**2') # SWTHT + +outputs.set_val(Aircraft.Design.EMPENNAGE_MASS, 3159.3781042368792, 'lbm') + +outputs.set_val(Aircraft.Hydraulics.MASS, 3962.6923427813854, 'lbm') # WHYD + +outputs.set_val(Aircraft.Instruments.MASS, 961.54346235801643, 'lbm') # WIN + +outputs.set_val(Aircraft.LandingGear.MAIN_GEAR_MASS, 28200.322805698346, 'lbm') # WLGM +outputs.set_val(Aircraft.LandingGear.NOSE_GEAR_MASS, 2698.6740002098945, 'lbm') # WLGN +outputs.set_val(Aircraft.LandingGear.TOTAL_MASS, 30898.996805908242, 'lbm') + +outputs.set_val(Aircraft.Nacelle.CHARACTERISTIC_LENGTH, np.array([17.367966592445]), 'ft') # EL(5) +outputs.set_val(Aircraft.Nacelle.FINENESS, np.array([1.3761635770546583])) # FR(5) +outputs.set_val(Aircraft.Nacelle.MASS, 0.0, 'lbm') # WNAC +nacelle_wetted_area = np.array([613.74211034217353]) # SWET(5) +outputs.set_val(Aircraft.Nacelle.WETTED_AREA, nacelle_wetted_area, 'ft**2') +outputs.set_val(Aircraft.Nacelle.TOTAL_WETTED_AREA, 2 * nacelle_wetted_area, 'ft**2') + +outputs.set_val(Aircraft.Paint.MASS, 0.0, 'lbm') # WPAINT, WTPNT + +outputs.set_val(Aircraft.Propulsion.MASS, 48198.583985444384, 'lbm') # WPRO +outputs.set_val(Aircraft.Propulsion.TOTAL_SCALED_SLS_THRUST, 70000.0 * 3, 'lbf') +outputs.set_val(Aircraft.Propulsion.TOTAL_NUM_ENGINES, 3) +outputs.set_val(Aircraft.Propulsion.TOTAL_ENGINE_OIL_MASS, 267.39241429019251, 'lbm') # WOIL +outputs.set_val(Aircraft.Propulsion.TOTAL_NUM_WING_ENGINES, 0) +outputs.set_val(Aircraft.Propulsion.TOTAL_NUM_FUSELAGE_ENGINES, 2) + +outputs.set_val(Aircraft.Engine.MASS, 44541.857940875525 / 2, 'lbm') # WSP(10, 2) +# In FLOPS BWB, WPOD = 18782.055842810063 because WSTART is scaled by +# WPMSC (Aircraft.Propulsion.MISC_MASS_SCALER) but not in Aviary. +# In Aviary, starter mass and engine controls are scaled later in EngineMiscMass() +# but it does not help for engine POD mass. +# In FLOPS, WSTART = 0.0 for the same reason (WPMSC = 0.0). +outputs.set_val(Aircraft.Engine.POD_MASS, 19307.96319637, 'lbm') # WPOD +# In FLOPS BWB, WEC = 0.0 because WEC is scaled by WPMSC (Aircraft.Propulsion.MISC_MASS_SCALER) +engine_ctrls_mass = 153.81807436 # WEC +outputs.set_val(Aircraft.Engine.ADDITIONAL_MASS, 0.0, 'lbm') # WPMISC +outputs.set_val(Aircraft.Engine.THRUST_REVERSERS_MASS, 0.0, 'lbm') # WTHR +outputs.set_val(Aircraft.Propulsion.TOTAL_STARTER_MASS, 1526.1294678475103, 'lbm') # WSTART +outputs.set_val(Aircraft.Propulsion.TOTAL_ENGINE_CONTROLS_MASS, engine_ctrls_mass, 'lbm') +outputs.set_val(Aircraft.Propulsion.TOTAL_MISC_MASS, 0.0, 'lbm') +outputs.set_val(Aircraft.Propulsion.TOTAL_THRUST_REVERSERS_MASS, 0.0, 'lbm') # sum of zeros +outputs.set_val(Aircraft.Propulsion.TOTAL_ENGINE_MASS, 44541.857940875525, 'lbm') # WENG + +outputs.set_val(Aircraft.VerticalTail.CHARACTERISTIC_LENGTH, 0.0, 'ft') # EL(3) +outputs.set_val(Aircraft.VerticalTail.FINENESS, 0.11) # FR(3) +outputs.set_val(Aircraft.VerticalTail.MASS, 0.0, 'lbm') # WVT +outputs.set_val(Aircraft.VerticalTail.WETTED_AREA, 125.0, 'ft**2') + +outputs.set_val(Aircraft.Wing.BWB_AFTBODY_MASS, 8884.3375208, 'lbm') # W4 +outputs.set_val(Aircraft.Wing.BENDING_MATERIAL_FACTOR, 5.20084141) # FLOPS BT = 6.7996347825592336 +outputs.set_val(Aircraft.Wing.BENDING_MATERIAL_MASS, 13872.4182868, 'lbm') # W1 +outputs.set_val(Aircraft.Wing.CHARACTERISTIC_LENGTH, 45.124750222881779, 'ft') # EL(1) +outputs.set_val(Aircraft.Wing.CONTROL_SURFACE_AREA, 2526.5144041515805, 'ft**2') # SFLAP +outputs.set_val(Aircraft.Wing.ENG_POD_INERTIA_FACTOR, 1.0) # CAYE +outputs.set_val(Aircraft.Wing.FINENESS, 0.11) # FR(1) +outputs.set_val(Aircraft.Wing.MISC_MASS, 6975.77622754, 'lbm') # W3 +outputs.set_val(Aircraft.Wing.SHEAR_CONTROL_MASS, 24461.161868706797, 'lbm') # W2 +outputs.set_val(Aircraft.Wing.SURFACE_CONTROL_MASS, 8093.1997108029764, 'lbm') # WSC +outputs.set_val(Aircraft.Wing.ASPECT_RATIO, 4.84361005) # AR +outputs.set_val(Aircraft.Wing.MASS, 68922.20579045, 'lbm') # WWING 68995.460470895763 +outputs.set_val(Aircraft.Wing.ROOT_CHORD, 38.5, 'ft') # XLW +outputs.set_val(Aircraft.Wing.AREA, 8421.7146805052689, 'ft**2') # SW +outputs.set_val(Aircraft.Wing.WETTED_AREA, 17302.04910213, 'ft**2') # SWET(1) + +outputs.set_val(Mission.Summary.USEFUL_LOAD, 20996.3933862, 'lbm') + +# outputs.set_val(Aircraft.Design.MACH, 0.800) # FMDES +outputs.set_val(Mission.Summary.OPERATING_MASS, 321171.82272983, 'lbm') # DOWE +outputs.set_val(Mission.Summary.ZERO_FUEL_MASS, 383871.82272983, 'lbm') # WZF +outputs.set_val(Mission.Summary.FUEL_MASS, 216128.17727028, 'lbm') # FUELM diff --git a/aviary/models/aircraft/blended_wing_body/bwb_detailed_FLOPS.csv b/aviary/models/aircraft/blended_wing_body/bwb_detailed_FLOPS.csv index 1599fb449b..3d305701c2 100644 --- a/aviary/models/aircraft/blended_wing_body/bwb_detailed_FLOPS.csv +++ b/aviary/models/aircraft/blended_wing_body/bwb_detailed_FLOPS.csv @@ -91,7 +91,7 @@ aircraft:fuel:fuselage_fuel_capacity,0.0,lbm aircraft:fuel:wing_fuel_fraction,0.68835495693,unitless aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless aircraft:furnishings:mass_scaler,1.0,unitless -aircraft:fuselage:height_to_width_ratio,0.11,unitless +aircraft:fuselage:sidebody_thickness_to_chord,0.11,unitless aircraft:fuselage:mass_scaler,1.0,unitless aircraft:fuselage:military_cargo_floor,False,unitless aircraft:fuselage:num_fuselages,1,unitless diff --git a/aviary/models/aircraft/blended_wing_body/bwb_detailed_FLOPS_data.py b/aviary/models/aircraft/blended_wing_body/bwb_detailed_FLOPS_data.py index b2ee5433c6..d0deacd2ca 100644 --- a/aviary/models/aircraft/blended_wing_body/bwb_detailed_FLOPS_data.py +++ b/aviary/models/aircraft/blended_wing_body/bwb_detailed_FLOPS_data.py @@ -49,11 +49,9 @@ # --------------------------- inputs.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 100) # NPB inputs.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 28) # NPF -# inputs.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, 468, units='unitless') # NPB+NPF+NPT inputs.set_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 340) # NPT inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 100) # NPB inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 28) # NPF -# inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 468, units='unitless') # sum of three classes inputs.set_val(Aircraft.CrewPayload.NUM_ECONOMY_CLASS, 340) # NPT inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 4) # NBABR inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 4) # NFABR @@ -106,7 +104,7 @@ inputs.set_val(Aircraft.Fuselage.MILITARY_CARGO_FLOOR, False) # CARGF inputs.set_val(Aircraft.Fuselage.MASS_SCALER, 1.0) # FRFU inputs.set_val(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, 45.0, 'deg') # SWPLE -inputs.set_val(Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO, 0.11) # TCF +inputs.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, 0.11) # TCSOB # inputs.set_val(Aircraft.Fuselage.WETTED_AREA, 0.0, 'ft**2') # see BWBFuselage_SWet() inputs.set_val(Aircraft.Fuselage.WETTED_AREA_SCALER, 1.0) # SWETF @@ -116,11 +114,9 @@ inputs.set_val(Aircraft.HorizontalTail.ASPECT_RATIO, 0.1) # ARHT inputs.set_val(Aircraft.HorizontalTail.TAPER_RATIO, 0.0) # TRHT inputs.set_val(Aircraft.HorizontalTail.THICKNESS_TO_CHORD, 0.11) # TCHT -# inputs.set_val(Aircraft.HorizontalTail.VERTICAL_TAIL_MOUNT_LOCATION, 0.0) # HHT inputs.set_val(Aircraft.HorizontalTail.MASS_SCALER, 1.0) # FRHT inputs.set_val(Aircraft.HorizontalTail.NUM_TAILS, 0) inputs.set_val(Aircraft.HorizontalTail.WETTED_AREA_SCALER, 1.0) # SWETH -# inputs.set_val(Aircraft.HorizontalTail.SWEEP, 0.0) # SWPHT # Hydraulics # --------------------------- @@ -159,7 +155,6 @@ inputs.set_val(Aircraft.Engine.REFERENCE_MASS, 22017, 'lbm') # WENG inputs.set_val(Aircraft.Engine.SCALED_SLS_THRUST, 70000.0, 'lbf') # THRUST inputs.set_val(Aircraft.Engine.REFERENCE_SLS_THRUST, 86459.2, 'lbf') # THRSO -# inputs.set_val(Aircraft.Engine.NUM_ENGINES, np.array([3])) # NEW+NEF inputs.set_val(Aircraft.Engine.NUM_FUSELAGE_ENGINES, 3) # NEF inputs.set_val(Aircraft.Engine.NUM_WING_ENGINES, np.array([0])) # NEW inputs.set_val(Aircraft.Engine.THRUST_REVERSERS_MASS_SCALER, 0.0) # WTHR @@ -241,7 +236,6 @@ inputs.set_val(Aircraft.Wing.MISC_MASS_SCALER, 1.0) # FRWI3 inputs.set_val(Aircraft.Wing.NUM_INTEGRATION_STATIONS, 50) # NSTD inputs.set_val(Aircraft.Wing.SHEAR_CONTROL_MASS_SCALER, 1.0) # FRWI2 -inputs.set_val(Aircraft.Wing.CONTROL_SURFACE_AREA_RATIO, 0.333) # FLAPR inputs.set_val(Aircraft.Wing.OUTBOARD_SEMISPAN, 86.75, 'ft') # OSSPAN inputs.set_val(Aircraft.Wing.SPAN_EFFICIENCY_REDUCTION, False) # MIKE inputs.set_val(Aircraft.Wing.STRUT_BRACING_FACTOR, 0.0) # FSTRT @@ -290,7 +284,6 @@ inputs.set_val(Mission.Landing.LIFT_COEFFICIENT_MAX, 3.0) # CLLDM inputs.set_val(Mission.Takeoff.LIFT_COEFFICIENT_MAX, 2) # CLTOM -# inputs.set_val(Mission.Takeoff.LIFT_OVER_DRAG, 17.354) inputs.set_val(Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 0.8) # WRATIO inputs.set_val(Mission.Landing.INITIAL_VELOCITY, 140.0, 'ft/s') # VAPPR inputs.set_val(Mission.Takeoff.ROLLING_FRICTION_COEFFICIENT, 0.025) # ROLLMU diff --git a/aviary/models/aircraft/blended_wing_body/bwb_simple_FLOPS.csv b/aviary/models/aircraft/blended_wing_body/bwb_simple_FLOPS.csv index 52357c1ab3..6c6f2bd66a 100644 --- a/aviary/models/aircraft/blended_wing_body/bwb_simple_FLOPS.csv +++ b/aviary/models/aircraft/blended_wing_body/bwb_simple_FLOPS.csv @@ -91,7 +91,7 @@ aircraft:fuel:fuselage_fuel_capacity,0.0,lbm aircraft:fuel:wing_fuel_fraction,0.68835495693,unitless aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless aircraft:furnishings:mass_scaler,1.0,unitless -aircraft:fuselage:height_to_width_ratio,0.11,unitless +aircraft:fuselage:sidebody_thickness_to_chord,0.11,unitless aircraft:fuselage:length,137.5,ft aircraft:fuselage:mass_scaler,1.0,unitless aircraft:fuselage:max_width,64.58,ft diff --git a/aviary/models/aircraft/blended_wing_body/bwb_simple_FLOPS_data.py b/aviary/models/aircraft/blended_wing_body/bwb_simple_FLOPS_data.py index b1a4875359..4e168ff82e 100644 --- a/aviary/models/aircraft/blended_wing_body/bwb_simple_FLOPS_data.py +++ b/aviary/models/aircraft/blended_wing_body/bwb_simple_FLOPS_data.py @@ -49,11 +49,9 @@ # --------------------------- inputs.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 100) # NPB inputs.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 28) # NPF -# inputs.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, 468, units='unitless') # NPB+NPF+NPT inputs.set_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 340) # NPT inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 100) # NPB inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 28) # NPF -# inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 468, units='unitless') # sum of three classes inputs.set_val(Aircraft.CrewPayload.NUM_ECONOMY_CLASS, 340) # NPT inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 4) # NBABR inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 4) # NFABR @@ -108,7 +106,7 @@ inputs.set_val(Aircraft.Fuselage.MASS_SCALER, 1.0) # FRFU inputs.set_val(Aircraft.Fuselage.MAX_WIDTH, 64.58, 'ft') # WF inputs.set_val(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, 45.0, 'deg') # SWPLE -inputs.set_val(Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO, 0.11) # TCF +inputs.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, 0.11) # TCF # inputs.set_val(Aircraft.Fuselage.WETTED_AREA, 0.0, 'ft**2') # see BWBFuselage_SWet() inputs.set_val(Aircraft.Fuselage.WETTED_AREA_SCALER, 1.0) # SWETF @@ -118,7 +116,6 @@ inputs.set_val(Aircraft.HorizontalTail.ASPECT_RATIO, 0.1) # ARHT inputs.set_val(Aircraft.HorizontalTail.TAPER_RATIO, 0.0) # TRHT inputs.set_val(Aircraft.HorizontalTail.THICKNESS_TO_CHORD, 0.11) # TCHT -# inputs.set_val(Aircraft.HorizontalTail.VERTICAL_TAIL_MOUNT_LOCATION, 0.0) # HHT inputs.set_val(Aircraft.HorizontalTail.MASS_SCALER, 1.0) # FRHT inputs.set_val(Aircraft.HorizontalTail.NUM_TAILS, 0) inputs.set_val(Aircraft.HorizontalTail.WETTED_AREA_SCALER, 1.0) # SWETH @@ -161,7 +158,6 @@ inputs.set_val(Aircraft.Engine.REFERENCE_MASS, 22017, 'lbm') # WENG inputs.set_val(Aircraft.Engine.SCALED_SLS_THRUST, 70000.0, 'lbf') # THRUST inputs.set_val(Aircraft.Engine.REFERENCE_SLS_THRUST, 86459.2, 'lbf') # THRSO -# inputs.set_val(Aircraft.Engine.NUM_ENGINES, np.array([3])) # NEW+NEF inputs.set_val(Aircraft.Engine.NUM_FUSELAGE_ENGINES, 3) # NEF inputs.set_val(Aircraft.Engine.NUM_WING_ENGINES, np.array([0])) # NEW inputs.set_val(Aircraft.Engine.THRUST_REVERSERS_MASS_SCALER, 0.0) # WTHR @@ -210,7 +206,6 @@ inputs.set_val(Aircraft.Wing.MISC_MASS_SCALER, 1.0) # FRWI3 inputs.set_val(Aircraft.Wing.NUM_INTEGRATION_STATIONS, 50) # NSTD inputs.set_val(Aircraft.Wing.SHEAR_CONTROL_MASS_SCALER, 1.0) # FRWI2 -inputs.set_val(Aircraft.Wing.CONTROL_SURFACE_AREA_RATIO, 0.333) # FLAPR inputs.set_val(Aircraft.Wing.OUTBOARD_SEMISPAN, 86.75, 'ft') # OSSPAN inputs.set_val(Aircraft.Wing.SPAN_EFFICIENCY_REDUCTION, False) # MIKE inputs.set_val(Aircraft.Wing.STRUT_BRACING_FACTOR, 0.0) # FSTRT diff --git a/aviary/subsystems/aerodynamics/aerodynamics_builder.py b/aviary/subsystems/aerodynamics/aerodynamics_builder.py index 7177dcdcb5..ec1c568d50 100644 --- a/aviary/subsystems/aerodynamics/aerodynamics_builder.py +++ b/aviary/subsystems/aerodynamics/aerodynamics_builder.py @@ -477,14 +477,58 @@ def get_parameters(self, aviary_inputs=None, user_options=None, subsystem_option params[Aircraft.Design.LIFT_DEPENDENT_DRAG_POLAR] = opts if method == 'computed': + try: + verbosity = aviary_inputs.get_val(Settings.VERBOSITY) + except KeyError: + verbosity = Verbosity.QUIET try: design_type = aviary_inputs.get_val(Aircraft.Design.TYPE) except KeyError: design_type = AircraftTypes.TRANSPORT + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'No input value found for Aircraft.Design.TYPE. ' + 'Assuming the aircraft is of type: AircraftTypes.TRANSPORT.' + ) + + try: + num_horizontal_tails = aviary_inputs.get_val(Aircraft.HorizontalTail.NUM_TAILS) + except KeyError: + num_horizontal_tails = 1 + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'No input value found for Aircraft.HorizontalTail.NUM_TAILS. ' + 'Assuming there is 1 horizontal tail.' + ) + try: + num_vertical_tails = aviary_inputs.get_val(Aircraft.VerticalTail.NUM_TAILS) + except KeyError: + num_vertical_tails = 1 + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'No inpuit value found for Aircraft.VerticalTail.NUM_TAILS. ' + 'Assuming there is 1 vertical tail.' + ) + if design_type is AircraftTypes.BLENDED_WING_BODY: - core_inputs_computed = COMPUTED_CORE_INPUTS_BWB + if num_horizontal_tails == 0 and num_vertical_tails == 0: + core_inputs_computed = COMPUTED_CORE_INPUTS_BWB + elif num_horizontal_tails == 0: + core_inputs_computed = COMPUTED_CORE_INPUTS_BWB + VERTICAL_TAIL_INPUTS + else: + core_inputs_computed = ( + COMPUTED_CORE_INPUTS_BWB + HORIZONTAL_TAIL_INPUTS + VERTICAL_TAIL_INPUTS + ) else: - core_inputs_computed = COMPUTED_CORE_INPUTS + if num_horizontal_tails == 0 and num_vertical_tails == 0: + core_inputs_computed = COMPUTED_CORE_INPUTS + elif num_horizontal_tails == 0: + core_inputs_computed = COMPUTED_CORE_INPUTS + VERTICAL_TAIL_INPUTS + else: + core_inputs_computed = ( + COMPUTED_CORE_INPUTS + HORIZONTAL_TAIL_INPUTS + VERTICAL_TAIL_INPUTS + ) + for var in core_inputs_computed: meta = _MetaData[var] @@ -696,16 +740,16 @@ def report(self, prob, reports_folder, **kwargs): Aircraft.Fuselage.LAMINAR_FLOW_UPPER, Aircraft.Fuselage.LENGTH_TO_DIAMETER, Aircraft.Fuselage.WETTED_AREA, - Aircraft.HorizontalTail.CHARACTERISTIC_LENGTH, - Aircraft.HorizontalTail.FINENESS, - Aircraft.HorizontalTail.LAMINAR_FLOW_LOWER, - Aircraft.HorizontalTail.LAMINAR_FLOW_UPPER, - Aircraft.HorizontalTail.WETTED_AREA, - Aircraft.VerticalTail.CHARACTERISTIC_LENGTH, - Aircraft.VerticalTail.FINENESS, - Aircraft.VerticalTail.LAMINAR_FLOW_LOWER, - Aircraft.VerticalTail.LAMINAR_FLOW_UPPER, - Aircraft.VerticalTail.WETTED_AREA, + # Aircraft.HorizontalTail.CHARACTERISTIC_LENGTH, + # Aircraft.HorizontalTail.FINENESS, + # Aircraft.HorizontalTail.LAMINAR_FLOW_LOWER, + # Aircraft.HorizontalTail.LAMINAR_FLOW_UPPER, + # Aircraft.HorizontalTail.WETTED_AREA, + # Aircraft.VerticalTail.CHARACTERISTIC_LENGTH, + # Aircraft.VerticalTail.FINENESS, + # Aircraft.VerticalTail.LAMINAR_FLOW_LOWER, + # Aircraft.VerticalTail.LAMINAR_FLOW_UPPER, + # Aircraft.VerticalTail.WETTED_AREA, Aircraft.Wing.AREA, Aircraft.Wing.ASPECT_RATIO, Aircraft.Wing.CHARACTERISTIC_LENGTH, @@ -754,6 +798,22 @@ def report(self, prob, reports_folder, **kwargs): Aircraft.Design.MACH, ] +HORIZONTAL_TAIL_INPUTS = [ + Aircraft.HorizontalTail.CHARACTERISTIC_LENGTH, + Aircraft.HorizontalTail.FINENESS, + Aircraft.HorizontalTail.LAMINAR_FLOW_LOWER, + Aircraft.HorizontalTail.LAMINAR_FLOW_UPPER, + Aircraft.HorizontalTail.WETTED_AREA, +] + +VERTICAL_TAIL_INPUTS = [ + Aircraft.VerticalTail.CHARACTERISTIC_LENGTH, + Aircraft.VerticalTail.FINENESS, + Aircraft.VerticalTail.LAMINAR_FLOW_LOWER, + Aircraft.VerticalTail.LAMINAR_FLOW_UPPER, + Aircraft.VerticalTail.WETTED_AREA, +] + TABULAR_CORE_INPUTS = [ Aircraft.Wing.AREA, Aircraft.Design.SUBSONIC_DRAG_COEFF_FACTOR, diff --git a/aviary/subsystems/geometry/flops_based/fuselage.py b/aviary/subsystems/geometry/flops_based/fuselage.py index 6c0c02b46d..c7128c3149 100644 --- a/aviary/subsystems/geometry/flops_based/fuselage.py +++ b/aviary/subsystems/geometry/flops_based/fuselage.py @@ -404,7 +404,7 @@ def setup(self): add_aviary_input(self, Aircraft.Fuselage.LENGTH, units='ft') add_aviary_input(self, Aircraft.Fuselage.MAX_WIDTH, units='ft') add_aviary_input(self, Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, units='deg') - add_aviary_input(self, Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO, units='unitless') + add_aviary_input(self, Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, units='unitless') self.add_input( 'Rear_spar_percent_chord', 0.7, units='unitless', desc='RSPCHD at fuselage centerline' ) @@ -445,7 +445,7 @@ def setup_partials(self): of=[Aircraft.Fuselage.MAX_HEIGHT], wrt=[ Aircraft.Fuselage.LENGTH, - Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO, + Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, ], ) @@ -455,8 +455,8 @@ def compute(self, inputs, outputs): length = inputs[Aircraft.Fuselage.LENGTH] rear_spar_percent_chord = inputs['Rear_spar_percent_chord'] max_width = inputs[Aircraft.Fuselage.MAX_WIDTH][0] - height_to_width = inputs[Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO] - bay_width_max = 12.0 # ft + height_to_width = inputs[Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD] + bay_width_nom = 12.0 # ft if length <= 0.0: raise ValueError( @@ -477,7 +477,7 @@ def compute(self, inputs, outputs): # Enforce maximum number of bays num_bays_max = self.options[Aircraft.BWB.MAX_NUM_BAYS] - num_bays = int(0.5 + max_width / bay_width_max) + num_bays = int(0.5 + max_width / bay_width_nom) if num_bays.real > num_bays_max and num_bays_max > 0: num_bays = num_bays_max outputs[Aircraft.BWB.NUM_BAYS] = smooth_int_tanh(num_bays, mu=20.0) @@ -494,7 +494,7 @@ def compute_partials(self, inputs, J): sweep = inputs[Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP] tan_sweep = np.tan(sweep / 57.296) pax_compart_length = rear_spar_percent_chord * length - height_to_width = inputs[Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO] + height_to_width = inputs[Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD] J[Aircraft.Fuselage.PASSENGER_COMPARTMENT_LENGTH, Aircraft.Fuselage.LENGTH] = ( rear_spar_percent_chord @@ -520,7 +520,7 @@ def compute_partials(self, inputs, J): ) J[Aircraft.Fuselage.MAX_HEIGHT, Aircraft.Fuselage.LENGTH] = height_to_width - J[Aircraft.Fuselage.MAX_HEIGHT, Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO] = length + J[Aircraft.Fuselage.MAX_HEIGHT, Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD] = length class BWBDetailedCabinLayout(om.ExplicitComponent): @@ -538,10 +538,11 @@ def initialize(self): add_aviary_option(self, Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST) add_aviary_option(self, Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY) add_aviary_option(self, Aircraft.BWB.MAX_NUM_BAYS) + add_aviary_option(self, Aircraft.BWB.MAX_BAY_WIDTH) def setup(self): add_aviary_input(self, Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, units='deg') - add_aviary_input(self, Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO, units='unitless') + add_aviary_input(self, Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, units='unitless') self.add_input( 'Rear_spar_percent_chord', 0.7, units='unitless', desc='RSPCHD at fuselage centerline' ) @@ -553,6 +554,7 @@ def setup(self): add_aviary_output(self, Aircraft.Fuselage.MAX_HEIGHT, units='ft') add_aviary_output(self, Aircraft.Wing.ROOT_CHORD, units='ft') add_aviary_output(self, Aircraft.BWB.NUM_BAYS, units='unitless') + self.add_output('bay_width', units='ft', desc='BAYW') # for testing purpose def setup_partials(self): self.declare_partials('*', '*', method='cs') @@ -560,12 +562,12 @@ def setup_partials(self): def compute(self, inputs, outputs): rear_spar_percent_chord = inputs['Rear_spar_percent_chord'] sweep = inputs[Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP] - height_to_width = inputs[Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO] + height_to_width = inputs[Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD] tan_sweep = np.tan(sweep / 57.296) - bay_width_max = 12.0 # ft + bay_width_nom = 12.0 # ft + bay_width_max, _ = self.options[Aircraft.BWB.MAX_BAY_WIDTH] num_bays = 0 - num_bays_loc = num_bays num_bays_max = self.options[Aircraft.BWB.MAX_NUM_BAYS] root_chord_min = 38.5 # ft width_lava = 36.0 # inch @@ -600,9 +602,9 @@ def compute(self, inputs, outputs): seat_pitch_economy = 32.0 # inch # Determine unit seat areas for each type of passenger - area_seat_business = bay_width_max * seat_pitch_business / 12.0 / num_seat_abreast_business - area_seat_first = bay_width_max * seat_pitch_first / 12.0 / num_seat_abreast_first - area_seat_economy = bay_width_max * seat_pitch_economy / 12.0 / num_seat_abreast_economy + area_seat_business = bay_width_nom * seat_pitch_business / 12.0 / num_seat_abreast_business + area_seat_first = bay_width_nom * seat_pitch_first / 12.0 / num_seat_abreast_first + area_seat_economy = bay_width_nom * seat_pitch_economy / 12.0 / num_seat_abreast_economy # Find the number of lavatories, galleys and closets based on the # number of passengers for each class and the area for each @@ -617,9 +619,9 @@ def compute(self, inputs, outputs): num_galleys = int(0.99 + 0.6 * num_lavas) num_closets = int(0.99 + 0.4 * num_lavas) - area_lava = (bay_width_max / 2.0) * (width_lava / 12.0) - area_galley = (bay_width_max / 2.0) * (width_galley / 12.0) - area_closet = (bay_width_max / 2.0) * (width_closet / 12.0) + area_lava = (bay_width_nom / 2.0) * (width_lava / 12.0) + area_galley = (bay_width_nom / 2.0) * (width_galley / 12.0) + area_closet = (bay_width_nom / 2.0) * (width_closet / 12.0) # Calculate area required for passengers and services area_seats = ( @@ -634,14 +636,16 @@ def compute(self, inputs, outputs): if num_bays > num_bays_max and num_bays_max > 0: num_bays = num_bays_max - while num_bays_loc != num_bays: + num_bays_loc = num_bays + iter = 0 + while True: num_bays_loc = num_bays # Cabin area wasted due to slanted != side wall - area_waste = num_bays * tan_sweep * (bay_width_max / 2.0) ** 2 + area_waste = num_bays * tan_sweep * (bay_width_nom / 2.0) ** 2 # Aisle area for horseshoe (5'), cross (2') and rear (3') aisles # Aisles only go to center of outboard bays, hence num_bays-1 - area_aisle = 10.0 * (num_bays - 1) * bay_width_max + area_aisle = 10.0 * (num_bays - 1) * bay_width_nom # Total pressurized cabin area area_cabin = area_seats + area_service + area_waste + area_aisle @@ -654,7 +658,7 @@ def compute(self, inputs, outputs): pax_compart_length = root_chord + tan_sweep * max_width / 2.0 # Enforce maximum number of bays - num_bays_tmp = 0.5 + max_width / bay_width_max + num_bays_tmp = 0.5 + max_width / bay_width_nom if num_bays_tmp[0].real > num_bays_max and num_bays_max > 0: num_bays = num_bays_max else: @@ -662,18 +666,22 @@ def compute(self, inputs, outputs): # Enforce maximum bay width bay_width = max_width / num_bays - if bay_width > bay_width_max: + if bay_width > bay_width_max and bay_width_max > 0.0: bay_width = bay_width_max num_bays_tmp = 0.999 + max_width / bay_width if num_bays_tmp.real > num_bays_max and num_bays_max > 0: num_bays = num_bays_max - max_width = bay_width_max * bay_width + max_width = num_bays_max * bay_width pax_compart_length = area_cabin / max_width + tan_sweep * max_width / 4.0 root_chord = pax_compart_length - tan_sweep * max_width / 2.0 else: num_bays = smooth_int_tanh(num_bays_tmp, mu=40.0) + iter = iter + 1 # If number of bays has changed, recalculate cabin area + if num_bays_loc == num_bays or iter > 100: + warnings.warn(f'Number of iteration exceeded 100.') + break length = pax_compart_length / rear_spar_percent_chord max_height = height_to_width * length @@ -685,6 +693,7 @@ def compute(self, inputs, outputs): outputs[Aircraft.Fuselage.MAX_WIDTH] = max_width outputs[Aircraft.Fuselage.MAX_HEIGHT] = max_height outputs[Aircraft.Wing.ROOT_CHORD] = root_chord + outputs['bay_width'] = bay_width # TODO: For the int calls, I see that those are part of a while loop that solves # a nonlinear equation by Gauss-Siedel until it converges. The interesting part is diff --git a/aviary/subsystems/geometry/flops_based/test/test_fuselage.py b/aviary/subsystems/geometry/flops_based/test/test_fuselage.py index e839ee9d2d..3983328a91 100644 --- a/aviary/subsystems/geometry/flops_based/test/test_fuselage.py +++ b/aviary/subsystems/geometry/flops_based/test/test_fuselage.py @@ -66,9 +66,9 @@ def test_case1(self): prob.run_model() pax_compart_length = prob.get_val(Aircraft.Fuselage.PASSENGER_COMPARTMENT_LENGTH) - assert_near_equal(pax_compart_length, 107.53947222, tolerance=1e-9) + assert_near_equal(pax_compart_length, 108.37731944, tolerance=1e-9) fuselage_length = prob.get_val(Aircraft.Fuselage.LENGTH) - assert_near_equal(fuselage_length, 147.53947222, tolerance=1e-9) + assert_near_equal(fuselage_length, 148.37731944, tolerance=1e-9) fuselage_width = prob.get_val(Aircraft.Fuselage.MAX_WIDTH) assert_near_equal(fuselage_width, 14.84, tolerance=1e-9) @@ -94,7 +94,7 @@ def test_case1(self): prob.set_val(Aircraft.Fuselage.LENGTH, val=137.5, units='ft') prob.set_val(Aircraft.Fuselage.MAX_WIDTH, val=64.58, units='ft') prob.set_val(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, val=45.0, units='deg') - prob.set_val(Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO, val=0.11, units='unitless') + prob.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, val=0.11, units='unitless') prob.run_model() num_bays = prob.get_val(Aircraft.BWB.NUM_BAYS) @@ -114,7 +114,7 @@ def test_case1(self): @use_tempdirs class BWBDetailedCabinLayoutTest(unittest.TestCase): - """Test simple cabin layout computation.""" + """Test detailed cabin layout computation.""" def setUp(self): self.prob = om.Problem() @@ -141,12 +141,12 @@ def test_case1(self): setup_model_options(self.prob, options) prob.setup(check=False, force_alloc_complex=True) prob.set_val(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, val=45.0, units='deg') - prob.set_val(Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO, val=0.11, units='unitless') + prob.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, val=0.11, units='unitless') prob.set_val('Rear_spar_percent_chord', val=0.7, units='unitless') prob.run_model() num_bays = prob.get_val(Aircraft.BWB.NUM_BAYS) - assert_near_equal(num_bays, [7], tolerance=1e-9) + assert_near_equal(num_bays, 7, tolerance=1e-9) fuselage_length = prob.get_val(Aircraft.Fuselage.LENGTH) assert_near_equal(fuselage_length, 112.30019369, tolerance=1e-9) @@ -166,6 +166,108 @@ def test_case1(self): root_chord = prob.get_val(Aircraft.Wing.ROOT_CHORD) assert_near_equal(root_chord, 38.5, tolerance=1e-9) + def test_case2(self): + """bwb300_baseline""" + prob = self.prob + options = self.aviary_options = AviaryValues() + options.set_val(Settings.VERBOSITY, 1, units='unitless') + + options.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 76, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 24, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 200, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 0, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 0, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 0, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, 0.0, units='inch') + options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 0.0, units='inch') + options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 0.0, units='inch') + options.set_val(Aircraft.BWB.MAX_NUM_BAYS, 0, units='unitless') + + prob.model.add_subsystem( + 'layout', BWBDetailedCabinLayout(), promotes_outputs=['*'], promotes_inputs=['*'] + ) + setup_model_options(self.prob, options) + prob.setup(check=False, force_alloc_complex=True) + prob.set_val(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, val=60.0, units='deg') + prob.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, val=0.11, units='unitless') + # prob.set_val(Aircraft.Fuselage.MAX_WIDTH, val=50.0, units='ft') + prob.set_val('Rear_spar_percent_chord', val=0.7, units='unitless') + prob.run_model() + + fuselage_width = prob.get_val(Aircraft.Fuselage.MAX_WIDTH) + assert_near_equal(fuselage_width, 49.77182929, tolerance=1e-9) + + num_bays = prob.get_val(Aircraft.BWB.NUM_BAYS) + assert_near_equal(num_bays, 4, tolerance=1e-9) + + fuselage_length = prob.get_val(Aircraft.Fuselage.LENGTH) + assert_near_equal(fuselage_length, 116.57609631, tolerance=1e-9) + + pax_compart_length = prob.get_val(Aircraft.Fuselage.PASSENGER_COMPARTMENT_LENGTH) + assert_near_equal(pax_compart_length, 81.60326742, tolerance=1e-9) + + fuselage_height = prob.get_val(Aircraft.Fuselage.MAX_HEIGHT) + assert_near_equal(fuselage_height, 12.82337059, tolerance=1e-9) + + cabin_area = prob.get_val(Aircraft.Fuselage.CABIN_AREA) + assert_near_equal(cabin_area, 2988.87966179, tolerance=1e-9) + + root_chord = prob.get_val(Aircraft.Wing.ROOT_CHORD) + assert_near_equal(root_chord, 38.5, tolerance=1e-9) + + def test_case3(self): + """bwb300_baseline, MAX_NUM_BAYS=4, MAX_BAY_WIDTH=10.0""" + prob = self.prob + options = self.aviary_options = AviaryValues() + options.set_val(Settings.VERBOSITY, 1, units='unitless') + + options.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 76, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 24, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 200, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 0, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 0, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 0, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, 0.0, units='inch') + options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 0.0, units='inch') + options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 0.0, units='inch') + options.set_val(Aircraft.BWB.MAX_NUM_BAYS, 4, units='unitless') + options.set_val(Aircraft.BWB.MAX_BAY_WIDTH, 10.0, units='ft') + + prob.model.add_subsystem( + 'layout', BWBDetailedCabinLayout(), promotes_outputs=['*'], promotes_inputs=['*'] + ) + setup_model_options(self.prob, options) + prob.setup(check=False, force_alloc_complex=True) + prob.set_val(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, val=60.0, units='deg') + prob.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, val=0.11, units='unitless') + # prob.set_val(Aircraft.Fuselage.MAX_WIDTH, val=50.0, units='ft') + prob.set_val('Rear_spar_percent_chord', val=0.7, units='unitless') + prob.run_model() + + bay_width = prob.get_val('bay_width') + assert_near_equal(bay_width, 10.0, tolerance=1e-9) + + fuselage_width = prob.get_val(Aircraft.Fuselage.MAX_WIDTH) + assert_near_equal(fuselage_width, 40.0, tolerance=1e-9) + + num_bays = prob.get_val(Aircraft.BWB.NUM_BAYS) + assert_near_equal(num_bays, 4.0, tolerance=1e-9) + + fuselage_length = prob.get_val(Aircraft.Fuselage.LENGTH) + assert_near_equal(fuselage_length, 131.4890549, tolerance=1e-9) + + pax_compart_length = prob.get_val(Aircraft.Fuselage.PASSENGER_COMPARTMENT_LENGTH) + assert_near_equal(pax_compart_length, 92.04233843, tolerance=1e-9) + + fuselage_height = prob.get_val(Aircraft.Fuselage.MAX_HEIGHT) + assert_near_equal(fuselage_height, 14.46379604, tolerance=1e-9) + + cabin_area = prob.get_val(Aircraft.Fuselage.CABIN_AREA) + assert_near_equal(cabin_area, 2988.87966179, tolerance=1e-9) + + root_chord = prob.get_val(Aircraft.Wing.ROOT_CHORD) + assert_near_equal(root_chord, 57.40164466, tolerance=1e-9) + @use_tempdirs class BWBFuselagePrelimTest(unittest.TestCase): diff --git a/aviary/subsystems/geometry/flops_based/test/test_prep_geom.py b/aviary/subsystems/geometry/flops_based/test/test_prep_geom.py index 9838a5fff1..bdc8f95bc6 100644 --- a/aviary/subsystems/geometry/flops_based/test/test_prep_geom.py +++ b/aviary/subsystems/geometry/flops_based/test/test_prep_geom.py @@ -758,6 +758,37 @@ def test_case1(self): exp1 = 17683.7562096 assert_near_equal(out1, exp1, tolerance=1e-8) + def test_case2(self): + """Provided detailed wing case for bwb300_baseline""" + prob = self.prob + self.aviary_options = AviaryValues() + self.aviary_options.set_val( + Aircraft.Wing.INPUT_STATION_DISTRIBUTION, + [0.0, 0.0, 0.2075, 0.415, 0.6927, 0.928, 1.0], + units='unitless', + ) + prob.model.add_subsystem( + 'wing', BWBWingWettedArea(), promotes_outputs=['*'], promotes_inputs=['*'] + ) + setup_model_options(self.prob, self.aviary_options) + prob.setup(check=False, force_alloc_complex=True) + prob.set_val( + 'BWB_CHORD_PER_SEMISPAN_DISTRIBUTION', + val=[116.57609631, 55.0, 33.2, 18.97, 14.19, 10.2, 2.36127568], + ) + prob.set_val( + 'BWB_THICKNESS_TO_CHORD_DISTRIBUTION', + val=[0.1792, 0.1792, 0.125, 0.076, 0.076, 0.076, 0.06], + ) + prob.set_val(Aircraft.Fuselage.MAX_WIDTH, val=49.77182929) + prob.set_val(Aircraft.Wing.GLOVE_AND_BAT, val=1230.5) + prob.set_val(Aircraft.Wing.SPAN, val=186.631829293424) + prob.run_model() + + out1 = prob.get_val(Aircraft.Wing.WETTED_AREA) + exp1 = 17302.04910213 + assert_near_equal(out1, exp1, tolerance=1e-8) + @use_tempdirs class BWBSimplePrepGeomTest(unittest.TestCase): @@ -791,7 +822,7 @@ def setUp(self): prob.set_val(Aircraft.Fuselage.LENGTH, 137.5, units='ft') prob.set_val(Aircraft.Fuselage.MAX_WIDTH, 64.58, units='ft') prob.set_val(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, 45.0, units='deg') - prob.set_val(Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO, 0.11, units='unitless') + prob.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, 0.11, units='unitless') prob.set_val('Rear_spar_percent_chord', 0.7, units='unitless') # BWBComputeDetailedWingDist prob.set_val(Aircraft.Wing.OUTBOARD_SEMISPAN, val=86.75) @@ -1041,7 +1072,7 @@ def setUp(self): # BWBDetailedCabinLayout prob.set_val(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, val=45.0, units='deg') - prob.set_val(Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO, val=0.11, units='unitless') + prob.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, val=0.11, units='unitless') prob.set_val('Rear_spar_percent_chord', val=0.7, units='unitless') # BWBUpdateDetailedWingDist prob.set_val( diff --git a/aviary/subsystems/geometry/flops_based/test/test_wing_detailed_bwb.py b/aviary/subsystems/geometry/flops_based/test/test_wing_detailed_bwb.py index ec51b985f0..2ba2a4b564 100644 --- a/aviary/subsystems/geometry/flops_based/test/test_wing_detailed_bwb.py +++ b/aviary/subsystems/geometry/flops_based/test/test_wing_detailed_bwb.py @@ -84,9 +84,8 @@ def test_case1(self): prob.set_val(Aircraft.Fuselage.MAX_WIDTH, val=80.220756073526772) prob.set_val(Aircraft.Wing.OUTBOARD_SEMISPAN, val=86.75) prob.set_val(Aircraft.Fuselage.LENGTH, val=112.3001936860821) - prob.set_val(Aircraft.Wing.THICKNESS_TO_CHORD, val=0.11) + prob.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, val=0.11) prob.set_val(Aircraft.Wing.ROOT_CHORD, 38.5) - prob.set_val(Aircraft.Wing.OUTBOARD_SEMISPAN, 86.75) prob.run_model() out1 = prob.get_val('BWB_CHORD_PER_SEMISPAN_DISTRIBUTION') @@ -136,6 +135,55 @@ def test_case1(self): # partial_data = self.prob.check_partials(out_stream=None, method='cs') # assert_check_partials(partial_data, atol=1e-9, rtol=1e-8) + def test_case2(self): + """bwb300_baseline""" + prob = self.prob + options = self.aviary_options = AviaryValues() + options.set_val(Settings.VERBOSITY, 1, units='unitless') + options.set_val( + Aircraft.Wing.INPUT_STATION_DISTRIBUTION, + [0.0, 0.0, 0.2075, 0.415, 0.6927, 0.928, 1.0], + units='unitless', + ) # ETAW + prob.model.add_subsystem( + 'dist', BWBUpdateDetailedWingDist(), promotes_outputs=['*'], promotes_inputs=['*'] + ) + setup_model_options(self.prob, options) + prob.setup(check=False, force_alloc_complex=True) + prob.set_val( + Aircraft.Wing.CHORD_PER_SEMISPAN_DISTRIBUTION, + val=[-1.0, 48.25, 33.20, 18.97, 14.19, 10.20, 3.220], + ) # CHD + prob.set_val( + Aircraft.Wing.THICKNESS_TO_CHORD_DISTRIBUTION, + val=[-1.0, 0.125, 0.125, 0.076, 0.076, 0.076, 0.06], + ) # TOC + prob.set_val( + Aircraft.Wing.LOAD_PATH_SWEEP_DISTRIBUTION, + val=[0.0, 0.0, 0.0, 17.0, 17.0, 17.0], + ) # SWL + prob.set_val(Aircraft.Fuselage.MAX_WIDTH, val=49.77182929) + prob.set_val(Aircraft.Wing.OUTBOARD_SEMISPAN, val=68.43) + prob.set_val(Aircraft.Fuselage.LENGTH, val=116.57609631) + prob.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, val=0.1792) + prob.set_val(Aircraft.Wing.ROOT_CHORD, 38.5) + prob.run_model() + + out1 = prob.get_val('BWB_CHORD_PER_SEMISPAN_DISTRIBUTION') + exp1 = [116.57609631, 55.0, 33.2, 18.97, 14.19, 10.2, 2.36127568] + assert_near_equal(out1, exp1, tolerance=1e-8) + + out2 = prob.get_val('BWB_THICKNESS_TO_CHORD_DISTRIBUTION') + exp2 = [0.1792, 0.1792, 0.125, 0.076, 0.076, 0.076, 0.06] + assert_near_equal(out2, exp2, tolerance=1e-10) + + out3 = prob.get_val('BWB_LOAD_PATH_SWEEP_DISTRIBUTION') + exp3 = [0.0, 0.0, 0.0, 17.0, 17.0, 17.0] + assert_near_equal(out3, exp3, tolerance=1e-10) + + # partial_data = self.prob.check_partials(out_stream=None, method='cs') + # assert_check_partials(partial_data, atol=1e-9, rtol=1e-8) + @use_tempdirs class BWBComputeDetailedWingDistTest(unittest.TestCase): @@ -168,6 +216,7 @@ def test_case1(self): prob.set_val(Aircraft.Wing.OUTBOARD_SEMISPAN, val=86.75) prob.set_val(Aircraft.Fuselage.LENGTH, val=137.5) prob.set_val(Aircraft.Wing.THICKNESS_TO_CHORD, val=0.11) + prob.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, val=0.11) prob.set_val(Aircraft.Wing.ROOT_CHORD, 63.96) prob.set_val(Aircraft.Wing.SWEEP, 35.7, units='deg') prob.run_model() @@ -280,6 +329,39 @@ def test_case2(self): prob.get_val(Aircraft.Wing.LOAD_FRACTION), 0.46761341784858923, tolerance=1e-9 ) + def test_case3(self): + """Provided detailed wing case for bwb300_baseline""" + prob = self.prob + self.aviary_options = AviaryValues() + self.aviary_options.set_val(Settings.VERBOSITY, 1, units='unitless') + self.aviary_options.set_val( + Aircraft.Wing.INPUT_STATION_DISTRIBUTION, + [0.0, 0.0, 0.2075, 0.415, 0.6927, 0.928, 1.0], + units='unitless', + ) + prob.model.add_subsystem( + 'dist', BWBWingPrelim(), promotes_outputs=['*'], promotes_inputs=['*'] + ) + setup_model_options(self.prob, self.aviary_options) + prob.setup(check=False, force_alloc_complex=True) + prob.set_val(Aircraft.Fuselage.MAX_WIDTH, val=49.77182929) + prob.set_val(Aircraft.Wing.GLOVE_AND_BAT, val=1230.5) + prob.set_val(Aircraft.Wing.SPAN, val=186.631829293424) + prob.set_val( + 'BWB_CHORD_PER_SEMISPAN_DISTRIBUTION', + val=[116.57609631, 55.0, 33.2, 18.97, 14.19, 10.2, 2.36127568], + ) + prob.run_model() + + assert_near_equal(prob.get_val(Aircraft.Wing.AREA), 8421.7146805052689, tolerance=1e-9) + assert_near_equal(prob.get_val(Aircraft.Wing.ASPECT_RATIO), 4.84361005, tolerance=1e-9) + assert_near_equal( + prob.get_val(Aircraft.Wing.ASPECT_RATIO_REFERENCE), 4.84361005, tolerance=1e-9 + ) + assert_near_equal( + prob.get_val(Aircraft.Wing.LOAD_FRACTION), 0.53775151869737092, tolerance=1e-9 + ) + if __name__ == '__main__': unittest.main() diff --git a/aviary/subsystems/geometry/flops_based/wing_detailed_bwb.py b/aviary/subsystems/geometry/flops_based/wing_detailed_bwb.py index 493d163892..c95da5576e 100644 --- a/aviary/subsystems/geometry/flops_based/wing_detailed_bwb.py +++ b/aviary/subsystems/geometry/flops_based/wing_detailed_bwb.py @@ -40,7 +40,7 @@ def setup(self): add_aviary_input(self, Aircraft.Fuselage.LENGTH, units='ft') add_aviary_input(self, Aircraft.Fuselage.MAX_WIDTH, units='ft') add_aviary_input(self, Aircraft.Wing.OUTBOARD_SEMISPAN, units='ft') - add_aviary_input(self, Aircraft.Wing.THICKNESS_TO_CHORD, units='unitless') + add_aviary_input(self, Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, units='unitless') add_aviary_input(self, Aircraft.Wing.ROOT_CHORD, units='ft') self.add_input( 'rear_spar_percent_chord_side', @@ -83,7 +83,7 @@ def setup_partials(self): 'BWB_THICKNESS_TO_CHORD_DISTRIBUTION', [ Aircraft.Wing.THICKNESS_TO_CHORD_DISTRIBUTION, - Aircraft.Wing.THICKNESS_TO_CHORD, + Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, ], ) self.declare_partials( @@ -99,7 +99,7 @@ def compute(self, inputs, outputs): outputs[Aircraft.Wing.SPAN] = wingspan rate_span = (wingspan - width) / wingspan length = inputs[Aircraft.Fuselage.LENGTH][0] - tc = inputs[Aircraft.Wing.THICKNESS_TO_CHORD][0] + side_tc = inputs[Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD][0] root_chord = inputs[Aircraft.Wing.ROOT_CHORD][0] rear_spar_percent_chord_side = inputs['rear_spar_percent_chord_side'][0] if rear_spar_percent_chord_side <= 0.0: @@ -117,8 +117,8 @@ def compute(self, inputs, outputs): outputs['BWB_CHORD_PER_SEMISPAN_DISTRIBUTION'][0] = length outputs['BWB_CHORD_PER_SEMISPAN_DISTRIBUTION'][1] = xl_out - outputs['BWB_THICKNESS_TO_CHORD_DISTRIBUTION'][0] = tc - outputs['BWB_THICKNESS_TO_CHORD_DISTRIBUTION'][1] = tc + outputs['BWB_THICKNESS_TO_CHORD_DISTRIBUTION'][0] = side_tc + outputs['BWB_THICKNESS_TO_CHORD_DISTRIBUTION'][1] = side_tc outputs['BWB_THICKNESS_TO_CHORD_DISTRIBUTION'][2:] = inputs[ Aircraft.Wing.THICKNESS_TO_CHORD_DISTRIBUTION ][2:] @@ -132,7 +132,7 @@ def compute_partials(self, inputs, J): # wingspan = width + 2 * osspan # rate_span = (wingspan - width) / wingspan # length = inputs[Aircraft.Fuselage.LENGTH][0] - # tc = inputs[Aircraft.Wing.THICKNESS_TO_CHORD][0] + # side_tc = inputs[Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD][0] # root_chord = inputs[Aircraft.Wing.ROOT_CHORD][0] # rear_spar_percent_chord_side = inputs['rear_spar_percent_chord_side'][0] # xl_out = root_chord / rear_spar_percent_chord_side @@ -142,9 +142,15 @@ def compute_partials(self, inputs, J): num_stations = len(self.options[Aircraft.Wing.INPUT_STATION_DISTRIBUTION]) - J['BWB_THICKNESS_TO_CHORD_DISTRIBUTION', Aircraft.Wing.THICKNESS_TO_CHORD][0] = 1.0 - J['BWB_THICKNESS_TO_CHORD_DISTRIBUTION', Aircraft.Wing.THICKNESS_TO_CHORD][1] = 1.0 - J['BWB_THICKNESS_TO_CHORD_DISTRIBUTION', Aircraft.Wing.THICKNESS_TO_CHORD][2:] = 0.0 + J['BWB_THICKNESS_TO_CHORD_DISTRIBUTION', Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD][ + 0 + ] = 1.0 + J['BWB_THICKNESS_TO_CHORD_DISTRIBUTION', Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD][ + 1 + ] = 1.0 + J['BWB_THICKNESS_TO_CHORD_DISTRIBUTION', Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD][ + 2: + ] = 0.0 diag2_matrix = np.identity(num_stations) J['BWB_THICKNESS_TO_CHORD_DISTRIBUTION', Aircraft.Wing.THICKNESS_TO_CHORD_DISTRIBUTION] = ( @@ -179,6 +185,7 @@ def setup(self): add_aviary_input(self, Aircraft.Fuselage.LENGTH, units='ft') add_aviary_input(self, Aircraft.Wing.OUTBOARD_SEMISPAN, units='ft') add_aviary_input(self, Aircraft.Wing.ROOT_CHORD, units='ft') + add_aviary_input(self, Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, units='unitless') add_aviary_input(self, Aircraft.Wing.THICKNESS_TO_CHORD, units='unitless') add_aviary_input(self, Aircraft.Wing.SWEEP, units='deg') self.add_input( @@ -200,7 +207,6 @@ def setup_partials(self): Aircraft.Fuselage.MAX_WIDTH, Aircraft.Wing.OUTBOARD_SEMISPAN, ], - method='cs', ) self.declare_partials( 'BWB_CHORD_PER_SEMISPAN_DISTRIBUTION', @@ -213,7 +219,11 @@ def setup_partials(self): ], ) self.declare_partials( - 'BWB_THICKNESS_TO_CHORD_DISTRIBUTION', Aircraft.Wing.THICKNESS_TO_CHORD + 'BWB_THICKNESS_TO_CHORD_DISTRIBUTION', + [ + Aircraft.Wing.THICKNESS_TO_CHORD, + Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, + ], ) self.declare_partials( 'BWB_LOAD_PATH_SWEEP_DISTRIBUTION', @@ -250,6 +260,7 @@ def compute(self, inputs, outputs): ) xl_out = root_chord / rear_spar_percent_chord_side wing_tip_chord = 0.06 * wingspan + side_tc = inputs[Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD][0] tc = inputs[Aircraft.Wing.THICKNESS_TO_CHORD][0] sweep = inputs[Aircraft.Wing.SWEEP][0] tr_out = wing_tip_chord / xl_out @@ -262,8 +273,8 @@ def compute(self, inputs, outputs): outputs['BWB_CHORD_PER_SEMISPAN_DISTRIBUTION'][1] = xl_out outputs['BWB_CHORD_PER_SEMISPAN_DISTRIBUTION'][2] = wing_tip_chord - outputs['BWB_THICKNESS_TO_CHORD_DISTRIBUTION'][0] = tc - outputs['BWB_THICKNESS_TO_CHORD_DISTRIBUTION'][1] = tc + outputs['BWB_THICKNESS_TO_CHORD_DISTRIBUTION'][0] = side_tc + outputs['BWB_THICKNESS_TO_CHORD_DISTRIBUTION'][1] = side_tc outputs['BWB_THICKNESS_TO_CHORD_DISTRIBUTION'][2] = tc outputs['BWB_LOAD_PATH_SWEEP_DISTRIBUTION'][0] = 0.0 @@ -301,7 +312,13 @@ def compute_partials(self, inputs, J): 0.0, ] - J['BWB_THICKNESS_TO_CHORD_DISTRIBUTION', Aircraft.Wing.THICKNESS_TO_CHORD] = 1 + J['BWB_THICKNESS_TO_CHORD_DISTRIBUTION', Aircraft.Wing.THICKNESS_TO_CHORD] = [0.0, 0.0, 1.0] + + J['BWB_THICKNESS_TO_CHORD_DISTRIBUTION', Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD] = [ + 1.0, + 1.0, + 0.0, + ] dswp_ld_path_dsweep = 1 / (1 + angle**2) / np.cos(sweep / 57.2958) ** 2 J['BWB_LOAD_PATH_SWEEP_DISTRIBUTION', Aircraft.Wing.SWEEP] = [ diff --git a/aviary/subsystems/mass/flops_based/test/test_wing_detailed.py b/aviary/subsystems/mass/flops_based/test/test_wing_detailed.py index 0dd4a6874e..74d70403bc 100644 --- a/aviary/subsystems/mass/flops_based/test/test_wing_detailed.py +++ b/aviary/subsystems/mass/flops_based/test/test_wing_detailed.py @@ -610,6 +610,92 @@ def test_case1(self): # current BWB data set does not check the following assert_near_equal(pod_inertia, pod_inertia_expected, tolerance=1e-9) + def test_case2(self): + """ + bwb300_baseline + This test is to investigate the different result of Aircraft.Wing.BENDING_MATERIAL_FACTOR + (or BT as returned by subroutine BNDMAT) between this function and FLOPS. The algorithm is + not exactly the same. Note that Aircraft.Wing.NUM_INTEGRATION_STATIONS is set to 10 to make + debugging easier. + In BNDMAT(), AR is computed locally but is not passed back. So, we call it "calc_ar" in + our algorithm. + In FLOPS, given CHD = [48.25, 33.20, 18.97, 14.19, 10.20, 3.220] as bwb300_baseline, + subroutin DEFINE() will update it to CHD = [116.576, 55, 33.2, 18.97, 14.19, 10.2, 2.361] + Then in subroutin WWGHT(), right before calling BNDMAT(), it updates CHD to + C = [1.249, 0.589, 0.356, 0.203, 0.152, 0.109, 2.361] which is used in BNDMAT(). Is it right? + """ + prob = self.prob + + aviary_options = AviaryValues() + aviary_options.set_val(Aircraft.Engine.NUM_ENGINES, [2], units='unitless') + aviary_options.set_val(Aircraft.Engine.NUM_WING_ENGINES, [0], units='unitless') + aviary_options.set_val(Aircraft.Propulsion.TOTAL_NUM_WING_ENGINES, 0, units='unitless') + aviary_options.set_val( + Aircraft.Wing.INPUT_STATION_DISTRIBUTION, + [0.0, 0.0, 0.2075, 0.415, 0.6927, 0.928, 1.0], + units='unitless', + ) + aviary_options.set_val(Aircraft.Wing.LOAD_DISTRIBUTION_CONTROL, 2.0, units='unitless') + aviary_options.set_val(Aircraft.Wing.NUM_INTEGRATION_STATIONS, 10, units='unitless') + aviary_options.set_val(Aircraft.BWB.DETAILED_WING_PROVIDED, True, units='unitless') + + prob.model.add_subsystem( + 'bending', + BWBDetailedWingBendingFact(), + promotes_inputs=['*'], + promotes_outputs=['*'], + ) + + prob.model.set_input_defaults(Aircraft.Wing.ASPECT_RATIO, 5.4252, units='unitless') + prob.model.set_input_defaults(Aircraft.Wing.ASPECT_RATIO_REFERENCE, 0.0, units='unitless') + prob.model.set_input_defaults(Aircraft.Wing.STRUT_BRACING_FACTOR, 0.0, units='unitless') + prob.model.set_input_defaults( + Aircraft.Wing.AEROELASTIC_TAILORING_FACTOR, 0.0, units='unitless' + ) + prob.model.set_input_defaults(Aircraft.Wing.THICKNESS_TO_CHORD, 0.11, units='unitless') + prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_REFERENCE, 0.11, units='unitless' + ) + + setup_model_options(self.prob, aviary_options) + prob.setup(check=False, force_alloc_complex=True) + + prob.set_val(Aircraft.Engine.POD_MASS, np.array([0]), units='lbm') + prob.set_val(Aircraft.Wing.SPAN, val=186.631829293424) + prob.set_val(Aircraft.Fuselage.MAX_WIDTH, 49.77182929, 'ft') + + wing_location = np.zeros(0) + wing_location = np.append(wing_location, [0.2]) + prob.set_val(Aircraft.Engine.WING_LOCATIONS, wing_location) + + prob.set_val( + 'BWB_CHORD_PER_SEMISPAN_DISTRIBUTION', + [116.57609631, 55.0, 33.2, 18.97, 14.19, 10.2, 2.36127568], + units='unitless', + ) + prob.set_val( + 'BWB_THICKNESS_TO_CHORD_DISTRIBUTION', + [0.1792, 0.1792, 0.125, 0.076, 0.076, 0.076, 0.06], + units='unitless', + ) + prob.set_val( + 'BWB_LOAD_PATH_SWEEP_DISTRIBUTION', + [0.0, 0.0, 0.0, 17.0, 17.0, 17.0], + units='deg', + ) + + prob.run_model() + + BENDING_MATERIAL_FACTOR = prob.get_val(Aircraft.Wing.BENDING_MATERIAL_FACTOR) + pod_inertia = prob.get_val(Aircraft.Wing.ENG_POD_INERTIA_FACTOR) + + BENDING_MATERIAL_FACTOR_expected = 4.53053124 # Real FLOPS BT = 5.998060404 + pod_inertia_expected = 1.0 + assert_near_equal(BENDING_MATERIAL_FACTOR, BENDING_MATERIAL_FACTOR_expected, tolerance=1e-9) + assert_near_equal(prob.get_val('calculated_wing_area'), 4151.88659141, tolerance=1e-9) + # current BWB data set does not check the following + assert_near_equal(pod_inertia, pod_inertia_expected, tolerance=1e-9) + if __name__ == '__main__': unittest.main() diff --git a/aviary/subsystems/mass/flops_based/wing_detailed.py b/aviary/subsystems/mass/flops_based/wing_detailed.py index a16cd926cb..da8cb73dde 100644 --- a/aviary/subsystems/mass/flops_based/wing_detailed.py +++ b/aviary/subsystems/mass/flops_based/wing_detailed.py @@ -1,9 +1,11 @@ +import warnings import numpy as np import openmdao.api as om from openmdao.components.interp_util.interp import InterpND +from aviary.variable_info.enums import Verbosity from aviary.variable_info.functions import add_aviary_input, add_aviary_option, add_aviary_output -from aviary.variable_info.variables import Aircraft, Mission +from aviary.variable_info.variables import Aircraft, Mission, Settings class DetailedWingBendingFact(om.ExplicitComponent): @@ -289,6 +291,7 @@ def initialize(self): add_aviary_option(self, Aircraft.Wing.LOAD_DISTRIBUTION_CONTROL) add_aviary_option(self, Aircraft.Wing.NUM_INTEGRATION_STATIONS) add_aviary_option(self, Aircraft.BWB.DETAILED_WING_PROVIDED) + add_aviary_option(self, Settings.VERBOSITY) def setup(self): input_station_distribution = self.options[Aircraft.Wing.INPUT_STATION_DISTRIBUTION] @@ -336,6 +339,7 @@ def setup_partials(self): self.declare_partials('*', '*', method='cs') def compute(self, inputs, outputs): + verbosity = self.options[Settings.VERBOSITY] num_integration_stations = self.options[Aircraft.Wing.NUM_INTEGRATION_STATIONS] num_wing_engines = self.options[Aircraft.Engine.NUM_WING_ENGINES] num_engine_type = len(num_wing_engines) @@ -380,6 +384,13 @@ def compute(self, inputs, outputs): ar = inputs[Aircraft.Wing.ASPECT_RATIO] arref = inputs[Aircraft.Wing.ASPECT_RATIO_REFERENCE] + if arref[0] == 0: # this could happen if Aircraft.Wing.ASPECT_RATIO is not an input + arref[0] = ar[0] + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Assume Aircraft.Wing.ASPECT_RATIO_REFERENCE is the same ' + 'as Aircraft.Wing.ASPECT_RATIO' + ) chord = inputs['BWB_CHORD_PER_SEMISPAN_DISTRIBUTION'] chord_mod = [] for x in chord: @@ -484,7 +495,9 @@ def compute(self, inputs, outputs): tc_interp = InterpND( method='slinear', points=(inp_stations_mod), x_interp=integration_stations ) - tc_int_stations = tc_interp.evaluate_spline(thickness_to_chord, compute_derivative=False) + tc_int_stations = tc_interp.evaluate_spline( + thickness_to_chord_mod, compute_derivative=False + ) if tcref > 0.0: tc_int_stations *= tc / tcref diff --git a/aviary/subsystems/test/test_flops_based_premission.py b/aviary/subsystems/test/test_flops_based_premission.py index 84cf9f890b..0e364c6137 100644 --- a/aviary/subsystems/test/test_flops_based_premission.py +++ b/aviary/subsystems/test/test_flops_based_premission.py @@ -418,8 +418,6 @@ def test_case_all_subsystems(self, case_name): Mission.OPERATING_MASS, # ZeroFuelMass Mission.ZERO_FUEL_MASS, - # FuelMass - # TODO: test some aero variables ], version=Version.BWB, step=1.01e-40, @@ -728,149 +726,10 @@ def test_case_all_subsystems(self): tol = 1e-4 assert_near_equal(prob[Aircraft.Propulsion.TOTAL_SCALED_SLS_THRUST], 70000.0 * 3, tol) - # Geometry - # BWBSimpleCabinLayout - assert_near_equal(prob[Aircraft.Fuselage.PASSENGER_COMPARTMENT_LENGTH], 96.25, tol) - assert_near_equal(prob[Aircraft.Wing.ROOT_CHORD], 63.96, tol) - assert_near_equal(prob[Aircraft.Fuselage.CABIN_AREA], 5173.187202504683, tol) - assert_near_equal(prob[Aircraft.Fuselage.MAX_HEIGHT], 15.125, tol) - assert_near_equal(prob[Aircraft.BWB.NUM_BAYS], 5.0, tol) - # BWBFuselagePrelim - assert_near_equal(prob[Aircraft.Fuselage.REF_DIAMETER], 39.8525, tol) - assert_near_equal(prob[Aircraft.Fuselage.PLANFORM_AREA], 7390.267432149546, tol) - # BWBWingPrelim - assert_near_equal(prob[Aircraft.Wing.AREA], 16555.972297926455, tol) - assert_near_equal(prob[Aircraft.Wing.ASPECT_RATIO], 3.4488813, tol) - assert_near_equal(prob[Aircraft.Wing.ASPECT_RATIO_REFERENCE], 3.4488813, tol) - assert_near_equal(prob[Aircraft.Wing.LOAD_FRACTION], 0.53107166, tol) - # BWBWingWettedArea - assert_near_equal(prob[Aircraft.Wing.WETTED_AREA], 33816.732336575638, tol) - # TailWettedArea - assert_near_equal(prob[Aircraft.HorizontalTail.WETTED_AREA], 0.0, tol) - assert_near_equal(prob[Aircraft.VerticalTail.WETTED_AREA], 0.0, tol) - # _FuselageRatios - assert_near_equal(prob[Aircraft.Fuselage.DIAMETER_TO_WING_SPAN], 0.16739117852998228, tol) - assert_near_equal(prob[Aircraft.Fuselage.LENGTH_TO_DIAMETER], 3.4502226961922089, tol) - # NacelleWettedArea - assert_near_equal(prob[Aircraft.Nacelle.WETTED_AREA], 498.26822066, tol) - assert_near_equal(prob[Aircraft.Nacelle.TOTAL_WETTED_AREA], 3 * 498.26822066, tol) - # Canard - assert_near_equal(prob[Aircraft.Canard.WETTED_AREA], 0.0, tol) - # BWBWingCharacteristicLength - assert_near_equal(prob[Aircraft.Wing.CHARACTERISTIC_LENGTH], 69.53953418, tol) - assert_near_equal(prob[Aircraft.Wing.FINENESS], 0.11, tol) - # OtherCharacteristicLengths - assert_near_equal(prob[Aircraft.Canard.CHARACTERISTIC_LENGTH], 0.0, tol) - assert_near_equal(prob[Aircraft.Canard.FINENESS], 0.0, tol) - assert_near_equal(prob[Aircraft.Fuselage.CHARACTERISTIC_LENGTH], 137.5, tol) - assert_near_equal(prob[Aircraft.Fuselage.FINENESS], 3.4502227, tol) - assert_near_equal(prob[Aircraft.HorizontalTail.CHARACTERISTIC_LENGTH], 0.0, tol) - assert_near_equal(prob[Aircraft.HorizontalTail.FINENESS], 0.11, tol) - assert_near_equal(prob[Aircraft.Nacelle.CHARACTERISTIC_LENGTH], [15.68611614], tol) - assert_near_equal(prob[Aircraft.Nacelle.FINENESS], [1.38269353], tol) - assert_near_equal(prob[Aircraft.VerticalTail.CHARACTERISTIC_LENGTH], 0.0, tol) - assert_near_equal(prob[Aircraft.VerticalTail.FINENESS], 0.11, tol) - # TotalWettedArea - assert_near_equal(prob[Aircraft.Design.TOTAL_WETTED_AREA], 35311.53118076, tol) - # Mass - # CargoMass - assert_near_equal(prob[Aircraft.CrewPayload.PASSENGER_MASS_TOTAL], 77220.0, tol) - assert_near_equal(prob[Aircraft.CrewPayload.BAGGAGE_MASS], 20592.0, tol) - assert_near_equal(prob[Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS], 97812.0, tol) - assert_near_equal(prob[Aircraft.CrewPayload.CARGO_MASS], 0.0, tol) - assert_near_equal(prob[Aircraft.CrewPayload.TOTAL_PAYLOAD_MASS], 97812.0, tol) - # TransportCargoContainersMass - assert_near_equal(prob[Aircraft.CrewPayload.CARGO_CONTAINER_MASS], 3850.0, tol) - # TransportEngineCtrlsMass - assert_near_equal(prob[Aircraft.Propulsion.TOTAL_ENGINE_CONTROLS_MASS], 206.36860226, tol) - # TransportAvionicsMass - assert_near_equal(prob[Aircraft.Avionics.MASS], 2896.223816950469, tol) - # FuelCapacityGroup - assert_near_equal(prob[Aircraft.Fuel.WING_FUEL_CAPACITY], 2385712.4988316689, tol) - assert_near_equal(prob[Aircraft.Fuel.TOTAL_CAPACITY], 2385712.4988316689, tol) - # EngineMass - assert_near_equal(prob[Aircraft.Engine.MASS], 17825.63336233, tol) - assert_near_equal(prob[Aircraft.Engine.ADDITIONAL_MASS], 0.0, tol) - assert_near_equal(prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 53476.90008698, tol) - # TransportFuelSystemMass - assert_near_equal(prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 8120.2023807944415, tol) - # TransportAirCondMass - assert_near_equal(prob[Aircraft.AirConditioning.MASS], 4383.96064972, tol) - # TransportEngineOilMass - assert_near_equal(prob[Aircraft.Propulsion.TOTAL_ENGINE_OIL_MASS], 346.93557352, tol) - # BWBFurnishingsGroupMass - assert_near_equal(prob[Aircraft.Furnishings.MASS], 61482.097969438299, tol) - # TransportHydraulicsGroupMass - assert_near_equal(prob[Aircraft.Hydraulics.MASS], 7368.5077321194321, tol) - # PassengerServiceMass - assert_near_equal( - prob[Aircraft.CrewPayload.PASSENGER_SERVICE_MASS], 10806.675950702213, tol - ) - # ElectricalMass - assert_near_equal(prob[Aircraft.Electrical.MASS], 4514.28869169, tol) - # AntiIcingMass - assert_near_equal(prob[Aircraft.AntiIcing.MASS], 519.37038003, tol) - # TransportAPUMass - assert_near_equal(prob[Aircraft.APU.MASS], 2148.13002234, tol) - # NonFlightCrewMass - assert_near_equal(prob[Aircraft.CrewPayload.CABIN_CREW_MASS], 3810.0, tol) - # FlightCrewMass - assert_near_equal(prob[Aircraft.CrewPayload.FLIGHT_CREW_MASS], 450.0, tol) - # TransportInstrumentMass - assert_near_equal(prob[Aircraft.Instruments.MASS], 1383.9538229392606, tol) - # EngineMiscMass - assert_near_equal(prob[Aircraft.Propulsion.TOTAL_MISC_MASS], 0.0, tol) - # NacelleMass - assert_near_equal(prob[Aircraft.Nacelle.MASS], 0.0, tol) - # PaintMass - assert_near_equal(prob[Aircraft.Paint.MASS], 0.0, tol) - # ThrustReverserMass - assert_near_equal(prob[Aircraft.Engine.THRUST_REVERSERS_MASS], 0.0, tol) - assert_near_equal(prob[Aircraft.Propulsion.TOTAL_THRUST_REVERSERS_MASS], 0.0, tol) - # LandingMassGroup - assert_near_equal(prob[Aircraft.Design.TOUCHDOWN_MASS_MAX], 699279.2, tol) - # SurfaceControlMass - assert_near_equal(prob[Aircraft.Wing.SURFACE_CONTROL_MASS], 14152.3734702, tol) - assert_near_equal(prob[Aircraft.Wing.CONTROL_SURFACE_AREA], 5513.13877521, tol) - # BWBFuselageMass - assert_near_equal(prob[Aircraft.Fuselage.MASS], 152790.66300003964, tol) - # HorizontalTailMass - assert_near_equal(prob[Aircraft.HorizontalTail.MASS], 0.0, tol) - # VerticalTailMass - assert_near_equal(prob[Aircraft.VerticalTail.MASS], 0.0, tol) - # CanardMass - assert_near_equal(prob[Aircraft.Canard.MASS], 0.0, tol) - # FinMass - assert_near_equal(prob[Aircraft.Fins.MASS], 3159.3781042368792, tol) - # WingMassGroup - # BWBDetailedWingBendingFact - assert_near_equal(prob[Aircraft.Wing.BENDING_MATERIAL_FACTOR], 2.68745091, tol) - assert_near_equal(prob[Aircraft.Wing.ENG_POD_INERTIA_FACTOR], 1.0, tol) - # BWBWingMiscMass - assert_near_equal(prob[Aircraft.Wing.MISC_MASS], 21498.83307778, tol) - # WingShearControlMass - assert_near_equal(prob[Aircraft.Wing.SHEAR_CONTROL_MASS], 38779.21499739, tol) - # WingBendingMass - assert_near_equal(prob[Aircraft.Wing.BENDING_MATERIAL_MASS], 6313.44762977, tol) - # BWBAftBodyMass - assert_near_equal(prob[Aircraft.Fuselage.AFTBODY_MASS], 24278.05868511, tol) - assert_near_equal(prob[Aircraft.Wing.BWB_AFTBODY_MASS], 20150.78870864, tol) - # MassSummation - # StructureMass - assert_near_equal(prob[Aircraft.Design.STRUCTURE_MASS], 273591.31917826, tol) - # PropulsionMass - assert_near_equal(prob[Aircraft.Propulsion.MASS], 61597.102467771889, tol) - # SystemsEquipMass - assert_near_equal( - prob[Aircraft.Design.SYSTEMS_AND_EQUIPMENT_MASS], 98848.9061107412710, tol - ) - # EmptyMass - assert_near_equal(prob[Aircraft.Design.EMPTY_MASS], 434037.32820147, tol) - # OperatingMass - assert_near_equal(prob[Mission.OPERATING_MASS], 455464.65969526308, tol) - # ZeroFuelMass - assert_near_equal(prob[Mission.ZERO_FUEL_MASS], 553276.65969526302, tol) - # TODO: test some aero variables + # Aerodynamics + # Design + assert_near_equal(prob[Aircraft.Design.MACH], 0.91589163, tol) + assert_near_equal(prob[Aircraft.Design.LIFT_COEFFICIENT], 0.3487563, tol) @use_tempdirs @@ -916,7 +775,7 @@ def test_case_geom(self): # Geometry # BWBComputeDetailedWingDist assert_near_equal(prob[Aircraft.Wing.SPAN], 253.720756, tol) - # BWBSimpleCabinLayout + # DetailedCabinLayout assert_near_equal(prob[Aircraft.Fuselage.PASSENGER_COMPARTMENT_LENGTH], 78.61013558, tol) assert_near_equal(prob[Aircraft.Wing.ROOT_CHORD], 38.5, tol) assert_near_equal(prob[Aircraft.Fuselage.CABIN_AREA], 4697.33181006, tol) @@ -1114,96 +973,174 @@ def test_case_all_subsystems(self): tol = 1e-4 assert_near_equal(prob[Aircraft.Propulsion.TOTAL_SCALED_SLS_THRUST], 70000.0 * 3, tol) + # Aerodynamics + # Design + assert_near_equal(prob[Aircraft.Design.MACH], 0.89489036, tol) + assert_near_equal(prob[Aircraft.Design.LIFT_COEFFICIENT], 0.42836987, tol) + + +@use_tempdirs +class BWB300PreMissionGroupCSVTest(unittest.TestCase): + """ + testing using bwb_detailed_FLOPS.csv + """ + + def setUp(self): + prob = self.prob = AviaryProblem() + + csv_path = 'models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.csv' + self.flops_inputs = prob.load_inputs(csv_path) + prob.check_and_preprocess_inputs() + + def test_case_geom(self): + """ + premission: geometry + """ + prob = self.prob + + preprocess_options(self.flops_inputs) + geom_subsystem = get_geom_and_mass_subsystems('FLOPS')[0:1] + + prob.model.add_subsystem( + 'pre_mission', + CorePreMission( + aviary_options=self.flops_inputs, + subsystems=geom_subsystem, + subsystem_options={}, + ), + promotes_inputs=['*'], + promotes_outputs=['*'], + ) + + setup_model_options(prob, self.flops_inputs) + prob.setup(check=False) + set_aviary_initial_values(prob, self.flops_inputs) + + prob.run_model() + + tol = 1e-5 # Geometry - # BWBSimpleCabinLayout - assert_near_equal(prob[Aircraft.Fuselage.PASSENGER_COMPARTMENT_LENGTH], 78.61013558, tol) + # BWBComputeDetailedWingDist + assert_near_equal(prob[Aircraft.Wing.SPAN], 186.631829293424, tol) + # DetailedCabinLayout + assert_near_equal(prob[Aircraft.Fuselage.MAX_WIDTH], 49.77182929, tolerance=1e-9) + assert_near_equal(prob[Aircraft.Fuselage.PASSENGER_COMPARTMENT_LENGTH], 81.60326742, tol) assert_near_equal(prob[Aircraft.Wing.ROOT_CHORD], 38.5, tol) - assert_near_equal(prob[Aircraft.Fuselage.CABIN_AREA], 4697.33181006, tol) - assert_near_equal(prob[Aircraft.Fuselage.MAX_HEIGHT], 12.35302131, tol) - assert_near_equal(prob[Aircraft.BWB.NUM_BAYS], 7.0, tol) + assert_near_equal(prob[Aircraft.Fuselage.CABIN_AREA], 2988.879661796, tol) + assert_near_equal(prob[Aircraft.Fuselage.MAX_HEIGHT], 20.89043646, tol) + assert_near_equal(prob[Aircraft.BWB.NUM_BAYS], 4.0, tol) # BWBFuselagePrelim - assert_near_equal(prob[Aircraft.Fuselage.REF_DIAMETER], 46.2868886894979, tol) - assert_near_equal(prob[Aircraft.Fuselage.PLANFORM_AREA], 6710.4740143724875, tol) + assert_near_equal(prob[Aircraft.Fuselage.REF_DIAMETER], 35.33113288, tol) + assert_near_equal(prob[Aircraft.Fuselage.PLANFORM_AREA], 4269.82808827, tol) # BWBWingPrelim - assert_near_equal(prob[Aircraft.Wing.AREA], 12109.879719468739, tol) - assert_near_equal(prob[Aircraft.Wing.ASPECT_RATIO], 5.36951675, tol) - assert_near_equal(prob[Aircraft.Wing.ASPECT_RATIO_REFERENCE], 5.36951675, tol) - assert_near_equal(prob[Aircraft.Wing.LOAD_FRACTION], 0.46761341784858923, tol) - # BWBWingWettedArea - assert_near_equal(prob[Aircraft.Wing.WETTED_AREA], 24713.66129084, tol) - # TailWettedArea - assert_near_equal(prob[Aircraft.HorizontalTail.WETTED_AREA], 0.0, tol) - assert_near_equal(prob[Aircraft.VerticalTail.WETTED_AREA], 0.0, tol) + assert_near_equal(prob[Aircraft.Wing.AREA], 8421.7146805052689, tol) + assert_near_equal(prob[Aircraft.Wing.ASPECT_RATIO], 4.84361005, tol) + assert_near_equal( + prob['AIRCRAFT_DATA_OVERRIDE:aircraft:wing:aspect_ratio_reference'], 4.84361005, tol + ) + # assert_near_equal(prob[Aircraft.Wing.LOAD_FRACTION], 0.46761341784858923, tol) + # _BWBWing + assert_near_equal(prob[Aircraft.Wing.WETTED_AREA], 17302.04910213, tol) + # _Tail + assert_near_equal(prob[Aircraft.HorizontalTail.WETTED_AREA], 983.26501, tol) + assert_near_equal(prob[Aircraft.VerticalTail.WETTED_AREA], 125.0, tol) # _FuselageRatios - assert_near_equal(prob[Aircraft.Fuselage.DIAMETER_TO_WING_SPAN], 0.18243240878599712, tol) - assert_near_equal(prob[Aircraft.Fuselage.LENGTH_TO_DIAMETER], 2.4261771932742167, tol) - # NacelleWettedArea - assert_near_equal(prob[Aircraft.Nacelle.WETTED_AREA], 498.26822066, tol) - assert_near_equal(prob[Aircraft.Nacelle.TOTAL_WETTED_AREA], 3 * 498.26822066, tol) + assert_near_equal(prob[Aircraft.Fuselage.DIAMETER_TO_WING_SPAN], 0.18930926, tol) + assert_near_equal(prob[Aircraft.Fuselage.LENGTH_TO_DIAMETER], 3.29952897, tol) + # Nacelles + assert_near_equal(prob[Aircraft.Nacelle.WETTED_AREA], 613.74211034217353, tol) + assert_near_equal(prob[Aircraft.Nacelle.TOTAL_WETTED_AREA], 2 * 613.7421103421735, tol) # Canard assert_near_equal(prob[Aircraft.Canard.WETTED_AREA], 0.0, tol) # BWBWingCharacteristicLength - assert_near_equal(prob[Aircraft.Wing.CHARACTERISTIC_LENGTH], 47.72916456, tol) + assert_near_equal(prob[Aircraft.Wing.CHARACTERISTIC_LENGTH], 45.124750222881779, tol) assert_near_equal(prob[Aircraft.Wing.FINENESS], 0.11, tol) # OtherCharacteristicLengths assert_near_equal(prob[Aircraft.Canard.CHARACTERISTIC_LENGTH], 0.0, tol) assert_near_equal(prob[Aircraft.Canard.FINENESS], 0.0, tol) - assert_near_equal(prob[Aircraft.Fuselage.CHARACTERISTIC_LENGTH], 112.3001936860821, tol) - assert_near_equal(prob[Aircraft.Fuselage.FINENESS], 2.4261771932742167, tol) - assert_near_equal(prob[Aircraft.HorizontalTail.CHARACTERISTIC_LENGTH], 0.0, tol) - assert_near_equal(prob[Aircraft.HorizontalTail.FINENESS], 0.11, tol) - assert_near_equal(prob[Aircraft.Nacelle.CHARACTERISTIC_LENGTH], [15.68611614], tol) - assert_near_equal(prob[Aircraft.Nacelle.FINENESS], [1.38269353], tol) - assert_near_equal(prob[Aircraft.VerticalTail.CHARACTERISTIC_LENGTH], 0.0, tol) - assert_near_equal(prob[Aircraft.VerticalTail.FINENESS], 0.11, tol) + assert_near_equal(prob[Aircraft.Fuselage.CHARACTERISTIC_LENGTH], 116.5760963133181, tol) + assert_near_equal(prob[Aircraft.Fuselage.FINENESS], 3.2995289656062941, tol) + assert_near_equal(prob[Aircraft.HorizontalTail.CHARACTERISTIC_LENGTH], 26.45751311065, tol) + assert_near_equal(prob[Aircraft.HorizontalTail.FINENESS], 0.1, tol) + assert_near_equal(prob[Aircraft.Nacelle.CHARACTERISTIC_LENGTH], [17.367966592444596], tol) + assert_near_equal(prob[Aircraft.Nacelle.FINENESS], [1.3761635770546583], tol) # TotalWettedArea - assert_near_equal(prob[Aircraft.Design.TOTAL_WETTED_AREA], 26208.46595187, tol) + assert_near_equal(prob[Aircraft.Design.TOTAL_WETTED_AREA], 19637.79833526, tol) + + def test_case_geom_mass(self): + """ + premission: geometry + mass + """ + prob = self.prob + + preprocess_options(self.flops_inputs) + geom_mass_subsystems = get_geom_and_mass_subsystems('FLOPS') + + prob.model.add_subsystem( + 'pre_mission', + CorePreMission( + aviary_options=self.flops_inputs, + subsystems=geom_mass_subsystems, + subsystem_options={}, + ), + promotes_inputs=['*'], + promotes_outputs=['*'], + ) + + setup_model_options(prob, self.flops_inputs) + prob.setup(check=False) + set_aviary_initial_values(prob, self.flops_inputs) + + prob.set_val(Aircraft.Propulsion.TOTAL_SCALED_SLS_THRUST, val=87500.0 * 2, units='lbf') + + prob.run_model() + + # Only masses are checked because geometry is checked in test_case_geom() already. + tol = 1e-4 # Mass # CargoMass - assert_near_equal(prob[Aircraft.CrewPayload.PASSENGER_MASS_TOTAL], 77220.0, tol) - assert_near_equal(prob[Aircraft.CrewPayload.BAGGAGE_MASS], 20592.0, tol) - assert_near_equal(prob[Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS], 97812.0, tol) + assert_near_equal(prob[Aircraft.CrewPayload.PASSENGER_MASS_TOTAL], 49500.0, tol) + assert_near_equal(prob[Aircraft.CrewPayload.BAGGAGE_MASS], 13200.0, tol) + assert_near_equal(prob[Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS], 62700.0, tol) assert_near_equal(prob[Aircraft.CrewPayload.CARGO_MASS], 0.0, tol) - assert_near_equal(prob[Aircraft.CrewPayload.TOTAL_PAYLOAD_MASS], 97812.0, tol) + assert_near_equal(prob[Aircraft.CrewPayload.TOTAL_PAYLOAD_MASS], 62700.0, tol) # TransportCargoContainersMass - assert_near_equal(prob[Aircraft.CrewPayload.CARGO_CONTAINER_MASS], 3850.0, tol) + assert_near_equal(prob[Aircraft.CrewPayload.CARGO_CONTAINER_MASS], 23500.0, tol) # TransportEngineCtrlsMass - assert_near_equal(prob[Aircraft.Propulsion.TOTAL_ENGINE_CONTROLS_MASS], 206.36860226, tol) + assert_near_equal(prob[Aircraft.Propulsion.TOTAL_ENGINE_CONTROLS_MASS], 153.81807436, tol) # TransportAvionicsMass - assert_near_equal(prob[Aircraft.Avionics.MASS], 2778.5110590964073, tol) + assert_near_equal(prob[Aircraft.Avionics.MASS], 2280.13561342, tol) # FuelCapacityGroup - assert_near_equal(prob[Aircraft.Fuel.WING_FUEL_CAPACITY], 1197720.2419621395, tol) - assert_near_equal(prob[Aircraft.Fuel.TOTAL_CAPACITY], 1197720.2419621395, tol) + assert_near_equal(prob[Aircraft.Fuel.WING_FUEL_CAPACITY], 787493.65267018, tol) + assert_near_equal(prob[Aircraft.Fuel.TOTAL_CAPACITY], 787493.65267018, tol) # EngineMass - assert_near_equal(prob[Aircraft.Engine.MASS], 17825.63336233, tol) + assert_near_equal(prob[Aircraft.Engine.MASS], 44541.857940875525 / 2, tol) assert_near_equal(prob[Aircraft.Engine.ADDITIONAL_MASS], 0.0, tol) - assert_near_equal(prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 53476.90008698, tol) + assert_near_equal(prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 44541.857940875525, tol) # TransportFuelSystemMass - assert_near_equal(prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 5444.9572934402777, tol) + assert_near_equal(prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 3656.7260445688612, tol) # TransportAirCondMass - assert_near_equal(prob[Aircraft.AirConditioning.MASS], 3897.6527857555625, tol) + assert_near_equal(prob[Aircraft.AirConditioning.MASS], 3781.61256774, tol) # TransportEngineOilMass - assert_near_equal(prob[Aircraft.Propulsion.TOTAL_ENGINE_OIL_MASS], 346.93557352, tol) + assert_near_equal(prob[Aircraft.Propulsion.TOTAL_ENGINE_OIL_MASS], 267.39241429019251, tol) # BWBFurnishingsGroupMass - assert_near_equal(prob[Aircraft.Furnishings.MASS], 57747.97136452, tol) + assert_near_equal(prob[Aircraft.Furnishings.MASS], 52096.553437128503, tol) # TransportHydraulicsGroupMass - assert_near_equal(prob[Aircraft.Hydraulics.MASS], 6200.37391189, tol) + assert_near_equal(prob[Aircraft.Hydraulics.MASS], 3962.6923427813854, tol) # PassengerServiceMass - assert_near_equal( - prob[Aircraft.CrewPayload.PASSENGER_SERVICE_MASS], 10806.675950702213, tol - ) + assert_near_equal(prob[Aircraft.CrewPayload.PASSENGER_SERVICE_MASS], 7029.593528180887, tol) # ElectricalMass - assert_near_equal(prob[Aircraft.Electrical.MASS], 4291.4778106479534, tol) + assert_near_equal(prob[Aircraft.Electrical.MASS], 2646.52723481, tol) # AntiIcingMass - assert_near_equal(prob[Aircraft.AntiIcing.MASS], 562.09100951165135, tol) + assert_near_equal(prob[Aircraft.AntiIcing.MASS], 400.3921819029477, tol) # TransportAPUMass - assert_near_equal(prob[Aircraft.APU.MASS], 2125.8280135763703, tol) + assert_near_equal(prob[Aircraft.APU.MASS], 1578.8098560285962, tol) # NonFlightCrewMass - assert_near_equal(prob[Aircraft.CrewPayload.CABIN_CREW_MASS], 3810.0, tol) + assert_near_equal(prob[Aircraft.CrewPayload.CABIN_CREW_MASS], 1640.0, tol) # FlightCrewMass assert_near_equal(prob[Aircraft.CrewPayload.FLIGHT_CREW_MASS], 450.0, tol) # TransportInstrumentMass - assert_near_equal(prob[Aircraft.Instruments.MASS], 1309.88942193, tol) + assert_near_equal(prob[Aircraft.Instruments.MASS], 961.543462363, tol) # EngineMiscMass assert_near_equal(prob[Aircraft.Propulsion.TOTAL_MISC_MASS], 0.0, tol) # NacelleMass @@ -1214,51 +1151,81 @@ def test_case_all_subsystems(self): assert_near_equal(prob[Aircraft.Engine.THRUST_REVERSERS_MASS], 0.0, tol) assert_near_equal(prob[Aircraft.Propulsion.TOTAL_THRUST_REVERSERS_MASS], 0.0, tol) # LandingMassGroup - assert_near_equal(prob[Aircraft.Design.TOUCHDOWN_MASS_MAX], 699279.2, tol) + assert_near_equal(prob[Aircraft.Design.TOUCHDOWN_MASS_MAX], 420000.0, tol) # SurfaceControlMass - assert_near_equal(prob[Aircraft.Wing.SURFACE_CONTROL_MASS], 11731.15573539, tol) - assert_near_equal(prob[Aircraft.Wing.CONTROL_SURFACE_AREA], 4032.5967, tol) + assert_near_equal(prob[Aircraft.Wing.SURFACE_CONTROL_MASS], 8093.1997108029764, tol) + assert_near_equal(prob[Aircraft.Wing.CONTROL_SURFACE_AREA], 2526.5144041515805, tol) # BWBFuselageMass - assert_near_equal(prob[Aircraft.Fuselage.MASS], 137935.30594648936, tol) + assert_near_equal(prob[Aircraft.Fuselage.MASS], 80216.313556241628, tol) # HorizontalTailMass - assert_near_equal(prob[Aircraft.HorizontalTail.MASS], 0.0, tol) + assert_near_equal(prob[Aircraft.HorizontalTail.MASS], 6444.9988831532046, tol) # VerticalTailMass assert_near_equal(prob[Aircraft.VerticalTail.MASS], 0.0, tol) # CanardMass assert_near_equal(prob[Aircraft.Canard.MASS], 0.0, tol) # FinMass - assert_near_equal(prob[Aircraft.Fins.MASS], 3159.3781042368792, tol) + assert_near_equal(prob[Aircraft.Fins.MASS], 2822.1415450307886, tol) # WingMassGroup - # BWBDetailedWingBendingFact - assert_near_equal(prob[Aircraft.Wing.BENDING_MATERIAL_FACTOR], 3.93743732, tol) + # BWBDetailedWingBendingFact, In FLOPS run, 6.7996347825592336 + assert_near_equal(prob[Aircraft.Wing.BENDING_MATERIAL_FACTOR], 5.20084141, tol) assert_near_equal(prob[Aircraft.Wing.ENG_POD_INERTIA_FACTOR], 1.0, tol) # BWBWingMiscMass - assert_near_equal(prob[Aircraft.Wing.MISC_MASS], 9720.4199027685518, tol) + assert_near_equal(prob[Aircraft.Wing.MISC_MASS], 6975.77622754, tol) # WingShearControlMass - assert_near_equal(prob[Aircraft.Wing.SHEAR_CONTROL_MASS], 34867.592407371565, tol) + assert_near_equal(prob[Aircraft.Wing.SHEAR_CONTROL_MASS], 24461.161868706797, tol) # WingBendingMass - assert_near_equal(prob[Aircraft.Wing.BENDING_MATERIAL_MASS], 8782.85692049, tol) + assert_near_equal(prob[Aircraft.Wing.BENDING_MATERIAL_MASS], 13872.4182868, tol) # BWBAftBodyMass - assert_near_equal(prob[Aircraft.Fuselage.AFTBODY_MASS], 18736.55008878, tol) - assert_near_equal(prob[Aircraft.Wing.BWB_AFTBODY_MASS], 15551.33657368, tol) + assert_near_equal(prob[Aircraft.Fuselage.AFTBODY_MASS], 10384.964957095559, tol) + assert_near_equal(prob[Aircraft.Wing.BWB_AFTBODY_MASS], 8884.3375208, tol) # MassSummation - # StructureMass - assert_near_equal(prob[Aircraft.Design.STRUCTURE_MASS], 240915.88664709, tol) + # StructureMass 158921.83401643133 + assert_near_equal(prob[Aircraft.Design.STRUCTURE_MASS], 162969.90469722, tol) # PropulsionMass - assert_near_equal(prob[Aircraft.Propulsion.MASS], 58921.857380417721, tol) + assert_near_equal(prob[Aircraft.Propulsion.MASS], 48198.583985444384, tol) # SystemsEquipMass - assert_near_equal(prob[Aircraft.Design.SYSTEMS_AND_EQUIPMENT_MASS], 90644.95111232, tol) + assert_near_equal(prob[Aircraft.Design.SYSTEMS_AND_EQUIPMENT_MASS], 75801.466406974854, tol) # EmptyMass - assert_near_equal(prob[Aircraft.Design.EMPTY_MASS], 390482.6804821, tol) + assert_near_equal(prob[Aircraft.Design.EMPTY_MASS], 286969.99768419, tol) # OperatingMass - assert_near_equal(prob[Mission.OPERATING_MASS], 411479.0724484, tol) + assert_near_equal(prob[Mission.OPERATING_MASS], 321171.82272983, tol) # ZeroFuelMass - assert_near_equal(prob[Mission.ZERO_FUEL_MASS], 509291.0724484, tol) - # TODO: test some aero variables + assert_near_equal(prob[Mission.ZERO_FUEL_MASS], 383871.82272983, tol) + + def test_case_all_subsystems(self): + """ + premission: propulsion + geometry + aerodynamics + mass + Note: not checking propulsion and aerodynamics + """ + prob = self.prob + + engines = [build_engine_deck(self.flops_inputs)] + preprocess_options(self.flops_inputs) + default_premission_subsystems = get_default_premission_subsystems('FLOPS', engines=engines) + + prob.model.add_subsystem( + 'pre_mission', + CorePreMission( + aviary_options=self.flops_inputs, + subsystems=default_premission_subsystems, + subsystem_options={}, + ), + promotes_inputs=['*'], + promotes_outputs=['*'], + ) + + setup_model_options(prob, self.flops_inputs) + prob.setup(check=False) + set_aviary_initial_values(prob, self.flops_inputs) + + prob.run_model() + + # Only aero parameters are checked because geometry and mass are checked in test_case_geom() already. + tol = 1e-4 + # Design + assert_near_equal(prob[Aircraft.Design.MACH], 0.89939238, tol) + assert_near_equal(prob[Aircraft.Design.LIFT_COEFFICIENT], 0.40810915, tol) if __name__ == '__main__': unittest.main() - # test = BWBPreMissionGroupTest() - # test.setUp() - # test.test_case_geom() diff --git a/aviary/utils/fortran_to_aviary.py b/aviary/utils/fortran_to_aviary.py index 9803ffd784..34d64ec811 100644 --- a/aviary/utils/fortran_to_aviary.py +++ b/aviary/utils/fortran_to_aviary.py @@ -1164,6 +1164,7 @@ def update_flops_options(vehicle_data, verbosity=Verbosity.BRIEF): (Aircraft.Fuselage.PASSENGER_COMPARTMENT_LENGTH, 'ft'), (Aircraft.Fuselage.LENGTH, 'ft'), (Aircraft.Fuselage.MAX_WIDTH, 'ft'), + (Aircraft.Design.EMPTY_MASS, 'lbm'), ] for var in rem_list: try: @@ -1173,6 +1174,18 @@ def update_flops_options(vehicle_data, verbosity=Verbosity.BRIEF): except: pass + # These variables should be removed if they are negative. + rem_list = [ + (Aircraft.CrewPayload.BAGGAGE_MASS_PER_PASSENGER, 'lbm'), + ] + for var in rem_list: + try: + val = input_values.get_val(var[0], var[1])[0] + if val < 0.0: + input_values.delete(var[0]) + except: + pass + if design_type[0] != 3: input_values.delete(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP) diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index d3fd791b7f..cdc1acc206 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -49,6 +49,30 @@ def preprocess_options(aviary_options: AviaryValues, meta_data=_MetaData, verbos if engine_models is not None: preprocess_propulsion(aviary_options, engine_models, meta_data, verbosity) + if Aircraft.Wing.ASPECT_RATIO_REFERENCE in aviary_options: + arref = aviary_options.get_val(Aircraft.Wing.ASPECT_RATIO_REFERENCE) + if (np.isscalar(arref) and arref == 0) or (not np.isscalar(arref) and arref[0] == 0): + if Aircraft.Wing.ASPECT_RATIO in aviary_options: + ar = aviary_options.get_val(Aircraft.Wing.ASPECT_RATIO) + aviary_options.set_val(Aircraft.Wing.ASPECT_RATIO_REFERENCE, ar, 'unitless') + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Assume Aircraft.Wing.ASPECT_RATIO_REFERENCE is the same ' + 'as Aircraft.Wing.ASPECT_RATIO.' + ) + + if Aircraft.Wing.THICKNESS_TO_CHORD_REFERENCE in aviary_options: + tcref = aviary_options.get_val(Aircraft.Wing.THICKNESS_TO_CHORD_REFERENCE) + if (np.isscalar(tcref) and tcref == 0) or (not np.isscalar(tcref) and tcref[0] == 0): + if Aircraft.Wing.THICKNESS_TO_CHORD in aviary_options: + tc = aviary_options.get_val(Aircraft.Wing.THICKNESS_TO_CHORD) + aviary_options.set_val(Aircraft.Wing.THICKNESS_TO_CHORD_REFERENCE, tc, 'unitless') + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Assume Aircraft.Wing.THICKNESS_TO_CHORD_REFERENCE is the same ' + 'as Aircraft.Wing.THICKNESS_TO_CHORD.' + ) + # this function is not used def remove_preprocessed_options(aviary_options): @@ -401,6 +425,7 @@ def preprocess_crewpayload(aviary_options: AviaryValues, meta_data=_MetaData, ve # Process FLOPS based crew variables if mass_method == LegacyCode.FLOPS: + # TODO: check if this is excuted. # Check flight attendants if ( Aircraft.CrewPayload.NUM_FLIGHT_ATTENDANTS not in aviary_options diff --git a/aviary/validation_cases/benchmark_tests/test_bwb_FwFm.py b/aviary/validation_cases/benchmark_tests/test_bwb_FwFm.py index 3ae7e98c0a..a3e2b7e552 100644 --- a/aviary/validation_cases/benchmark_tests/test_bwb_FwFm.py +++ b/aviary/validation_cases/benchmark_tests/test_bwb_FwFm.py @@ -167,6 +167,56 @@ def test_bench_bwb_FwFm_SNOPT(self): # assert_near_equal(prob.get_val(Mission.RANGE, units='NM'), 7750.0, tolerance=rtol) +# @use_tempdirs +class BWB300ProblemPhaseTestCase(unittest.TestCase): + """ + Test the setup and run of a BWB aircraft using FLOPS mass and aero method + and HEIGHT_ENERGY mission method. Expected outputs based on + 'models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.csv' model. + """ + + def setUp(self): + _clear_problem_names() # need to reset these to simulate separate runs + + @require_pyoptsparse(optimizer='SNOPT') + def test_bench_bwb300_FwFm_SNOPT(self): + local_phase_info = deepcopy(phase_info) + prob = run_aviary( + 'models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.csv', + local_phase_info, + optimizer='SNOPT', + verbosity=1, + max_iter=60, + ) + # prob.model.list_vars(units=True, print_arrays=True) + # prob.list_indep_vars() + # prob.list_problem_vars() + # prob.model.list_outputs() + + rtol = 1e-3 + + # There are no truth values for these. + assert_near_equal( + prob.get_val(Mission.Design.GROSS_MASS, units='lbm'), + 612316.18409159, + tolerance=rtol, + ) + + assert_near_equal( + prob.get_val(Mission.Summary.OPERATING_MASS, units='lbm'), + 322535.11792879, + tolerance=rtol, + ) + + assert_near_equal( + prob.get_val(Mission.Summary.TOTAL_FUEL_MASS, units='lbm'), + 227081.00913178, + tolerance=rtol, + ) + + assert_near_equal(prob.get_val(Mission.Summary.RANGE, units='NM'), 7750.0, tolerance=rtol) + + if __name__ == '__main__': # unittest.main() test = BWBProblemPhaseTestCase() diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index 69158dadb6..0203d5da9f 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -353,6 +353,21 @@ default_value=True, ) +add_meta_data( + Aircraft.BWB.MAX_BAY_WIDTH, + meta_data=_MetaData, + historical_name={ + 'GASP': None, + 'FLOPS': 'FUSEIN.BAYWMX', + 'LEAPS1': None, + }, + units='ft', + desc='maximum bay width', + types=float, + option=True, + default_value=0, +) + add_meta_data( Aircraft.BWB.MAX_NUM_BAYS, meta_data=_MetaData, @@ -1164,7 +1179,7 @@ meta_data=_MetaData, historical_name={'GASP': None, 'FLOPS': 'FUSEIN.NBABR', 'LEAPS1': None}, units='unitless', - desc='Number of business class passengers abreast', + desc='Number of business class seats abreast. If 0, use default.', types=int, option=True, default_value=5, @@ -1175,7 +1190,7 @@ meta_data=_MetaData, historical_name={'GASP': 'INGASP.SAB', 'FLOPS': 'FUSEIN.NTABR', 'LEAPS1': None}, units='unitless', - desc='Number of economy class passengers abreast', + desc='Number of economy class seats abreast. If 0, use default.', types=int, option=True, default_value=6, @@ -1186,7 +1201,7 @@ meta_data=_MetaData, historical_name={'GASP': None, 'FLOPS': 'FUSEIN.NFABR', 'LEAPS1': None}, units='unitless', - desc='Number of first class passengers abreast', + desc='Number of first class seats abreast. If 0, use default.', types=int, option=True, default_value=4, @@ -1197,9 +1212,9 @@ meta_data=_MetaData, historical_name={'GASP': None, 'FLOPS': 'FUSEIN.BPITCH', 'LEAPS1': None}, units='inch', - desc='pitch of the business class seats', + desc='pitch of the business class seats. If 0, use default.', option=True, - default_value=0.0, + default_value=39.0, ) add_meta_data( @@ -1207,9 +1222,9 @@ meta_data=_MetaData, historical_name={'GASP': 'INGASP.PS', 'FLOPS': 'FUSEIN.TPITCH', 'LEAPS1': None}, units='inch', - desc='pitch of the economy class seats', + desc='pitch of the economy class seats. If 0, use default.', option=True, - default_value=0.0, + default_value=32.0, ) add_meta_data( @@ -1217,9 +1232,9 @@ meta_data=_MetaData, historical_name={'GASP': None, 'FLOPS': 'FUSEIN.FPITCH', 'LEAPS1': None}, units='inch', - desc='pitch of the first class seats', + desc='pitch of the first class seats. If 0, use default.', option=True, - default_value=0.0, + default_value=61.0, ) # _____ _ @@ -3828,6 +3843,15 @@ default_value=0.0, ) +add_meta_data( + Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, + meta_data=_MetaData, + historical_name={'GASP': None, 'FLOPS': 'WTIN.TCSOB', 'LEAPS1': None}, + units='unitless', + desc='fuselage thickness/chord ratio at side of body', + default_value=0.0, +) + add_meta_data( Aircraft.Fuselage.SIMPLE_LAYOUT, meta_data=_MetaData, diff --git a/aviary/variable_info/variables.py b/aviary/variable_info/variables.py index aaadf2ef60..020eba402d 100644 --- a/aviary/variable_info/variables.py +++ b/aviary/variable_info/variables.py @@ -37,6 +37,7 @@ class Battery: class BWB: DETAILED_WING_PROVIDED = 'aircraft:blended_wing_body_design:detailed_wing_provided' + MAX_BAY_WIDTH = 'aircraft:blended_wing_body_design:max_bay_width' MAX_NUM_BAYS = 'aircraft:blended_wing_body_design:max_num_bays' NUM_BAYS = 'aircraft:blended_wing_body_design:num_bays' PASSENGER_LEADING_EDGE_SWEEP = ( @@ -327,6 +328,7 @@ class Fuselage: PRESSURIZED_WIDTH_ADDITIONAL = 'aircraft:fuselage:pressurized_width_additional' REF_DIAMETER = 'aircraft:fuselage:ref_diameter' SEAT_WIDTH = 'aircraft:fuselage:seat_width' + SIDEBODY_THICKNESS_TO_CHORD = 'aircraft:fuselage:sidebody_thickness_to_chord' SIMPLE_LAYOUT = 'aircraft:fuselage:simple_layout' TAIL_FINENESS = 'aircraft:fuselage:tail_fineness' WETTED_AREA = 'aircraft:fuselage:wetted_area'