コード例 #1
0
def main():
    
    #initialize the problem
    nexus                        = Nexus()
    vehicle = vehicle_setup()
    nexus.vehicle_configurations = configs_setup(vehicle)
    nexus.analyses               = Analyses.setup(nexus.vehicle_configurations)
    nexus.missions               = Missions.setup(nexus.analyses)
    
    #problem = Data()
    #nexus.optimization_problem       = problem
    nexus.procedure                  = setup()
    nexus.sizing_loop                = Sizing_Loop()
    nexus.total_number_of_iterations = 0
    
    evaluate_problem(nexus)
    results = nexus.results

    err      = nexus.sizing_loop.norm_error
    err_true = 0.00975078 #for 1E-2 tol
    error    = abs((err-err_true)/err)
    print 'error = ', error
    assert(error<1e-5), 'sizing loop regression failed'    
    
    #output=nexus._really_evaluate() #run; use optimization setup without inputs
    return
コード例 #2
0
def main():
    
    vehicle  = vehicle_setup()
    configs  = configs_setup(vehicle)
    analyses = mission_B737.analyses_setup(configs)
    mission  = mission_setup(configs,analyses)
    
    configs.finalize()
    analyses.finalize()
    
    results = mission.evaluate()
    results = results.merged()
    
    plot_results(results)
    
    distance_regression = 4317710.33719722
    distance_calc       = results.conditions.frames.inertial.position_vector[-1,0]
    error_distance      = abs((distance_regression - distance_calc )/distance_regression)
    assert error_distance < 1e-6
    
    error_weight = abs(mission.target_landing_weight - results.conditions.weights.total_mass[-1,0])
    print('landing weight error' , error_weight)
    assert error_weight < 1e-6
    
    return
コード例 #3
0
def main():

    vehicle = vehicle_setup()
    configs = configs_setup(vehicle)
    analyses = mission_B737.analyses_setup(configs)
    mission = mission_setup(configs, analyses)

    configs.finalize()
    analyses.finalize()

    results = mission.evaluate()
    results = results.merged()

    plot_results(results)

    distance_regression = 4317710.33719722
    distance_calc = results.conditions.frames.inertial.position_vector[-1, 0]
    error_distance = abs(
        (distance_regression - distance_calc) / distance_regression)
    assert error_distance < 1e-6

    error_weight = abs(mission.target_landing_weight -
                       results.conditions.weights.total_mass[-1, 0])
    print('landing weight error', error_weight)
    assert error_weight < 1e-6

    return
コード例 #4
0
def main():

    # vehicle data
    vehicle = vehicle_setup()
    configs = configs_setup(vehicle)

    # vehicle analyses
    configs_analyses = analyses_setup(configs)

    aerodynamics = SUAVE.Analyses.Aerodynamics.AVL()
    stability = SUAVE.Analyses.Stability.AVL()
    aerodynamics.geometry = copy.deepcopy(configs.cruise)
    stability.geometry = copy.deepcopy(configs.cruise)
    aerodynamics.process.compute.lift.inviscid.training_file = 'base_data_aerodynamics.txt'
    stability.training_file = 'base_data_stability.txt'
    configs_analyses.cruise.append(aerodynamics)
    configs_analyses.cruise.append(stability)

    # mission analyses
    mission = mission_setup(configs_analyses)
    missions_analyses = missions_setup(mission)

    analyses = SUAVE.Analyses.Analysis.Container()
    analyses.configs = configs_analyses
    analyses.missions = missions_analyses

    simple_sizing(configs, analyses)

    configs.finalize()
    analyses.finalize()

    # mission analysis
    mission = analyses.missions.base
    results = mission.evaluate()

    # lift coefficient check
    lift_coefficient = results.conditions.cruise.aerodynamics.lift_coefficient[
        0]
    lift_coefficient_true = 0.59571034
    print lift_coefficient
    diff_CL = np.abs(lift_coefficient - lift_coefficient_true)
    print 'CL difference'
    print diff_CL
    assert np.abs((lift_coefficient - lift_coefficient_true) /
                  lift_coefficient_true) < 1e-6

    # moment coefficient check
    moment_coefficient = results.conditions.cruise.stability.static.CM[0][0]
    moment_coefficient_true = -0.62167644
    print moment_coefficient
    diff_CM = np.abs(moment_coefficient - moment_coefficient_true)
    print 'CM difference'
    print diff_CM
    assert np.abs((moment_coefficient - moment_coefficient_true) /
                  moment_coefficient_true) < 1e-6

    return
