Esempio n. 1
0
def simple_sizing(nexus):
    configs = nexus.vehicle_configurations
    analyses = nexus.analyses
    base = configs.base

    m_guess = nexus.m_guess  #take in sizing inputs
    base.mass_properties.max_takeoff = m_guess

    #find conditions
    air_speed = nexus.missions.base.segments['cruise'].air_speed
    altitude = nexus.missions.base.segments['climb_3'].altitude_end
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    freestream = atmosphere.compute_values(altitude)
    freestream0 = atmosphere.compute_values(6000. * Units.ft)  #cabin altitude

    diff_pressure = np.max(freestream0.pressure - freestream.pressure, 0)
    fuselage = base.fuselages['fuselage']
    fuselage.differential_pressure = diff_pressure

    #now size engine
    mach_number = air_speed / freestream.speed_of_sound

    #now add to freestream data object
    freestream.velocity = air_speed
    freestream.mach_number = mach_number
    freestream.gravity = SUAVE.Attributes.Planets.Earth().sea_level_gravity

    #assign conditions in form for propulsor sizing
    conditions = SUAVE.Analyses.Mission.Segments.Conditions.Aerodynamics()
    conditions.freestream = freestream
    nose_load_fraction = .06

    #now evaluate all of the vehicle configurations
    for config in configs:
        config.wings.horizontal_stabilizer.areas.reference = (
            26.0 / 92.0) * config.wings.main_wing.areas.reference

        for wing in config.wings:

            wing = SUAVE.Methods.Geometry.Two_Dimensional.Planform.wing_planform(
                wing)

            wing.areas.exposed = 0.8 * wing.areas.wetted
            wing.areas.affected = 0.6 * wing.areas.reference

        fuselage = config.fuselages['fuselage']
        fuselage.differential_pressure = diff_pressure

        # now evaluate weights
        # diff the new data

        config.mass_properties.max_takeoff = m_guess  #take in parameters
        config.mass_properties.takeoff = m_guess
        config.mass_properties.max_zero_fuel = base.mass_properties.max_zero_fuel
        config.store_diff()

    # now evaluate the weights
    weights = analyses.base.weights.evaluate()

    # update zfw
    empty_weight = base.mass_properties.operating_empty
    payload = base.mass_properties.max_payload
    zfw = empty_weight + payload

    base.max_zero_fuel = zfw
    base.store_diff()
    for config in configs:
        config.pull_base()

    # ------------------------------------------------------------------
    #   Landing Configuration
    # ------------------------------------------------------------------
    landing = nexus.vehicle_configurations.landing
    landing_conditions = Data()
    landing_conditions.freestream = Data()

    # landing weight
    landing.mass_properties.landing = base.mass_properties.max_zero_fuel

    # Landing CL_max
    altitude = nexus.missions.base.segments[-1].altitude_end
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    freestream = atmosphere.compute_values(altitude)
    mu = freestream.dynamic_viscosity
    rho = freestream.density

    landing_conditions.freestream.velocity = nexus.missions.base.segments[
        'descent_3'].air_speed
    landing_conditions.freestream.density = rho
    landing_conditions.freestream.dynamic_viscosity = mu / rho
    CL_max_landing, CDi = compute_max_lift_coeff(landing, landing_conditions)
    landing.maximum_lift_coefficient = CL_max_landing

    # diff the new data
    landing.store_diff()

    #Takeoff CL_max
    takeoff = nexus.vehicle_configurations.takeoff
    takeoff_conditions = Data()
    takeoff_conditions.freestream = Data()
    altitude = nexus.missions.base.airport.altitude
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    freestream = atmosphere.compute_values(altitude)
    mu = freestream.dynamic_viscosity
    rho = freestream.density
    takeoff_conditions.freestream.velocity = nexus.missions.base.segments.climb_1.air_speed
    takeoff_conditions.freestream.density = rho
    takeoff_conditions.freestream.dynamic_viscosity = mu / rho
    max_CL_takeoff, CDi = compute_max_lift_coeff(takeoff, takeoff_conditions)
    takeoff.maximum_lift_coefficient = max_CL_takeoff

    takeoff.store_diff()

    #Base config CL_max
    base = nexus.vehicle_configurations.base
    base_conditions = Data()
    base_conditions.freestream = Data()
    altitude = nexus.missions.base.airport.altitude
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    freestream = atmosphere.compute_values(altitude)
    mu = freestream.dynamic_viscosity
    rho = freestream.density

    base_conditions.freestream.velocity = nexus.missions.base.segments.climb_1.air_speed
    base_conditions.freestream.density = rho
    base_conditions.freestream.dynamic_viscosity = mu / rho
    max_CL_base, CDi = compute_max_lift_coeff(base, base_conditions)
    base.maximum_lift_coefficient = max_CL_base
    base.store_diff()

    # done!

    return nexus
