def construct_launch_vehicle(stage_type, prop_choice, portion_reused, ab_rec, num_ab_engines=None, num_rocket_engines=9): """Create a LaunchVehicle object given strategy choices and element masses. Arguments: stage_type: type of first stage vehicle, choose from 'winged' or 'ballistic' prop_choice: propellant choice for first stage, choose from 'kerosene' or 'H2' portion_reused: portion of first stage that is reused, choose from 'full', 'partial', or 'none' ab_rec (boolean): specifies whether the recovery scheme is powered or not, True for powered masses_dict: dictionary mapping vehicle element names to their dry masses in kg, i.e. {'element_name': mass} Returns: instance of the LaunchVehicle class describing the launch vehicle """ stage2 = ExpendableBallisticStageStorable(name='s2', m=0) stage2_engine = StorableTurboFed(name='e2', m=0) veh_element_list = [stage2, stage2_engine] if stage_type == 'ballistic' and prop_choice == 'H2' and portion_reused == 'none': stage1 = ExpendableBallisticStageLH2(name='s1', m=0) stage1_engine = CryoLH2TurboFed(name='e1', m=0) stage1_list = [stage1, stage1_engine] elif stage_type == 'ballistic' and prop_choice == 'H2' and portion_reused == 'full': stage1 = ReusableBallisticStageLH2(name='s1', m=0) stage1_engine = CryoLH2TurboFed(name='e1', m=0) stage1_list = [stage1, stage1_engine] elif stage_type == 'ballistic' and prop_choice == 'H2' and portion_reused == 'partial': stage1_rec = ReusableBallisticStageLH2(name='s1', m=0) stage1_disp = ExpendableTank(name='d1', m=0) stage1_engine = CryoLH2TurboFed(name='e1', m=0) stage1_list = [stage1_rec, stage1_disp, stage1_engine] elif stage_type == 'ballistic' and prop_choice == 'kerosene' and portion_reused == 'none': stage1 = ExpendableBallisticStageStorable(name='s1', m=0) stage1_engine = StorableTurboFed(name='e1', m=0) stage1_list = [stage1, stage1_engine] elif stage_type == 'ballistic' and prop_choice == 'kerosene' and portion_reused == 'full': stage1 = ReusableBallisticStageStorable(name='s1', m=0) stage1_engine = StorableTurboFed(name='e1', m=0) stage1_list = [stage1, stage1_engine] elif stage_type == 'ballistic' and prop_choice == 'kerosene' and portion_reused == 'partial': stage1_rec = ReusableBallisticStageStorable(name='s1', m=0) stage1_disp = ExpendableTank(name='d1', m=0) stage1_engine = StorableTurboFed(name='e1', m=0) stage1_list = [stage1_rec, stage1_disp, stage1_engine] elif stage_type == 'winged' and prop_choice == 'H2' and portion_reused == 'full' and ab_rec: stage1 = VTOStageFlybackVehicle(name='s1', m=0) stage1_rocket_engine = CryoLH2TurboFed(name='e1', m=0) stage1_ab_engine = TurboJetEngine(name='ab', m=0) stage1_list = [stage1, stage1_rocket_engine, stage1_ab_engine] elif stage_type == 'winged' and prop_choice == 'H2' and portion_reused == 'full' and not ab_rec: stage1_rec = VTOStageFlybackVehicle(name='s1', m=0) stage1_rocket_engine = CryoLH2TurboFed(name='e1', m=0) stage1_list = [stage1_rec, stage1_rocket_engine] elif stage_type == 'winged' and prop_choice == 'H2' and portion_reused == 'partial' and ab_rec: stage1_rec = VTOStageFlybackVehicle(name='s1', m=0) stage1_disp = ExpendableTank(name='d1', m=0) stage1_rocket_engine = CryoLH2TurboFed(name='e1', m=0) stage1_ab_engine = TurboJetEngine(name='ab', m=0) stage1_list = [ stage1_rec, stage1_disp, stage1_rocket_engine, stage1_ab_engine ] elif stage_type == 'winged' and prop_choice == 'H2' and portion_reused == 'partial' and not ab_rec: stage1_rec = VTOStageFlybackVehicle(name='s1', m=0) stage1_disp = ExpendableTank(name='d1', m=0) stage1_rocket_engine = CryoLH2TurboFed(name='e1', m=0) stage1_list = [stage1_rec, stage1_disp, stage1_rocket_engine] elif stage_type == 'winged' and prop_choice == 'kerosene' and portion_reused == 'full' and ab_rec: stage1 = VTOStageFlybackVehicle(name='s1', m=0) stage1_rocket_engine = StorableTurboFed(name='e1', m=0) stage1_ab_engine = TurboJetEngine(name='ab', m=0) stage1_list = [stage1, stage1_rocket_engine, stage1_ab_engine] elif stage_type == 'winged' and prop_choice == 'kerosene' and portion_reused == 'full' and not ab_rec: stage1 = VTOStageFlybackVehicle(name='s1', m=0) stage1_rocket_engine = StorableTurboFed(name='e1', m=0) stage1_list = [stage1, stage1_rocket_engine] elif stage_type == 'winged' and prop_choice == 'kerosene' and portion_reused == 'partial' and ab_rec: stage1_rec = VTOStageFlybackVehicle(name='s1', m=0) stage1_disp = ExpendableTank(name='d1', m=0) stage1_rocket_engine = StorableTurboFed(name='e1', m=0) stage1_ab_engine = TurboJetEngine(name='ab', m=0) stage1_list = [ stage1_rec, stage1_disp, stage1_rocket_engine, stage1_ab_engine ] elif stage_type == 'winged' and prop_choice == 'kerosene' and portion_reused == 'partial' and not ab_rec: stage1_rec = VTOStageFlybackVehicle(name='s1', m=0) stage1_disp = ExpendableTank(name='d1', m=0) stage1_rocket_engine = StorableTurboFed(name='e1', m=0) stage1_list = [stage1_rec, stage1_disp, stage1_rocket_engine] veh_element_list += stage1_list if portion_reused == 'partial': N_veh = 3 else: N_veh = 2 launch_vehicle = LaunchVehicle(name='veh', M0=0, N=N_veh, element_list=veh_element_list) return launch_vehicle
from lvreuse.cost.vehicle import LaunchVehicle from lvreuse.cost.indirect_ops import indirect_ops_cost core = ExpendableBallisticStageStorable( "s1", 27200 - 9 * 470) # stage - 9 engines, from space launch report, wikipedia core_engine = ModernTurboFed("e1", 470) # stage2 = ExpendableBallisticStageStorable( "s2", 4500 + 1900 - 470) # stage + fairing - engine, from spaceflight101, space launch report stage2_engine = ModernTurboFed("e2", 470) # falcon_elements = [core, core_engine, stage2, stage2_engine] falcon9_block3 = LaunchVehicle( name='Falcon 9 Block 3', M0=459.054, N=2, element_list=falcon_elements) # mass from spaceX website falcon9_engines_dict = {'e1': 9, 'e2': 1} falcon9_f8_dict = { 's1': 1.0, 'e1': 1.0, 's2': 1.0, 'e2': 1.0, 'veh': 1.0, 'ops': 1.0 } falcon_uncertainty_list = [ rdm.TriangularUncertainty('p_s1', min_value=0.75, mode_value=0.8, max_value=0.85),
SRB = SolidPropellantBooster("b1", 39800) # data from Isakowitz p. 31 core_vehicle = ExpendableBallisticStageLH2( "s1", 12200 - 1300) # data from Isakowitz, less engine vulcain_engine = CryoLH2TurboFed("e1", 1300) stage2 = ExpendableBallisticStageStorable( "s2", 1200 + 1500 + 2025 + 716 - 111 ) # data from Isakowitz, including VEB, short fairing, SPELTRA, less engine aestus_engine = StorablePressureFed("e2", 111) ariane5_element_list = [ SRB, core_vehicle, vulcain_engine, stage2, aestus_engine ] ariane5G = LaunchVehicle(name="Ariane 5G", M0=746, N=4, element_list=ariane5_element_list) ariane_engines_dict = {'e1': 1, 'e2': 1, 'b1': 2} ariane_f8_dict = { 's1': 0.86, 'e1': 0.86, 's2': 0.86, 'e2': 0.77, 'b1': 0.86, 'veh': 0.86, 'ops': 0.86 } ariane_uncertainty_list = [ rdm.TriangularUncertainty('p_s1', min_value=0.75,
aestus_engine = CryoLH2TurboFed("HM7B", 165) aestus_engine_CER_vals = CERValues(aestus_engine.dev_a, aestus_engine.dev_x, aestus_engine.prod_a, aestus_engine.prod_x) aestus_engine_cost_factors = ElementCostFactors(f1=0.8, f2=1.0, f3=0.8, f8=0.77, f10=1.0, f11=1.0, p=0.9) ariane5_element_list = [ SRB, core_vehicle, vulcain_engine, stage2, aestus_engine ] ariane5ECA = LaunchVehicle(name="ariane5ECA", M0=791, N=4, element_list=ariane5_element_list) ariane5ECA_element_map = { "P240": [SRB_CER_vals, SRB_cost_factors, 2], "H173": [core_veh_CER_vals, core_veh_cost_factors, 1], "vulcain2": [vulcain_engine_CER_vals, vulcain_engine_cost_factors, 1], "ESC-A": [stage2_CER_vals, stage2_cost_factors, 1], "HM7B": [aestus_engine_CER_vals, aestus_engine_cost_factors, 1] } ariane5_cost_factors = VehicleCostFactors(f0_dev=1.04**3, f0_prod=1.02, f6=1.0, f7=1.0, f8=0.86,
def setUp(self): self.SRB = SolidPropellantBooster("SRB", 39300) self.SRB_CER_vals = CERValues(self.SRB.dev_a, self.SRB.dev_x, self.SRB.prod_a, self.SRB.prod_x) self.SRB_cost_factors = ElementCostFactors(f1=1.1, f2=1.0, f3=0.9, f8=0.86, f10=1.0, f11=1.0, p=0.9) self.core_vehicle = ExpendableBallisticStageLH2("core_vehicle", 13610) self.core_veh_CER_vals = CERValues(self.core_vehicle.dev_a, self.core_vehicle.dev_x, self.core_vehicle.prod_a, self.core_vehicle.prod_x) self.core_veh_cost_factors = ElementCostFactors(f1=1.1, f2=1.16, f3=0.85, f8=0.86, f10=1.0, f11=1.0, p=0.9) self.vulcain_engine = CryoLH2TurboFed("vulcain_engine", 1685) self.vulcain_engine_CER_vals = CERValues(self.vulcain_engine.dev_a, self.vulcain_engine.dev_x, self.vulcain_engine.prod_a, self.vulcain_engine.prod_x) self.vulcain_engine_cost_factors = ElementCostFactors(f1=1.1, f2=0.79, f3=0.9, f8=0.86, f10=1.0, f11=1.0, p=0.9) self.stage2 = ExpendableBallisticStageStorable("stage2", 2500) self.stage2_CER_vals = CERValues(self.stage2.dev_a, self.stage2.dev_x, self.stage2.prod_a, self.stage2.prod_x) self.stage2_cost_factors = ElementCostFactors(f1=0.9, f2=1.09, f3=0.9, f8=0.86, f10=1.0, f11=1.0, p=0.9) self.aestus_engine = StorablePressureFed("aestus_engine", 119) self.aestus_engine_CER_vals = CERValues(self.aestus_engine.dev_a, self.aestus_engine.dev_x, self.aestus_engine.prod_a, self.aestus_engine.prod_x) self.aestus_engine_cost_factors = ElementCostFactors(f1=0.8, f2=1.0, f3=0.8, f8=0.77, f10=1.0, f11=1.0, p=0.9) ariane5_element_list = [ self.SRB, self.core_vehicle, self.vulcain_engine, self.stage2, self.aestus_engine ] self.ariane5 = LaunchVehicle("ariane5", 777, 4, ariane5_element_list) self.ariane5_element_map = { "SRB": [self.SRB_CER_vals, self.SRB_cost_factors, 2], "core_vehicle": [self.core_veh_CER_vals, self.core_veh_cost_factors, 1], "vulcain_engine": [ self.vulcain_engine_CER_vals, self.vulcain_engine_cost_factors, 1 ], "stage2": [self.stage2_CER_vals, self.stage2_cost_factors, 1], "aestus_engine": [self.aestus_engine_CER_vals, self.aestus_engine_cost_factors, 1] } self.ariane5_cost_factors = VehicleCostFactors(f0_dev=1.04**3, f0_prod=1.025, f6=1.0, f7=1.0, f8=0.86, f9=1.07, p=0.9) self.ariane_prod_nums = [1] self.ariane_prod_nums3 = [1, 2, 3] self.ariane5_ops_cost_factors = OperationsCostFactors(f5_dict={}, f8=0.86, f11=1.0, fv=0.9, fc=0.85, p=0.9) self.launch_rate = 7 self.launch_nums_list = range(1, 10) self.ariane5_sum_QN = 1.6
from lvreuse.cost.tools import cost_reduction_factor from lvreuse.cost.elements import ExpendableBallisticStageStorable, ModernTurboFed from lvreuse.cost.vehicle import LaunchVehicle from lvreuse.cost.indirect_ops import indirect_ops_cost core = ExpendableBallisticStageStorable( "s1", 950 - 9 * 35) # stage - 9 engines, from spacelaunchreport core_engine = ModernTurboFed("e1", 35) # stage2 = ExpendableBallisticStageStorable( "s2", 250 + 44 - 35) # stage + fairing - engine, from spacelaunchreport, rocketlabs stage2_engine = ModernTurboFed("e2", 35) # electron_elements = [core, core_engine, stage2, stage2_engine] electron = LaunchVehicle( name='Electron', M0=13.0, N=2, element_list=electron_elements) # mass from rocketlabs electron_engines_dict = {'e1': 9, 'e2': 1} electron_f8_dict = {'s1': 1.0, 'e1': 1.0, 's2': 1.0, 'e2': 1.0, 'veh': 1.0} electron_uncertainty_list = [ rdm.TriangularUncertainty('p_s1', min_value=0.85, mode_value=0.9, max_value=0.95), rdm.TriangularUncertainty('p_e1', min_value=0.85, mode_value=0.9, max_value=0.95), rdm.TriangularUncertainty('p_s2', min_value=0.85, mode_value=0.9,
from lvreuse.cost.vehicle import LaunchVehicle from lvreuse.cost.indirect_ops import indirect_ops_cost core = ExpendableBallisticStageStorable( "s1", 20743 + 420 + 375 - 5480 ) # CCB, data from Isakowitz, p. 77, includes core, booster and interstage adapter core_engine = StorableTurboFed("e1", 5480) # RD-180 stage2 = ExpendableBallisticStageLH2( "s2", 1914 + 2085 - 168) # centaur, data from Isakowitz, stage + short fairing - engine stage2_engine = CryoLH2TurboFed("e2", 168) # RL-10A atlas_elements = [core, core_engine, stage2, stage2_engine] atlasV_401 = LaunchVehicle(name='Atlas V 401', M0=334.5, N=2, element_list=atlas_elements) atlasV_engines_dict = {'e1': 1, 'e2': 1} atlasV_f8_dict = { 's1': 1.0, 'e1': 1.49, 's2': 1.0, 'e2': 1.0, 'veh': 1.0, 'ops': 1.0 } atlas_uncertainty_list = [ rdm.TriangularUncertainty('p_s1', min_value=0.75, mode_value=0.8, max_value=0.85),
import math import matplotlib.pyplot as plt import rhodium as rdm import os.path from lvreuse.cost.tools import cost_reduction_factor from lvreuse.cost.elements import ExpendableBallisticStageStorable, SolidPropellantVehicleStage, StorableTurboFed from lvreuse.cost.vehicle import LaunchVehicle from lvreuse.cost.indirect_ops import indirect_ops_cost core = ExpendableBallisticStageStorable("s1", 18800 - 2 * 2350) # stage - engines, from spacelaunchreport, core_engine = StorableTurboFed("e1", 2350) # from russianspaceweb stage2 = SolidPropellantVehicleStage("s2", 2100 + 972) # stage + fairing, from Isakowitz antares_elements = [core, core_engine, stage2] antares230 = LaunchVehicle(name='antares230', M0=286, N=2, element_list=antares_elements) # mass from spacelaunchreport antares_engines_dict = {'e1': 2} antares_f8_dict = {'s1': 1.0, 'e1': 1.49, 's2': 1.0, 'veh': 1.0, 'ops': 1.0} antares_uncertainty_list = [ rdm.TriangularUncertainty('p_s1', min_value=0.75, mode_value=0.8, max_value=0.85), rdm.TriangularUncertainty('p_e1', min_value=0.75, mode_value=0.8, max_value=0.85), rdm.TriangularUncertainty('p_s2', min_value=0.75, mode_value=0.8, max_value=0.85), rdm.TriangularUncertainty('f0_prod_veh', min_value=1.02, mode_value=1.025, max_value=1.03), rdm.TriangularUncertainty('f9_veh', min_value=1.03, mode_value=1.04, max_value=1.05), rdm.TriangularUncertainty('f10_s1', min_value=0.75, mode_value=0.8, max_value=0.85), rdm.TriangularUncertainty('f10_e1', min_value=0.75, mode_value=0.8, max_value=0.85), rdm.TriangularUncertainty('f10_s2', min_value=0.75, mode_value=0.8, max_value=0.85), ] antares_ops_uncertainty_list =[