コード例 #5
0
def main():

    # Setup for converging on weight

    vehicle = vehicle_setup()
    configs = configs_setup(vehicle)
    analyses = mission_B737.analyses_setup(configs)
    mission = mission_setup(configs, analyses)

    configs.finalize()
    analyses.finalize()

    results = mission.evaluate()
    results = results.merged()

    plot_results(results)

    distance_regression = 3804806.720225211
    distance_calc = results.conditions.frames.inertial.position_vector[-1, 0]
    print('distance_calc = ', distance_calc)
    error_distance = abs(
        (distance_regression - distance_calc) / distance_regression)
    assert error_distance < 1e-6

    error_weight = abs(mission.target_landing_weight -
                       results.conditions.weights.total_mass[-1, 0])
    print('landing weight error', error_weight)
    assert error_weight < 1e-6

    # Setup for converging on SOC, using the stopped rotor vehicle
    vehicle_SR, analyses_SR = full_setup_SR()
    analyses_SR.finalize()

    mission_SR = analyses_SR.mission
    results_SR = mission_SR.evaluate()
    results_SR = results_SR.merged()

    distance_regression_SR = 101649.83535243798

    distance_calc_SR = results_SR.conditions.frames.inertial.position_vector[
        -1, 0]
    print('distance_calc_SR = ', distance_calc_SR)
    error_distance_SR = abs(
        (distance_regression_SR - distance_calc_SR) / distance_regression_SR)
    assert error_distance_SR < 1e-6

    error_soc = abs(
        mission_SR.target_state_of_charge -
        results_SR.conditions.propulsion.battery_state_of_charge[-1, 0])
    print('landing state of charge error', error_soc)
    assert error_soc < 1e-6

    return
コード例 #6
0
ファイル: sizing_loop.py プロジェクト: yirenshen666/SUAVE
def main():

    #initialize the problem
    nexus = Nexus()
    vehicle = vehicle_setup()
    nexus.vehicle_configurations = configs_setup(vehicle)
    nexus.analyses = Analyses.setup(nexus.vehicle_configurations)
    nexus.missions = Missions.setup(nexus.analyses)

    problem = Data()
    problem_inputs = np.array([
        ['dummy', 1., (.1, 10.), 1., ' continuous', Units.less],
        ['dummy2', 2., (.1, 10.), 1., ' continuous', Units.less],
    ])  #create dummy inputs for optimization to test io
    problem.inputs = problem_inputs
    nexus.optimization_problem = problem
    nexus.procedure = setup()
    sizing_loop = Sizing_Loop()
    sizing_loop.output_filename = 'sizing_outputs.txt'
    nexus.sizing_loop = sizing_loop

    #create a fake array of data to test outputs
    write_sizing_outputs(sizing_loop, np.array([6.]), [5., 5.])
    write_sizing_outputs(sizing_loop, np.array([12.]), [4., 1.])
    write_sizing_outputs(sizing_loop, np.array([11.]), [1., 3.])

    nexus.total_number_of_iterations = 0
    evaluate_problem(nexus)
    results = nexus.results
    err = nexus.sizing_loop.norm_error

    err_true = 0.0008433474527249522  #for 1E-2 tol
    error = abs((err - err_true) / err_true)

    data_inputs, data_outputs, read_success = read_sizing_residuals(
        sizing_loop, problem.inputs)
    check_read_res = -0.06803060191281879

    error_res = (data_outputs[1][0] - check_read_res) / check_read_res

    #remove files for later
    os.remove('sizing_outputs.txt')
    os.remove('y_err_values.txt')
    print('error = ', error)
    print('error_res = ', error_res)
    assert (error < 1e-4), 'sizing loop regression failed'
    assert (error_res < 1e-4), 'sizing loop io failed'

    return
コード例 #7
0
ファイル: segment_test.py プロジェクト: lmartinel/SUAVE
def full_setup():

    # vehicle data
    vehicle = vehicle_setup()
    configs = configs_setup(vehicle)

    # vehicle analyses
    configs_analyses = analyses_setup(configs)

    # mission analyses
    mission = mission_setup(configs_analyses)
    missions_analyses = missions_setup(mission)

    analyses = SUAVE.Analyses.Analysis.Container()
    analyses.configs = configs_analyses
    analyses.missions = missions_analyses

    return configs, analyses
コード例 #8
0
ファイル: mission_B737.py プロジェクト: suavecode/SUAVE
def full_setup():

    # vehicle data
    vehicle  = vehicle_setup()
    configs  = configs_setup(vehicle)

    # vehicle analyses
    configs_analyses = analyses_setup(configs)

    # mission analyses
    mission  = mission_setup(configs_analyses)
    missions_analyses = missions_setup(mission)

    analyses = SUAVE.Analyses.Analysis.Container()
    analyses.configs  = configs_analyses
    analyses.missions = missions_analyses

    return configs, analyses
コード例 #9
0
def main():
    
    vehicle  = vehicle_setup()
    configs  = configs_setup(vehicle)
    analyses = mission_B737.analyses_setup(configs)
    mission  = mission_setup(configs,analyses)
    
    vehicle.mass_properties.takeoff = 70000 * Units.kg
    
    configs.finalize()
    analyses.finalize()
    
    results = mission.evaluate()
    results = results.merged()
    
    plot_results(results)
    
    error = abs(mission.target_landing_weight - results.conditions.weights.total_mass[-1,0])
    print 'landing weight error' , error
    assert error < 1.
    
    return
コード例 #10
0
def main():

    vehicle = vehicle_setup()
    configs = configs_setup(vehicle)
    analyses = mission_B737.analyses_setup(configs)
    mission = mission_setup(configs, analyses)

    vehicle.mass_properties.takeoff = 70000 * Units.kg

    configs.finalize()
    analyses.finalize()

    results = mission.evaluate()
    results = results.merged()

    plot_results(results)

    error = abs(mission.target_landing_weight -
                results.conditions.weights.total_mass[-1, 0])
    print 'landing weight error', error
    assert error < 1.

    return