Esempio n. 2
0
def simple_sizing(nexus):
    configs = nexus.vehicle_configurations
    base = configs.base

    #find conditions
    air_speed = nexus.missions.base.segments['cruise'].air_speed
    altitude = nexus.missions.base.segments['climb_5'].altitude_end
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()

    freestream = atmosphere.compute_values(altitude)
    freestream0 = atmosphere.compute_values(6000. * Units.ft)  #cabin altitude

    diff_pressure = np.max(freestream0.pressure - freestream.pressure, 0)
    fuselage = base.fuselages['fuselage']
    fuselage.differential_pressure = diff_pressure

    #now size engine
    mach_number = air_speed / freestream.speed_of_sound

    #now add to freestream data object
    freestream.velocity = air_speed
    freestream.mach_number = mach_number
    freestream.gravity = 9.81

    conditions = SUAVE.Analyses.Mission.Segments.Conditions.Aerodynamics(
    )  #assign conditions in form for propulsor sizing
    conditions.freestream = freestream

    for config in configs:
        config.wings.horizontal_stabilizer.areas.reference = (
            26.0 / 92.0) * config.wings.main_wing.areas.reference

        for wing in config.wings:

            wing = SUAVE.Methods.Geometry.Two_Dimensional.Planform.wing_planform(
                wing)

            wing.areas.exposed = 0.8 * wing.areas.wetted
            wing.areas.affected = 0.6 * wing.areas.reference

        fuselage = config.fuselages['fuselage']
        fuselage.differential_pressure = diff_pressure

        turbofan_sizing(config.propulsors['turbofan'], mach_number, altitude)
        compute_turbofan_geometry(config.propulsors['turbofan'], conditions)
        # diff the new data
        #config.store_diff()

    # ------------------------------------------------------------------
    #   Landing Configuration
    # ------------------------------------------------------------------
    landing = nexus.vehicle_configurations.landing
    landing_conditions = Data()
    landing_conditions.freestream = Data()

    # landing weight
    landing.mass_properties.landing = 0.85 * config.mass_properties.takeoff

    # Landing CL_max
    altitude = nexus.missions.base.segments[-1].altitude_end
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    p, T, rho, a, mu = atmosphere.compute_values(altitude)
    landing_conditions.freestream.velocity = nexus.missions.base.segments[
        'descent_3'].air_speed
    landing_conditions.freestream.density = rho
    landing_conditions.freestream.dynamic_viscosity = mu / rho
    CL_max_landing, CDi = compute_max_lift_coeff(landing, landing_conditions)
    landing.maximum_lift_coefficient = CL_max_landing
    # diff the new data
    #landing.store_diff()

    #Takeoff CL_max
    takeoff = nexus.vehicle_configurations.takeoff
    takeoff_conditions = Data()
    takeoff_conditions.freestream = Data()
    altitude = nexus.missions.base.airport.altitude
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    p, T, rho, a, mu = atmosphere.compute_values(altitude)
    takeoff_conditions.freestream.velocity = nexus.missions.base.segments.climb_1.air_speed
    takeoff_conditions.freestream.density = rho
    takeoff_conditions.freestream.dynamic_viscosity = mu / rho
    max_CL_takeoff, CDi = compute_max_lift_coeff(takeoff, takeoff_conditions)
    takeoff.maximum_lift_coefficient = max_CL_takeoff

    #takeoff.store_diff()

    #Base config CL_max
    base = nexus.vehicle_configurations.base
    base_conditions = Data()
    base_conditions.freestream = Data()
    altitude = nexus.missions.base.airport.altitude
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    p, T, rho, a, mu = atmosphere.compute_values(altitude)
    base_conditions.freestream.velocity = nexus.missions.base.segments.climb_1.air_speed
    base_conditions.freestream.density = rho
    base_conditions.freestream.dynamic_viscosity = mu / rho
    max_CL_base, CDi = compute_max_lift_coeff(base, base_conditions)
    base.maximum_lift_coefficient = max_CL_base
    #base.store_diff()

    # done!

    return nexus
