Beispiel #1
0
def main():

    vehicle = vehicle_setup()

    analyses = SUAVE.Analyses.Vehicle()

    sizing = SUAVE.Analyses.Sizing.Sizing()
    sizing.features.vehicle = vehicle
    analyses.append(sizing)

    weights = SUAVE.Analyses.Weights.Weights_Transport()
    weights.vehicle = vehicle
    analyses.append(weights)

    aerodynamics = SUAVE.Analyses.Aerodynamics.AERODAS()
    aerodynamics.geometry = vehicle
    aerodynamics.settings.drag_coefficient_increment = 0.0000
    analyses.append(aerodynamics)

    stability = SUAVE.Analyses.Stability.Fidelity_Zero()
    stability.geometry = vehicle
    analyses.append(stability)

    energy = SUAVE.Analyses.Energy.Energy()
    energy.network = vehicle.networks
    analyses.append(energy)

    planet = SUAVE.Analyses.Planets.Planet()
    analyses.append(planet)

    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    atmosphere.features.planet = planet.features
    analyses.append(atmosphere)

    analyses.finalize()

    climb_rate = electric_V_h_diagram(vehicle,
                                      analyses,
                                      CL_max=1.4,
                                      delta_isa=0.,
                                      grid_points=5,
                                      altitude_ceiling=1e4 * Units.ft,
                                      max_speed=150 * Units.knots,
                                      test_omega=2400 * Units.rpm,
                                      display_plot=True)

    climb_rate_r = [
        [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.],
        [365.28164616, 0., 0., 0., 0.],
        [671.06501573, 565.12568368, 462.33970468, 362.03685772, 263.49032629],
        [677.20427984, 577.26538105, 483.80816586, 395.7082193, 311.81340271]
    ]

    assert (np.all(
        np.nan_to_num(np.abs(climb_rate - climb_rate_r) / climb_rate_r) < 1e-6)
            ), "Electric V_h Diagram Regression Failed"

    return
Beispiel #2
0
def main():

    vehicle = vehicle_setup()

    analyses = SUAVE.Analyses.Vehicle()

    sizing = SUAVE.Analyses.Sizing.Sizing()
    sizing.features.vehicle = vehicle
    analyses.append(sizing)

    weights = SUAVE.Analyses.Weights.Weights_Transport()
    weights.vehicle = vehicle
    analyses.append(weights)

    aerodynamics = SUAVE.Analyses.Aerodynamics.AERODAS()
    aerodynamics.geometry = vehicle
    aerodynamics.settings.drag_coefficient_increment = 0.0000
    analyses.append(aerodynamics)

    stability = SUAVE.Analyses.Stability.Fidelity_Zero()
    stability.geometry = vehicle
    analyses.append(stability)

    energy = SUAVE.Analyses.Energy.Energy()
    energy.network = vehicle.networks
    analyses.append(energy)

    planet = SUAVE.Analyses.Planets.Planet()
    analyses.append(planet)

    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    atmosphere.features.planet = planet.features
    analyses.append(atmosphere)

    analyses.finalize()

    climb_rate = electric_V_h_diagram(vehicle,
                                      analyses,
                                      CL_max=1.4,
                                      delta_isa=0.,
                                      grid_points=5,
                                      altitude_ceiling= 2e4 * Units.ft,
                                      max_speed=130 * Units['m/s'],
                                      test_omega= 1000 * Units.rpm,
                                      display_plot=True)

    climb_rate_r = [[  0.        ,   0.        ,   0.        ,   0.        ,          0.        ],
                    [  0.        ,   0.        ,   0.        ,   0.        ,          0.        ],
                    [719.7179757 , 582.17272069, 452.68248026, 329.12481042,        212.19190451],
                    [  0.        ,   0.        ,   0.        ,   0.        ,          0.        ],
                    [  0.        ,   0.        ,   0.        ,   0.        ,          0.        ]]

    assert (np.all(np.nan_to_num(np.abs(climb_rate-climb_rate_r)/climb_rate_r) < 1e-6)), "Electric V_h Diagram Regression Failed"

    return
def test_2():
    """
    This tests the propeller_single_point function using the Fidelity One rotor inflow model.
    """
    vehicle = vehicle_setup()

    # update the wake method used for each prop
    for p in vehicle.networks.battery_propeller.propellers:
        p.Wake = Rotor_Wake_Fidelity_One()

    analyses = SUAVE.Analyses.Vehicle()
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    atmosphere.features.planet = SUAVE.Analyses.Planets.Planet()
    analyses.append(atmosphere)

    results = propeller_single_point(vehicle.networks.battery_propeller,
                                     analyses,
                                     pitch=0.,
                                     omega=2200. * Units.rpm,
                                     altitude=5000. * Units.ft,
                                     delta_isa=0.,
                                     speed=10 * Units['m/s'],
                                     plots=True,
                                     print_results=True)

    thrust = results.thrust
    torque = results.torque
    power = results.power
    Cp = results.power_coefficient
    etap = results.efficiency

    thrust_r = 637.9402297052759
    torque_r = 129.07946679553763
    power_r = 29737.7743383709
    Cp_r = 0.03796285858728355
    etap_r = 0.21452184768317925

    assert (np.abs(thrust - thrust_r) / thrust_r <
            1e-6), "Propeller Single Point Regression Failed at Thrust Test"
    assert (np.abs(torque - torque_r) / torque_r <
            1e-6), "Propeller Single Point Regression Failed at Torque Test"
    assert (np.abs(power - power_r) / power_r <
            1e-6), "Propeller Single Point Regression Failed at Power Test"
    assert (
        np.abs(Cp - Cp_r) / Cp_r < 1e-6
    ), "Propeller Single Point Regression Failed at Power Coefficient Test"
    assert (np.abs(etap - etap_r) / etap_r < 1e-6
            ), "Propeller Single Point Regression Failed at Efficiency Test"

    return