コード例 #11
0
ファイル: sizing_loop.py プロジェクト: michK/SUAVE
def main():
    
    #initialize the problem
    nexus                        = Nexus()
    vehicle = vehicle_setup()
    nexus.vehicle_configurations = configs_setup(vehicle)
    nexus.analyses               = Analyses.setup(nexus.vehicle_configurations)
    nexus.missions               = Missions.setup(nexus.analyses)
    
    nexus.procedure                  = setup()
    nexus.sizing_loop                = Sizing_Loop()
    nexus.total_number_of_iterations = 0
    
    evaluate_problem(nexus)
    results = nexus.results

    err      = nexus.sizing_loop.norm_error
    err_true = 0.0096907307307155348#for 1E-2 tol
    error    = abs((err_true-err)/err_true)
    print 'error = ', error
    assert(error<1e-6), 'sizing loop regression failed'    
    
    return
コード例 #12
0
ファイル: sizing_loop.py プロジェクト: zpgcl97001/SUAVE
def main():

    #initialize the problem
    nexus = Nexus()
    vehicle = vehicle_setup()
    nexus.vehicle_configurations = configs_setup(vehicle)
    nexus.analyses = Analyses.setup(nexus.vehicle_configurations)
    nexus.missions = Missions.setup(nexus.analyses)

    nexus.procedure = setup()
    nexus.sizing_loop = Sizing_Loop()
    nexus.total_number_of_iterations = 0

    evaluate_problem(nexus)
    results = nexus.results

    err = nexus.sizing_loop.norm_error
    err_true = 0.0096907307307155348  #for 1E-2 tol
    error = abs((err_true - err) / err_true)
    print 'error = ', error
    assert (error < 1e-6), 'sizing loop regression failed'

    return
コード例 #13
0
ファイル: test_AVL.py プロジェクト: suavecode/SUAVE
def main(): 
   
    # vehicle data
    vehicle  = vehicle_setup()
    configs  = configs_setup(vehicle)

    # vehicle analyses
    configs_analyses = analyses_setup(configs)

    # append AVL aerodynamic analysis
    aerodynamics                                               = SUAVE.Analyses.Aerodynamics.AVL()
    aerodynamics.process.compute.lift.inviscid.regression_flag = True
    aerodynamics.process.compute.lift.inviscid.keep_files      = True
    aerodynamics.geometry                                      = copy.deepcopy(configs.cruise) 
    aerodynamics.process.compute.lift.inviscid.training_file   = 'cruise_data_aerodynamics.txt'    
    configs_analyses.cruise.append(aerodynamics)     
    
    # append AVL stability analysis
    stability                                                  = SUAVE.Analyses.Stability.AVL()
    stability.regression_flag                                  = True
    stability.keep_files                                       = True
    stability.geometry                                         = copy.deepcopy(configs.cruise)
    stability.training_file                                    = 'cruise_data_stability.txt'    
    configs_analyses.cruise.append(stability)

    # ------------------------------------------------------------------
    #   Initialize the Mission
    # ------------------------------------------------------------------

    mission = SUAVE.Analyses.Mission.Sequential_Segments()
    mission.tag = 'the_mission'

    #airport
    airport = SUAVE.Attributes.Airports.Airport()
    airport.altitude   =  0.0  * Units.ft
    airport.delta_isa  =  0.0
    airport.atmosphere = SUAVE.Attributes.Atmospheres.Earth.US_Standard_1976()
    mission.airport = airport    

    # unpack Segments module
    Segments = SUAVE.Analyses.Mission.Segments

    # base segment
    base_segment = Segments.Segment()


    # ------------------------------------------------------------------    
    #   Cruise Segment: constant speed, constant altitude
    # ------------------------------------------------------------------    

    segment = Segments.Cruise.Constant_Speed_Constant_Altitude(base_segment)
    segment.tag = "cruise"

    segment.analyses.extend( configs_analyses.cruise )

    segment.air_speed = 230. * Units['m/s']
    segment.distance  = 4000. * Units.km
    segment.altitude  = 10.668 * Units.km
    
    segment.state.numerics.number_control_points = 4

    # add to mission
    mission.append_segment(segment)


    missions_analyses = missions_setup(mission)

    analyses = SUAVE.Analyses.Analysis.Container()
    analyses.configs  = configs_analyses
    analyses.missions = missions_analyses
    
    simple_sizing(configs, analyses)

    configs.finalize()
    analyses.finalize()
 
    # mission analysis
    mission = analyses.missions.base    
    results = mission.evaluate()

    # lift coefficient check
    lift_coefficient              = results.segments.cruise.conditions.aerodynamics.lift_coefficient[0][0]
    lift_coefficient_true         = 0.6118979131570086

    print(lift_coefficient)
    diff_CL                       = np.abs(lift_coefficient  - lift_coefficient_true) 
    print('CL difference')
    print(diff_CL)
    assert np.abs((lift_coefficient  - lift_coefficient_true)/lift_coefficient_true) < 1e-6
    
    # moment coefficient check
    moment_coefficient            = results.segments.cruise.conditions.stability.static.CM[0][0]
    moment_coefficient_true       = -0.6267104237340391

    print(moment_coefficient)
    diff_CM                       = np.abs(moment_coefficient - moment_coefficient_true)
    print('CM difference')
    print(diff_CM)
    assert np.abs((moment_coefficient - moment_coefficient_true)/moment_coefficient_true) < 1e-6    
 
    return