Esempio n. 3
0
def simple_sizing(nexus):
    configs = nexus.vehicle_configurations

    #find conditions
    air_speed   = nexus.missions.base.segments['cruise'].air_speed 
    altitude    = nexus.missions.base.segments['climb_5'].altitude_end
    atmosphere  = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    
    freestream  = atmosphere.compute_values(altitude)

    #now size engine
    mach_number        = air_speed/freestream.speed_of_sound

    #now add to freestream data object
    freestream.velocity    = air_speed
    freestream.mach_number = mach_number
    freestream.gravity     = 9.81
    
    conditions             = SUAVE.Analyses.Mission.Segments.Conditions.Aerodynamics()   #assign conditions in form for propulsor sizing
    conditions.freestream  = freestream

    HT_volume = 1.42542 * Units.less # E170
    VT_volume = 0.11458 * Units.less # E170
    lht       =   14.24 * Units.m
    lvt       =   13.54 * Units.m
    for config in configs:
        wing_planform(config.wings.main_wing)

        config.wings.horizontal_stabilizer.areas.reference = (HT_volume/lht)*(config.wings.main_wing.areas.reference *
                                                                              3.194)
        config.wings.vertical_stabilizer.areas.reference   = (VT_volume/lvt)*(config.wings.main_wing.areas.reference *
                                                                              26.0)

        SUAVE.Methods.Geometry.Two_Dimensional.Planform.wing_fuel_volume(config.wings.main_wing)
        nexus.summary.available_fuel = config.wings.main_wing.fuel_volume * 803.0 * 1.0197

        for wing in config.wings:


            wing_planform(wing)
            wing.areas.wetted = 2.0 * wing.areas.reference
            wing.areas.exposed = 0.8 * wing.areas.wetted
            wing.areas.affected = 0.6 * wing.areas.wetted


        turbofan_sizing(config.propulsors['turbofan'], mach_number=mach_number, altitude=altitude)
        compute_turbofan_geometry(config.propulsors['turbofan'], conditions)
        config.propulsors['turbofan'].nacelle_diameter = config.propulsors['turbofan'].nacelle_diameter * 1.1462135
        config.propulsors['turbofan'].engine_length    = config.propulsors['turbofan'].engine_length * 1.24868
        config.propulsors['turbofan'].areas.wetted = 1.1*np.pi * (config.propulsors['turbofan'].engine_length *
                                                                  config.propulsors['turbofan'].nacelle_diameter)

    # ------------------------------------------------------------------
    #   Landing Configuration
    # ------------------------------------------------------------------
    landing = nexus.vehicle_configurations.landing
    landing_conditions = Data()
    landing_conditions.freestream = Data()

    # landing weight
    landing.mass_properties.landing = 0.863 * config.mass_properties.takeoff
    
    # Landing CL_max
    altitude           = nexus.missions.base.segments[-1].altitude_end
    atmosphere         = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    freestream_landing = atmosphere.compute_values(altitude)

    landing_conditions.freestream.velocity           = nexus.missions.base.segments['descent_3'].air_speed
    landing_conditions.freestream.density            = freestream_landing.density
    landing_conditions.freestream.dynamic_viscosity  = freestream_landing.dynamic_viscosity

    CL_max_landing,CDi = compute_max_lift_coeff(landing, landing_conditions)
    landing.maximum_lift_coefficient = CL_max_landing
    
    #Takeoff CL_max
    takeoff                       = nexus.vehicle_configurations.takeoff
    takeoff_conditions            = Data()
    takeoff_conditions.freestream = Data()    
    altitude                      = nexus.missions.base.airport.altitude
    freestream_takeoff            = atmosphere.compute_values(altitude)
   
    takeoff_conditions.freestream.velocity           = nexus.missions.base.segments.climb_1.air_speed
    takeoff_conditions.freestream.density            = freestream_takeoff.density
    takeoff_conditions.freestream.dynamic_viscosity  = freestream_takeoff.dynamic_viscosity

    max_CL_takeoff, CDi = compute_max_lift_coeff(takeoff, takeoff_conditions)
    takeoff.maximum_lift_coefficient = max_CL_takeoff

    #Base config CL_max
    base                       = nexus.vehicle_configurations.base
    base_conditions            = Data()
    base_conditions.freestream = takeoff_conditions.freestream

    max_CL_base, CDi = compute_max_lift_coeff(base, base_conditions)
    base.maximum_lift_coefficient = max_CL_base    
    
    return nexus