Beispiel #4
0
def test_2():
    """
    This tests the propeller_single_point function using the helical fixed wake (HFW) + BET model.
    """
    HFW = True
    vehicle = vehicle_setup()

    analyses = SUAVE.Analyses.Vehicle()
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    atmosphere.features.planet = SUAVE.Analyses.Planets.Planet()
    analyses.append(atmosphere)

    results = propeller_single_point(vehicle.networks.battery_propeller,
                                     analyses,
                                     pitch=0.,
                                     omega=1500. * Units.rpm,
                                     altitude=5000. * Units.ft,
                                     delta_isa=0.,
                                     speed=10 * Units['m/s'],
                                     plots=True,
                                     HFW=HFW,
                                     print_results=True)

    thrust = results.thrust
    torque = results.torque
    power = results.power
    Cp = results.power_coefficient
    etap = results.efficiency

    thrust_r = 2393.728639733924
    torque_r = 855.298865633124
    power_r = 134350.0316448353
    Cp_r = 0.3038702436194616
    etap_r = 0.17817105142646564

    assert (np.abs(thrust - thrust_r) / thrust_r <
            1e-6), "Propeller Single Point Regression Failed at Thrust Test"
    assert (np.abs(torque - torque_r) / torque_r <
            1e-6), "Propeller Single Point Regression Failed at Torque Test"
    assert (np.abs(power - power_r) / power_r <
            1e-6), "Propeller Single Point Regression Failed at Power Test"
    assert (
        np.abs(Cp - Cp_r) / Cp_r < 1e-6
    ), "Propeller Single Point Regression Failed at Power Coefficient Test"
    assert (np.abs(etap - etap_r) / etap_r < 1e-6
            ), "Propeller Single Point Regression Failed at Efficiency Test"

    return
Beispiel #5
0
def test_1():
    """
    This tests the propeller_single_point function using the BEMT model.
    """
    HFW = False
    vehicle = vehicle_setup()

    analyses = SUAVE.Analyses.Vehicle()
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    atmosphere.features.planet = SUAVE.Analyses.Planets.Planet()
    analyses.append(atmosphere)

    results = propeller_single_point(vehicle.networks.battery_propeller,
                                     analyses,
                                     pitch=0.,
                                     omega=1500. * Units.rpm,
                                     altitude=5000. * Units.ft,
                                     delta_isa=0.,
                                     speed=10 * Units['m/s'],
                                     plots=True,
                                     HFW=HFW,
                                     print_results=True)

    thrust = results.thrust
    torque = results.torque
    power = results.power
    Cp = results.power_coefficient
    etap = results.efficiency

    thrust_r = 2301.918639576478
    torque_r = 827.0007491838651
    power_r = 129904.97390746429
    Cp_r = 0.29381649996923126
    etap_r = 0.17720005086702875

    assert (np.abs(thrust - thrust_r) / thrust_r <
            1e-6), "Propeller Single Point Regression Failed at Thrust Test"
    assert (np.abs(torque - torque_r) / torque_r <
            1e-6), "Propeller Single Point Regression Failed at Torque Test"
    assert (np.abs(power - power_r) / power_r <
            1e-6), "Propeller Single Point Regression Failed at Power Test"
    assert (
        np.abs(Cp - Cp_r) / Cp_r < 1e-6
    ), "Propeller Single Point Regression Failed at Power Coefficient Test"
    assert (np.abs(etap - etap_r) / etap_r < 1e-6
            ), "Propeller Single Point Regression Failed at Efficiency Test"

    return
def test_1():
    """
    This tests the propeller_single_point function using the Fidelity Zero rotor wake inflow model.
    """
    vehicle = vehicle_setup()

    analyses = SUAVE.Analyses.Vehicle()
    atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    atmosphere.features.planet = SUAVE.Analyses.Planets.Planet()
    analyses.append(atmosphere)

    results = propeller_single_point(vehicle.networks.battery_propeller,
                                     analyses,
                                     pitch=0.,
                                     omega=2200. * Units.rpm,
                                     altitude=5000. * Units.ft,
                                     delta_isa=0.,
                                     speed=10 * Units['m/s'],
                                     plots=True,
                                     print_results=True)

    thrust = results.thrust
    torque = results.torque
    power = results.power
    Cp = results.power_coefficient
    etap = results.efficiency

    thrust_r = 643.4365612076354
    torque_r = 130.6985065893255
    power_r = 30110.77432998669
    Cp_r = 0.03843902555841082
    etap_r = 0.21368980888905617

    assert (np.abs(thrust - thrust_r) / thrust_r <
            1e-6), "Propeller Single Point Regression Failed at Thrust Test"
    assert (np.abs(torque - torque_r) / torque_r <
            1e-6), "Propeller Single Point Regression Failed at Torque Test"
    assert (np.abs(power - power_r) / power_r <
            1e-6), "Propeller Single Point Regression Failed at Power Test"
    assert (
        np.abs(Cp - Cp_r) / Cp_r < 1e-6
    ), "Propeller Single Point Regression Failed at Power Coefficient Test"
    assert (np.abs(etap - etap_r) / etap_r < 1e-6
            ), "Propeller Single Point Regression Failed at Efficiency Test"

    return
Beispiel #7
0
def full_setup(bemt_wake, fixed_helical_wake, identical_props):

    # vehicle data
    vehicle = vehicle_setup()

    # test for non-identical propellers
    if not identical_props:
        vehicle.networks.battery_propeller.identical_propellers = False
    configs = configs_setup(vehicle)

    # vehicle analyses
    configs_analyses = analyses_setup(configs, bemt_wake, fixed_helical_wake)

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

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

    return configs, analyses