コード例 #14
0
def setup():

    nexus = Nexus()
    problem = Data()
    nexus.optimization_problem = problem

    # -------------------------------------------------------------------
    # Inputs
    # -------------------------------------------------------------------

    # [ tag , initial, [lb,ub], scaling, units ]
    problem.inputs = np.array([
        ['wing_area', 124.8, (70., 200.), 124.8, Units.meter**2],
        ['wing_aspect_ratio', 10.18, (5., 20.), 10.18, Units.less],
        ['wing_sweep', 25., (0., 35.), 25., Units.degrees],
        ['wing_thickness', 0.105, (0.07, 0.20), 0.105, Units.less],
        ['design_thrust', 52700., (10000., 70000.), 52700., Units.N],
        ['MTOW', 79090., (20000., 100000.), 79090., Units.kg],
        ['MZFW_ratio', 0.77, (0.6, 0.99), 0.77, Units.less],
        ['flap_takeoff_angle', 10., (0., 20.), 10., Units.degrees],
        ['flap_landing_angle', 40., (0., 50.), 40., Units.degrees],
        ['short_field_TOW', 64030., (20000., 100000.), 64030., Units.kg],
        ['design_TOW', 68520., (20000., 100000.), 68520., Units.kg],
        ['noise_takeoff_speed_increase', 10.0, (10., 20.), 10.0, Units.knots],
        ['noise_cutback_altitude', 304.8, (240., 400.), 304.8, Units.meter],
    ])

    # -------------------------------------------------------------------
    #  Objective
    # -------------------------------------------------------------------

    problem.objective = np.array([
        ['noise_cumulative_margin', 17, Units.less],
    ])

    # -------------------------------------------------------------------
    # Constraints
    # -------------------------------------------------------------------

    # [ tag, sense, edge, scaling, units ]
    problem.constraints = np.array([
        ['MZFW consistency', '>', 0., 10, Units.less],
        ['design_range_fuel_margin', '>', 0., 10, Units.less],
        ['short_field_fuel_margin', '>', 0., 10, Units.less],
        ['max_range_fuel_margin', '>', 0., 10, Units.less],
        ['wing_span', '<', 35.9664, 35.9664, Units.less],
        ['noise_flyover_margin', '>', 0., 10., Units.less],
        ['noise_sideline_margin', '>', 0., 10., Units.less],
        ['noise_approach_margin', '>', 0., 10., Units.less],
        ['takeoff_field_length', '<', 1985., 1985., Units.meters],
        ['landing_field_length', '<', 1385., 1385., Units.meters],
        ['2nd_segment_climb_max_range', '>', 0.024, 0.024, Units.less],
        ['2nd_segment_climb_short_field', '>', 0.024, 0.024, Units.less],
        ['max_throttle', '<', 1., 1., Units.less],
        ['short_takeoff_field_length', '<', 1330., 1330., Units.meters],
        ['noise_cumulative_margin', '>', 10., 10., Units.less],
    ])

    # -------------------------------------------------------------------
    #  Aliases
    # -------------------------------------------------------------------

    problem.aliases = [
        [
            'wing_area',
            [
                'vehicle_configurations.*.wings.main_wing.areas.reference',
                'vehicle_configurations.*.reference_area'
            ]
        ],
        [
            'wing_aspect_ratio',
            'vehicle_configurations.*.wings.main_wing.aspect_ratio'
        ],
        [
            'wing_incidence',
            'vehicle_configurations.*.wings.main_wing.twists.root'
        ],
        [
            'wing_tip_twist',
            'vehicle_configurations.*.wings.main_wing.twists.tip'
        ],
        [
            'wing_sweep',
            'vehicle_configurations.*.wings.main_wing.sweeps.quarter_chord'
        ],
        [
            'wing_thickness',
            'vehicle_configurations.*.wings.main_wing.thickness_to_chord'
        ],
        ['wing_taper', 'vehicle_configurations.*.wings.main_wing.taper'],
        [
            'wing_location',
            'vehicle_configurations.*.wings.main_wing.origin[0]'
        ],
        [
            'horizontal_tail_area',
            'vehicle_configurations.*.wings.horizontal_stabilizer.areas.reference'
        ],
        [
            'horizontal_tail_aspect_ratio',
            'vehicle_configurations.*.wings.horizontal_stabilizer.aspect_ratio'
        ],
        [
            'vertical_tail_area',
            'vehicle_configurations.*.wings.vertical_stabilizer.areas.reference'
        ],
        [
            'vertical_tail_aspect_ratio',
            'vehicle_configurations.*.wings.vertical_stabilizer.aspect_ratio'
        ],
        [
            'design_thrust',
            'vehicle_configurations.*.propulsors.turbofan.thrust.total_design'
        ],
        [
            'MTOW',
            [
                'vehicle_configurations.*.mass_properties.takeoff',
                'vehicle_configurations.*.mass_properties.max_takeoff'
            ]
        ],
        ['design_TOW', 'vehicle_configurations.base.mass_properties.takeoff'],
        [
            'short_field_TOW',
            'vehicle_configurations.short_field_takeoff.mass_properties.takeoff'
        ],
        [
            'flap_takeoff_angle',
            [
                'vehicle_configurations.takeoff.wings.main_wing.control_surfaces.flap.deflection',
                'vehicle_configurations.short_field_takeoff.wings.main_wing.control_surfaces.flap.deflection'
            ]
        ],
        [
            'flap_landing_angle',
            'vehicle_configurations.landing.wings.main_wing.control_surfaces.flap.deflection'
        ],
        [
            'slat_takeoff_angle',
            [
                'vehicle_configurations.takeoff.wings.main_wing.control_surfaces.slat.deflection',
                'vehicle_configurations.short_field_takeoff.wings.main_wing.control_surfaces.slat.deflection'
            ]
        ],
        [
            'slat_landing_angle',
            'vehicle_configurations.landing.wings.main_wing.control_surfaces.slat.deflection'
        ],
        [
            'wing_span',
            'vehicle_configurations.base.wings.main_wing.spans.projected'
        ],
        ['noise_approach_margin', 'summary.noise_approach_margin'],
        ['noise_sideline_margin', 'summary.noise_sideline_margin'],
        ['noise_flyover_margin', 'summary.noise_flyover_margin'],
        ['static_stability', 'summary.static_stability'],
        [
            'vertical_tail_volume_coefficient',
            'summary.vertical_tail_volume_coefficient'
        ],
        [
            'horizontal_tail_volume_coefficient',
            'summary.horizontal_tail_volume_coefficient'
        ],
        ['wing_max_cl_norm', 'summary.maximum_cl_norm'],
        ['design_range_fuel_margin', 'summary.design_range_fuel_margin'],
        ['takeoff_field_length', 'summary.takeoff_field_length'],
        ['landing_field_length', 'summary.landing_field_length'],
        ['short_takeoff_field_length', 'summary.short_takeoff_field_length'],
        [
            '2nd_segment_climb_max_range',
            'summary.second_segment_climb_gradient_takeoff'
        ],
        [
            '2nd_segment_climb_short_field',
            'summary.second_segment_climb_gradient_short_field'
        ],
        ['max_throttle', 'summary.max_throttle'],
        ['short_field_fuel_margin', 'summary.short_field_fuel_margin'],
        ['max_range_fuel_margin', 'summary.max_range_fuel_margin'],
        ['max_range', 'missions.max_range_distance'],
        ['MZFW consistency', 'summary.MZFW_consistency'],
        ['MZFW_ratio', 'MZFW_ratio'],
        ['noise_takeoff_speed_increase', 'noise_V2_increase'],
        [
            'noise_cutback_altitude',
            'missions.takeoff.segments.climb.altitude_end'
        ],
        ['noise_cumulative_margin', 'summary.noise_margin'],
        ['weighted_sum_objective', 'summary.weighted_sum_objective'],
    ]

    # -------------------------------------------------------------------
    #  Vehicles
    # -------------------------------------------------------------------
    vehicle = vehicle_setup()
    nexus.vehicle_configurations = configs_setup(vehicle)

    # -------------------------------------------------------------------
    #  Analyses
    # -------------------------------------------------------------------
    nexus.analyses = Analyses.setup(nexus.vehicle_configurations)

    # -------------------------------------------------------------------
    #  Missions
    # -------------------------------------------------------------------
    nexus.missions = Missions.setup(nexus.analyses)

    # -------------------------------------------------------------------
    #  Procedure
    # -------------------------------------------------------------------
    nexus.procedure = Procedure.setup()

    # -------------------------------------------------------------------
    #  Summary
    # -------------------------------------------------------------------
    nexus.summary = Data()

    return nexus