Esempio n. 4
0
def simple_sizing(nexus):
    configs = nexus.vehicle_configurations
    base = configs.base

    #find conditions
    air_speed = nexus.missions.mission.segments['cruise'].air_speed
    altitude = nexus.missions.mission.segments['climb_2'].altitude_end
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()

    freestream = atmosphere.compute_values(altitude)
    freestream0 = atmosphere.compute_values(6000. * Units.ft)  #cabin altitude

    diff_pressure = np.max(freestream0.pressure - freestream.pressure, 0)
    fuselage = base.fuselages['fuselage']
    fuselage.differential_pressure = diff_pressure

    #now size engine
    mach_number = air_speed / freestream.speed_of_sound

    #now add to freestream data object
    freestream.velocity = air_speed
    freestream.mach_number = mach_number
    freestream.gravity = 9.81

    conditions = SUAVE.Analyses.Mission.Segments.Conditions.Aerodynamics(
    )  #assign conditions in form for propulsor sizing
    conditions.freestream = freestream

    for config in configs:

        # fuselage
        fuselage = config.fuselages['fuselage']
        fuselage.differential_pressure = diff_pressure

        # Main Wing

        main_wing_span = config.wings.main_wing.spans.projected
        main_wing_root_chord = config.wings.main_wing.chords.root
        config.wings.main_wing.chords.tip = config.wings.main_wing.chords.root * config.wings.main_wing.taper
        config.wings.main_wing.chords.mean_aerodynamic = (
            main_wing_root_chord * (2.0 / 3.0) *
            ((1.0 + config.wings.main_wing.taper +
              config.wings.main_wing.taper**2.0) /
             (1.0 + config.wings.main_wing.taper)))
        config.wings.main_wing.areas.reference = (
            main_wing_root_chord +
            config.wings.main_wing.chords.tip) * main_wing_span / 2.0
        config.wings.main_wing.areas.wetted = 2.0 * config.wings.main_wing.areas.reference
        config.wings.main_wing.areas.exposed = config.wings.main_wing.areas.wetted
        config.wings.main_wing.areas.affected = config.wings.main_wing.areas.wetted
        config.wings.main_wing.aspect_ratio = (
            main_wing_span *
            main_wing_span) / config.wings.main_wing.areas.reference

        config.wings.main_wing.flaps.chord = main_wing_root_chord * 0.15
        config.wings.main_wing.flaps.span_start = 0.3 * main_wing_span
        config.wings.main_wing.flaps.span_end = 0.8 * main_wing_span
        config.wings.main_wing.flaps.area = config.wings.main_wing.flaps.chord * (
            config.wings.main_wing.flaps.span_end -
            config.wings.main_wing.flaps.span_start)

        # Horizontal Stabilizer

        config.wings.horizontal_stabilizer.areas.reference = 0.145 * config.wings.main_wing.areas.reference
        config.wings.horizontal_stabilizer.spans.projected = np.sqrt(
            config.wings.horizontal_stabilizer.aspect_ratio *
            config.wings.horizontal_stabilizer.areas.reference)
        config.wings.horizontal_stabilizer.chords.root = config.wings.horizontal_stabilizer.areas.reference / config.wings.horizontal_stabilizer.spans.projected
        config.wings.horizontal_stabilizer.chords.tip = config.wings.horizontal_stabilizer.chords.root
        config.wings.horizontal_stabilizer.chords.mean_aerodynamic = (
            config.wings.horizontal_stabilizer.chords.root * (2.0 / 3.0) *
            ((1.0 + config.wings.horizontal_stabilizer.taper +
              config.wings.horizontal_stabilizer.taper**2.0) /
             (1.0 + config.wings.horizontal_stabilizer.taper)))
        config.wings.horizontal_stabilizer.areas.wetted = 2.0 * config.wings.horizontal_stabilizer.areas.reference
        config.wings.horizontal_stabilizer.areas.exposed = config.wings.horizontal_stabilizer.areas.wetted
        config.wings.horizontal_stabilizer.areas.affected = config.wings.horizontal_stabilizer.areas.wetted

        # Vertical Stabilizer

        config.wings.vertical_stabilizer.areas.reference = 0.099 * config.wings.main_wing.areas.reference
        config.wings.vertical_stabilizer.areas.wetted = 2.0 * config.wings.vertical_stabilizer.areas.reference
        config.wings.vertical_stabilizer.areas.exposed = config.wings.vertical_stabilizer.areas.wetted
        config.wings.vertical_stabilizer.areas.affected = config.wings.vertical_stabilizer.areas.wetted

        config.wings.vertical_stabilizer.spans.projected = np.sqrt(
            config.wings.vertical_stabilizer.aspect_ratio *
            config.wings.vertical_stabilizer.areas.reference)
        config.wings.vertical_stabilizer.chords.root = (
            2.0 * config.wings.vertical_stabilizer.areas.reference) / (
                config.wings.vertical_stabilizer.spans.projected *
                (1 + config.wings.vertical_stabilizer.taper))
        config.wings.vertical_stabilizer.chords.tip = config.wings.vertical_stabilizer.chords.root * config.wings.vertical_stabilizer.taper
        config.wings.vertical_stabilizer.chords.mean_aerodynamic = (
            config.wings.vertical_stabilizer.chords.root * (2.0 / 3.0) *
            ((1.0 + config.wings.vertical_stabilizer.taper +
              config.wings.vertical_stabilizer.taper**2.0) /
             (1.0 + config.wings.vertical_stabilizer.taper)))

        # Resize the motor
        kv = config.propulsors.propulsor.motor_forward.speed_constant
        config.propulsors.propulsor.motor_forward = size_from_kv(
            config.propulsors.propulsor.motor_forward, kv)

        kv = config.propulsors.propulsor.motor_lift.speed_constant
        config.propulsors.propulsor.motor_lift = size_from_kv(
            config.propulsors.propulsor.motor_lift, kv)

        # diff the new data
        config.store_diff()

        #turbofan_sizing(config.propulsors['turbofan'], mach_number = mach_number, altitude = altitude)
        #compute_turbofan_geometry(config.propulsors['turbofan'], conditions)

    # ------------------------------------------------------------------
    #   Landing Configuration
    # ------------------------------------------------------------------
    landing = nexus.vehicle_configurations.landing
    landing_conditions = Data()
    landing_conditions.freestream = Data()

    # landing weight
    landing.mass_properties.landing = 1.0 * config.mass_properties.takeoff

    # Landing CL_max
    altitude = nexus.missions.mission.segments[-1].altitude_end
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    freestream_landing = atmosphere.compute_values(0.)
    landing_conditions.freestream.velocity = nexus.missions.mission.segments[
        'descent_2'].air_speed
    landing_conditions.freestream.density = freestream_landing.density
    landing_conditions.freestream.dynamic_viscosity = freestream_landing.dynamic_viscosity
    CL_max_landing, CDi = compute_max_lift_coeff(landing, landing_conditions)
    landing.maximum_lift_coefficient = CL_max_landing

    #Takeoff CL_max
    takeoff = nexus.vehicle_configurations.takeoff
    takeoff_conditions = Data()
    takeoff_conditions.freestream = Data()
    altitude = nexus.missions.mission.airport.altitude
    freestream_takeoff = atmosphere.compute_values(altitude)

    takeoff_conditions.freestream.velocity = nexus.missions.mission.segments.climb_1.air_speed
    takeoff_conditions.freestream.density = freestream_takeoff.density
    takeoff_conditions.freestream.dynamic_viscosity = freestream_takeoff.dynamic_viscosity
    max_CL_takeoff, CDi = compute_max_lift_coeff(takeoff, takeoff_conditions)
    takeoff.maximum_lift_coefficient = max_CL_takeoff

    #Base config CL_max
    base = nexus.vehicle_configurations.base
    base_conditions = Data()
    base_conditions.freestream = takeoff_conditions.freestream
    max_CL_base, CDi = compute_max_lift_coeff(base, base_conditions)
    base.maximum_lift_coefficient = max_CL_base

    return nexus