コード例 #15
0
ファイル: test_AVL.py プロジェクト: BenjaminCheongRRE/SUAVE
def main():

    # vehicle data
    vehicle = vehicle_setup()
    configs = configs_setup(vehicle)

    # vehicle analyses
    configs_analyses = analyses_setup(configs)

    run_new_regression = False

    # append AVL aerodynamic analysis
    aerodynamics = SUAVE.Analyses.Aerodynamics.AVL()
    aerodynamics.settings.number_spanwise_vortices = 30
    aerodynamics.settings.keep_files = True
    aerodynamics.geometry = copy.deepcopy(configs.cruise)
    configs_analyses.cruise.append(aerodynamics)

    # append AVL stability analysis
    stability = SUAVE.Analyses.Stability.AVL()
    stability.settings.number_spanwise_vortices = 30
    stability.settings.keep_files = True
    stability.geometry = copy.deepcopy(configs.cruise)

    if run_new_regression:
        # append AVL aerodynamic analysis
        aerodynamics.settings.regression_flag = False
        aerodynamics.process.compute.lift.inviscid.settings.filenames.avl_bin_name = 'CHANGE/TO/AVL/PATH'
        aerodynamics.settings.save_regression_results = True
        stability.settings.regression_flag = False
        stability.settings.save_regression_results = True
        stability.settings.filenames.avl_bin_name = 'CHANGE/TO/AVL/PATH'

    else:
        aerodynamics.settings.regression_flag = True
        aerodynamics.settings.save_regression_results = False
        aerodynamics.settings.training_file = 'cruise_aero_data.txt'
        stability.settings.regression_flag = True
        stability.settings.save_regression_results = False
        stability.training_file = 'cruise_stability_data.txt'

    configs_analyses.cruise.append(aerodynamics)
    configs_analyses.cruise.append(stability)

    # ------------------------------------------------------------------
    #   Initialize the Mission
    # ------------------------------------------------------------------

    mission = SUAVE.Analyses.Mission.Sequential_Segments()
    mission.tag = 'the_mission'

    #airport
    airport = SUAVE.Attributes.Airports.Airport()
    airport.altitude = 0.0 * Units.ft
    airport.delta_isa = 0.0
    airport.atmosphere = SUAVE.Attributes.Atmospheres.Earth.US_Standard_1976()
    mission.airport = airport

    # unpack Segments module
    Segments = SUAVE.Analyses.Mission.Segments

    # base segment
    base_segment = Segments.Segment()

    # ------------------------------------------------------------------
    #   Cruise Segment: constant speed, constant altitude
    # ------------------------------------------------------------------

    segment = Segments.Cruise.Constant_Speed_Constant_Altitude(base_segment)
    segment.tag = "cruise"

    segment.analyses.extend(configs_analyses.cruise)

    segment.air_speed = 230. * Units['m/s']
    segment.distance = 4000. * Units.km
    segment.altitude = 10.668 * Units.km

    segment.state.numerics.number_control_points = 4

    # add to mission
    mission.append_segment(segment)

    missions_analyses = missions_setup(mission)

    analyses = SUAVE.Analyses.Analysis.Container()
    analyses.configs = configs_analyses
    analyses.missions = missions_analyses

    simple_sizing(configs, analyses)

    configs.finalize()
    analyses.finalize()

    # mission analysis
    mission = analyses.missions.base
    results = mission.evaluate()

    # lift coefficient check
    lift_coefficient = results.segments.cruise.conditions.aerodynamics.lift_coefficient[
        0][0]
    lift_coefficient_true = 0.6124936427552575

    print(lift_coefficient)
    diff_CL = np.abs(lift_coefficient - lift_coefficient_true)
    print('CL difference')
    print(diff_CL)
    assert np.abs((lift_coefficient - lift_coefficient_true) /
                  lift_coefficient_true) < 1e-6

    # moment coefficient check
    moment_coefficient = results.segments.cruise.conditions.stability.static.CM[
        0][0]
    moment_coefficient_true = -0.5764235338199974

    print(moment_coefficient)
    diff_CM = np.abs(moment_coefficient - moment_coefficient_true)
    print('CM difference')
    print(diff_CM)
    assert np.abs((moment_coefficient - moment_coefficient_true) /
                  moment_coefficient_true) < 1e-6
    return
コード例 #16
0
ファイル: Noise_Test.py プロジェクト: michK/SUAVE
def setup():

    nexus = Nexus()
    problem = Data()
    nexus.optimization_problem = problem

    # -------------------------------------------------------------------
    # Inputs
    # -------------------------------------------------------------------

    # [ tag , initial, [lb,ub], scaling, units ]
    problem.inputs = np.array([
        [ 'wing_area'                    ,    124.8 , (    70.    ,   200.   ) ,   124.8 , Units.meter**2],
        [ 'wing_aspect_ratio'            ,     10.18, (     5.    ,    20.   ) ,    10.18,     Units.less],
        [ 'wing_sweep'                   ,    25.   , (     0.    ,    35.   ) ,    25.  ,  Units.degrees],
        [ 'wing_thickness'               ,     0.105 , (     0.07  ,     0.20 ) ,     0.105,     Units.less],
        [ 'design_thrust'                , 52700.   , ( 10000.    , 70000.   ) , 52700.  ,        Units.N],
        [ 'MTOW'                         , 79090.   , ( 20000.    ,100000.   ) , 79090.  ,       Units.kg],
        [ 'MZFW_ratio'                   ,     0.77 , (     0.6   ,     0.99 ) ,    0.77 ,     Units.less],
        [ 'flap_takeoff_angle'           ,    10.   , (     0.    ,    20.   ) ,    10.  ,  Units.degrees],
        [ 'flap_landing_angle'           ,    40.   , (     0.    ,    50.   ) ,    40.  ,  Units.degrees],
        [ 'short_field_TOW'              , 64030.   , ( 20000.    ,100000.   ) , 64030.  ,       Units.kg],
        [ 'design_TOW'                   , 68520.   , ( 20000.    ,100000.   ) , 68520.  ,       Units.kg],
        [ 'noise_takeoff_speed_increase' ,    10.0  , (    10.    ,    20.   ) ,    10.0 ,     Units.knots],
        [ 'noise_cutback_altitude'       ,   304.8  , (   240.    ,   400.   ) ,   304.8 ,    Units.meter],
    ])

    # -------------------------------------------------------------------
    #  Objective
    # -------------------------------------------------------------------

    problem.objective = np.array([

        [ 'noise_cumulative_margin', 17, Units.less ],

    ])


    # -------------------------------------------------------------------
    # Constraints
    # -------------------------------------------------------------------

    # [ tag, sense, edge, scaling, units ]
    problem.constraints = np.array([
        [ 'MZFW consistency' , '>' , 0. , 10 , Units.less],
        [ 'design_range_fuel_margin' , '>', 0., 10, Units.less],
        [ 'short_field_fuel_margin' , '>' , 0. , 10, Units.less],
        [ 'max_range_fuel_margin' , '>' , 0. , 10, Units.less], 
        [ 'wing_span' , '<', 35.9664, 35.9664, Units.less],
        [ 'noise_flyover_margin' , '>', 0. , 10., Units.less],
        [ 'noise_sideline_margin' , '>', 0. , 10. , Units.less],
        [ 'noise_approach_margin' , '>', 0., 10., Units.less],
        [ 'takeoff_field_length' , '<', 1985., 1985., Units.meters],
        [ 'landing_field_length' , '<', 1385., 1385., Units.meters],
        [ '2nd_segment_climb_max_range' , '>', 0.024, 0.024, Units.less],
        [ '2nd_segment_climb_short_field' , '>', 0.024, 0.024, Units.less],
        [ 'max_throttle' , '<', 1., 1., Units.less],
        [ 'short_takeoff_field_length' , '<', 1330., 1330., Units.meters],
        [ 'noise_cumulative_margin' , '>', 10., 10., Units.less],
    ])

    # -------------------------------------------------------------------
    #  Aliases
    # -------------------------------------------------------------------


    problem.aliases = [
        [ 'wing_area'                        ,   ['vehicle_configurations.*.wings.main_wing.areas.reference',
                                                  'vehicle_configurations.*.reference_area'                            ]],
        [ 'wing_aspect_ratio'                ,    'vehicle_configurations.*.wings.main_wing.aspect_ratio'               ],
        [ 'wing_incidence'                   ,    'vehicle_configurations.*.wings.main_wing.twists.root'                ],
        [ 'wing_tip_twist'                   ,    'vehicle_configurations.*.wings.main_wing.twists.tip'                 ],
        [ 'wing_sweep'                       ,    'vehicle_configurations.*.wings.main_wing.sweeps.quarter_chord'        ],
        [ 'wing_thickness'                   ,    'vehicle_configurations.*.wings.main_wing.thickness_to_chord'         ],
        [ 'wing_taper'                       ,    'vehicle_configurations.*.wings.main_wing.taper'                      ],
        [ 'wing_location'                    ,    'vehicle_configurations.*.wings.main_wing.origin[0]'                  ],
        [ 'horizontal_tail_area'             ,    'vehicle_configurations.*.wings.horizontal_stabilizer.areas.reference'],
        [ 'horizontal_tail_aspect_ratio'     ,    'vehicle_configurations.*.wings.horizontal_stabilizer.aspect_ratio'   ],
        [ 'vertical_tail_area'               ,    'vehicle_configurations.*.wings.vertical_stabilizer.areas.reference'  ],
        [ 'vertical_tail_aspect_ratio'       ,    'vehicle_configurations.*.wings.vertical_stabilizer.aspect_ratio'     ],
        [ 'design_thrust'                    ,    'vehicle_configurations.*.propulsors.turbofan.thrust.total_design'   ],
        [ 'MTOW'                             ,   ['vehicle_configurations.*.mass_properties.takeoff'   ,
                                                  'vehicle_configurations.*.mass_properties.max_takeoff'               ]],
        [ 'design_TOW'                       ,    'vehicle_configurations.base.mass_properties.takeoff'                 ],
        [ 'short_field_TOW'                  ,    'vehicle_configurations.short_field_takeoff.mass_properties.takeoff'  ],
        [ 'flap_takeoff_angle'               ,    ['vehicle_configurations.takeoff.wings.main_wing.flaps.angle',
                                                   'vehicle_configurations.short_field_takeoff.wings.main_wing.flaps.angle']],
        [ 'flap_landing_angle'               ,    'vehicle_configurations.landing.wings.main_wing.flaps.angle'          ],
        [ 'slat_takeoff_angle'               ,    ['vehicle_configurations.takeoff.wings.main_wing.slats.angle',
                                               'vehicle_configurations.short_field_takeoff.wings.main_wing.slats.angle']],
        [ 'slat_landing_angle'               ,    'vehicle_configurations.landing.wings.main_wing.slats.angle'          ],
        [ 'wing_span'                        ,    'vehicle_configurations.base.wings.main_wing.spans.projected'         ],
        [ 'noise_approach_margin'            ,    'summary.noise_approach_margin'                                       ],
        [ 'noise_sideline_margin'            ,    'summary.noise_sideline_margin'                                       ],
        [ 'noise_flyover_margin'             ,    'summary.noise_flyover_margin'                                        ],
        [ 'static_stability'                 ,    'summary.static_stability'                                            ],
        [ 'vertical_tail_volume_coefficient' ,    'summary.vertical_tail_volume_coefficient'                            ],
        [ 'horizontal_tail_volume_coefficient',   'summary.horizontal_tail_volume_coefficient'                          ],
        [ 'wing_max_cl_norm'                 ,    'summary.maximum_cl_norm'                                             ],
        [ 'design_range_fuel_margin'         ,    'summary.design_range_fuel_margin'                                    ],
        [ 'takeoff_field_length'             ,    'summary.takeoff_field_length'                                        ],
        [ 'landing_field_length'             ,    'summary.landing_field_length'                                        ],
        [ 'short_takeoff_field_length'       ,    'summary.short_takeoff_field_length'                                  ],
        [ '2nd_segment_climb_max_range'      ,    'summary.second_segment_climb_gradient_takeoff'                       ],
        [ '2nd_segment_climb_short_field'    ,    'summary.second_segment_climb_gradient_short_field'                   ],
        [ 'max_throttle'                     ,    'summary.max_throttle'                                                ],
        [ 'short_field_fuel_margin'          ,    'summary.short_field_fuel_margin'                                     ],
        [ 'max_range_fuel_margin'            ,    'summary.max_range_fuel_margin'                                       ],
        [ 'max_range'                        ,    'missions.max_range_distance'                                         ],
        [ 'MZFW consistency'                 ,    'summary.MZFW_consistency'                                            ],
        [ 'MZFW_ratio'                       ,    'MZFW_ratio'                                                          ],
        [ 'noise_takeoff_speed_increase'     ,    'noise_V2_increase'                                                   ],
        [ 'noise_cutback_altitude'           ,    'missions.takeoff.segments.climb.altitude_end'                        ],
        [ 'noise_cumulative_margin'          ,    'summary.noise_margin'                                                ],
        [ 'weighted_sum_objective'           ,    'summary.weighted_sum_objective'                                      ],
    ]

    # -------------------------------------------------------------------
    #  Vehicles
    # -------------------------------------------------------------------
    vehicle = vehicle_setup()
    nexus.vehicle_configurations = configs_setup(vehicle)
    

    # -------------------------------------------------------------------
    #  Analyses
    # -------------------------------------------------------------------
    nexus.analyses = Analyses.setup(nexus.vehicle_configurations)


    # -------------------------------------------------------------------
    #  Missions
    # -------------------------------------------------------------------
    nexus.missions = Missions.setup(nexus.analyses)


    # -------------------------------------------------------------------
    #  Procedure
    # -------------------------------------------------------------------
    nexus.procedure = Procedure.setup()

    # -------------------------------------------------------------------
    #  Summary
    # -------------------------------------------------------------------
    nexus.summary = Data()

    return nexus