Esempio n. 5
0
def simple_sizing(nexus):
    configs = nexus.vehicle_configurations
    base = configs.base

    # find conditions
    air_speed = nexus.missions.base.segments['cruise_2'].air_speed

    altitude = 18.5 * Units.km #nexus.missions.base.segments['climb_8'].altitude_end #FIXME

    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()

    freestream = atmosphere.compute_values(altitude)
    freestream0 = atmosphere.compute_values(6000. * Units.ft)  # cabin altitude

    diff_pressure = np.max(freestream0.pressure - freestream.pressure, 0)
    fuselage = base.fuselages['fuselage']
    fuselage.differential_pressure = diff_pressure

    # now size engine
    mach_number = air_speed / freestream.speed_of_sound

    # now add to freestream data object
    freestream.velocity = air_speed
    freestream.mach_number = mach_number
    freestream.gravity = 9.81

    conditions = SUAVE.Analyses.Mission.Segments.Conditions.Aerodynamics()  # assign conditions in form for propulsor sizing
    conditions.freestream = freestream
    # conditions.weights.vehicle_mass_rate = -200 * Units['kg/s']


    for config in configs:
        config.wings.horizontal_stabilizer.areas.reference = (26.0 / 92.0) * config.wings.main_wing.areas.reference

        for wing in config.wings:
            wing = SUAVE.Methods.Geometry.Two_Dimensional.Planform.wing_planform(wing)

            wing.areas.exposed = 0.8 * wing.areas.wetted
            wing.areas.affected = 0.6 * wing.areas.reference

        fuselage = config.fuselages['fuselage']
        fuselage.differential_pressure = diff_pressure

        turbofan_sizing(config.propulsors['turbofan'], mach_number, altitude)
        compute_turbofan_geometry(config.propulsors['turbofan'], conditions)

        # engine_length, nacelle_diameter, areas.wette
        # diff the new data
        config.store_diff()

    # ------------------------------------------------------------------
    #   Landing Configuration
    # ------------------------------------------------------------------
    landing = nexus.vehicle_configurations.landing
    landing_conditions = Data()
    landing_conditions.freestream = Data()

    # landing weight
    # landing.mass_properties.landing = 0.85 * config.mass_properties.takeoff

    # Landing CL_max
    altitude = nexus.missions.base.segments[-1].altitude_end
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    p, T, rho, a, mu = atmosphere.compute_values(altitude)
    landing_conditions.freestream.velocity = nexus.missions.base.segments['descent_final'].air_speed
    landing_conditions.freestream.density = rho
    landing_conditions.freestream.dynamic_viscosity = mu / rho
    CL_max_landing, CDi = compute_max_lift_coeff(landing, landing_conditions)
    landing.maximum_lift_coefficient = CL_max_landing
    # diff the new data
    landing.store_diff()

    # Takeoff CL_max
    takeoff = nexus.vehicle_configurations.takeoff
    takeoff_conditions = Data()
    takeoff_conditions.freestream = Data()
    altitude = nexus.missions.base.airport.altitude
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    p, T, rho, a, mu = atmosphere.compute_values(altitude)
    takeoff_conditions.freestream.velocity = nexus.missions.base.segments.climb_1.air_speed
    takeoff_conditions.freestream.density = rho
    takeoff_conditions.freestream.dynamic_viscosity = mu / rho
    max_CL_takeoff, CDi = compute_max_lift_coeff(takeoff, takeoff_conditions)
    takeoff.maximum_lift_coefficient = max_CL_takeoff

    takeoff.store_diff()

    # Base config CL_max
    base = nexus.vehicle_configurations.base
    base_conditions = Data()
    base_conditions.freestream = Data()
    altitude = nexus.missions.base.airport.altitude
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    p, T, rho, a, mu = atmosphere.compute_values(altitude)
    base_conditions.freestream.velocity = nexus.missions.base.segments.climb_1.air_speed
    base_conditions.freestream.density = rho
    base_conditions.freestream.dynamic_viscosity = mu / rho
    max_CL_base, CDi = compute_max_lift_coeff(base, base_conditions)
    base.maximum_lift_coefficient = max_CL_base
    base.store_diff()

    # done!

    return nexus
Esempio n. 6
0
def simple_sizing(nexus):
    configs = nexus.vehicle_configurations
    base = configs.base

    #find conditions
    air_speed = nexus.missions.base.segments['cruise'].air_speed
    altitude = nexus.missions.base.segments['climb_2'].altitude_end
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()

    freestream = atmosphere.compute_values(altitude)
    freestream0 = atmosphere.compute_values(6000. * Units.ft)  #cabin altitude

    diff_pressure = np.max(freestream0.pressure - freestream.pressure, 0)
    fuselage = base.fuselages['fuselage']
    fuselage.differential_pressure = diff_pressure

    #now size engine
    mach_number = air_speed / freestream.speed_of_sound

    #now add to freestream data object
    freestream.velocity = air_speed
    freestream.mach_number = mach_number
    freestream.gravity = 9.81

    conditions = SUAVE.Analyses.Mission.Segments.Conditions.Aerodynamics(
    )  #assign conditions in form for propulsor sizing
    conditions.freestream = freestream

    for config in configs:
        config.wings.horizontal_stabilizer.areas.reference = (
            26.0 / 92.0) * config.wings.main_wing.areas.reference

        for wing in config.wings:

            wing = SUAVE.Methods.Geometry.Two_Dimensional.Planform.wing_planform(
                wing)
            wing.areas.exposed = 0.8 * wing.areas.wetted
            wing.areas.affected = 0.6 * wing.areas.reference

        fuselage = config.fuselages['fuselage']
        fuselage.differential_pressure = diff_pressure

        #turbofan_sizing(config.propulsors['turbofan'], mach_number = mach_number, altitude = altitude)
        #compute_turbofan_geometry(config.propulsors['turbofan'], conditions)

    # Change the dynamic pressure based on the, add a factor of safety
    base.envelope.maximum_dynamic_pressure = nexus.missions.mission.segments.cruise.dynamic_pressure * 1.2

    # Scale the horizontal and vertical tails based on the main wing area
    #For more or less "normal" looking designs the stabilizer and elevators together should be between 15 to 20% of the wing area.
    #The fin and rudder together should be around 12 to 15%
    base.wings.horizontal_stabilizer.areas.reference = 0.17 * base.reference_area
    base.wings.vertical_stabilizer.areas.reference = 0.13 * base.reference_area

    # ------------------------------------------------------------------
    #   Landing Configuration
    # ------------------------------------------------------------------
    landing = nexus.vehicle_configurations.landing
    landing_conditions = Data()
    landing_conditions.freestream = Data()

    # landing weight
    landing.mass_properties.landing = 1.0 * config.mass_properties.takeoff

    # Landing CL_max
    altitude = nexus.missions.base.segments[-1].altitude_end
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    freestream_landing = atmosphere.compute_values(0.)
    landing_conditions.freestream.velocity = nexus.missions.base.segments[
        'descent_2'].air_speed
    landing_conditions.freestream.density = freestream_landing.density
    landing_conditions.freestream.dynamic_viscosity = freestream_landing.dynamic_viscosity
    CL_max_landing, CDi = compute_max_lift_coeff(landing, landing_conditions)
    landing.maximum_lift_coefficient = CL_max_landing

    #Takeoff CL_max
    takeoff = nexus.vehicle_configurations.takeoff
    takeoff_conditions = Data()
    takeoff_conditions.freestream = Data()
    altitude = nexus.missions.base.airport.altitude
    freestream_takeoff = atmosphere.compute_values(altitude)

    takeoff_conditions.freestream.velocity = nexus.missions.base.segments.climb_1.air_speed
    takeoff_conditions.freestream.density = freestream_takeoff.density
    takeoff_conditions.freestream.dynamic_viscosity = freestream_takeoff.dynamic_viscosity
    max_CL_takeoff, CDi = compute_max_lift_coeff(takeoff, takeoff_conditions)
    takeoff.maximum_lift_coefficient = max_CL_takeoff

    #Base config CL_max
    base = nexus.vehicle_configurations.base
    base_conditions = Data()
    base_conditions.freestream = takeoff_conditions.freestream
    max_CL_base, CDi = compute_max_lift_coeff(base, base_conditions)
    base.maximum_lift_coefficient = max_CL_base

    return nexus