コード例 #17
0
ファイル: test_AVL.py プロジェクト: michK/SUAVE
def main(): 
   
    # vehicle data
    vehicle  = vehicle_setup()
    configs  = configs_setup(vehicle)

    # vehicle analyses
    configs_analyses = analyses_setup(configs)

    # append AVL aerodynamic analysis
    aerodynamics                                               = SUAVE.Analyses.Aerodynamics.AVL()
    aerodynamics.process.compute.lift.inviscid.regression_flag = True
    aerodynamics.process.compute.lift.inviscid.keep_files      = True
    aerodynamics.geometry                                      = copy.deepcopy(configs.cruise) 
    aerodynamics.process.compute.lift.inviscid.training_file   = 'cruise_data_aerodynamics.txt'    
    configs_analyses.cruise.append(aerodynamics)     
    
    # append AVL stability analysis
    stability                                                  = SUAVE.Analyses.Stability.AVL()
    stability.regression_flag                                  = True 
    stability.keep_files                                       = True
    stability.geometry                                         = copy.deepcopy(configs.cruise)
    stability.training_file                                    = 'cruise_data_stability.txt'    
    configs_analyses.cruise.append(stability)

    # mission analyses
    mission  = mission_setup(configs_analyses)
    missions_analyses = missions_setup(mission)

    analyses = SUAVE.Analyses.Analysis.Container()
    analyses.configs  = configs_analyses
    analyses.missions = missions_analyses
    
    simple_sizing(configs, analyses)

    configs.finalize()
    analyses.finalize()
 
    # mission analysis
    mission = analyses.missions.base    
    results = mission.evaluate()

    # lift coefficient check
    lift_coefficient              = results.conditions.cruise.aerodynamics.lift_coefficient[0]
    lift_coefficient_true         = 0.59495841
    print lift_coefficient
    diff_CL                       = np.abs(lift_coefficient  - lift_coefficient_true) 
    print 'CL difference'
    print diff_CL
    assert np.abs((lift_coefficient  - lift_coefficient_true)/lift_coefficient_true) < 1e-3
    
    # moment coefficient check
    moment_coefficient            = results.conditions.cruise.stability.static.CM[0][0]
    moment_coefficient_true       = -0.620326644
    print moment_coefficient
    diff_CM                       = np.abs(moment_coefficient - moment_coefficient_true)
    print 'CM difference'
    print diff_CM
    assert np.abs((moment_coefficient - moment_coefficient_true)/moment_coefficient_true) < 1e-3    
 
    return