Esempio n. 7
0
def estimate_clmax(nexus):

    # Condition to CLmax calculation: 90KTAS @ 10000ft, ISA
    state = Data()
    state.conditions = Data()
    state.conditions.freestream = Data()
    state.conditions.freestream.density = 0.90477283
    state.conditions.freestream.dynamic_viscosity = 1.69220918e-05
    state.conditions.freestream.velocity = 90. * Units.knots

    #Takeoff CL_max
    config = nexus.vehicle_configurations.takeoff
    settings = nexus.analyses.takeoff.aerodynamics.settings
    maximum_lift_coefficient, CDi = compute_max_lift_coeff(
        state, settings, config)
    config.maximum_lift_coefficient = maximum_lift_coefficient
    # diff the new data
    config.store_diff()

    #Takeoff CL_max - for short field config
    config = nexus.vehicle_configurations.short_field_takeoff
    settings = nexus.analyses.short_field_takeoff.aerodynamics.settings
    maximum_lift_coefficient, CDi = compute_max_lift_coeff(
        state, settings, config)
    config.maximum_lift_coefficient = maximum_lift_coefficient
    # diff the new data
    config.store_diff()

    # compute V2 speed for noise, based in MTOW
    config = nexus.vehicle_configurations.takeoff
    weight = config.mass_properties.max_takeoff
    reference_area = config.wings.main_wing.areas.reference
    max_CL_takeoff = config.maximum_lift_coefficient
    stall_speed = (2 * 9.81 * weight /
                   (1.225 * reference_area * max_CL_takeoff))**0.5
    V2_speed = 1.20 * stall_speed
    speed_for_noise = V2_speed + nexus.noise_V2_increase

    #nexus.missions.takeoff_initialization.segments.climb.air_speed   = speed_for_noise
    nexus.missions.takeoff.segments.climb.air_speed = speed_for_noise
    nexus.missions.takeoff.segments.cutback.air_speed = speed_for_noise
    nexus.missions.sideline_takeoff.segments.climb.air_speed = speed_for_noise

    # ------------------------------------------------------------------
    #   Landing Configuration
    # ------------------------------------------------------------------
    landing = nexus.vehicle_configurations.landing
    landing_conditions = Data()
    landing_conditions.freestream = Data()

    # landing weight
    landing.mass_properties.takeoff = 0.85 * config.mass_properties.takeoff
    landing.mass_properties.landing = 0.85 * config.mass_properties.takeoff

    # Landing CL_max
    settings = nexus.analyses.landing.aerodynamics.settings
    maximum_lift_coefficient, CDi = compute_max_lift_coeff(
        state, settings, landing)
    landing.maximum_lift_coefficient = maximum_lift_coefficient

    # compute approach speed
    weight = landing.mass_properties.landing
    stall_speed = (2 * 9.81 * weight /
                   (1.225 * reference_area * maximum_lift_coefficient))**0.5
    Vref_speed = 1.23 * stall_speed
    nexus.missions.landing.segments.descent.air_speed = Vref_speed + 10. * Units.knots

    # diff the new data
    landing.store_diff()

    return nexus
Esempio n. 8
0
def estimate_clmax(nexus):
    
    # Condition to CLmax calculation: 90KTAS @ 10000ft, ISA
    conditions = Data()
    conditions.freestream = Data()
    conditions.freestream.density           = 0.90477283
    conditions.freestream.dynamic_viscosity = 1.69220918e-05
    conditions.freestream.velocity          = 90. * Units.knots
    
    #Takeoff CL_max
    config = nexus.vehicle_configurations.takeoff
    maximum_lift_coefficient,CDi = compute_max_lift_coeff(config,conditions) 
    config.maximum_lift_coefficient = maximum_lift_coefficient 
    # diff the new data
    config.store_diff()  
    
    #Takeoff CL_max - for short field config
    config = nexus.vehicle_configurations.short_field_takeoff
    maximum_lift_coefficient,CDi = compute_max_lift_coeff(config,conditions) 
    config.maximum_lift_coefficient = maximum_lift_coefficient 
    # diff the new data
    config.store_diff()  
        
    # compute V2 speed for noise, based in MTOW   
    config = nexus.vehicle_configurations.takeoff       
    weight = config.mass_properties.max_takeoff
    reference_area = config.wings.main_wing.areas.reference
    max_CL_takeoff = config.maximum_lift_coefficient
    stall_speed = (2 * 9.81 * weight / (1.225 * reference_area * max_CL_takeoff)) ** 0.5
    V2_speed    = 1.20 * stall_speed            
    speed_for_noise = V2_speed + nexus.noise_V2_increase
    
    #nexus.missions.takeoff_initialization.segments.climb.air_speed   = speed_for_noise    
    nexus.missions.takeoff.segments.climb.air_speed          = speed_for_noise
    nexus.missions.takeoff.segments.cutback.air_speed        = speed_for_noise
    nexus.missions.sideline_takeoff.segments.climb.air_speed = speed_for_noise
    
    # ------------------------------------------------------------------
    #   Landing Configuration
    # ------------------------------------------------------------------
    landing = nexus.vehicle_configurations.landing
    landing_conditions = Data()
    landing_conditions.freestream = Data()

    # landing weight
    landing.mass_properties.takeoff = 0.85 * config.mass_properties.takeoff
    landing.mass_properties.landing = 0.85 * config.mass_properties.takeoff
      
    # Landing CL_max
    maximum_lift_coefficient,CDi = compute_max_lift_coeff(landing,conditions) 
    landing.maximum_lift_coefficient = maximum_lift_coefficient 
    
    # compute approach speed
    weight = landing.mass_properties.landing
    stall_speed = (2 * 9.81 * weight / (1.225 * reference_area * maximum_lift_coefficient)) ** 0.5
    Vref_speed  = 1.23 * stall_speed  
    nexus.missions.landing.segments.descent.air_speed   = Vref_speed  + 10. * Units.knots    
    
    # diff the new data
    landing.store_diff()      
    
    return nexus
Esempio n. 9
0
def simple_sizing(nexus):
    configs    = nexus.vehicle_configurations
    analyses   = nexus.analyses
    base       = configs.base

    
    
    m_guess                            = nexus.m_guess #take in sizing inputs
    base.mass_properties.max_takeoff   = m_guess
 
    #find conditions
    air_speed   = nexus.missions.base.segments['cruise'].air_speed 
    altitude    = nexus.missions.base.segments['climb_3'].altitude_end
    atmosphere  = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    freestream  = atmosphere.compute_values(altitude)
    freestream0 = atmosphere.compute_values(6000.*Units.ft)  #cabin altitude
    
    
    diff_pressure                  = np.max(freestream0.pressure-freestream.pressure,0)
    fuselage                       = base.fuselages['fuselage']
    fuselage.differential_pressure = diff_pressure 
    
    #now size engine
    mach_number        = air_speed/freestream.speed_of_sound
    
    #now add to freestream data object
    freestream.velocity    = air_speed
    freestream.mach_number = mach_number
    freestream.gravity     = 9.81
    
    conditions             = SUAVE.Analyses.Mission.Segments.Conditions.Aerodynamics()   #assign conditions in form for propulsor sizing
    conditions.freestream  = freestream
    
    nose_load_fraction     = .06
   
    #now evaluate all of the vehicle configurations
    for config in configs:
        config.wings.horizontal_stabilizer.areas.reference = (26.0/92.0)*config.wings.main_wing.areas.reference
         
         
        for wing in config.wings:
            
            wing = SUAVE.Methods.Geometry.Two_Dimensional.Planform.wing_planform(wing)
            
            wing.areas.exposed  = 0.8 * wing.areas.wetted
            wing.areas.affected = 0.6 * wing.areas.reference
            


        fuselage                       = config.fuselages['fuselage']
        fuselage.differential_pressure = diff_pressure 
     
        #now evaluate weights

        # diff the new data
        
        config.mass_properties.max_takeoff     = m_guess #take in parameters
        config.mass_properties.takeoff         = m_guess 
        config.mass_properties.max_zero_fuel   = base.mass_properties.max_zero_fuel
        config.store_diff()
       
       
    #now evaluate the weights   
    weights = analyses.base.weights.evaluate() #base.weights.evaluate()  
    #update zfw
    empty_weight       = base.mass_properties.operating_empty
    payload            = base.mass_properties.max_payload
    zfw                = empty_weight + payload 
    
    base.max_zero_fuel = zfw  
    base.store_diff()
    for config in configs:
        config.pull_base()
    # ------------------------------------------------------------------
    #   Landing Configuration
    # ------------------------------------------------------------------
    landing = nexus.vehicle_configurations.landing
    landing_conditions = Data()
    landing_conditions.freestream = Data()

    # landing weight
    landing.mass_properties.landing = base.mass_properties.max_zero_fuel
    
    # Landing CL_max
    altitude                                         = nexus.missions.base.segments[-1].altitude_end
    atmosphere                                       = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    
    freestream             = atmosphere.compute_values(altitude)
    mu                     = freestream.dynamic_viscosity
    rho                    = freestream.density

    landing_conditions.freestream.velocity           = nexus.missions.base.segments['descent_3'].air_speed
    landing_conditions.freestream.density            = rho
    landing_conditions.freestream.dynamic_viscosity  = mu/rho
    CL_max_landing,CDi                               = compute_max_lift_coeff(landing,landing_conditions)
    landing.maximum_lift_coefficient                 = CL_max_landing
    # diff the new data
    landing.store_diff()
    
    
    #Takeoff CL_max
    takeoff                                          = nexus.vehicle_configurations.takeoff
    takeoff_conditions                               = Data()
    takeoff_conditions.freestream                    = Data()    
    altitude                                         = nexus.missions.base.airport.altitude
    atmosphere                                       = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    freestream                                       = atmosphere.compute_values(altitude)
    mu                                               = freestream.dynamic_viscosity
    rho                                              = freestream.density
    takeoff_conditions.freestream.velocity           = nexus.missions.base.segments.climb_1.air_speed
    takeoff_conditions.freestream.density            = rho
    takeoff_conditions.freestream.dynamic_viscosity  = mu/rho 
    max_CL_takeoff,CDi                               = compute_max_lift_coeff(takeoff,takeoff_conditions) 
    takeoff.maximum_lift_coefficient                 = max_CL_takeoff
    
    takeoff.store_diff()
    
   

    #Base config CL_max
    base                                          = nexus.vehicle_configurations.base
    base_conditions                               = Data()
    base_conditions.freestream                    = Data()    
    altitude                                      = nexus.missions.base.airport.altitude
    atmosphere                                    = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    freestream                                    = atmosphere.compute_values(altitude)
    mu                                            = freestream.dynamic_viscosity
    rho                                           = freestream.density
    
    
    
    base_conditions.freestream.velocity           = nexus.missions.base.segments.climb_1.air_speed
    base_conditions.freestream.density            = rho
    base_conditions.freestream.dynamic_viscosity  = mu/rho 
    max_CL_base,CDi                               = compute_max_lift_coeff(base,base_conditions) 
    base.maximum_lift_coefficient                 = max_CL_base    
    base.store_diff()
    
    # done!
    
    return nexus