From c24d4a6e704187fcbc8be863a761b06115dcca51 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Tue, 23 Jul 2024 22:00:11 -0400 Subject: [PATCH 001/113] cannonball multi mission exampls --- cannonball.py | 294 +++++++++++++++++++++++++++++++++++++++++++++ cannonball_copy.py | 274 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 568 insertions(+) create mode 100644 cannonball.py create mode 100644 cannonball_copy.py diff --git a/cannonball.py b/cannonball.py new file mode 100644 index 000000000..ba9bb8088 --- /dev/null +++ b/cannonball.py @@ -0,0 +1,294 @@ +from os import stat +import numpy as np +from scipy.interpolate import interp1d +import matplotlib.pyplot as plt +import openmdao.api as om +import dymos as dm +from dymos.models.atmosphere.atmos_1976 import USatm1976Data + +""" +Currently has linked sizing and motion ODEs, want to add ability to have +multiple trajectories (and associated ODEs) that are linked with the same +sizing class. radii/density etc can be defined as 1xn inputs, with n corresponding +to num of missions. + +Additionally need to incorporate some output into a compound objective that is optimized, +aside from each mission optimizing for max range. Could for example assign $/kg of material. + +Could also add a "fuel" parameter which can then be minimized. +""" + + +class CannonballSizing(om.ExplicitComponent): + def setup(self): + self.add_input(name='radius', val=1.0, units='m') + self.add_input(name='dens', val=7870., units='kg/m**3') + + self.add_output(name='mass', shape=(1,), units='kg') + self.add_output(name='S', shape=(1,), units='m**2') + self.add_output(name='price', shape=(1,), units='USD') + + self.declare_partials(of='mass', wrt='dens') + self.declare_partials(of='mass', wrt='radius') + self.declare_partials(of='S', wrt='radius') + self.declare_partials(of='price', wrt='radius') + self.declare_partials(of='price', wrt='dens') + + def compute(self, inputs, outputs): + radius = inputs['radius'] + dens = inputs['dens'] + outputs['mass'] = (4/3.) * dens * np.pi * radius ** 3 + outputs['S'] = np.pi * radius ** 2 + outputs['price'] = (4/3.) * dens * np.pi * radius ** 3 * 10 # $10 per kg + + def compute_partials(self, inputs, partials): + radius = inputs['radius'] + dens = inputs['dens'] + partials['mass', 'dens'] = (4/3.) * np.pi * radius ** 3 + partials['mass', 'radius'] = 4. * dens * np.pi * radius ** 2 + partials['S', 'radius'] = 2 * np.pi * radius + partials['price', 'dens'] = (4/3.) * np.pi * radius ** 3 * 10 + partials['price', 'radius'] = 4. * dens * np.pi * radius ** 2 * 10 + + +class CannonballODE(om.ExplicitComponent): + def initialize(self): + self.options.declare('num_nodes', types=int) + + def setup(self): + nn = self.options['num_nodes'] + # static params + self.add_input('m', units='kg') + self.add_input('S', units='m**2') + self.add_input('CD', 0.5) + + # time varying inputs + self.add_input('h', units='m', shape=nn) + self.add_input('v', units='m/s', shape=nn) + self.add_input('gam', units='rad', shape=nn) + + # state rates + self.add_output('v_dot', shape=nn, units='m/s**2', + tags=['dymos.state_rate_source:v']) + self.add_output('gam_dot', shape=nn, units='rad/s', + tags=['dymos.state_rate_source:gam']) + self.add_output('h_dot', shape=nn, units='m/s', + tags=['dymos.state_rate_source:h']) + self.add_output('r_dot', shape=nn, units='m/s', + tags=['dymos.state_rate_source:r']) + self.add_output('ke', shape=nn, units='J') + + # Ask OpenMDAO to compute the partial derivatives using complex-step + # with a partial coloring algorithm for improved performance, and use + # a graph coloring algorithm to automatically detect the sparsity pattern. + self.declare_coloring(wrt='*', method='cs') + + alt_data = USatm1976Data.alt * om.unit_conversion('ft', 'm')[0] + rho_data = USatm1976Data.rho * om.unit_conversion('slug/ft**3', 'kg/m**3')[0] + self.rho_interp = interp1d(np.array(alt_data, dtype=complex), + np.array(rho_data, dtype=complex), + kind='linear') + + def compute(self, inputs, outputs): + + gam = inputs['gam'] + v = inputs['v'] + h = inputs['h'] + m = inputs['m'] + S = inputs['S'] + CD = inputs['CD'] + + GRAVITY = 9.80665 # m/s**2 + + # handle complex-step gracefully from the interpolant + if np.iscomplexobj(h): + rho = self.rho_interp(inputs['h']) + else: + rho = self.rho_interp(inputs['h']).real + + q = 0.5*rho*inputs['v']**2 + qS = q * S + D = qS * CD + cgam = np.cos(gam) + sgam = np.sin(gam) + outputs['v_dot'] = - D/m-GRAVITY*sgam + outputs['gam_dot'] = -(GRAVITY/v)*cgam + outputs['h_dot'] = v*sgam + outputs['r_dot'] = v*cgam + outputs['ke'] = 0.5*m*v**2 + + +# ODEs are unique to each traj created +def createTrajectory(ke_max): + traj = dm.Trajectory() + transcription = dm.Radau(num_segments=5, order=3, compressed=True) + ascent = dm.Phase(ode_class=CannonballODE, transcription=transcription) + traj.add_phase('ascent', ascent) + + transcription = dm.GaussLobatto(num_segments=5, order=3, compressed=True) + descent = dm.Phase(ode_class=CannonballODE, transcription=transcription) + traj.add_phase('descent', descent) + + for phase in (ascent, descent): + is_ascent = phase.name == "ascent" + phase.set_time_options(fix_initial=True if is_ascent else False, + duration_bounds=(1, 100), duration_ref=100, units='s') + phase.set_state_options('r', fix_initial=is_ascent, fix_final=False) + phase.set_state_options('h', fix_initial=is_ascent, fix_final=not is_ascent) + phase.set_state_options('gam', fix_initial=False, fix_final=is_ascent) + phase.set_state_options('v', fix_initial=False, fix_final=False) + phase.add_parameter('S', units='m**2', static_target=True, val=0.005) + phase.add_parameter('m', units='kg', static_target=True, val=1.0) + phase.add_parameter('price', units='USD', static_target=True, val=10) + phase.add_parameter('CD', units=None, static_target=True, val=0.5) + + # descent.add_objective('r', loc='final', scaler=-1.0) # negative means to maximize + for param in ('CD', 'm', 'S', 'price'): + traj.add_parameter(param, static_target=True) + + # Link Phases (link time and all state variables) + traj.link_phases(phases=['ascent', 'descent'], vars=['*']) + # have to set muzzle energy here before setup for sim to run properly + ascent.add_boundary_constraint('ke', loc='initial', + upper=ke_max, lower=0, ref=100000) + return traj, ascent, descent + + +p = om.Problem(model=om.Group()) + +p.driver = om.ScipyOptimizeDriver() +p.driver.options['optimizer'] = 'SLSQP' +p.driver.declare_coloring() + +kes = [4e5, 5e5] +weights = [2, 1.01] +num_trajs = len(kes) + +p.model.add_subsystem(f"sizing_comp", CannonballSizing(), + promotes_inputs=['radius', 'dens']) + +p.model.set_input_defaults('dens', val=7.87, units='g/cm**3') +p.model.add_design_var('radius', lower=0.01, upper=0.10, + ref0=0.01, ref=0.10, units='m') + +trajs, ascents, descents = [], [], [] +for i, ke in enumerate(kes): + traj, ascent, descent = createTrajectory(ke) + p.model.add_subsystem(f"traj_{i}", traj) + + # Issue Connections + p.model.connect(f"sizing_comp.mass", f"traj_{i}.parameters:m") + p.model.connect(f"sizing_comp.S", f"traj_{i}.parameters:S") + p.model.connect(f"sizing_comp.price", f"traj_{i}.parameters:price") + trajs.append(traj) + ascents.append(ascent) + descents.append(descent) + +ranges = [f"r{i}" for i in range(num_trajs)] +weighted_sum_str = "+".join([f"{weight}*{r}" for r, weight in zip(ranges, weights)]) +p.model.add_subsystem('compoundComp', om.ExecComp("compound_range="+weighted_sum_str), + promotes=['compound_range', *ranges]) + +for i in range(num_trajs): + p.model.connect(f"traj_{i}.descent.states:r", ranges[i], src_indices=-1) + +p.model.add_objective('compound_range', scaler=-1) + + +# A linear solver at the top level can improve performance. +p.model.linear_solver = om.DirectSolver() +p.setup() + +p.set_val('radius', 0.05, units='m') +p.set_val('dens', 7.87, units='g/cm**3') + +for i, (ascent, descent) in enumerate(zip(ascents, descents)): + p.set_val(f"traj_{i}.parameters:CD", 0.5) + + p.set_val(f"traj_{i}.ascent.t_initial", 0.0) + p.set_val(f"traj_{i}.ascent.t_duration", 10.0) + # list is initial and final, based on phase info some are fixed others are not + p.set_val(f"traj_{i}.ascent.states:r", ascent.interp('r', [0, 100])) + p.set_val(f'traj_{i}.ascent.states:h', ascent.interp('h', [0, 100])) + p.set_val(f'traj_{i}.ascent.states:v', ascent.interp('v', [200, 150])) + p.set_val(f'traj_{i}.ascent.states:gam', ascent.interp('gam', [25, 0]), units='deg') + + p.set_val(f'traj_{i}.descent.t_initial', 10.0) + p.set_val(f'traj_{i}.descent.t_duration', 10.0) + + p.set_val(f'traj_{i}.descent.states:r', descent.interp('r', [100, 200])) + p.set_val(f'traj_{i}.descent.states:h', descent.interp('h', [100, 0])) + p.set_val(f'traj_{i}.descent.states:v', descent.interp('v', [150, 200])) + p.set_val(f'traj_{i}.descent.states:gam', + descent.interp('gam', [0, -45]), units='deg') + + +dm.run_problem(p, simulate=True) +sol = om.CaseReader('dymos_solution.db').get_case('final') +sim = om.CaseReader('dymos_simulation.db').get_case('final') + + +def plotstuff(): + print("\n\n=================================================") + print( + f"Optimized {num_trajs} trajectories with weights: {', '.join(map(str,weights))}") + rad = p.get_val('radius', units='m')[0] + mass = p.get_val('sizing_comp.mass', units='kg')[0] + price = p.get_val('sizing_comp.price', units='USD')[0] + area = p.get_val('sizing_comp.S', units='cm**2')[0] + print("Optimal Cannonball Description:") + print( + f"Radius: {rad:.2f} m, Mass: {mass:.2f} kg, Price: ${price:.2f}, Area: {area} sqcm") + + print("Optimal Trajectory Descriptions:") + for i, ke in enumerate(kes): + angle = p.get_val(f'traj_{i}.ascent.timeseries.gam', units='deg')[0, 0] + max_range = p.get_val(f'traj_{i}.descent.timeseries.r')[-1, 0] + + print( + f"KE: {ke/1e3:.2f} KJ, Launch Angle: {angle:.2f} deg, Max Range: {max_range:.2f} m") + + # fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10, 6)) + # time_imp = {'ascent': p.get_val('traj_0.ascent.timeseries.time'), + # 'descent': p.get_val('traj_0.descent.timeseries.time')} + # time_exp = {'ascent': sim.get_val('traj_0.ascent.timeseries.time'), + # 'descent': sim.get_val('traj_0.descent.timeseries.time')} + # r_imp = {'ascent': p.get_val('traj_0.ascent.timeseries.r'), + # 'descent': p.get_val('traj_0.descent.timeseries.r')} + # r_exp = {'ascent': sim.get_val('traj_0.ascent.timeseries.r'), + # 'descent': sim.get_val('traj_0.descent.timeseries.r')} + # h_imp = {'ascent': p.get_val('traj_0.ascent.timeseries.h'), + # 'descent': p.get_val('traj_0.descent.timeseries.h')} + # h_exp = {'ascent': sim.get_val('traj_0.ascent.timeseries.h'), + # 'descent': sim.get_val('traj_0.descent.timeseries.h')} + + # axes.plot(r_imp['ascent'], h_imp['ascent'], 'bo') + # axes.plot(r_imp['descent'], h_imp['descent'], 'ro') + # axes.plot(r_exp['ascent'], h_exp['ascent'], 'b--') + # axes.plot(r_exp['descent'], h_exp['descent'], 'r--') + + # axes.set_xlabel('range (m)') + # axes.set_ylabel('altitude (m)') + # axes.grid(True) + + # fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(10, 6)) + # states = ['r', 'h', 'v', 'gam'] + # for i, state in enumerate(states): + # x_imp = {'ascent': sol.get_val(f'traj_0.ascent.timeseries.{state}'), + # 'descent': sol.get_val(f'traj_0.descent.timeseries.{state}')} + + # x_exp = {'ascent': sim.get_val(f'traj_0.ascent.timeseries.{state}'), + # 'descent': sim.get_val(f'traj_0.descent.timeseries.{state}')} + + # axes[i].set_ylabel(state) + # axes[i].grid(True) + + # axes[i].plot(time_imp['ascent'], x_imp['ascent'], 'bo') + # axes[i].plot(time_imp['descent'], x_imp['descent'], 'ro') + # axes[i].plot(time_exp['ascent'], x_exp['ascent'], 'b--') + # axes[i].plot(time_exp['descent'], x_exp['descent'], 'r--') + + # plt.show() + + +plotstuff() diff --git a/cannonball_copy.py b/cannonball_copy.py new file mode 100644 index 000000000..2124345ec --- /dev/null +++ b/cannonball_copy.py @@ -0,0 +1,274 @@ +from os import stat +import numpy as np +from scipy.interpolate import interp1d +import matplotlib.pyplot as plt +import openmdao.api as om +import dymos as dm +from dymos.models.atmosphere.atmos_1976 import USatm1976Data + +""" +Currently has linked sizing and motion ODEs, want to add ability to have +multiple trajectories (and associated ODEs) that are linked with the same +sizing class. radii/density etc can be defined as 1xn inputs, with n corresponding +to num of missions. + +Additionally need to incorporate some output into a compound objective that is optimized, +aside from each mission optimizing for max range. Could for example assign $/kg of material. + +Could also add a "fuel" parameter which can then be minimized. +""" +# Working version + + +class CannonballSizing(om.ExplicitComponent): + def setup(self): + self.add_input(name='radius', val=1.0, units='m') + self.add_input(name='dens', val=7870., units='kg/m**3') + + self.add_output(name='mass', shape=(1,), units='kg') + self.add_output(name='S', shape=(1,), units='m**2') + self.add_output(name='price', shape=(1,), units='USD') + + self.declare_partials(of='mass', wrt='dens') + self.declare_partials(of='mass', wrt='radius') + self.declare_partials(of='S', wrt='radius') + self.declare_partials(of='price', wrt='radius') + self.declare_partials(of='price', wrt='dens') + + def compute(self, inputs, outputs): + radius = inputs['radius'] + dens = inputs['dens'] + outputs['mass'] = (4/3.) * dens * np.pi * radius ** 3 + outputs['S'] = np.pi * radius ** 2 + outputs['price'] = (4/3.) * dens * np.pi * radius ** 3 * 10 # $10 per kg + + def compute_partials(self, inputs, partials): + radius = inputs['radius'] + dens = inputs['dens'] + partials['mass', 'dens'] = (4/3.) * np.pi * radius ** 3 + partials['mass', 'radius'] = 4. * dens * np.pi * radius ** 2 + partials['S', 'radius'] = 2 * np.pi * radius + partials['price', 'dens'] = (4/3.) * np.pi * radius ** 3 * 10 + partials['price', 'radius'] = 4. * dens * np.pi * radius ** 2 * 10 + + +class CannonballODE(om.ExplicitComponent): + def initialize(self): + self.options.declare('num_nodes', types=int) + + def setup(self): + nn = self.options['num_nodes'] + # static params + self.add_input('m', units='kg') + self.add_input('S', units='m**2') + self.add_input('CD', 0.5) + + # time varying inputs + self.add_input('h', units='m', shape=nn) + self.add_input('v', units='m/s', shape=nn) + self.add_input('gam', units='rad', shape=nn) + + # state rates + self.add_output('v_dot', shape=nn, units='m/s**2', + tags=['dymos.state_rate_source:v']) + self.add_output('gam_dot', shape=nn, units='rad/s', + tags=['dymos.state_rate_source:gam']) + self.add_output('h_dot', shape=nn, units='m/s', + tags=['dymos.state_rate_source:h']) + self.add_output('r_dot', shape=nn, units='m/s', + tags=['dymos.state_rate_source:r']) + self.add_output('ke', shape=nn, units='J') + + # Ask OpenMDAO to compute the partial derivatives using complex-step + # with a partial coloring algorithm for improved performance, and use + # a graph coloring algorithm to automatically detect the sparsity pattern. + self.declare_coloring(wrt='*', method='cs') + + alt_data = USatm1976Data.alt * om.unit_conversion('ft', 'm')[0] + rho_data = USatm1976Data.rho * om.unit_conversion('slug/ft**3', 'kg/m**3')[0] + self.rho_interp = interp1d(np.array(alt_data, dtype=complex), + np.array(rho_data, dtype=complex), + kind='linear') + + def compute(self, inputs, outputs): + + gam = inputs['gam'] + v = inputs['v'] + h = inputs['h'] + m = inputs['m'] + S = inputs['S'] + CD = inputs['CD'] + + GRAVITY = 9.80665 # m/s**2 + + # handle complex-step gracefully from the interpolant + if np.iscomplexobj(h): + rho = self.rho_interp(inputs['h']) + else: + rho = self.rho_interp(inputs['h']).real + + q = 0.5*rho*inputs['v']**2 + qS = q * S + D = qS * CD + cgam = np.cos(gam) + sgam = np.sin(gam) + outputs['v_dot'] = - D/m-GRAVITY*sgam + outputs['gam_dot'] = -(GRAVITY/v)*cgam + outputs['h_dot'] = v*sgam + outputs['r_dot'] = v*cgam + outputs['ke'] = 0.5*m*v**2 + + +def createTrajectory(ke_max): + traj = dm.Trajectory() + transcription = dm.Radau(num_segments=5, order=3, compressed=True) + ascent = dm.Phase(ode_class=CannonballODE, transcription=transcription) + traj.add_phase('ascent', ascent) + + transcription = dm.GaussLobatto(num_segments=5, order=3, compressed=True) + descent = dm.Phase(ode_class=CannonballODE, transcription=transcription) + traj.add_phase('descent', descent) + + for phase in (ascent, descent): + is_ascent = phase.name == "ascent" + phase.set_time_options(fix_initial=True if is_ascent else False, + duration_bounds=(1, 100), duration_ref=100, units='s') + phase.set_state_options('r', fix_initial=is_ascent, fix_final=False) + phase.set_state_options('h', fix_initial=is_ascent, fix_final=not is_ascent) + phase.set_state_options('gam', fix_initial=False, fix_final=is_ascent) + phase.set_state_options('v', fix_initial=False, fix_final=False) + phase.add_parameter('S', units='m**2', static_target=True, val=0.005) + phase.add_parameter('m', units='kg', static_target=True, val=1.0) + phase.add_parameter('price', units='USD', static_target=True, val=10) + phase.add_parameter('CD', units=None, static_target=True, val=0.5) + + descent.add_objective('r', loc='final', scaler=-1.0) # negative means to maximize + for param in ('CD', 'm', 'S', 'price'): + traj.add_parameter(param, static_target=True) + + # Link Phases (link time and all state variables) + traj.link_phases(phases=['ascent', 'descent'], vars=['*']) + # have to set muzzle energy here before setup for sim to run properly + ascent.add_boundary_constraint('ke', loc='initial', + upper=ke_max, lower=0, ref=100000) + return traj, ascent, descent + + +p = om.Problem(model=om.Group()) + +p.driver = om.ScipyOptimizeDriver() +p.driver.options['optimizer'] = 'SLSQP' +p.driver.declare_coloring() + +p.model.add_subsystem('size_comp', CannonballSizing(), + promotes_inputs=['radius', 'dens']) +p.model.set_input_defaults('dens', val=7.87, units='g/cm**3') +p.model.add_design_var('radius', lower=0.01, upper=0.10, + ref0=0.01, ref=0.10, units='m') + +kes = [4e5, 5e5] +trajs, ascents, descents = [], [], [] +for ke in kes: + a, b, c = createTrajectory(ke) + trajs.append(a) + ascents.append(b) + descents.append(c) +# traj, ascent, descent = createTrajectory(4e5) +p.model.add_subsystem('traj', trajs[1]) +ascent = ascents[1] +descent = descents[1] + +# Issue Connections +p.model.connect('size_comp.mass', 'traj.parameters:m') +p.model.connect('size_comp.price', 'traj.parameters:price') +p.model.connect('size_comp.S', 'traj.parameters:S') + +# A linear solver at the top level can improve performance. +p.model.linear_solver = om.DirectSolver() +p.setup() + +p.set_val('radius', 0.05, units='m') +p.set_val('dens', 7.87, units='g/cm**3') + +p.set_val('traj.parameters:CD', 0.5) + +p.set_val('traj.ascent.t_initial', 0.0) +p.set_val('traj.ascent.t_duration', 10.0) +# list is initial and final, based on phase info some are fixed others are not +p.set_val('traj.ascent.states:r', ascent.interp('r', [0, 100])) +p.set_val('traj.ascent.states:h', ascent.interp('h', [0, 100])) +p.set_val('traj.ascent.states:v', ascent.interp('v', [200, 150])) +p.set_val('traj.ascent.states:gam', ascent.interp('gam', [25, 0]), units='deg') + +p.set_val('traj.descent.t_initial', 10.0) +p.set_val('traj.descent.t_duration', 10.0) + +p.set_val('traj.descent.states:r', descent.interp('r', [100, 200])) +p.set_val('traj.descent.states:h', descent.interp('h', [100, 0])) +p.set_val('traj.descent.states:v', descent.interp('v', [150, 200])) +p.set_val('traj.descent.states:gam', descent.interp('gam', [0, -45]), units='deg') + + +dm.run_problem(p, simulate=True) +sol = om.CaseReader('dymos_solution.db').get_case('final') +sim = om.CaseReader('dymos_simulation.db').get_case('final') + + +def plotstuff(): + rad = p.get_val('radius', units='m')[0] + print(f'optimal radius: {rad} m ') + mass = p.get_val('size_comp.mass', units='kg')[0] + print(f'cannonball mass: {mass} kg ') + price = p.get_val('size_comp.price', units='USD')[0] + print(f'cannonball price: ${price:.2f}') + area = p.get_val('size_comp.S', units='cm**2')[0] + print(f'cannonball aerodynamic reference area: {area} cm**2 ') + angle = p.get_val('traj.ascent.timeseries.gam', units='deg')[0, 0] + print(f'launch angle: {angle} deg') + max_range = p.get_val('traj.descent.timeseries.r')[-1, 0] + print(f'maximum range: {max_range} m') + + fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10, 6)) + time_imp = {'ascent': p.get_val('traj.ascent.timeseries.time'), + 'descent': p.get_val('traj.descent.timeseries.time')} + time_exp = {'ascent': sim.get_val('traj.ascent.timeseries.time'), + 'descent': sim.get_val('traj.descent.timeseries.time')} + r_imp = {'ascent': p.get_val('traj.ascent.timeseries.r'), + 'descent': p.get_val('traj.descent.timeseries.r')} + r_exp = {'ascent': sim.get_val('traj.ascent.timeseries.r'), + 'descent': sim.get_val('traj.descent.timeseries.r')} + h_imp = {'ascent': p.get_val('traj.ascent.timeseries.h'), + 'descent': p.get_val('traj.descent.timeseries.h')} + h_exp = {'ascent': sim.get_val('traj.ascent.timeseries.h'), + 'descent': sim.get_val('traj.descent.timeseries.h')} + + axes.plot(r_imp['ascent'], h_imp['ascent'], 'bo') + axes.plot(r_imp['descent'], h_imp['descent'], 'ro') + axes.plot(r_exp['ascent'], h_exp['ascent'], 'b--') + axes.plot(r_exp['descent'], h_exp['descent'], 'r--') + + axes.set_xlabel('range (m)') + axes.set_ylabel('altitude (m)') + axes.grid(True) + + fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(10, 6)) + states = ['r', 'h', 'v', 'gam'] + for i, state in enumerate(states): + x_imp = {'ascent': sol.get_val(f'traj.ascent.timeseries.{state}'), + 'descent': sol.get_val(f'traj.descent.timeseries.{state}')} + + x_exp = {'ascent': sim.get_val(f'traj.ascent.timeseries.{state}'), + 'descent': sim.get_val(f'traj.descent.timeseries.{state}')} + + axes[i].set_ylabel(state) + axes[i].grid(True) + + axes[i].plot(time_imp['ascent'], x_imp['ascent'], 'bo') + axes[i].plot(time_imp['descent'], x_imp['descent'], 'ro') + axes[i].plot(time_exp['ascent'], x_exp['ascent'], 'b--') + axes[i].plot(time_exp['descent'], x_exp['descent'], 'r--') + + plt.show() + + +plotstuff() From e1c77215932e5d917b35cab3d3c0d90a38b9889d Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Tue, 23 Jul 2024 22:06:14 -0400 Subject: [PATCH 002/113] pseudocode for multi mission aviary example --- multimission.py | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 multimission.py diff --git a/multimission.py b/multimission.py new file mode 100644 index 000000000..b7c430bc8 --- /dev/null +++ b/multimission.py @@ -0,0 +1,64 @@ +""" +Goal: use single aircraft description but optimize it for multiple missions simultaneously, +i.e. all missions are on the range-payload line instead of having excess performance +Aircraft csv: defines plane, but also defines payload (passengers, cargo) which can vary with mission + These will have to be specified in some alternate way such as a list correspond to mission # +Phase info: defines a particular mission, will have multiple phase infos +""" +import aviary.api as av +from aviary.examples.example_phase_info import phase_info +from copy import deepcopy +import openmdao.api as om + +# TODO: modify one of these to represent a different mission (e.g. change cruise length) +phase_info1 = phase_info +phase_info2 = phase_info + +if __name__ == '__main__': + super_prob = om.Problem.model() + prob1 = av.AviaryProblem() + prob2 = av.AviaryProblem() + + # Load aircraft and options data from user + # Allow for user overrides here + prob1.load_inputs('models/test_aircraft/aircraft_for_bench_FwFm.csv', phase_info1) + prob2.load_inputs('models/test_aircraft/aircraft_for_bench_FwFm.csv', phase_info1) + + # Preprocess inputs + prob1.check_and_preprocess_inputs() + prob2.check_and_preprocess_inputs() + + prob1.add_pre_mission_systems() + prob2.add_pre_mission_systems() + + prob1.add_phases() + prob2.add_phases() + + prob1.add_post_mission_systems() + prob2.add_post_mission_systems() + + # Link phases and variables + prob1.link_phases() + prob2.link_phases() + + super_prob.add_driver("SLSQP", max_iter=100) + + super_prob.add_parameter('mission.design.gross_mass') + + # use submodelcomp to instantiate both problems inside of the super problem + # https://openmdao.org/newdocs/versions/latest/features/building_blocks/components/submodel_comp.html?highlight=subproblem + # promote the correct inputs and outputs from the submodels + # add and execComp that sums the fuel burn output + + # Load optimization problem formulation + # Detail which variables the optimizer can control + super_prob.add_objective() # output from execcomp goes here) + + super_prob.setup() + + prob1.set_initial_guesses() + prob2.set_initial_guesses() + + # remove all plots and extras + super_prob.run_aviary_problem(record_filename='reserve_mission_fixedrange.db') + super_prob.get_val() # look at final fuel burn From a2b70c09f0b37dfee46bdcf349e9db7020b0bc82 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 24 Jul 2024 09:36:44 -0400 Subject: [PATCH 003/113] checkpoint --- cannonball.py | 17 ++++++++++------- multimission.py | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/cannonball.py b/cannonball.py index ba9bb8088..9f1d81303 100644 --- a/cannonball.py +++ b/cannonball.py @@ -160,8 +160,11 @@ def createTrajectory(ke_max): p.driver.options['optimizer'] = 'SLSQP' p.driver.declare_coloring() -kes = [4e5, 5e5] -weights = [2, 1.01] +kes = [4e5, 5e5, 6e5] +# 2:1 ratio (or 1:2) causes results that essentially don't optimize the 1 mission, +# 1.01 works, 1.009 doesn't +# 2:1:1 works?! - may be related some normalization/bounds issue +weights = [2.1, 1.5, 1.1] num_trajs = len(kes) p.model.add_subsystem(f"sizing_comp", CannonballSizing(), @@ -232,21 +235,21 @@ def plotstuff(): print("\n\n=================================================") print( f"Optimized {num_trajs} trajectories with weights: {', '.join(map(str,weights))}") - rad = p.get_val('radius', units='m')[0] + rad = p.get_val('radius', units='cm')[0] mass = p.get_val('sizing_comp.mass', units='kg')[0] price = p.get_val('sizing_comp.price', units='USD')[0] area = p.get_val('sizing_comp.S', units='cm**2')[0] - print("Optimal Cannonball Description:") + print("\nOptimal Cannonball Description:") print( - f"Radius: {rad:.2f} m, Mass: {mass:.2f} kg, Price: ${price:.2f}, Area: {area} sqcm") + f"\tRadius: {rad:.2f} cm, Mass: {mass:.2f} kg, Price: ${price:.2f}, Area: {area:.2f} sqcm") - print("Optimal Trajectory Descriptions:") + print("\nOptimal Trajectory Descriptions:") for i, ke in enumerate(kes): angle = p.get_val(f'traj_{i}.ascent.timeseries.gam', units='deg')[0, 0] max_range = p.get_val(f'traj_{i}.descent.timeseries.r')[-1, 0] print( - f"KE: {ke/1e3:.2f} KJ, Launch Angle: {angle:.2f} deg, Max Range: {max_range:.2f} m") + f"\tKE: {ke/1e3:.2f} KJ, Launch Angle: {angle:.2f} deg, Max Range: {max_range:.2f} m") # fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10, 6)) # time_imp = {'ascent': p.get_val('traj_0.ascent.timeseries.time'), diff --git a/multimission.py b/multimission.py index b7c430bc8..4100c553e 100644 --- a/multimission.py +++ b/multimission.py @@ -11,8 +11,8 @@ import openmdao.api as om # TODO: modify one of these to represent a different mission (e.g. change cruise length) -phase_info1 = phase_info -phase_info2 = phase_info +phase_info1 = deepcopy(phase_info) +phase_info2 = deepcopy(phase_info) if __name__ == '__main__': super_prob = om.Problem.model() @@ -21,8 +21,9 @@ # Load aircraft and options data from user # Allow for user overrides here + # TODO: modify one of these to represent a different payload case prob1.load_inputs('models/test_aircraft/aircraft_for_bench_FwFm.csv', phase_info1) - prob2.load_inputs('models/test_aircraft/aircraft_for_bench_FwFm.csv', phase_info1) + prob2.load_inputs('models/test_aircraft/aircraft_for_bench_FwFm.csv', phase_info2) # Preprocess inputs prob1.check_and_preprocess_inputs() @@ -62,3 +63,31 @@ # remove all plots and extras super_prob.run_aviary_problem(record_filename='reserve_mission_fixedrange.db') super_prob.get_val() # look at final fuel burn + + +""" +Example phase info mission: +Times (min): 0, 128, 241, 299 + Alt (ft): 0, 32000, 34000, 500 + Mach: 0.2, 0.72, 0.72, 0.36 + + +Hard to find multiple payload/range values for FwFm (737), so use C-5 instead +Based on: + https://en.wikipedia.org/wiki/Lockheed_C-5_Galaxy#Specifications_(C-5M), + https://www.af.mil/About-Us/Fact-Sheets/Display/Article/1529718/c-5-abc-galaxy-and-c-5m-super-galaxy/ + +MTOW: 840,000 lb +Max Payload: 281,000 lb +Max Fuel: 341,446 lb +Empty Weight: 380,000 lb -> leaves 460,000 lb for fuel+payload (max fuel + max payload = 622,446 lb) + +Payload/range: + 281,000 lb payload -> 2,150 nmi range (AF.mil) [max payload case] + 120,000 lb payload -> 4,800 nmi range (AF.mil) [intermediate case] + 0 lb payload -> 7,000 nmi range (AF.mil) [ferry case] + +Flight characteristics: + Cruise at M0.77 at 33k ft + Max rate of climb: 2100 ft/min +""" From 079313b24fc476e184c073a97508675448962502 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 24 Jul 2024 09:51:51 -0400 Subject: [PATCH 004/113] checkpt --- c5.csv | 166 ++++++++++++++++++++++++++++++++++++++++ c5_ferry_phase_info.py | 83 ++++++++++++++++++++ multimission.py | 8 +- outputted_phase_info.py | 83 ++++++++++++++++++++ singlemission.py | 37 +++++++++ 5 files changed, 373 insertions(+), 4 deletions(-) create mode 100644 c5.csv create mode 100644 c5_ferry_phase_info.py create mode 100644 outputted_phase_info.py create mode 100644 singlemission.py diff --git a/c5.csv b/c5.csv new file mode 100644 index 000000000..42aa03315 --- /dev/null +++ b/c5.csv @@ -0,0 +1,166 @@ +# author: Chris Psenica +#aircraft:air_conditioning:mass_scaler,1.0,unitless +#aircraft:anti_icing:mass_scaler,1.0,unitless +#aircraft:apu:mass_scaler,1.0,unitless +#aircraft:avionics:mass_scaler,1.0,unitless +#aircraft:canard:area,0.0,ft**2 +#aircraft:canard:aspect_ratio,0.0,unitless +#aircraft:canard:thickness_to_chord,0.0,unitless +aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm +#aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless +#aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:mass_per_passenger,180.0,lbm +aircraft:crew_and_payload:cargo_mass,281000,lbm +#misc_cargo +#aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:num_flight_crew,7,unitless +aircraft:crew_and_payload:num_passengers,82,unitless +#aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless +aircraft:crew_and_payload:wing_cargo,0.0,lbm +aircraft:design:base_area,0.0,ft**2 +#aircraft:design:empty_mass_margin_scaler,1.0,unitless +aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless +#aircraft:design:touchdown_mass,498554,lbm +aircraft:design:reserve_fuel_additional,0,lbm +aircraft:design:subsonic_drag_coeff_factor,1.0,unitless +aircraft:design:supersonic_drag_coeff_factor,1.0,unitless +aircraft:design:use_alt_mass,False,unitless +aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless +#aircraft:electrical:mass_scaler,1.0,unitless + +aircraft:engine:data_file,models/engines/CF6.deck,unitless + +aircraft:engine:additional_mass_fraction,0.,unitless +aircraft:engine:constant_fuel_consumption,0.,lbm/h + +aircraft:engine:flight_idle_thrust_fraction,0.0,unitless +aircraft:engine:flight_idle_max_fraction,1.0,unitless +aircraft:engine:flight_idle_min_fraction,0.08,unitless +#aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless +#aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless +aircraft:engine:generate_flight_idle,False,unitless +aircraft:engine:geopotential_alt,False,unitless +aircraft:engine:ignore_negative_thrust,False,unitless +aircraft:engine:interpolation_method,slinear,unitless +aircraft:engine:mass_scaler,1.0,unitless +aircraft:engine:mass,8176,lbm +aircraft:engine:reference_mass,8176,lbm +aircraft:engine:reference_sls_thrust,51250.,lbf +aircraft:engine:scale_mass,True,unitless +aircraft:engine:scale_performance,True,unitless +aircraft:engine:scaled_sls_thrust,51250,lbf +#aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless +#aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless +#aircraft:engine:thrust_reversers_mass_scaler,1.0,unitless +aircraft:engine:num_fuselage_engines,0,unitless +aircraft:engine:num_engines,4,unitless +aircraft:engine:num_wing_engines,4,unitless +aircraft:engine:wing_locations,[0.3561541339,0.555929667],unitless +#aircraft:fins:area,0.0,ft**2 +#aircraft:fins:mass_scaler,1.0,unitless +#aircraft:fins:mass,0.0,lbm +#aircraft:fins:num_fins,0,unitless +#aircraft:fins:taper_ratio,10.0,unitless +aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm +#aircraft:fuel:density_ratio,1.0,unitless +#aircraft:fuel:fuel_system_mass_scaler,1.0,unitless +aircraft:fuel:fuselage_fuel_capacity,0.0,lbm +aircraft:fuel:num_tanks,12,unitless +aircraft:fuel:total_capacity,341446,lbm +#aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless +#aircraft:furnishings:mass_scaler,1.0,unitless +aircraft:fuselage:length,230.58,ft +#aircraft:fuselage:mass_scaler,1.0,unitless +aircraft:fuselage:max_height,26.83,ft +aircraft:fuselage:max_width,23.9,ft +aircraft:fuselage:military_cargo_floor,True,unitless +aircraft:fuselage:num_fuselages,1,unitless +aircraft:fuselage:passenger_compartment_length,143.75,ft +aircraft:fuselage:planform_area,4462.78,ft**2 +#aircraft:fuselage:wetted_area_scaler,1.0,unitless +aircraft:horizontal_tail:area,965.8,ft**2 +aircraft:horizontal_tail:aspect_ratio,4.2,unitless +#aircraft:horizontal_tail:mass_scaler,1.0,unitless +aircraft:horizontal_tail:taper_ratio,0.43,unitless +aircraft:horizontal_tail:thickness_to_chord,0.16,unitless +aircraft:horizontal_tail:vertical_tail_fraction,1.0,unitless +#aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless +#aircraft:hydraulics:mass_scaler,1.0,unitless +#aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 +#aircraft:instruments:mass_scaler,1.0,unitless +#aircraft:landing_gear:carrier_based,False,unitless +#aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless +#aircraft:landing_gear:main_gear_oleo_length,45,inch +#aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless +#aircraft:landing_gear:nose_gear_oleo_length,45,inch +aircraft:nacelle:avg_diameter,9.15,ft +aircraft:nacelle:avg_length,20.56,ft +#aircraft:nacelle:mass_scaler,1.0,unitless +#aircraft:nacelle:wetted_area_scaler,1.0,unitless +#aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 +#aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless +#aircraft:propulsion:misc_mass_scaler,1.0,unitless +aircraft:vertical_tail:area,537.9,ft**2 +aircraft:vertical_tail:aspect_ratio,0.958,unitless +#aircraft:vertical_tail:mass_scaler,1.0,unitless +aircraft:vertical_tail:num_tails,1,unitless +aircraft:vertical_tail:taper_ratio,0.846,unitless +aircraft:vertical_tail:thickness_to_chord,0.157,unitless +#aircraft:vertical_tail:wetted_area_scaler,1.0,unitless +aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless +aircraft:wing:airfoil_technology,1.0,unitless +aircraft:wing:area,6200,ft**2 +aircraft:wing:aspect_ratio,7.75,unitless +#aircraft:wing:bending_mass_scaler,1.0,unitless +#aircraft:wing:composite_fraction,0.1,unitless +aircraft:wing:control_surface_area,2323.7,ft**2 +aircraft:wing:control_surface_area_ratio,0.37479,unitless +aircraft:wing:load_distribution_control,2.0,unitless +aircraft:wing:load_fraction,1.0,unitless +#aircraft:wing:mass_scaler,1.0,unitless +aircraft:wing:max_camber_at_70_semispan,0.0,unitless +#aircraft:wing:misc_mass_scaler,1.0,unitless +#aircraft:wing:shear_control_mass_scaler,1.0,unitless +aircraft:wing:span_efficiency_reduction,False,unitless +aircraft:wing:span,222.75,ft +#aircraft:wing:strut_bracing_factor,0.0,unitless +#aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless +aircraft:wing:sweep,20.0,deg +aircraft:wing:taper_ratio,0.419,unitless +aircraft:wing:thickness_to_chord,0.1284,unitless +aircraft:wing:ultimate_load_factor,3.75,unitless +aircraft:wing:var_sweep_mass_penalty,0.0,unitless +#aircraft:wing:wetted_area_scaler,1.0,unitless +aircraft:wing:num_integration_stations,50,unitless +aircraft:wing:thickness_to_chord_dist,0.1239,0.108,0.013,unitless +aircraft:wing:load_path_sweep_dist,0.0,0.0,deg +aircraft:wing:input_station_dist,0.0,0.3298,0.884,unitless +aircraft:wing:chord_per_semispan,0.362,0.2667,0.0456,unitless +aircraft:wing:glove_and_bat,0.0,ft**2 +aircraft:wing:detailed_wing,False,unitless + + +mission:constraints:max_mach,0.77,unitless +mission:design:cruise_altitude,34000,ft +mission:design:gross_mass,840000,lbm +mission:design:range,2300,NM +mission:design:thrust_takeoff_per_eng,51250,lbf +mission:landing:lift_coefficient_max,3.0,unitless +mission:summary:cruise_mach,0.77,unitless +#mission:summary:fuel_flow_scaler,1.0,unitless +mission:takeoff:fuel_simple,6.32,lbm +mission:takeoff:lift_coefficient_max,3.62,unitless +mission:takeoff:lift_over_drag,19.5,unitless +settings:equations_of_motion,height_energy +settings:mass_method,FLOPS + + +### missions definition +# mission_name: payload +# times: 0, 50, 280, 300 +# altitudes: 0, 30000, 30000, 0 +# machs: 0.30, 0.77, 0.77, 0.30 +# optimize_altitudes: F,F,F +# optimize_machs: F,F,F +# takeoff: F +# landing: F diff --git a/c5_ferry_phase_info.py b/c5_ferry_phase_info.py new file mode 100644 index 000000000..3e84cf09c --- /dev/null +++ b/c5_ferry_phase_info.py @@ -0,0 +1,83 @@ +phase_info = { + "pre_mission": {"include_takeoff": False, "optimize_mass": True}, + "climb_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.3, "unitless"), + "final_mach": (0.77, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (0.0, "ft"), + "final_altitude": (32000.0, "ft"), + "altitude_bounds": ((0.0, 32500.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": True, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((0.0, 0.0), "min"), + "duration_bounds": ((15.0, 45.0), "min"), + }, + "initial_guesses": {"time": ([0.0, 30.0], "min")}, + }, + "cruise_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.77, "unitless"), + "final_mach": (0.77, "unitless"), + "mach_bounds": ((0.75, 0.79), "unitless"), + "initial_altitude": (32000.0, "ft"), + "final_altitude": (32000.0, "ft"), + "altitude_bounds": ((31500.0, 32500.0), "ft"), + "throttle_enforcement": "boundary_constraint", + "fix_initial": False, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((15.0, 45.0), "min"), + "duration_bounds": ((390.0, 1170.0), "min"), + }, + "initial_guesses": {"time": ([30.0, 780.0], "min")}, + }, + "descent_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.77, "unitless"), + "final_mach": (0.3, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (32000.0, "ft"), + "final_altitude": (0.0, "ft"), + "altitude_bounds": ((0.0, 32500.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": False, + "constrain_final": True, + "fix_duration": False, + "initial_bounds": ((405.0, 1215.0), "min"), + "duration_bounds": ((12.5, 37.5), "min"), + }, + "initial_guesses": {"time": ([810.0, 25.0], "min")}, + }, + "post_mission": { + "include_landing": False, + "constrain_range": True, + "target_range": (7001.03, "nmi"), + }, +} diff --git a/multimission.py b/multimission.py index 4100c553e..b64870317 100644 --- a/multimission.py +++ b/multimission.py @@ -66,10 +66,10 @@ """ -Example phase info mission: -Times (min): 0, 128, 241, 299 - Alt (ft): 0, 32000, 34000, 500 - Mach: 0.2, 0.72, 0.72, 0.36 +Ferry mission phase info: +Times (min): 0, 30, 810, 835 + Alt (ft): 0, 32000, 32000, 0 + Mach: 0.3, 0.77, 0.77, 0.3 Hard to find multiple payload/range values for FwFm (737), so use C-5 instead diff --git a/outputted_phase_info.py b/outputted_phase_info.py new file mode 100644 index 000000000..3e84cf09c --- /dev/null +++ b/outputted_phase_info.py @@ -0,0 +1,83 @@ +phase_info = { + "pre_mission": {"include_takeoff": False, "optimize_mass": True}, + "climb_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.3, "unitless"), + "final_mach": (0.77, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (0.0, "ft"), + "final_altitude": (32000.0, "ft"), + "altitude_bounds": ((0.0, 32500.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": True, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((0.0, 0.0), "min"), + "duration_bounds": ((15.0, 45.0), "min"), + }, + "initial_guesses": {"time": ([0.0, 30.0], "min")}, + }, + "cruise_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.77, "unitless"), + "final_mach": (0.77, "unitless"), + "mach_bounds": ((0.75, 0.79), "unitless"), + "initial_altitude": (32000.0, "ft"), + "final_altitude": (32000.0, "ft"), + "altitude_bounds": ((31500.0, 32500.0), "ft"), + "throttle_enforcement": "boundary_constraint", + "fix_initial": False, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((15.0, 45.0), "min"), + "duration_bounds": ((390.0, 1170.0), "min"), + }, + "initial_guesses": {"time": ([30.0, 780.0], "min")}, + }, + "descent_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.77, "unitless"), + "final_mach": (0.3, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (32000.0, "ft"), + "final_altitude": (0.0, "ft"), + "altitude_bounds": ((0.0, 32500.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": False, + "constrain_final": True, + "fix_duration": False, + "initial_bounds": ((405.0, 1215.0), "min"), + "duration_bounds": ((12.5, 37.5), "min"), + }, + "initial_guesses": {"time": ([810.0, 25.0], "min")}, + }, + "post_mission": { + "include_landing": False, + "constrain_range": True, + "target_range": (7001.03, "nmi"), + }, +} diff --git a/singlemission.py b/singlemission.py new file mode 100644 index 000000000..f10979840 --- /dev/null +++ b/singlemission.py @@ -0,0 +1,37 @@ +import aviary.api as av +from c5_ferry_phase_info import phase_info + +if __name__ == '__main__': + prob = av.AviaryProblem() + + # Load aircraft and options data from user + # Allow for user overrides here + prob.load_inputs('c5.csv', phase_info) + + # Preprocess inputs + prob.check_and_preprocess_inputs() + + prob.add_pre_mission_systems() + + prob.add_phases() + + prob.add_post_mission_systems() + + # Link phases and variables + prob.link_phases() + + prob.add_driver("SLSQP", max_iter=50) + + prob.add_design_variables() + + # Load optimization problem formulation + # Detail which variables the optimizer can control + prob.add_objective() # output from execcomp goes here) + + prob.setup() + + prob.set_initial_guesses() + + # remove all plots and extras + prob.run_aviary_problem(record_filename='c5_ferry.db') + # prob.get_val() # look at final fuel burn From 232e98a73dca16692fa34ef90e72334be92db3c6 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 24 Jul 2024 10:06:57 -0400 Subject: [PATCH 005/113] checkpt --- aviary/interface/methods_for_level2.py | 4 +- aviary/models/engines/CF6.deck | 623 +++++++++++++++++++++++++ c5.csv | 20 +- c5_ferry_phase_info.py | 30 +- singlemission.py | 27 ++ 5 files changed, 678 insertions(+), 26 deletions(-) create mode 100644 aviary/models/engines/CF6.deck diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index 076fda82d..b251abab1 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -1719,14 +1719,14 @@ def add_design_variables(self): self.model.add_design_var( Mission.Design.GROSS_MASS, lower=10.0, - upper=400e3, + upper=900e3, units='lbm', ref=175e3, ) self.model.add_design_var( Mission.Summary.GROSS_MASS, lower=10.0, - upper=400e3, + upper=900e3, units='lbm', ref=175e3, ) diff --git a/aviary/models/engines/CF6.deck b/aviary/models/engines/CF6.deck new file mode 100644 index 000000000..2d4b0f42a --- /dev/null +++ b/aviary/models/engines/CF6.deck @@ -0,0 +1,623 @@ +Mach_Number (unitless), Altitude (ft), Throttle (unitless), Gross_Thrust (lbf), Ram_Drag (lbf), Fuel_Flow (lb/h), NOx_Rate (lb/h) +0, 0, 50, 51463, 0, 22544.2, 0.438066 +0, 0, 47, 46316.7, 0, 19554.2, 0.422184 +0, 0, 44, 41168.9, 0, 16706.8, 0.405811 +0, 0, 41, 36024.5, 0, 13993.4, 0.388441 +0, 0, 38, 30878.2, 0, 11478.9, 0.371747 +0, 0, 35, 25731.7, 0, 9223.64, 0.358454 +0, 0, 32, 20585, 0, 7189.32, 0.34925 +0, 0, 29, 15438.9, 0, 5352.09, 0.346662 +0, 0, 26, 10292.6, 0, 3719.21, 0.361348 +0.1, 0, 50, 54023, 5123.45, 23900.4, 0.488765 +0.1, 0, 47, 48904.4, 4894.93, 20792.4, 0.472452 +0.1, 0, 44, 43772.3, 4652.35, 17907.1, 0.457748 +0.1, 0, 41, 38628.8, 4399.32, 15117.4, 0.441647 +0.1, 0, 38, 33471.3, 4130.98, 12495.1, 0.425866 +0.1, 0, 35, 28290.4, 3840.72, 10110.9, 0.413537 +0.1, 0, 32, 23067.1, 3507.29, 7960.7, 0.406992 +0.1, 0, 29, 17780.3, 3110.29, 5995.71, 0.408705 +0.1, 0, 26, 12400.2, 2620.36, 4197.43, 0.429192 +0.2, 0, 50, 57647.3, 10603.3, 25425.5, 0.540462 +0.2, 0, 47, 52504, 10164.3, 22162.3, 0.523439 +0.2, 0, 44, 47327.3, 9692.14, 19180.2, 0.509636 +0.2, 0, 41, 42129, 9198.28, 16310.9, 0.495309 +0.2, 0, 38, 36905.1, 8679.85, 13562.1, 0.480496 +0.2, 0, 35, 31649.4, 8127.32, 10997.6, 0.467541 +0.2, 0, 32, 26321.7, 7503.92, 8696.87, 0.462162 +0.2, 0, 29, 20873.9, 6760.73, 6578.5, 0.466124 +0.2, 0, 26, 15253.2, 5844.67, 4620.23, 0.491067 +0.25, 0, 50, 59887.9, 13531.2, 26264, 0.566562 +0.25, 0, 47, 54709.5, 12988.4, 22946.7, 0.550002 +0.25, 0, 44, 49496.2, 12410.9, 19864.2, 0.535636 +0.25, 0, 41, 44250, 11801.1, 16940.8, 0.522076 +0.25, 0, 38, 38975.5, 11161.9, 14130.5, 0.508044 +0.25, 0, 35, 33661.3, 10482.8, 11491.3, 0.495772 +0.25, 0, 32, 28276.6, 9734.59, 9078.89, 0.48964 +0.25, 0, 29, 22745.7, 8838.64, 6880.2, 0.494728 +0.25, 0, 26, 17001.5, 7730.26, 4863.81, 0.524611 +0.3, 0, 50, 61345.2, 16480.9, 26442.8, 0.589397 +0.3, 0, 47, 56222.3, 15844.4, 23161.1, 0.573608 +0.3, 0, 44, 51062.6, 15171.4, 20084, 0.55958 +0.3, 0, 41, 45863.4, 14458.8, 17172.1, 0.546804 +0.3, 0, 38, 40630.7, 13712.8, 14371.1, 0.533887 +0.3, 0, 35, 35354.9, 12921.9, 11733, 0.523024 +0.3, 0, 32, 30003.3, 12058.2, 9305.99, 0.518583 +0.3, 0, 29, 24490.1, 11030.8, 7081.42, 0.526135 +0.3, 0, 26, 18737.7, 9764.8, 5027.29, 0.560277 +0.4, 0, 50, 65109.9, 22791, 26900.6, 0.635663 +0.4, 0, 47, 60065.1, 21978.5, 23682.1, 0.621795 +0.4, 0, 44, 54979.7, 21124.2, 20632.6, 0.609431 +0.4, 0, 41, 49860.8, 20237.6, 17672.8, 0.596586 +0.4, 0, 38, 44688.5, 19298.1, 14871.6, 0.585718 +0.4, 0, 35, 39465.8, 18305.4, 12227, 0.577823 +0.4, 0, 32, 34166.3, 17239.4, 9767.5, 0.57704 +0.4, 0, 29, 28693.9, 15998.2, 7482.36, 0.589363 +0.4, 0, 26, 22941.7, 14477.9, 5359.4, 0.633215 +0.5, 0, 50, 70055, 29779.2, 27487, 0.68247 +0.5, 0, 47, 65050.3, 28802.7, 24313.7, 0.670767 +0.5, 0, 44, 60006.3, 27785.4, 21267.7, 0.660061 +0.5, 0, 41, 54933.8, 26740.6, 18278.4, 0.648327 +0.5, 0, 38, 49804.8, 25639.6, 15438, 0.638853 +0.5, 0, 35, 44613.5, 24475.6, 12761.1, 0.633688 +0.5, 0, 32, 39346.5, 23236.6, 10261.2, 0.636952 +0.5, 0, 29, 33908.7, 21826, 7940.59, 0.657184 +0.5, 0, 26, 28159.8, 20104.6, 5792.28, 0.719078 +0, 2000, 50, 49123, 0, 21568.5, 0.439072 +0, 2000, 47, 44210.8, 0, 18665, 0.422182 +0, 2000, 44, 39298.6, 0, 15951.1, 0.405896 +0, 2000, 41, 34385.7, 0, 13349.7, 0.388235 +0, 2000, 38, 29474, 0, 10936.3, 0.371051 +0, 2000, 35, 24561.4, 0, 8769.85, 0.357058 +0, 2000, 32, 19649.5, 0, 6824.42, 0.347308 +0, 2000, 29, 14737, 0, 5070.39, 0.34406 +0, 2000, 26, 9824.59, 0, 3510.74, 0.357342 +0.1, 2000, 50, 51538.6, 4821.09, 22855.7, 0.489231 +0.1, 2000, 47, 46652.4, 4606.79, 19839.4, 0.471855 +0.1, 2000, 44, 41751.7, 4377.35, 17079.5, 0.456984 +0.1, 2000, 41, 36839.9, 4137.67, 14421.4, 0.440991 +0.1, 2000, 38, 31915.2, 3884.26, 11907.2, 0.424786 +0.1, 2000, 35, 26969.6, 3610.79, 9613.12, 0.411541 +0.1, 2000, 32, 21985.2, 3298.23, 7554.94, 0.404289 +0.1, 2000, 29, 16940.5, 2925.36, 5678.88, 0.405195 +0.1, 2000, 26, 11808.4, 2464.95, 3961.86, 0.424026 +0.2, 2000, 50, 54856.9, 9965.33, 24261, 0.540436 +0.2, 2000, 47, 49954, 9551.35, 21122.7, 0.522806 +0.2, 2000, 44, 45021.5, 9108.3, 18243.8, 0.507997 +0.2, 2000, 41, 40063.8, 8640.77, 15515.3, 0.493757 +0.2, 2000, 38, 35085.2, 8150.44, 12894.4, 0.478727 +0.2, 2000, 35, 30074.3, 7628.41, 10439.8, 0.46511 +0.2, 2000, 32, 25000.6, 7044.03, 8236.45, 0.458687 +0.2, 2000, 29, 19814, 6346.56, 6218.85, 0.461769 +0.2, 2000, 26, 14463.4, 5485.34, 4356.44, 0.485233 +0.25, 2000, 50, 56889.7, 12706.1, 25024.5, 0.566374 +0.25, 2000, 47, 51961.3, 12195.5, 21825, 0.54884 +0.25, 2000, 44, 47000.7, 11653.7, 18858.8, 0.533533 +0.25, 2000, 41, 42003.8, 11076.7, 16083.3, 0.520042 +0.25, 2000, 38, 36983.1, 10472.6, 13408.8, 0.505793 +0.25, 2000, 35, 31923.6, 9831.26, 10889.6, 0.492914 +0.25, 2000, 32, 26801.1, 9128.33, 8586.63, 0.485867 +0.25, 2000, 29, 21543.1, 8287.86, 6496.23, 0.490086 +0.25, 2000, 26, 16082.8, 7246.19, 4580.78, 0.518386 +0.3, 2000, 50, 58331.4, 15483.3, 25230.6, 0.588838 +0.3, 2000, 47, 53446.2, 14882.7, 22072.7, 0.572374 +0.3, 2000, 44, 48527.8, 14249.2, 19112.4, 0.557561 +0.3, 2000, 41, 43569.4, 13575.4, 16334.7, 0.544599 +0.3, 2000, 38, 38578.2, 12869, 13661.2, 0.531375 +0.3, 2000, 35, 33545.5, 12120.8, 11136.9, 0.519816 +0.3, 2000, 32, 28446.2, 11307.5, 8816.1, 0.514398 +0.3, 2000, 29, 23197.6, 10343, 6696.12, 0.520911 +0.3, 2000, 26, 17721.2, 9151.59, 4740.96, 0.553229 +0.4, 2000, 50, 61981.9, 21423.2, 25729.2, 0.634369 +0.4, 2000, 47, 57158, 20655.1, 22625.3, 0.619823 +0.4, 2000, 44, 52291.4, 19844.4, 19699.7, 0.607135 +0.4, 2000, 41, 47394.8, 19004.4, 16860.6, 0.593884 +0.4, 2000, 38, 42447.5, 18112.3, 14179, 0.582652 +0.4, 2000, 35, 37450.7, 17170.6, 11636.7, 0.573801 +0.4, 2000, 32, 32383.3, 16160.4, 9278.77, 0.571955 +0.4, 2000, 29, 27160.9, 14993.3, 7092.66, 0.582913 +0.4, 2000, 26, 21672.9, 13561.2, 5059.77, 0.623759 +0.5, 2000, 50, 66628.7, 27978.1, 26303.5, 0.680546 +0.5, 2000, 47, 61841, 27055.7, 23234, 0.667925 +0.5, 2000, 44, 57008, 26087.2, 20316.8, 0.657059 +0.5, 2000, 41, 52146.2, 25090.8, 17461.2, 0.645387 +0.5, 2000, 38, 47235.5, 24046.9, 14725.1, 0.635014 +0.5, 2000, 35, 42266.2, 22940.8, 12151.8, 0.6288 +0.5, 2000, 32, 37223.4, 21763.6, 9748.24, 0.630555 +0.5, 2000, 29, 32029.4, 20434.2, 7526.35, 0.649094 +0.5, 2000, 26, 26539.5, 18809.4, 5468.06, 0.707372 +0, 5000, 50, 45729, 0, 20147.1, 0.440576 +0, 5000, 47, 41156.2, 0, 17375.5, 0.422184 +0, 5000, 44, 36583.5, 0, 14847.5, 0.405853 +0, 5000, 41, 32010.2, 0, 12420.3, 0.38801 +0, 5000, 38, 27437.9, 0, 10162.2, 0.370371 +0, 5000, 35, 22864.4, 0, 8117.71, 0.355037 +0, 5000, 32, 18291.6, 0, 6302.05, 0.344532 +0, 5000, 29, 13718.8, 0, 4668.69, 0.340313 +0, 5000, 26, 9145.66, 0, 3214.88, 0.35152 +0.1, 5000, 50, 47774.7, 4385.2, 21260.7, 0.489997 +0.1, 5000, 47, 43241.8, 4191.27, 18388.1, 0.47088 +0.1, 5000, 44, 38693.5, 3981.83, 15806.6, 0.455369 +0.1, 5000, 41, 34133.4, 3761.8, 13349.8, 0.43955 +0.1, 5000, 38, 29564.2, 3530.12, 11008.2, 0.422838 +0.1, 5000, 35, 24975.1, 3280.19, 8864.57, 0.408602 +0.1, 5000, 32, 20353.4, 2997.61, 6944.72, 0.400139 +0.1, 5000, 29, 15676.3, 2659.48, 5205.59, 0.399912 +0.1, 5000, 26, 10919, 2241.12, 3619.1, 0.417048 +0.2, 5000, 50, 50690, 9049.69, 22515.2, 0.540706 +0.2, 5000, 47, 46150.7, 8674.24, 19539.7, 0.521386 +0.2, 5000, 44, 41585.1, 8272.76, 16829.7, 0.505208 +0.2, 5000, 41, 36992.3, 7844, 14313.3, 0.491051 +0.2, 5000, 38, 32379.4, 7394.61, 11888.1, 0.475814 +0.2, 5000, 35, 27737.1, 6916.8, 9606.91, 0.461421 +0.2, 5000, 32, 23043, 6386.91, 7556.59, 0.453682 +0.2, 5000, 29, 18247.1, 5755.01, 5690.29, 0.455511 +0.2, 5000, 26, 13300.7, 4972.69, 3972.54, 0.477012 +0.25, 5000, 50, 52484.3, 11527.5, 23208.9, 0.566667 +0.25, 5000, 47, 47929.3, 11067.8, 20155.1, 0.546778 +0.25, 5000, 44, 43341, 10576, 17375.6, 0.53031 +0.25, 5000, 41, 38717.5, 10047.6, 14814.3, 0.516721 +0.25, 5000, 38, 34068.5, 9493.96, 12343.2, 0.502275 +0.25, 5000, 35, 29384.9, 8906.69, 10006.8, 0.488655 +0.25, 5000, 32, 24650, 8267.65, 7869.75, 0.48038 +0.25, 5000, 29, 19793.1, 7506.04, 5939.51, 0.483395 +0.25, 5000, 26, 14751.2, 6559.92, 4173.3, 0.509483 +0.3, 5000, 50, 53778.8, 14041.6, 23399.8, 0.588864 +0.3, 5000, 47, 49265.6, 13501.7, 20379.6, 0.569839 +0.3, 5000, 44, 44713.3, 12924, 17620.6, 0.554294 +0.3, 5000, 41, 40125, 12308.8, 15042.8, 0.540794 +0.3, 5000, 38, 35504, 11661.1, 12572.9, 0.527325 +0.3, 5000, 35, 30844.6, 10975.6, 10231.8, 0.514964 +0.3, 5000, 32, 26128.9, 10234.1, 8080.14, 0.508353 +0.3, 5000, 29, 21280.9, 9359.98, 6121.21, 0.513485 +0.3, 5000, 26, 16224.3, 8276.88, 4319.04, 0.54345 +0.4, 5000, 50, 57169.6, 19432.3, 23908, 0.633537 +0.4, 5000, 47, 52703.6, 18739.3, 20944, 0.616647 +0.4, 5000, 44, 48188.7, 17998.8, 18205.1, 0.603019 +0.4, 5000, 41, 43641, 17224.9, 15582.2, 0.589874 +0.4, 5000, 38, 39051.2, 16408.2, 13080.5, 0.577686 +0.4, 5000, 35, 34412.2, 15543.1, 10712.8, 0.567746 +0.4, 5000, 32, 29709, 14614.4, 8524.74, 0.564751 +0.4, 5000, 29, 24876.3, 13555.3, 6496.67, 0.573861 +0.4, 5000, 26, 19797.8, 12250.3, 4616.48, 0.61166 +0.5, 5000, 50, 61590.4, 25405.6, 24552.7, 0.678537 +0.5, 5000, 47, 57136, 24569.7, 21618.7, 0.663835 +0.5, 5000, 44, 52624.5, 23677.1, 18882.1, 0.652287 +0.5, 5000, 41, 48080.4, 22752.1, 16230.1, 0.64079 +0.5, 5000, 38, 43503.7, 21792.2, 13661.3, 0.629222 +0.5, 5000, 35, 38862.8, 20770.3, 11247.2, 0.621647 +0.5, 5000, 32, 34156.2, 19682.8, 8995.21, 0.621501 +0.5, 5000, 29, 29324, 18468.5, 6920.89, 0.63755 +0.5, 5000, 26, 24220.5, 16983.6, 4999.74, 0.690863 +0, 10000, 50, 40056.6, 0, 17751, 0.443149 +0, 10000, 47, 36051.2, 0, 15208.3, 0.421853 +0, 10000, 44, 32045.3, 0, 12960, 0.404426 +0, 10000, 41, 28039.7, 0, 10850.4, 0.386964 +0, 10000, 38, 24034, 0, 8860.73, 0.368674 +0, 10000, 35, 20028.5, 0, 7044.48, 0.351723 +0, 10000, 32, 16022.6, 0, 5446.42, 0.339921 +0, 10000, 29, 12016.9, 0, 4018.95, 0.334442 +0, 10000, 26, 8011.24, 0, 2746.93, 0.342884 +0.1, 10000, 50, 41712.1, 3716.25, 18691.3, 0.491931 +0.1, 10000, 47, 37749.6, 3553.39, 16065.3, 0.469797 +0.1, 10000, 44, 33773.6, 3376.85, 13744.1, 0.452156 +0.1, 10000, 41, 29785.1, 3187.81, 11611, 0.436548 +0.1, 10000, 38, 25786.9, 2989.33, 9561.42, 0.419405 +0.1, 10000, 35, 21774, 2775.91, 7670.08, 0.40373 +0.1, 10000, 32, 17736.1, 2537.74, 5982.13, 0.393603 +0.1, 10000, 29, 13651.5, 2252.83, 4462.12, 0.391461 +0.1, 10000, 26, 9497.61, 1898.5, 3087.97, 0.406359 +0.2, 10000, 50, 44139.4, 7656.35, 19782.2, 0.54223 +0.2, 10000, 47, 40180, 7345.5, 17031.2, 0.518698 +0.2, 10000, 44, 36191.9, 7005.56, 14614, 0.500711 +0.2, 10000, 41, 32176.2, 6638.18, 12414.5, 0.486117 +0.2, 10000, 38, 28141.4, 6251.65, 10307.4, 0.470876 +0.2, 10000, 35, 24083.4, 5841.88, 8309.22, 0.455511 +0.2, 10000, 32, 19986.1, 5393.16, 6501.74, 0.445541 +0.2, 10000, 29, 15805, 4860.07, 4877.29, 0.445622 +0.2, 10000, 26, 11493.6, 4197.14, 3388.86, 0.464451 +0.25, 10000, 50, 45684.3, 9750.87, 20397.8, 0.567655 +0.25, 10000, 47, 41710, 9369.77, 17587.2, 0.543818 +0.25, 10000, 44, 37697, 8950.27, 15120.5, 0.525991 +0.25, 10000, 41, 33653.8, 8500.5, 12852.6, 0.51097 +0.25, 10000, 38, 29583.4, 8023.35, 10706.3, 0.496582 +0.25, 10000, 35, 25485.3, 7518.55, 8663.3, 0.482185 +0.25, 10000, 32, 21347.2, 6973.63, 6782.18, 0.47185 +0.25, 10000, 29, 17111.7, 6331.75, 5094.88, 0.472624 +0.25, 10000, 26, 12716.4, 5529.83, 3559.24, 0.495261 +0.3, 10000, 50, 46767.8, 11872, 20564.3, 0.589305 +0.3, 10000, 47, 42832, 11425.2, 17772.3, 0.565875 +0.3, 10000, 44, 38848.4, 10931.8, 15327.4, 0.549041 +0.3, 10000, 41, 34833.7, 10406.7, 13051, 0.534286 +0.3, 10000, 38, 30785.4, 9847.92, 10903.9, 0.520785 +0.3, 10000, 35, 26705.6, 9257.63, 8856.6, 0.507601 +0.3, 10000, 32, 22581.1, 8622.51, 6964.09, 0.498909 +0.3, 10000, 29, 18354, 7885.43, 5250.9, 0.501585 +0.3, 10000, 26, 13945.5, 6966.34, 3683.91, 0.527844 +0.4, 10000, 50, 49598.3, 16409.4, 21004.8, 0.632888 +0.4, 10000, 47, 45708.6, 15837.9, 18248.9, 0.61093 +0.4, 10000, 44, 41756.7, 15205.6, 15819.1, 0.595797 +0.4, 10000, 41, 37767.8, 14535.1, 13539.9, 0.582797 +0.4, 10000, 38, 33747.6, 13834.3, 11339.1, 0.569421 +0.4, 10000, 35, 29681.9, 13087.4, 9268.34, 0.558519 +0.4, 10000, 32, 25562.8, 12287, 7345.33, 0.553289 +0.4, 10000, 29, 21346.3, 11389.8, 5572.37, 0.559673 +0.4, 10000, 26, 16917.4, 10279.7, 3936.98, 0.593127 +0.5, 10000, 50, 53375.8, 21443.9, 21598.4, 0.676389 +0.5, 10000, 47, 49488.7, 20749.1, 18879.4, 0.656914 +0.5, 10000, 44, 45532.1, 19986.3, 16439.1, 0.643514 +0.5, 10000, 41, 41534.3, 19181.4, 14131.5, 0.632202 +0.5, 10000, 38, 37509.3, 18350.3, 11874.6, 0.619792 +0.5, 10000, 35, 33433.7, 17467.9, 9745.72, 0.610412 +0.5, 10000, 32, 29297.9, 16525, 7766.15, 0.608019 +0.5, 10000, 29, 25069.2, 15489.6, 5940, 0.620069 +0.5, 10000, 26, 20611.4, 14225, 4257.12, 0.666594 +0.3, 15000, 50, 39299, 9860.24, 16463.6, 0.559248 +0.3, 15000, 47, 35982.8, 9488.15, 14228.4, 0.537029 +0.3, 15000, 44, 32630.1, 9079.06, 12241.7, 0.519793 +0.3, 15000, 41, 29249.1, 8641.89, 10411.5, 0.505238 +0.3, 15000, 38, 25836.6, 8173.34, 8703.84, 0.492766 +0.3, 15000, 35, 22398.2, 7678.76, 7070.51, 0.480352 +0.3, 15000, 32, 18922.5, 7146.71, 5556.27, 0.471838 +0.3, 15000, 29, 15365, 6533.49, 4187.09, 0.474108 +0.3, 15000, 26, 11655.7, 5767.98, 2936.51, 0.49875 +0.3, 15000, 21, 5524.72, 4052.79, 1241.13, 0.843202 +0.4, 15000, 50, 42330.4, 13716.5, 17317.3, 0.605205 +0.4, 15000, 47, 38990.2, 13238.1, 15018, 0.583177 +0.4, 15000, 44, 35604.6, 12713, 12955.9, 0.565968 +0.4, 15000, 41, 32175.7, 12145.9, 11071.5, 0.55275 +0.4, 15000, 38, 28719, 11551.1, 9266.82, 0.539776 +0.4, 15000, 35, 25221.8, 10915.2, 7569.29, 0.529076 +0.4, 15000, 32, 21680.6, 10234.8, 5984.2, 0.522829 +0.4, 15000, 29, 18062.6, 9478.53, 4529.89, 0.527706 +0.4, 15000, 26, 14267.1, 8544.28, 3190.68, 0.557541 +0.4, 15000, 21, 7929.73, 6499.04, 1386.96, 0.969436 +0.5, 15000, 50, 46481, 18076.9, 18535.3, 0.652557 +0.5, 15000, 47, 43056.4, 17493.1, 16123.2, 0.630717 +0.5, 15000, 44, 39578.9, 16855.3, 13935.8, 0.613274 +0.5, 15000, 41, 36042.2, 16159.3, 11950.8, 0.601059 +0.5, 15000, 38, 32473, 15430.4, 10049.1, 0.589643 +0.5, 15000, 35, 28868.7, 14666.5, 8220.08, 0.578787 +0.5, 15000, 32, 25207.9, 13846, 6520.09, 0.573855 +0.5, 15000, 29, 21475.8, 12954.5, 4955.95, 0.5816 +0.5, 15000, 26, 17556.3, 11875.5, 3523.04, 0.620165 +0.5, 15000, 21, 10988.5, 9568.25, 1583.03, 1.11464 +0.6, 15000, 50, 51937.7, 23089.4, 20221.5, 0.700959 +0.6, 15000, 47, 48348.9, 22385.7, 17638.8, 0.679375 +0.6, 15000, 44, 44708.5, 21629.4, 15271.4, 0.661699 +0.6, 15000, 41, 40994.7, 20801, 13123.2, 0.649867 +0.6, 15000, 38, 37240.9, 19931.8, 11070.4, 0.63957 +0.6, 15000, 35, 33451.3, 19026.4, 9087.13, 0.629962 +0.6, 15000, 32, 29595.1, 18055.5, 7237.28, 0.627171 +0.6, 15000, 29, 25665.6, 17011.1, 5526.65, 0.638587 +0.6, 15000, 26, 21588.9, 15819.2, 3941.01, 0.683057 +0.6, 15000, 21, 14717.4, 13275, 1834.23, 1.27163 +0.7, 15000, 50, 58791.9, 28946.4, 22389.8, 0.750191 +0.7, 15000, 47, 54936.7, 28076, 19562.6, 0.728298 +0.7, 15000, 44, 51024.6, 27147.8, 16963.5, 0.710462 +0.7, 15000, 41, 47045.5, 26153.8, 14594.5, 0.698579 +0.7, 15000, 38, 43038.4, 25131, 12334.5, 0.688797 +0.7, 15000, 35, 38998.9, 24075.2, 10145, 0.67979 +0.7, 15000, 32, 34883, 22944.6, 8097.44, 0.678266 +0.7, 15000, 29, 30687.3, 21733.9, 6195.38, 0.691958 +0.7, 15000, 26, 26384, 20414.9, 4422.46, 0.740891 +0.7, 15000, 21, 19136.3, 17644, 2100.57, 1.40763 +0.4, 20000, 50, 31214.6, 10707.6, 11569.4, 0.56417 +0.4, 20000, 47, 28779.8, 10323.6, 10168.3, 0.550939 +0.4, 20000, 44, 26321.6, 9916.01, 8857.65, 0.539917 +0.4, 20000, 41, 23845.1, 9490.92, 7595.72, 0.529164 +0.4, 20000, 38, 21345.9, 9041.58, 6394.24, 0.519675 +0.4, 20000, 35, 18819.7, 8565.95, 5256.2, 0.512611 +0.4, 20000, 32, 16257.9, 8055.27, 4200.61, 0.512106 +0.4, 20000, 29, 13618.5, 7466.45, 3222.58, 0.52382 +0.4, 20000, 26, 10846.6, 6745.26, 2310.41, 0.563324 +0.4, 20000, 21, 6225.55, 5200.2, 1060.74, 1.03451 +0.5, 20000, 50, 34438.9, 14143.5, 12381.9, 0.610083 +0.5, 20000, 47, 31943.4, 13677.6, 10900.6, 0.596777 +0.5, 20000, 44, 29414.2, 13178.2, 9525.88, 0.586715 +0.5, 20000, 41, 26864.6, 12657.7, 8202.52, 0.577363 +0.5, 20000, 38, 24297.4, 12119.7, 6911.54, 0.567556 +0.5, 20000, 35, 21693.4, 11545.4, 5700.09, 0.5617 +0.5, 20000, 32, 19051.7, 10933.7, 4568.45, 0.562758 +0.5, 20000, 29, 16340, 10251.4, 3524.79, 0.578914 +0.5, 20000, 26, 13477, 9417.93, 2556.73, 0.629878 +0.5, 20000, 21, 8703.03, 7688.25, 1212.45, 1.19479 +0.6, 20000, 50, 38618.4, 18088, 13484.8, 0.656819 +0.6, 20000, 47, 36014.2, 17536.8, 11889.6, 0.643469 +0.6, 20000, 44, 33366.8, 16942.8, 10411.8, 0.633942 +0.6, 20000, 41, 30695.4, 16324.1, 8989.66, 0.625526 +0.6, 20000, 38, 28005.7, 15687, 7599.89, 0.616938 +0.6, 20000, 35, 25273.7, 15008.6, 6289.78, 0.612735 +0.6, 20000, 32, 22500.7, 14288.7, 5062.95, 0.616527 +0.6, 20000, 29, 19673.1, 13514, 3917.64, 0.636073 +0.6, 20000, 26, 16706.1, 12600, 2844.38, 0.692723 +0.6, 20000, 21, 11723.3, 10696.8, 1402.98, 1.36674 +0.7, 20000, 50, 43875.2, 22676.7, 14924.6, 0.704039 +0.7, 20000, 47, 41082.7, 22004, 13175.7, 0.690598 +0.7, 20000, 44, 38250.3, 21291.8, 11552.3, 0.681213 +0.7, 20000, 41, 35403.4, 20564.5, 9990.45, 0.673258 +0.7, 20000, 38, 32540.7, 19821, 8462.53, 0.665311 +0.7, 20000, 35, 29631.5, 19032.3, 7016.05, 0.661942 +0.7, 20000, 32, 26675.8, 18196.4, 5659.53, 0.667448 +0.7, 20000, 29, 23663.9, 17304.3, 4388.01, 0.689986 +0.7, 20000, 26, 20556.9, 16317.2, 3185.13, 0.751261 +0.7, 20000, 21, 15306, 14246.1, 1604.52, 1.5138 +0.5, 25000, 50, 27774.6, 11421.1, 9716.34, 0.594143 +0.5, 25000, 47, 25762.5, 11044.3, 8560.65, 0.581638 +0.5, 25000, 44, 23723.4, 10640.8, 7485.72, 0.572191 +0.5, 25000, 41, 21667.3, 10220.5, 6449.14, 0.563398 +0.5, 25000, 38, 19598.5, 9786.01, 5438.48, 0.55424 +0.5, 25000, 35, 17499.1, 9322.09, 4490.19, 0.549126 +0.5, 25000, 32, 15369.2, 8827.92, 3604.08, 0.550971 +0.5, 25000, 29, 13181.8, 8275.7, 2786.06, 0.567881 +0.5, 25000, 26, 10872.2, 7601.47, 2027.38, 0.619861 +0.5, 25000, 21, 7021.5, 6203.82, 971.811, 1.18849 +0.6, 25000, 50, 31147.1, 14606.4, 10579.8, 0.639621 +0.6, 25000, 47, 29047.3, 14160.6, 9334.47, 0.627036 +0.6, 25000, 44, 26913.1, 13680.8, 8179, 0.618107 +0.6, 25000, 41, 24759.6, 13181, 7066.29, 0.61029 +0.6, 25000, 38, 22591.5, 12666.6, 5977.56, 0.602283 +0.6, 25000, 35, 20388.9, 12118.6, 4952.29, 0.598806 +0.6, 25000, 32, 18153.1, 11536.9, 3991.52, 0.603298 +0.6, 25000, 29, 15873, 10910.7, 3094.23, 0.623558 +0.6, 25000, 26, 13479.2, 10171.1, 2252.69, 0.680951 +0.6, 25000, 21, 9459.57, 8632.53, 1121.87, 1.3565 +0.7, 25000, 50, 35388.2, 18311.8, 11705.9, 0.685501 +0.7, 25000, 47, 33136.5, 17767.8, 10340.7, 0.672837 +0.7, 25000, 44, 30853.4, 17192.6, 9071.57, 0.664056 +0.7, 25000, 41, 28558.6, 16605.1, 7849.8, 0.656695 +0.7, 25000, 38, 26251, 16004.8, 6653.42, 0.649351 +0.7, 25000, 35, 23905.8, 15367.7, 5521.24, 0.646657 +0.7, 25000, 32, 21522.8, 14692.3, 4459.28, 0.65285 +0.7, 25000, 29, 19094.7, 13971.8, 3462.95, 0.675971 +0.7, 25000, 26, 16588.2, 13172.9, 2520.07, 0.73788 +0.7, 25000, 21, 12352.3, 11498.4, 1279.89, 1.49902 +0.75, 25000, 50, 37866.1, 20407.9, 12372.7, 0.708703 +0.75, 25000, 47, 35516.4, 19804.1, 10933.5, 0.695854 +0.75, 25000, 44, 33131.2, 19164.9, 9593.92, 0.686934 +0.75, 25000, 41, 30733.4, 18512.7, 8304.18, 0.679516 +0.75, 25000, 38, 28333.3, 17857.8, 7042.94, 0.672329 +0.75, 25000, 35, 25902.1, 17173.1, 5846.71, 0.669802 +0.75, 25000, 32, 23430.8, 16447.6, 4723.81, 0.676456 +0.75, 25000, 29, 20912.3, 15674.9, 3669.16, 0.700561 +0.75, 25000, 26, 18328.7, 14837.1, 2671.79, 0.765195 +0.75, 25000, 21, 13964.1, 13091.2, 1369.93, 1.56938 +0.8, 25000, 50, 40606.7, 22691.5, 13118.2, 0.732236 +0.8, 25000, 47, 38146.1, 22022.4, 11594.2, 0.71908 +0.8, 25000, 44, 35644.8, 21312.9, 10174.4, 0.709916 +0.8, 25000, 41, 33128.6, 20588.3, 8807.8, 0.70236 +0.8, 25000, 38, 30610.8, 19861.1, 7470.49, 0.694952 +0.8, 25000, 35, 28064.5, 19107.6, 6201.77, 0.692395 +0.8, 25000, 32, 25492.7, 18326.8, 5011.13, 0.699308 +0.8, 25000, 29, 22873.4, 17498.8, 3891.17, 0.723997 +0.8, 25000, 26, 20193.2, 16610.1, 2837.67, 0.791973 +0.8, 25000, 21, 15688.2, 14792.5, 1464.43, 1.63486 +0.5, 30000, 50, 22197.7, 9139.31, 7553.34, 0.578427 +0.5, 30000, 47, 20589.8, 8837.27, 6660.41, 0.56672 +0.5, 30000, 44, 18960.8, 8514.25, 5827.79, 0.557868 +0.5, 30000, 41, 17318.3, 8177.88, 5024.02, 0.549648 +0.5, 30000, 38, 15665.4, 7830.04, 4240.92, 0.541253 +0.5, 30000, 35, 13988, 7458.59, 3505.89, 0.536939 +0.5, 30000, 32, 12286.1, 7062.74, 2819.36, 0.539757 +0.5, 30000, 29, 10537.4, 6619.85, 2184.53, 0.557631 +0.5, 30000, 26, 8690.84, 6079.16, 1595.86, 0.611046 +0.5, 30000, 21, 5612.47, 4959.54, 775.321, 1.18745 +0.6, 30000, 50, 24893.8, 11688.3, 8220.68, 0.622522 +0.6, 30000, 47, 23215.8, 11330.8, 7259.3, 0.610799 +0.6, 30000, 44, 21510.8, 10946.6, 6365.11, 0.602518 +0.6, 30000, 41, 19789.9, 10546.6, 5502.15, 0.595259 +0.6, 30000, 38, 18058.5, 10135, 4658.72, 0.587956 +0.6, 30000, 35, 16298.8, 9696.13, 3864.3, 0.585265 +0.6, 30000, 32, 14512.4, 9230.3, 3119.75, 0.590629 +0.6, 30000, 29, 12690.3, 8728.63, 2423.39, 0.611713 +0.6, 30000, 26, 10776.3, 8135.17, 1770.44, 0.670342 +0.6, 30000, 21, 7562.34, 6902.07, 892.382, 1.35153 +0.7, 30000, 50, 28284.9, 14653.5, 9092.75, 0.667048 +0.7, 30000, 47, 26485.5, 14217.3, 8038.8, 0.655256 +0.7, 30000, 44, 24661.5, 13756.7, 7056.83, 0.647127 +0.7, 30000, 41, 22828.6, 13286.6, 6109.92, 0.640321 +0.7, 30000, 38, 20985.3, 12806.1, 5182.55, 0.63363 +0.7, 30000, 35, 19111.6, 12296, 4305.7, 0.631742 +0.7, 30000, 32, 17207.6, 11755.2, 3482.43, 0.638694 +0.7, 30000, 29, 15267.6, 11178.2, 2709.71, 0.662618 +0.7, 30000, 26, 13263.6, 10537.4, 1978.02, 0.725541 +0.7, 30000, 21, 9876.64, 9195.07, 1014.76, 1.48885 +0.75, 30000, 50, 30266.4, 16330.8, 9610.02, 0.689605 +0.75, 30000, 47, 28388.8, 15846.9, 8498.01, 0.677566 +0.75, 30000, 44, 26483.4, 15335.2, 7461.34, 0.669286 +0.75, 30000, 41, 24567.3, 14812.9, 6462.68, 0.662538 +0.75, 30000, 38, 22650.8, 14289, 5484.74, 0.655934 +0.75, 30000, 35, 20708.4, 13740.7, 4558.17, 0.654186 +0.75, 30000, 32, 18733.9, 13159.8, 3687.83, 0.661594 +0.75, 30000, 29, 16721.7, 12541, 2869.84, 0.686457 +0.75, 30000, 26, 14656.6, 11869.5, 2095.57, 0.751881 +0.75, 30000, 21, 11166.3, 10469.6, 1084.69, 1.55675 +0.8, 30000, 50, 32457.4, 18158.3, 10187, 0.712421 +0.8, 30000, 47, 30491, 17621.8, 9009.6, 0.700091 +0.8, 30000, 44, 28493, 17053.9, 7911.02, 0.691577 +0.8, 30000, 41, 26483.4, 16474, 6852.57, 0.684614 +0.8, 30000, 38, 24471.9, 15892, 5816.13, 0.677879 +0.8, 30000, 35, 22438, 15288.7, 4833.52, 0.676081 +0.8, 30000, 32, 20383.1, 14663.5, 3910.77, 0.68375 +0.8, 30000, 29, 18290.2, 14000.4, 3042.14, 0.709168 +0.8, 30000, 26, 16148.3, 13288.5, 2224.41, 0.777812 +0.8, 30000, 21, 12545.8, 11830.8, 1158.13, 1.61986 +0.85, 30000, 50, 34874.9, 20152.7, 10830.7, 0.735667 +0.85, 30000, 47, 32808.8, 19558.8, 9579.17, 0.722957 +0.85, 30000, 44, 30706.5, 18929, 8410.59, 0.71412 +0.85, 30000, 41, 28591.1, 18285.5, 7284.47, 0.706849 +0.85, 30000, 38, 26473.4, 17639.6, 6181.94, 0.699807 +0.85, 30000, 35, 24330.4, 16969.7, 5135.29, 0.69766 +0.85, 30000, 32, 22165.9, 16277.1, 4152.72, 0.705187 +0.85, 30000, 29, 19975.8, 15559.1, 3227.83, 0.730829 +0.85, 30000, 26, 17744.2, 14799.7, 2359.65, 0.801392 +0.85, 30000, 21, 14019.9, 13283.8, 1229.14, 1.66978 +0.6, 35000, 50, 19701.5, 9260.88, 6326.38, 0.60594 +0.6, 35000, 47, 18374, 8977.38, 5590.04, 0.5949 +0.6, 35000, 44, 17025.2, 8672.8, 4904.67, 0.587215 +0.6, 35000, 41, 15663.7, 8355.73, 4243.12, 0.580612 +0.6, 35000, 38, 14293.9, 8029.3, 3596.59, 0.574115 +0.6, 35000, 35, 12901.5, 7681.3, 2987.49, 0.57229 +0.6, 35000, 32, 11487.8, 7311.66, 2416.88, 0.578733 +0.6, 35000, 29, 10045.7, 6913.51, 1882.34, 0.600969 +0.6, 35000, 26, 8529.99, 6441.87, 1380.97, 0.661345 +0.6, 35000, 21, 5984.52, 5462.49, 706.823, 1.35398 +0.7, 35000, 50, 22385.2, 11610.5, 6992.44, 0.648964 +0.7, 35000, 47, 20961.5, 11264.1, 6186.78, 0.637979 +0.7, 35000, 44, 19518.6, 10899, 5434.53, 0.63048 +0.7, 35000, 41, 18068.3, 10526.3, 4708.47, 0.624302 +0.7, 35000, 38, 16610.6, 10145.5, 3997.96, 0.618389 +0.7, 35000, 35, 15128.3, 9740.94, 3325.76, 0.617332 +0.7, 35000, 32, 13621.5, 9311.79, 2694.94, 0.625312 +0.7, 35000, 29, 12086.8, 8854.34, 2101.85, 0.650237 +0.7, 35000, 26, 10500, 8345, 1540.19, 0.714721 +0.7, 35000, 21, 7817.53, 7278.79, 800.352, 1.4856 +0.75, 35000, 50, 23953.4, 12939.6, 7387.05, 0.670704 +0.75, 35000, 47, 22467.9, 12555.2, 6537.93, 0.659551 +0.75, 35000, 44, 20960.3, 12149.4, 5744.54, 0.651977 +0.75, 35000, 41, 19444.9, 11735.6, 4978.6, 0.64579 +0.75, 35000, 38, 17928.9, 11320.3, 4229.4, 0.63998 +0.75, 35000, 35, 16392.3, 10885.5, 3519.44, 0.639098 +0.75, 35000, 32, 14829.9, 10424.5, 2852.33, 0.647464 +0.75, 35000, 29, 13238.1, 9933.95, 2224.61, 0.673275 +0.75, 35000, 26, 11603.5, 9400.67, 1630.17, 0.74005 +0.75, 35000, 21, 8839.18, 8288.49, 853.868, 1.55054 +0.8, 35000, 50, 25687.6, 14387.7, 7827.67, 0.692719 +0.8, 35000, 47, 24131.4, 13961.5, 6929.32, 0.681353 +0.8, 35000, 44, 22550.8, 13511, 6088.78, 0.673553 +0.8, 35000, 41, 20961, 13051.5, 5277.26, 0.667201 +0.8, 35000, 38, 19370.5, 12590.2, 4483.23, 0.661215 +0.8, 35000, 35, 17761.9, 12111.9, 3730.66, 0.660302 +0.8, 35000, 32, 16135.7, 11615.8, 3023.34, 0.668893 +0.8, 35000, 29, 14480, 11090.1, 2356.88, 0.69525 +0.8, 35000, 26, 12785.2, 10525.2, 1728.99, 0.765044 +0.8, 35000, 21, 9931.9, 9366.91, 910.215, 1.61102 +0.85, 35000, 50, 27601.6, 15968, 8320.74, 0.715231 +0.85, 35000, 47, 25966.5, 15496.3, 7365.64, 0.703482 +0.85, 35000, 44, 24303.5, 14996.8, 6471.58, 0.695363 +0.85, 35000, 41, 22630, 14486.8, 5608.53, 0.688742 +0.85, 35000, 38, 20955.5, 13975, 4763.55, 0.682405 +0.85, 35000, 35, 19260.7, 13443.9, 3962.24, 0.681174 +0.85, 35000, 32, 17547.8, 12894.4, 3208.85, 0.689569 +0.85, 35000, 29, 15815, 12324.9, 2499.47, 0.716162 +0.85, 35000, 26, 14049.6, 11722.8, 1832.8, 0.787713 +0.85, 35000, 21, 11099.6, 10517.9, 964.752, 1.65855 +0.9, 35000, 50, 29708.9, 17695.2, 8869.75, 0.738306 +0.9, 35000, 47, 27985.7, 17173.4, 7850.63, 0.726085 +0.9, 35000, 44, 26230.9, 16620.1, 6896.06, 0.717534 +0.9, 35000, 41, 24463.7, 16054.5, 5975.18, 0.710556 +0.9, 35000, 38, 22695.6, 15487.1, 5073.16, 0.703768 +0.9, 35000, 35, 20904.6, 14897.8, 4216.94, 0.702029 +0.9, 35000, 32, 19092.9, 14287.5, 3411.61, 0.709951 +0.9, 35000, 29, 17258.6, 13654.5, 2653.04, 0.736118 +0.9, 35000, 26, 15398.7, 12996, 1941.63, 0.808093 +0.9, 35000, 21, 12343.5, 11742.9, 1017, 1.69307 +0.6, 39000, 50, 16259, 7642.84, 5199.94, 0.603512 +0.6, 39000, 47, 15163.1, 7408.63, 4596.71, 0.59278 +0.6, 39000, 44, 14050, 7157.14, 4034.63, 0.585338 +0.6, 39000, 41, 12926.3, 6895.35, 3492.21, 0.579044 +0.6, 39000, 38, 11795.7, 6625.78, 2962.17, 0.572968 +0.6, 39000, 35, 10646.3, 6338.25, 2463.1, 0.571748 +0.6, 39000, 32, 9479.15, 6032.76, 1995.78, 0.579092 +0.6, 39000, 29, 8288.59, 5703.75, 1557.43, 0.602524 +0.6, 39000, 26, 7036.79, 5313.57, 1146.64, 0.665405 +0.6, 39000, 21, 4934.19, 4503.38, 594.148, 1.37915 +0.7, 39000, 50, 18473.4, 9582.01, 5745.22, 0.646157 +0.7, 39000, 47, 17298.2, 9296.01, 5084.86, 0.63543 +0.7, 39000, 44, 16107.4, 8994.32, 4468.66, 0.628233 +0.7, 39000, 41, 14910.3, 8686.59, 3873.36, 0.622359 +0.7, 39000, 38, 13707.1, 8372.04, 3290.98, 0.61686 +0.7, 39000, 35, 12483.5, 8037.82, 2740.17, 0.616373 +0.7, 39000, 32, 11239.5, 7683.11, 2223.52, 0.625211 +0.7, 39000, 29, 9972.6, 7305.19, 1737.2, 0.651266 +0.7, 39000, 26, 8662.23, 6883.95, 1276.7, 0.717943 +0.7, 39000, 21, 6446.01, 6001.45, 670.743, 1.50875 +0.75, 39000, 50, 19766.9, 10678.8, 6068.1, 0.667701 +0.75, 39000, 47, 18540.6, 10361.4, 5372.44, 0.656836 +0.75, 39000, 44, 17296.5, 10026.2, 4722.34, 0.649535 +0.75, 39000, 41, 16045.8, 9684.48, 4094.43, 0.643644 +0.75, 39000, 38, 14794.5, 9341.4, 3480.42, 0.638248 +0.75, 39000, 35, 13526.2, 8982.2, 2898.58, 0.637895 +0.75, 39000, 32, 12236.3, 8601.19, 2352.36, 0.647127 +0.75, 39000, 29, 10922.3, 8195.92, 1837.7, 0.674036 +0.75, 39000, 26, 9572.83, 7755.23, 1350, 0.742735 +0.75, 39000, 21, 7288.97, 6834.57, 714.121, 1.57155 +0.8, 39000, 50, 21198, 11874, 6429.19, 0.689528 +0.8, 39000, 47, 19913.8, 11522, 5693.01, 0.678408 +0.8, 39000, 44, 18609.1, 11150, 5004.47, 0.67092 +0.8, 39000, 41, 17297, 10770.5, 4339.18, 0.664853 +0.8, 39000, 38, 15984.2, 10389.5, 3688.43, 0.659273 +0.8, 39000, 35, 14656.3, 9994.34, 3071.77, 0.658897 +0.8, 39000, 32, 13313.7, 9584.24, 2492.36, 0.668286 +0.8, 39000, 29, 11947.1, 9149.87, 1945.97, 0.695682 +0.8, 39000, 26, 10548, 8683.19, 1430.95, 0.767342 +0.8, 39000, 21, 8190.5, 7724.31, 760.273, 1.63079 +0.85, 39000, 50, 22776.9, 13178.4, 6831.86, 0.711759 +0.85, 39000, 47, 21427.2, 12788.4, 6050.07, 0.700335 +0.85, 39000, 44, 20054.6, 12375.9, 5317.72, 0.692527 +0.85, 39000, 41, 18673.5, 11954.8, 4610.27, 0.686188 +0.85, 39000, 38, 17291.5, 11532.1, 3917.84, 0.680249 +0.85, 39000, 35, 15892.6, 11093.4, 3261.28, 0.679541 +0.85, 39000, 32, 14478.4, 10639.1, 2644.13, 0.688709 +0.85, 39000, 29, 13048.3, 10168.7, 2062.72, 0.716329 +0.85, 39000, 26, 11591.2, 9671.47, 1515.86, 0.789631 +0.85, 39000, 21, 9153.9, 8673.97, 804.814, 1.67696 +0.9, 39000, 50, 24515.6, 14604, 7280.33, 0.734532 +0.9, 39000, 47, 23092.9, 14172.5, 6447.04, 0.722732 +0.9, 39000, 44, 21644.4, 13715.3, 5665.61, 0.714534 +0.9, 39000, 41, 20186.2, 13248.5, 4910.43, 0.707788 +0.9, 39000, 38, 18727.1, 12779.9, 4171.32, 0.701389 +0.9, 39000, 35, 17248.8, 12293.1, 3469.88, 0.700175 +0.9, 39000, 32, 15753.1, 11788.7, 2810.11, 0.708831 +0.9, 39000, 29, 14239.3, 11265.8, 2188.44, 0.735991 +0.9, 39000, 26, 12704.3, 10722, 1604.97, 0.809645 +0.9, 39000, 21, 10180.1, 9684.56, 847.502, 1.71014 +0.7, 43000, 50, 15244.9, 7905.28, 4755.01, 0.647856 +0.7, 43000, 47, 14274.5, 7668.89, 4210.44, 0.637402 +0.7, 43000, 44, 13291.4, 7419.82, 3701.44, 0.630396 +0.7, 43000, 41, 12303.3, 7165.8, 3209.77, 0.62477 +0.7, 43000, 38, 11310, 6906.06, 2728.9, 0.619649 +0.7, 43000, 35, 10299.7, 6629.95, 2274.38, 0.619764 +0.7, 43000, 32, 9272.51, 6336.76, 1848.37, 0.629609 +0.7, 43000, 29, 8226.51, 6024.62, 1446.77, 0.657061 +0.7, 43000, 26, 7144.26, 5676.34, 1066.63, 0.726629 +0.7, 43000, 21, 5312.51, 4945.53, 567.524, 1.54646 +0.75, 43000, 50, 16312.2, 8810.25, 5021.42, 0.66935 +0.75, 43000, 47, 15299.6, 8547.89, 4447.59, 0.658735 +0.75, 43000, 44, 14272.6, 8271.12, 3910.78, 0.651637 +0.75, 43000, 41, 13240.2, 7989.05, 3392.17, 0.645989 +0.75, 43000, 38, 12207.1, 7705.74, 2885.19, 0.640956 +0.75, 43000, 35, 11159.9, 7408.97, 2405.05, 0.64119 +0.75, 43000, 32, 10094.7, 7094.04, 1954.61, 0.651394 +0.75, 43000, 29, 9009.86, 6759.27, 1529.63, 0.67966 +0.75, 43000, 26, 7895.58, 6395.2, 1126.72, 0.750954 +0.75, 43000, 21, 6007.87, 5632.78, 602.735, 1.60688 +0.8, 43000, 50, 17493, 9796.33, 5319.42, 0.691131 +0.8, 43000, 47, 16432.7, 9505.68, 4711.69, 0.680191 +0.8, 43000, 44, 15355.7, 9198.3, 4143.59, 0.672948 +0.8, 43000, 41, 14272.4, 8884.99, 3594.12, 0.66713 +0.8, 43000, 38, 13188.6, 8570.38, 3056.82, 0.661901 +0.8, 43000, 35, 12092.2, 8243.91, 2547.91, 0.662085 +0.8, 43000, 32, 10983.5, 7904.9, 2070.06, 0.672414 +0.8, 43000, 29, 9855.1, 7546.08, 1618.99, 0.701162 +0.8, 43000, 26, 8699.97, 7160.63, 1193.37, 0.775253 +0.8, 43000, 21, 6751.37, 6366.54, 640.55, 1.66448 +0.85, 43000, 50, 18795.8, 10872.5, 5651.78, 0.713312 +0.85, 43000, 47, 17681.5, 10550.6, 5006.32, 0.702055 +0.85, 43000, 44, 16548.3, 10209.7, 4402.05, 0.69449 +0.85, 43000, 41, 15408.2, 9862.12, 3817.82, 0.688385 +0.85, 43000, 38, 14267.3, 9513.05, 3246.11, 0.682786 +0.85, 43000, 35, 13112.2, 9150.58, 2704.26, 0.682616 +0.85, 43000, 32, 11944.3, 8775.09, 2195.24, 0.692682 +0.85, 43000, 29, 10763.4, 8386.44, 1715.16, 0.721569 +0.85, 43000, 26, 9560.52, 7975.87, 1263.34, 0.797234 +0.85, 43000, 21, 7545.89, 7149.73, 677.138, 1.70923 +0.9, 43000, 50, 20230.2, 12048.8, 6021.6, 0.736009 +0.9, 43000, 47, 19055.7, 11692.4, 5333.92, 0.724392 +0.9, 43000, 44, 17859.8, 11314.8, 4689.04, 0.716427 +0.9, 43000, 41, 16656.1, 10929.4, 4065.39, 0.7099 +0.9, 43000, 38, 15451.5, 10542.4, 3455.17, 0.70383 +0.9, 43000, 35, 14230.9, 10140.3, 2876.26, 0.703126 +0.9, 43000, 32, 12995.8, 9723.33, 2332.1, 0.71265 +0.9, 43000, 29, 11745.8, 9291.37, 1818.79, 0.741025 +0.9, 43000, 26, 10478.6, 8842.36, 1336.74, 0.816939 +0.9, 43000, 21, 8392.24, 7983.17, 712.209, 1.74104 diff --git a/c5.csv b/c5.csv index 42aa03315..1447bf4b0 100644 --- a/c5.csv +++ b/c5.csv @@ -10,22 +10,24 @@ aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm #aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless #aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:mass_per_passenger,180.0,lbm -aircraft:crew_and_payload:cargo_mass,281000,lbm -#misc_cargo + +#aircraft:crew_and_payload:cargo_mass,281000,lbm +#aircraft:crew_and_payload:num_passengers,82,unitless + + #aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:num_flight_crew,7,unitless -aircraft:crew_and_payload:num_passengers,82,unitless #aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless -aircraft:crew_and_payload:wing_cargo,0.0,lbm -aircraft:design:base_area,0.0,ft**2 +#aircraft:crew_and_payload:wing_cargo,0.0,lbm +#aircraft:design:base_area,0.0,ft**2 #aircraft:design:empty_mass_margin_scaler,1.0,unitless -aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless +#aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless #aircraft:design:touchdown_mass,498554,lbm aircraft:design:reserve_fuel_additional,0,lbm -aircraft:design:subsonic_drag_coeff_factor,1.0,unitless -aircraft:design:supersonic_drag_coeff_factor,1.0,unitless +#aircraft:design:subsonic_drag_coeff_factor,1.0,unitless +#aircraft:design:supersonic_drag_coeff_factor,1.0,unitless aircraft:design:use_alt_mass,False,unitless -aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless +#aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless #aircraft:electrical:mass_scaler,1.0,unitless aircraft:engine:data_file,models/engines/CF6.deck,unitless diff --git a/c5_ferry_phase_info.py b/c5_ferry_phase_info.py index 3e84cf09c..c2b5ea55c 100644 --- a/c5_ferry_phase_info.py +++ b/c5_ferry_phase_info.py @@ -11,11 +11,11 @@ "order": 3, "solve_for_distance": False, "initial_mach": (0.3, "unitless"), - "final_mach": (0.77, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "final_mach": (0.75, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.77), "unitless"), "initial_altitude": (0.0, "ft"), - "final_altitude": (32000.0, "ft"), - "altitude_bounds": ((0.0, 32500.0), "ft"), + "final_altitude": (28000.0, "ft"), + "altitude_bounds": ((0.0, 28500.0), "ft"), "throttle_enforcement": "path_constraint", "fix_initial": True, "constrain_final": False, @@ -35,12 +35,12 @@ "num_segments": 3, "order": 3, "solve_for_distance": False, - "initial_mach": (0.77, "unitless"), - "final_mach": (0.77, "unitless"), - "mach_bounds": ((0.75, 0.79), "unitless"), - "initial_altitude": (32000.0, "ft"), - "final_altitude": (32000.0, "ft"), - "altitude_bounds": ((31500.0, 32500.0), "ft"), + "initial_mach": (0.75, "unitless"), + "final_mach": (0.75, "unitless"), + "mach_bounds": ((0.73, 0.77), "unitless"), + "initial_altitude": (28000.0, "ft"), + "final_altitude": (28000.0, "ft"), + "altitude_bounds": ((27500.0, 28500.0), "ft"), "throttle_enforcement": "boundary_constraint", "fix_initial": False, "constrain_final": False, @@ -60,12 +60,12 @@ "num_segments": 3, "order": 3, "solve_for_distance": False, - "initial_mach": (0.77, "unitless"), + "initial_mach": (0.75, "unitless"), "final_mach": (0.3, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), - "initial_altitude": (32000.0, "ft"), + "mach_bounds": ((0.27999999999999997, 0.77), "unitless"), + "initial_altitude": (28000.0, "ft"), "final_altitude": (0.0, "ft"), - "altitude_bounds": ((0.0, 32500.0), "ft"), + "altitude_bounds": ((0.0, 28500.0), "ft"), "throttle_enforcement": "path_constraint", "fix_initial": False, "constrain_final": True, @@ -78,6 +78,6 @@ "post_mission": { "include_landing": False, "constrain_range": True, - "target_range": (7001.03, "nmi"), + "target_range": (6821.57, "nmi"), }, } diff --git a/singlemission.py b/singlemission.py index f10979840..e17b0397a 100644 --- a/singlemission.py +++ b/singlemission.py @@ -35,3 +35,30 @@ # remove all plots and extras prob.run_aviary_problem(record_filename='c5_ferry.db') # prob.get_val() # look at final fuel burn + +""" +Ferry mission phase info: +Times (min): 0, 30, 810, 835 + Alt (ft): 0, 32000, 32000, 0 + Mach: 0.3, 0.77, 0.77, 0.3 +Notes: 32k in 30 mins too fast for aviary, + +Hard to find multiple payload/range values for FwFm (737), so use C-5 instead +Based on: + https://en.wikipedia.org/wiki/Lockheed_C-5_Galaxy#Specifications_(C-5M), + https://www.af.mil/About-Us/Fact-Sheets/Display/Article/1529718/c-5-abc-galaxy-and-c-5m-super-galaxy/ + +MTOW: 840,000 lb +Max Payload: 281,000 lb +Max Fuel: 341,446 lb +Empty Weight: 380,000 lb -> leaves 460,000 lb for fuel+payload (max fuel + max payload = 622,446 lb) + +Payload/range: + 281,000 lb payload -> 2,150 nmi range (AF.mil) [max payload case] + 120,000 lb payload -> 4,800 nmi range (AF.mil) [intermediate case] + 0 lb payload -> 7,000 nmi range (AF.mil) [ferry case] + +Flight characteristics: + Cruise at M0.77 at 33k ft + Max rate of climb: 2100 ft/min +""" From 4c96f15a69e840daf08f53bb473ccffb6d663439 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 24 Jul 2024 10:24:23 -0400 Subject: [PATCH 006/113] checkpt --- c5.csv | 4 ++-- c5_ferry_phase_info.py | 18 +++++++++--------- outputted_phase_info.py | 40 ++++++++++++++++++++-------------------- singlemission.py | 2 +- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/c5.csv b/c5.csv index 1447bf4b0..910a4e83f 100644 --- a/c5.csv +++ b/c5.csv @@ -145,10 +145,10 @@ aircraft:wing:detailed_wing,False,unitless mission:constraints:max_mach,0.77,unitless mission:design:cruise_altitude,34000,ft mission:design:gross_mass,840000,lbm -mission:design:range,2300,NM +mission:design:range,7000,NM mission:design:thrust_takeoff_per_eng,51250,lbf mission:landing:lift_coefficient_max,3.0,unitless -mission:summary:cruise_mach,0.77,unitless +mission:design:mach,0.77,unitless #mission:summary:fuel_flow_scaler,1.0,unitless mission:takeoff:fuel_simple,6.32,lbm mission:takeoff:lift_coefficient_max,3.62,unitless diff --git a/c5_ferry_phase_info.py b/c5_ferry_phase_info.py index c2b5ea55c..bf173692e 100644 --- a/c5_ferry_phase_info.py +++ b/c5_ferry_phase_info.py @@ -21,9 +21,9 @@ "constrain_final": False, "fix_duration": False, "initial_bounds": ((0.0, 0.0), "min"), - "duration_bounds": ((15.0, 45.0), "min"), + "duration_bounds": ((25.0, 75.0), "min"), }, - "initial_guesses": {"time": ([0.0, 30.0], "min")}, + "initial_guesses": {"time": ([0.0, 50.0], "min")}, }, "cruise_1": { "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, @@ -45,10 +45,10 @@ "fix_initial": False, "constrain_final": False, "fix_duration": False, - "initial_bounds": ((15.0, 45.0), "min"), - "duration_bounds": ((390.0, 1170.0), "min"), + "initial_bounds": ((25.0, 75.0), "min"), + "duration_bounds": ((115.0, 345.0), "min"), }, - "initial_guesses": {"time": ([30.0, 780.0], "min")}, + "initial_guesses": {"time": ([50.0, 230.0], "min")}, }, "descent_1": { "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, @@ -70,14 +70,14 @@ "fix_initial": False, "constrain_final": True, "fix_duration": False, - "initial_bounds": ((405.0, 1215.0), "min"), - "duration_bounds": ((12.5, 37.5), "min"), + "initial_bounds": ((140.0, 420.0), "min"), + "duration_bounds": ((10.0, 30.0), "min"), }, - "initial_guesses": {"time": ([810.0, 25.0], "min")}, + "initial_guesses": {"time": ([280.0, 20.0], "min")}, }, "post_mission": { "include_landing": False, "constrain_range": True, - "target_range": (6821.57, "nmi"), + "target_range": (2325.25, "nmi"), }, } diff --git a/outputted_phase_info.py b/outputted_phase_info.py index 3e84cf09c..b78f6f884 100644 --- a/outputted_phase_info.py +++ b/outputted_phase_info.py @@ -11,19 +11,19 @@ "order": 3, "solve_for_distance": False, "initial_mach": (0.3, "unitless"), - "final_mach": (0.77, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "final_mach": (0.75, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.77), "unitless"), "initial_altitude": (0.0, "ft"), - "final_altitude": (32000.0, "ft"), - "altitude_bounds": ((0.0, 32500.0), "ft"), + "final_altitude": (28000.0, "ft"), + "altitude_bounds": ((0.0, 28500.0), "ft"), "throttle_enforcement": "path_constraint", "fix_initial": True, "constrain_final": False, "fix_duration": False, "initial_bounds": ((0.0, 0.0), "min"), - "duration_bounds": ((15.0, 45.0), "min"), + "duration_bounds": ((25.0, 75.0), "min"), }, - "initial_guesses": {"time": ([0.0, 30.0], "min")}, + "initial_guesses": {"time": ([0.0, 50.0], "min")}, }, "cruise_1": { "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, @@ -35,20 +35,20 @@ "num_segments": 3, "order": 3, "solve_for_distance": False, - "initial_mach": (0.77, "unitless"), - "final_mach": (0.77, "unitless"), - "mach_bounds": ((0.75, 0.79), "unitless"), - "initial_altitude": (32000.0, "ft"), - "final_altitude": (32000.0, "ft"), - "altitude_bounds": ((31500.0, 32500.0), "ft"), + "initial_mach": (0.75, "unitless"), + "final_mach": (0.75, "unitless"), + "mach_bounds": ((0.73, 0.77), "unitless"), + "initial_altitude": (28000.0, "ft"), + "final_altitude": (28000.0, "ft"), + "altitude_bounds": ((27500.0, 28500.0), "ft"), "throttle_enforcement": "boundary_constraint", "fix_initial": False, "constrain_final": False, "fix_duration": False, - "initial_bounds": ((15.0, 45.0), "min"), - "duration_bounds": ((390.0, 1170.0), "min"), + "initial_bounds": ((25.0, 75.0), "min"), + "duration_bounds": ((380.0, 1140.0), "min"), }, - "initial_guesses": {"time": ([30.0, 780.0], "min")}, + "initial_guesses": {"time": ([50.0, 760.0], "min")}, }, "descent_1": { "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, @@ -60,12 +60,12 @@ "num_segments": 3, "order": 3, "solve_for_distance": False, - "initial_mach": (0.77, "unitless"), + "initial_mach": (0.75, "unitless"), "final_mach": (0.3, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), - "initial_altitude": (32000.0, "ft"), + "mach_bounds": ((0.27999999999999997, 0.77), "unitless"), + "initial_altitude": (28000.0, "ft"), "final_altitude": (0.0, "ft"), - "altitude_bounds": ((0.0, 32500.0), "ft"), + "altitude_bounds": ((0.0, 28500.0), "ft"), "throttle_enforcement": "path_constraint", "fix_initial": False, "constrain_final": True, @@ -78,6 +78,6 @@ "post_mission": { "include_landing": False, "constrain_range": True, - "target_range": (7001.03, "nmi"), + "target_range": (6771.56, "nmi"), }, } diff --git a/singlemission.py b/singlemission.py index e17b0397a..4719db68c 100644 --- a/singlemission.py +++ b/singlemission.py @@ -20,7 +20,7 @@ # Link phases and variables prob.link_phases() - prob.add_driver("SLSQP", max_iter=50) + prob.add_driver("SLSQP", max_iter=100) prob.add_design_variables() From 6ab89ad360f3ee686bb851c6bd8f9a6da5f216c3 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 24 Jul 2024 10:31:49 -0400 Subject: [PATCH 007/113] checkpt --- c5_ferry_phase_info.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/c5_ferry_phase_info.py b/c5_ferry_phase_info.py index bf173692e..6237e3a41 100644 --- a/c5_ferry_phase_info.py +++ b/c5_ferry_phase_info.py @@ -14,8 +14,8 @@ "final_mach": (0.75, "unitless"), "mach_bounds": ((0.27999999999999997, 0.77), "unitless"), "initial_altitude": (0.0, "ft"), - "final_altitude": (28000.0, "ft"), - "altitude_bounds": ((0.0, 28500.0), "ft"), + "final_altitude": (26000.0, "ft"), + "altitude_bounds": ((0.0, 26500.0), "ft"), "throttle_enforcement": "path_constraint", "fix_initial": True, "constrain_final": False, @@ -25,7 +25,7 @@ }, "initial_guesses": {"time": ([0.0, 50.0], "min")}, }, - "cruise_1": { + "climb_2": { "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, "user_options": { "optimize_mach": False, @@ -38,17 +38,17 @@ "initial_mach": (0.75, "unitless"), "final_mach": (0.75, "unitless"), "mach_bounds": ((0.73, 0.77), "unitless"), - "initial_altitude": (28000.0, "ft"), + "initial_altitude": (26000.0, "ft"), "final_altitude": (28000.0, "ft"), - "altitude_bounds": ((27500.0, 28500.0), "ft"), + "altitude_bounds": ((25500.0, 28500.0), "ft"), "throttle_enforcement": "boundary_constraint", "fix_initial": False, "constrain_final": False, "fix_duration": False, "initial_bounds": ((25.0, 75.0), "min"), - "duration_bounds": ((115.0, 345.0), "min"), + "duration_bounds": ((225.0, 675.0), "min"), }, - "initial_guesses": {"time": ([50.0, 230.0], "min")}, + "initial_guesses": {"time": ([50.0, 450.0], "min")}, }, "descent_1": { "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, @@ -70,14 +70,14 @@ "fix_initial": False, "constrain_final": True, "fix_duration": False, - "initial_bounds": ((140.0, 420.0), "min"), + "initial_bounds": ((250.0, 750.0), "min"), "duration_bounds": ((10.0, 30.0), "min"), }, - "initial_guesses": {"time": ([280.0, 20.0], "min")}, + "initial_guesses": {"time": ([500.0, 20.0], "min")}, }, "post_mission": { "include_landing": False, "constrain_range": True, - "target_range": (2325.25, "nmi"), + "target_range": (4158.78, "nmi"), }, } From 9b64e703b7cadc7986870d96bcbab38bbebc250c Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 24 Jul 2024 13:15:16 -0400 Subject: [PATCH 008/113] added c5 mission variants csvs and phaseinfos --- c5.csv | 3 +- c5_ferry.csv | 167 ++++++++++++++++++++++++++++++++++ c5_ferry_phase_info.py | 40 ++++---- c5_intermediate.csv | 167 ++++++++++++++++++++++++++++++++++ c5_intermediate_phase_info.py | 83 +++++++++++++++++ c5_maxpayload.csv | 167 ++++++++++++++++++++++++++++++++++ c5_maxpayload_phase_info.py | 83 +++++++++++++++++ multimission.py | 55 +++++++---- outputted_phase_info.py | 77 +--------------- singlemission.py | 72 +++++++++++++-- 10 files changed, 793 insertions(+), 121 deletions(-) create mode 100644 c5_ferry.csv create mode 100644 c5_intermediate.csv create mode 100644 c5_intermediate_phase_info.py create mode 100644 c5_maxpayload.csv create mode 100644 c5_maxpayload_phase_info.py diff --git a/c5.csv b/c5.csv index 910a4e83f..186bb7e4f 100644 --- a/c5.csv +++ b/c5.csv @@ -11,10 +11,9 @@ aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm #aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:mass_per_passenger,180.0,lbm -#aircraft:crew_and_payload:cargo_mass,281000,lbm +aircraft:crew_and_payload:cargo_mass,281000,lbm #aircraft:crew_and_payload:num_passengers,82,unitless - #aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:num_flight_crew,7,unitless #aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless diff --git a/c5_ferry.csv b/c5_ferry.csv new file mode 100644 index 000000000..6540463d5 --- /dev/null +++ b/c5_ferry.csv @@ -0,0 +1,167 @@ +# author: Chris Psenica +#aircraft:air_conditioning:mass_scaler,1.0,unitless +#aircraft:anti_icing:mass_scaler,1.0,unitless +#aircraft:apu:mass_scaler,1.0,unitless +#aircraft:avionics:mass_scaler,1.0,unitless +#aircraft:canard:area,0.0,ft**2 +#aircraft:canard:aspect_ratio,0.0,unitless +#aircraft:canard:thickness_to_chord,0.0,unitless +aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm +#aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless +#aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:mass_per_passenger,180.0,lbm + +aircraft:crew_and_payload:cargo_mass,0,lbm +#aircraft:crew_and_payload:num_passengers,82,unitless + +#aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:num_flight_crew,7,unitless +#aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless +#aircraft:crew_and_payload:wing_cargo,0.0,lbm +#aircraft:design:base_area,0.0,ft**2 +#aircraft:design:empty_mass_margin_scaler,1.0,unitless +#aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless +#aircraft:design:touchdown_mass,498554,lbm +aircraft:design:reserve_fuel_additional,0,lbm +#aircraft:design:subsonic_drag_coeff_factor,1.0,unitless +#aircraft:design:supersonic_drag_coeff_factor,1.0,unitless +aircraft:design:use_alt_mass,False,unitless +#aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless +#aircraft:electrical:mass_scaler,1.0,unitless + +aircraft:engine:data_file,models/engines/CF6.deck,unitless + +aircraft:engine:additional_mass_fraction,0.,unitless +aircraft:engine:constant_fuel_consumption,0.,lbm/h + +aircraft:engine:flight_idle_thrust_fraction,0.0,unitless +aircraft:engine:flight_idle_max_fraction,1.0,unitless +aircraft:engine:flight_idle_min_fraction,0.08,unitless +#aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless +#aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless +aircraft:engine:generate_flight_idle,False,unitless +aircraft:engine:geopotential_alt,False,unitless +aircraft:engine:ignore_negative_thrust,False,unitless +aircraft:engine:interpolation_method,slinear,unitless +aircraft:engine:mass_scaler,1.0,unitless +aircraft:engine:mass,8176,lbm +aircraft:engine:reference_mass,8176,lbm +aircraft:engine:reference_sls_thrust,51250.,lbf +aircraft:engine:scale_mass,True,unitless +aircraft:engine:scale_performance,True,unitless +aircraft:engine:scaled_sls_thrust,51250,lbf +#aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless +#aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless +#aircraft:engine:thrust_reversers_mass_scaler,1.0,unitless +aircraft:engine:num_fuselage_engines,0,unitless +aircraft:engine:num_engines,4,unitless +aircraft:engine:num_wing_engines,4,unitless +aircraft:engine:wing_locations,[0.3561541339,0.555929667],unitless +#aircraft:fins:area,0.0,ft**2 +#aircraft:fins:mass_scaler,1.0,unitless +#aircraft:fins:mass,0.0,lbm +#aircraft:fins:num_fins,0,unitless +#aircraft:fins:taper_ratio,10.0,unitless +aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm +#aircraft:fuel:density_ratio,1.0,unitless +#aircraft:fuel:fuel_system_mass_scaler,1.0,unitless +aircraft:fuel:fuselage_fuel_capacity,0.0,lbm +aircraft:fuel:num_tanks,12,unitless +aircraft:fuel:total_capacity,341446,lbm +#aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless +#aircraft:furnishings:mass_scaler,1.0,unitless +aircraft:fuselage:length,230.58,ft +#aircraft:fuselage:mass_scaler,1.0,unitless +aircraft:fuselage:max_height,26.83,ft +aircraft:fuselage:max_width,23.9,ft +aircraft:fuselage:military_cargo_floor,True,unitless +aircraft:fuselage:num_fuselages,1,unitless +aircraft:fuselage:passenger_compartment_length,143.75,ft +aircraft:fuselage:planform_area,4462.78,ft**2 +#aircraft:fuselage:wetted_area_scaler,1.0,unitless +aircraft:horizontal_tail:area,965.8,ft**2 +aircraft:horizontal_tail:aspect_ratio,4.2,unitless +#aircraft:horizontal_tail:mass_scaler,1.0,unitless +aircraft:horizontal_tail:taper_ratio,0.43,unitless +aircraft:horizontal_tail:thickness_to_chord,0.16,unitless +aircraft:horizontal_tail:vertical_tail_fraction,1.0,unitless +#aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless +#aircraft:hydraulics:mass_scaler,1.0,unitless +#aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 +#aircraft:instruments:mass_scaler,1.0,unitless +#aircraft:landing_gear:carrier_based,False,unitless +#aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless +#aircraft:landing_gear:main_gear_oleo_length,45,inch +#aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless +#aircraft:landing_gear:nose_gear_oleo_length,45,inch +aircraft:nacelle:avg_diameter,9.15,ft +aircraft:nacelle:avg_length,20.56,ft +#aircraft:nacelle:mass_scaler,1.0,unitless +#aircraft:nacelle:wetted_area_scaler,1.0,unitless +#aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 +#aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless +#aircraft:propulsion:misc_mass_scaler,1.0,unitless +aircraft:vertical_tail:area,537.9,ft**2 +aircraft:vertical_tail:aspect_ratio,0.958,unitless +#aircraft:vertical_tail:mass_scaler,1.0,unitless +aircraft:vertical_tail:num_tails,1,unitless +aircraft:vertical_tail:taper_ratio,0.846,unitless +aircraft:vertical_tail:thickness_to_chord,0.157,unitless +#aircraft:vertical_tail:wetted_area_scaler,1.0,unitless +aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless +aircraft:wing:airfoil_technology,1.0,unitless +aircraft:wing:area,6200,ft**2 +aircraft:wing:aspect_ratio,7.75,unitless +#aircraft:wing:bending_mass_scaler,1.0,unitless +#aircraft:wing:composite_fraction,0.1,unitless +aircraft:wing:control_surface_area,2323.7,ft**2 +aircraft:wing:control_surface_area_ratio,0.37479,unitless +aircraft:wing:load_distribution_control,2.0,unitless +aircraft:wing:load_fraction,1.0,unitless +#aircraft:wing:mass_scaler,1.0,unitless +aircraft:wing:max_camber_at_70_semispan,0.0,unitless +#aircraft:wing:misc_mass_scaler,1.0,unitless +#aircraft:wing:shear_control_mass_scaler,1.0,unitless +aircraft:wing:span_efficiency_reduction,False,unitless +aircraft:wing:span,222.75,ft +#aircraft:wing:strut_bracing_factor,0.0,unitless +#aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless +aircraft:wing:sweep,20.0,deg +aircraft:wing:taper_ratio,0.419,unitless +aircraft:wing:thickness_to_chord,0.1284,unitless +aircraft:wing:ultimate_load_factor,3.75,unitless +aircraft:wing:var_sweep_mass_penalty,0.0,unitless +#aircraft:wing:wetted_area_scaler,1.0,unitless +aircraft:wing:num_integration_stations,50,unitless +aircraft:wing:thickness_to_chord_dist,0.1239,0.108,0.013,unitless +aircraft:wing:load_path_sweep_dist,0.0,0.0,deg +aircraft:wing:input_station_dist,0.0,0.3298,0.884,unitless +aircraft:wing:chord_per_semispan,0.362,0.2667,0.0456,unitless +aircraft:wing:glove_and_bat,0.0,ft**2 +aircraft:wing:detailed_wing,False,unitless + + +mission:constraints:max_mach,0.77,unitless +mission:design:cruise_altitude,34000,ft +mission:design:gross_mass,840000,lbm +mission:design:range,7000.0,NM +mission:design:thrust_takeoff_per_eng,51250,lbf +mission:landing:lift_coefficient_max,3.0,unitless +mission:design:mach,0.77,unitless +#mission:summary:fuel_flow_scaler,1.0,unitless +mission:takeoff:fuel_simple,6.32,lbm +mission:takeoff:lift_coefficient_max,3.62,unitless +mission:takeoff:lift_over_drag,19.5,unitless +settings:equations_of_motion,height_energy +settings:mass_method,FLOPS + + +### missions definition +# mission_name: payload +# times: 0, 50, 280, 300 +# altitudes: 0, 30000, 30000, 0 +# machs: 0.30, 0.77, 0.77, 0.30 +# optimize_altitudes: F,F,F +# optimize_machs: F,F,F +# takeoff: F +# landing: F diff --git a/c5_ferry_phase_info.py b/c5_ferry_phase_info.py index 6237e3a41..6a472ed2f 100644 --- a/c5_ferry_phase_info.py +++ b/c5_ferry_phase_info.py @@ -11,11 +11,11 @@ "order": 3, "solve_for_distance": False, "initial_mach": (0.3, "unitless"), - "final_mach": (0.75, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.77), "unitless"), + "final_mach": (0.77, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), "initial_altitude": (0.0, "ft"), - "final_altitude": (26000.0, "ft"), - "altitude_bounds": ((0.0, 26500.0), "ft"), + "final_altitude": (29500.0, "ft"), + "altitude_bounds": ((0.0, 30000.0), "ft"), "throttle_enforcement": "path_constraint", "fix_initial": True, "constrain_final": False, @@ -35,20 +35,20 @@ "num_segments": 3, "order": 3, "solve_for_distance": False, - "initial_mach": (0.75, "unitless"), - "final_mach": (0.75, "unitless"), - "mach_bounds": ((0.73, 0.77), "unitless"), - "initial_altitude": (26000.0, "ft"), - "final_altitude": (28000.0, "ft"), - "altitude_bounds": ((25500.0, 28500.0), "ft"), + "initial_mach": (0.77, "unitless"), + "final_mach": (0.77, "unitless"), + "mach_bounds": ((0.75, 0.79), "unitless"), + "initial_altitude": (29500.0, "ft"), + "final_altitude": (32000.0, "ft"), + "altitude_bounds": ((29000.0, 32500.0), "ft"), "throttle_enforcement": "boundary_constraint", "fix_initial": False, "constrain_final": False, "fix_duration": False, "initial_bounds": ((25.0, 75.0), "min"), - "duration_bounds": ((225.0, 675.0), "min"), + "duration_bounds": ((381.0, 1143.0), "min"), }, - "initial_guesses": {"time": ([50.0, 450.0], "min")}, + "initial_guesses": {"time": ([50.0, 762.0], "min")}, }, "descent_1": { "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, @@ -60,24 +60,24 @@ "num_segments": 3, "order": 3, "solve_for_distance": False, - "initial_mach": (0.75, "unitless"), + "initial_mach": (0.77, "unitless"), "final_mach": (0.3, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.77), "unitless"), - "initial_altitude": (28000.0, "ft"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (32000.0, "ft"), "final_altitude": (0.0, "ft"), - "altitude_bounds": ((0.0, 28500.0), "ft"), + "altitude_bounds": ((0.0, 32500.0), "ft"), "throttle_enforcement": "path_constraint", "fix_initial": False, "constrain_final": True, "fix_duration": False, - "initial_bounds": ((250.0, 750.0), "min"), - "duration_bounds": ((10.0, 30.0), "min"), + "initial_bounds": ((406.0, 1218.0), "min"), + "duration_bounds": ((15.5, 46.5), "min"), }, - "initial_guesses": {"time": ([500.0, 20.0], "min")}, + "initial_guesses": {"time": ([812.0, 31.0], "min")}, }, "post_mission": { "include_landing": False, "constrain_range": True, - "target_range": (4158.78, "nmi"), + "target_range": (7001.59, "nmi"), }, } diff --git a/c5_intermediate.csv b/c5_intermediate.csv new file mode 100644 index 000000000..bb4565239 --- /dev/null +++ b/c5_intermediate.csv @@ -0,0 +1,167 @@ +# author: Chris Psenica +#aircraft:air_conditioning:mass_scaler,1.0,unitless +#aircraft:anti_icing:mass_scaler,1.0,unitless +#aircraft:apu:mass_scaler,1.0,unitless +#aircraft:avionics:mass_scaler,1.0,unitless +#aircraft:canard:area,0.0,ft**2 +#aircraft:canard:aspect_ratio,0.0,unitless +#aircraft:canard:thickness_to_chord,0.0,unitless +aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm +#aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless +#aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:mass_per_passenger,180.0,lbm + +aircraft:crew_and_payload:cargo_mass,120000.0,lbm +#aircraft:crew_and_payload:num_passengers,82,unitless + +#aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:num_flight_crew,7,unitless +#aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless +#aircraft:crew_and_payload:wing_cargo,0.0,lbm +#aircraft:design:base_area,0.0,ft**2 +#aircraft:design:empty_mass_margin_scaler,1.0,unitless +#aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless +#aircraft:design:touchdown_mass,498554,lbm +aircraft:design:reserve_fuel_additional,0,lbm +#aircraft:design:subsonic_drag_coeff_factor,1.0,unitless +#aircraft:design:supersonic_drag_coeff_factor,1.0,unitless +aircraft:design:use_alt_mass,False,unitless +#aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless +#aircraft:electrical:mass_scaler,1.0,unitless + +aircraft:engine:data_file,models/engines/CF6.deck,unitless + +aircraft:engine:additional_mass_fraction,0.,unitless +aircraft:engine:constant_fuel_consumption,0.,lbm/h + +aircraft:engine:flight_idle_thrust_fraction,0.0,unitless +aircraft:engine:flight_idle_max_fraction,1.0,unitless +aircraft:engine:flight_idle_min_fraction,0.08,unitless +#aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless +#aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless +aircraft:engine:generate_flight_idle,False,unitless +aircraft:engine:geopotential_alt,False,unitless +aircraft:engine:ignore_negative_thrust,False,unitless +aircraft:engine:interpolation_method,slinear,unitless +aircraft:engine:mass_scaler,1.0,unitless +aircraft:engine:mass,8176,lbm +aircraft:engine:reference_mass,8176,lbm +aircraft:engine:reference_sls_thrust,51250.,lbf +aircraft:engine:scale_mass,True,unitless +aircraft:engine:scale_performance,True,unitless +aircraft:engine:scaled_sls_thrust,51250,lbf +#aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless +#aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless +#aircraft:engine:thrust_reversers_mass_scaler,1.0,unitless +aircraft:engine:num_fuselage_engines,0,unitless +aircraft:engine:num_engines,4,unitless +aircraft:engine:num_wing_engines,4,unitless +aircraft:engine:wing_locations,[0.3561541339,0.555929667],unitless +#aircraft:fins:area,0.0,ft**2 +#aircraft:fins:mass_scaler,1.0,unitless +#aircraft:fins:mass,0.0,lbm +#aircraft:fins:num_fins,0,unitless +#aircraft:fins:taper_ratio,10.0,unitless +aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm +#aircraft:fuel:density_ratio,1.0,unitless +#aircraft:fuel:fuel_system_mass_scaler,1.0,unitless +aircraft:fuel:fuselage_fuel_capacity,0.0,lbm +aircraft:fuel:num_tanks,12,unitless +aircraft:fuel:total_capacity,341446,lbm +#aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless +#aircraft:furnishings:mass_scaler,1.0,unitless +aircraft:fuselage:length,230.58,ft +#aircraft:fuselage:mass_scaler,1.0,unitless +aircraft:fuselage:max_height,26.83,ft +aircraft:fuselage:max_width,23.9,ft +aircraft:fuselage:military_cargo_floor,True,unitless +aircraft:fuselage:num_fuselages,1,unitless +aircraft:fuselage:passenger_compartment_length,143.75,ft +aircraft:fuselage:planform_area,4462.78,ft**2 +#aircraft:fuselage:wetted_area_scaler,1.0,unitless +aircraft:horizontal_tail:area,965.8,ft**2 +aircraft:horizontal_tail:aspect_ratio,4.2,unitless +#aircraft:horizontal_tail:mass_scaler,1.0,unitless +aircraft:horizontal_tail:taper_ratio,0.43,unitless +aircraft:horizontal_tail:thickness_to_chord,0.16,unitless +aircraft:horizontal_tail:vertical_tail_fraction,1.0,unitless +#aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless +#aircraft:hydraulics:mass_scaler,1.0,unitless +#aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 +#aircraft:instruments:mass_scaler,1.0,unitless +#aircraft:landing_gear:carrier_based,False,unitless +#aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless +#aircraft:landing_gear:main_gear_oleo_length,45,inch +#aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless +#aircraft:landing_gear:nose_gear_oleo_length,45,inch +aircraft:nacelle:avg_diameter,9.15,ft +aircraft:nacelle:avg_length,20.56,ft +#aircraft:nacelle:mass_scaler,1.0,unitless +#aircraft:nacelle:wetted_area_scaler,1.0,unitless +#aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 +#aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless +#aircraft:propulsion:misc_mass_scaler,1.0,unitless +aircraft:vertical_tail:area,537.9,ft**2 +aircraft:vertical_tail:aspect_ratio,0.958,unitless +#aircraft:vertical_tail:mass_scaler,1.0,unitless +aircraft:vertical_tail:num_tails,1,unitless +aircraft:vertical_tail:taper_ratio,0.846,unitless +aircraft:vertical_tail:thickness_to_chord,0.157,unitless +#aircraft:vertical_tail:wetted_area_scaler,1.0,unitless +aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless +aircraft:wing:airfoil_technology,1.0,unitless +aircraft:wing:area,6200,ft**2 +aircraft:wing:aspect_ratio,7.75,unitless +#aircraft:wing:bending_mass_scaler,1.0,unitless +#aircraft:wing:composite_fraction,0.1,unitless +aircraft:wing:control_surface_area,2323.7,ft**2 +aircraft:wing:control_surface_area_ratio,0.37479,unitless +aircraft:wing:load_distribution_control,2.0,unitless +aircraft:wing:load_fraction,1.0,unitless +#aircraft:wing:mass_scaler,1.0,unitless +aircraft:wing:max_camber_at_70_semispan,0.0,unitless +#aircraft:wing:misc_mass_scaler,1.0,unitless +#aircraft:wing:shear_control_mass_scaler,1.0,unitless +aircraft:wing:span_efficiency_reduction,False,unitless +aircraft:wing:span,222.75,ft +#aircraft:wing:strut_bracing_factor,0.0,unitless +#aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless +aircraft:wing:sweep,20.0,deg +aircraft:wing:taper_ratio,0.419,unitless +aircraft:wing:thickness_to_chord,0.1284,unitless +aircraft:wing:ultimate_load_factor,3.75,unitless +aircraft:wing:var_sweep_mass_penalty,0.0,unitless +#aircraft:wing:wetted_area_scaler,1.0,unitless +aircraft:wing:num_integration_stations,50,unitless +aircraft:wing:thickness_to_chord_dist,0.1239,0.108,0.013,unitless +aircraft:wing:load_path_sweep_dist,0.0,0.0,deg +aircraft:wing:input_station_dist,0.0,0.3298,0.884,unitless +aircraft:wing:chord_per_semispan,0.362,0.2667,0.0456,unitless +aircraft:wing:glove_and_bat,0.0,ft**2 +aircraft:wing:detailed_wing,False,unitless + + +mission:constraints:max_mach,0.77,unitless +mission:design:cruise_altitude,34000,ft +mission:design:gross_mass,840000,lbm +mission:design:range,4800.0,NM +mission:design:thrust_takeoff_per_eng,51250,lbf +mission:landing:lift_coefficient_max,3.0,unitless +mission:design:mach,0.77,unitless +#mission:summary:fuel_flow_scaler,1.0,unitless +mission:takeoff:fuel_simple,6.32,lbm +mission:takeoff:lift_coefficient_max,3.62,unitless +mission:takeoff:lift_over_drag,19.5,unitless +settings:equations_of_motion,height_energy +settings:mass_method,FLOPS + + +### missions definition +# mission_name: payload +# times: 0, 50, 280, 300 +# altitudes: 0, 30000, 30000, 0 +# machs: 0.30, 0.77, 0.77, 0.30 +# optimize_altitudes: F,F,F +# optimize_machs: F,F,F +# takeoff: F +# landing: F diff --git a/c5_intermediate_phase_info.py b/c5_intermediate_phase_info.py new file mode 100644 index 000000000..a8b462673 --- /dev/null +++ b/c5_intermediate_phase_info.py @@ -0,0 +1,83 @@ +phase_info = { + "pre_mission": {"include_takeoff": False, "optimize_mass": True}, + "climb_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.3, "unitless"), + "final_mach": (0.77, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (0.0, "ft"), + "final_altitude": (29500.0, "ft"), + "altitude_bounds": ((0.0, 30000.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": True, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((0.0, 0.0), "min"), + "duration_bounds": ((25.0, 75.0), "min"), + }, + "initial_guesses": {"time": ([0.0, 50.0], "min")}, + }, + "climb_2": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.77, "unitless"), + "final_mach": (0.77, "unitless"), + "mach_bounds": ((0.75, 0.79), "unitless"), + "initial_altitude": (29500.0, "ft"), + "final_altitude": (32000.0, "ft"), + "altitude_bounds": ((29000.0, 32500.0), "ft"), + "throttle_enforcement": "boundary_constraint", + "fix_initial": False, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((25.0, 75.0), "min"), + "duration_bounds": ((255.0, 765.0), "min"), + }, + "initial_guesses": {"time": ([50.0, 510.0], "min")}, + }, + "descent_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.77, "unitless"), + "final_mach": (0.3, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (32000.0, "ft"), + "final_altitude": (0.0, "ft"), + "altitude_bounds": ((0.0, 32500.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": False, + "constrain_final": True, + "fix_duration": False, + "initial_bounds": ((280.0, 840.0), "min"), + "duration_bounds": ((15.0, 45.0), "min"), + }, + "initial_guesses": {"time": ([560.0, 30.0], "min")}, + }, + "post_mission": { + "include_landing": False, + "constrain_range": True, + "target_range": (4839.41, "nmi"), + }, +} diff --git a/c5_maxpayload.csv b/c5_maxpayload.csv new file mode 100644 index 000000000..07a6fb381 --- /dev/null +++ b/c5_maxpayload.csv @@ -0,0 +1,167 @@ +# author: Chris Psenica +#aircraft:air_conditioning:mass_scaler,1.0,unitless +#aircraft:anti_icing:mass_scaler,1.0,unitless +#aircraft:apu:mass_scaler,1.0,unitless +#aircraft:avionics:mass_scaler,1.0,unitless +#aircraft:canard:area,0.0,ft**2 +#aircraft:canard:aspect_ratio,0.0,unitless +#aircraft:canard:thickness_to_chord,0.0,unitless +aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm +#aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless +#aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:mass_per_passenger,180.0,lbm + +aircraft:crew_and_payload:cargo_mass,281000.0,lbm +#aircraft:crew_and_payload:num_passengers,82,unitless + +#aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:num_flight_crew,7,unitless +#aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless +#aircraft:crew_and_payload:wing_cargo,0.0,lbm +#aircraft:design:base_area,0.0,ft**2 +#aircraft:design:empty_mass_margin_scaler,1.0,unitless +#aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless +#aircraft:design:touchdown_mass,498554,lbm +aircraft:design:reserve_fuel_additional,0,lbm +#aircraft:design:subsonic_drag_coeff_factor,1.0,unitless +#aircraft:design:supersonic_drag_coeff_factor,1.0,unitless +aircraft:design:use_alt_mass,False,unitless +#aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless +#aircraft:electrical:mass_scaler,1.0,unitless + +aircraft:engine:data_file,models/engines/CF6.deck,unitless + +aircraft:engine:additional_mass_fraction,0.,unitless +aircraft:engine:constant_fuel_consumption,0.,lbm/h + +aircraft:engine:flight_idle_thrust_fraction,0.0,unitless +aircraft:engine:flight_idle_max_fraction,1.0,unitless +aircraft:engine:flight_idle_min_fraction,0.08,unitless +#aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless +#aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless +aircraft:engine:generate_flight_idle,False,unitless +aircraft:engine:geopotential_alt,False,unitless +aircraft:engine:ignore_negative_thrust,False,unitless +aircraft:engine:interpolation_method,slinear,unitless +aircraft:engine:mass_scaler,1.0,unitless +aircraft:engine:mass,8176,lbm +aircraft:engine:reference_mass,8176,lbm +aircraft:engine:reference_sls_thrust,51250.,lbf +aircraft:engine:scale_mass,True,unitless +aircraft:engine:scale_performance,True,unitless +aircraft:engine:scaled_sls_thrust,51250,lbf +#aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless +#aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless +#aircraft:engine:thrust_reversers_mass_scaler,1.0,unitless +aircraft:engine:num_fuselage_engines,0,unitless +aircraft:engine:num_engines,4,unitless +aircraft:engine:num_wing_engines,4,unitless +aircraft:engine:wing_locations,[0.3561541339,0.555929667],unitless +#aircraft:fins:area,0.0,ft**2 +#aircraft:fins:mass_scaler,1.0,unitless +#aircraft:fins:mass,0.0,lbm +#aircraft:fins:num_fins,0,unitless +#aircraft:fins:taper_ratio,10.0,unitless +aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm +#aircraft:fuel:density_ratio,1.0,unitless +#aircraft:fuel:fuel_system_mass_scaler,1.0,unitless +aircraft:fuel:fuselage_fuel_capacity,0.0,lbm +aircraft:fuel:num_tanks,12,unitless +aircraft:fuel:total_capacity,341446,lbm +#aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless +#aircraft:furnishings:mass_scaler,1.0,unitless +aircraft:fuselage:length,230.58,ft +#aircraft:fuselage:mass_scaler,1.0,unitless +aircraft:fuselage:max_height,26.83,ft +aircraft:fuselage:max_width,23.9,ft +aircraft:fuselage:military_cargo_floor,True,unitless +aircraft:fuselage:num_fuselages,1,unitless +aircraft:fuselage:passenger_compartment_length,143.75,ft +aircraft:fuselage:planform_area,4462.78,ft**2 +#aircraft:fuselage:wetted_area_scaler,1.0,unitless +aircraft:horizontal_tail:area,965.8,ft**2 +aircraft:horizontal_tail:aspect_ratio,4.2,unitless +#aircraft:horizontal_tail:mass_scaler,1.0,unitless +aircraft:horizontal_tail:taper_ratio,0.43,unitless +aircraft:horizontal_tail:thickness_to_chord,0.16,unitless +aircraft:horizontal_tail:vertical_tail_fraction,1.0,unitless +#aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless +#aircraft:hydraulics:mass_scaler,1.0,unitless +#aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 +#aircraft:instruments:mass_scaler,1.0,unitless +#aircraft:landing_gear:carrier_based,False,unitless +#aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless +#aircraft:landing_gear:main_gear_oleo_length,45,inch +#aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless +#aircraft:landing_gear:nose_gear_oleo_length,45,inch +aircraft:nacelle:avg_diameter,9.15,ft +aircraft:nacelle:avg_length,20.56,ft +#aircraft:nacelle:mass_scaler,1.0,unitless +#aircraft:nacelle:wetted_area_scaler,1.0,unitless +#aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 +#aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless +#aircraft:propulsion:misc_mass_scaler,1.0,unitless +aircraft:vertical_tail:area,537.9,ft**2 +aircraft:vertical_tail:aspect_ratio,0.958,unitless +#aircraft:vertical_tail:mass_scaler,1.0,unitless +aircraft:vertical_tail:num_tails,1,unitless +aircraft:vertical_tail:taper_ratio,0.846,unitless +aircraft:vertical_tail:thickness_to_chord,0.157,unitless +#aircraft:vertical_tail:wetted_area_scaler,1.0,unitless +aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless +aircraft:wing:airfoil_technology,1.0,unitless +aircraft:wing:area,6200,ft**2 +aircraft:wing:aspect_ratio,7.75,unitless +#aircraft:wing:bending_mass_scaler,1.0,unitless +#aircraft:wing:composite_fraction,0.1,unitless +aircraft:wing:control_surface_area,2323.7,ft**2 +aircraft:wing:control_surface_area_ratio,0.37479,unitless +aircraft:wing:load_distribution_control,2.0,unitless +aircraft:wing:load_fraction,1.0,unitless +#aircraft:wing:mass_scaler,1.0,unitless +aircraft:wing:max_camber_at_70_semispan,0.0,unitless +#aircraft:wing:misc_mass_scaler,1.0,unitless +#aircraft:wing:shear_control_mass_scaler,1.0,unitless +aircraft:wing:span_efficiency_reduction,False,unitless +aircraft:wing:span,222.75,ft +#aircraft:wing:strut_bracing_factor,0.0,unitless +#aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless +aircraft:wing:sweep,20.0,deg +aircraft:wing:taper_ratio,0.419,unitless +aircraft:wing:thickness_to_chord,0.1284,unitless +aircraft:wing:ultimate_load_factor,3.75,unitless +aircraft:wing:var_sweep_mass_penalty,0.0,unitless +#aircraft:wing:wetted_area_scaler,1.0,unitless +aircraft:wing:num_integration_stations,50,unitless +aircraft:wing:thickness_to_chord_dist,0.1239,0.108,0.013,unitless +aircraft:wing:load_path_sweep_dist,0.0,0.0,deg +aircraft:wing:input_station_dist,0.0,0.3298,0.884,unitless +aircraft:wing:chord_per_semispan,0.362,0.2667,0.0456,unitless +aircraft:wing:glove_and_bat,0.0,ft**2 +aircraft:wing:detailed_wing,False,unitless + + +mission:constraints:max_mach,0.77,unitless +mission:design:cruise_altitude,34000,ft +mission:design:gross_mass,840000,lbm +mission:design:range,2150.0,NM +mission:design:thrust_takeoff_per_eng,51250,lbf +mission:landing:lift_coefficient_max,3.0,unitless +mission:design:mach,0.77,unitless +#mission:summary:fuel_flow_scaler,1.0,unitless +mission:takeoff:fuel_simple,6.32,lbm +mission:takeoff:lift_coefficient_max,3.62,unitless +mission:takeoff:lift_over_drag,19.5,unitless +settings:equations_of_motion,height_energy +settings:mass_method,FLOPS + + +### missions definition +# mission_name: payload +# times: 0, 50, 280, 300 +# altitudes: 0, 30000, 30000, 0 +# machs: 0.30, 0.77, 0.77, 0.30 +# optimize_altitudes: F,F,F +# optimize_machs: F,F,F +# takeoff: F +# landing: F diff --git a/c5_maxpayload_phase_info.py b/c5_maxpayload_phase_info.py new file mode 100644 index 000000000..a52acec96 --- /dev/null +++ b/c5_maxpayload_phase_info.py @@ -0,0 +1,83 @@ +phase_info = { + "pre_mission": {"include_takeoff": False, "optimize_mass": True}, + "climb_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.3, "unitless"), + "final_mach": (0.77, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (0.0, "ft"), + "final_altitude": (29500.0, "ft"), + "altitude_bounds": ((0.0, 30000.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": True, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((0.0, 0.0), "min"), + "duration_bounds": ((25.0, 75.0), "min"), + }, + "initial_guesses": {"time": ([0.0, 50.0], "min")}, + }, + "climb_2": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.77, "unitless"), + "final_mach": (0.77, "unitless"), + "mach_bounds": ((0.75, 0.79), "unitless"), + "initial_altitude": (29500.0, "ft"), + "final_altitude": (32000.0, "ft"), + "altitude_bounds": ((29000.0, 32500.0), "ft"), + "throttle_enforcement": "boundary_constraint", + "fix_initial": False, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((25.0, 75.0), "min"), + "duration_bounds": ((105.0, 315.0), "min"), + }, + "initial_guesses": {"time": ([50.0, 210.0], "min")}, + }, + "descent_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.77, "unitless"), + "final_mach": (0.3, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (32000.0, "ft"), + "final_altitude": (0.0, "ft"), + "altitude_bounds": ((0.0, 32500.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": False, + "constrain_final": True, + "fix_duration": False, + "initial_bounds": ((130.0, 390.0), "min"), + "duration_bounds": ((15.0, 45.0), "min"), + }, + "initial_guesses": {"time": ([260.0, 30.0], "min")}, + }, + "post_mission": { + "include_landing": False, + "constrain_range": True, + "target_range": (2272.47, "nmi"), + }, +} diff --git a/multimission.py b/multimission.py index b64870317..2524cf330 100644 --- a/multimission.py +++ b/multimission.py @@ -6,24 +6,24 @@ Phase info: defines a particular mission, will have multiple phase infos """ import aviary.api as av -from aviary.examples.example_phase_info import phase_info -from copy import deepcopy import openmdao.api as om +import dymos as dm +from c5_ferry_phase_info import phase_info as c5_ferry_phase_info +from c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info +from c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info -# TODO: modify one of these to represent a different mission (e.g. change cruise length) -phase_info1 = deepcopy(phase_info) -phase_info2 = deepcopy(phase_info) +planes = ['c5_maxpayload.csv', 'c5_intermediate.csv'] +phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] if __name__ == '__main__': - super_prob = om.Problem.model() + super_prob = om.Problem() prob1 = av.AviaryProblem() prob2 = av.AviaryProblem() # Load aircraft and options data from user # Allow for user overrides here - # TODO: modify one of these to represent a different payload case - prob1.load_inputs('models/test_aircraft/aircraft_for_bench_FwFm.csv', phase_info1) - prob2.load_inputs('models/test_aircraft/aircraft_for_bench_FwFm.csv', phase_info2) + prob1.load_inputs(planes[0], phase_infos[0]) + prob2.load_inputs(planes[1], phase_infos[1]) # Preprocess inputs prob1.check_and_preprocess_inputs() @@ -42,18 +42,27 @@ prob1.link_phases() prob2.link_phases() + super_prob.model.add_subsystem('prob1', prob1) + super_prob.model.add_subsystem('prob2', prob2) + super_prob.model.add_subsystem('compound', + om.ExecComp('compound = a + b'), + promotes=['compound', 'a', 'b']) + super_prob.model.connect('prob1.mission.design.gross_mass', 'a') + super_prob.model.connect('prob2.mission.design.gross_mass', 'b') + super_prob.model.connect('prob1.mission.design.gross_mass', + 'prob2.mission.design.gross_mass') super_prob.add_driver("SLSQP", max_iter=100) - super_prob.add_parameter('mission.design.gross_mass') + # super_prob.add_parameter('mission.design.gross_mass') # use submodelcomp to instantiate both problems inside of the super problem # https://openmdao.org/newdocs/versions/latest/features/building_blocks/components/submodel_comp.html?highlight=subproblem # promote the correct inputs and outputs from the submodels - # add and execComp that sums the fuel burn output + # add an execComp that sums the fuel burn output # Load optimization problem formulation # Detail which variables the optimizer can control - super_prob.add_objective() # output from execcomp goes here) + super_prob.model.add_objective('compound') # output from execcomp goes here) super_prob.setup() @@ -61,16 +70,30 @@ prob2.set_initial_guesses() # remove all plots and extras - super_prob.run_aviary_problem(record_filename='reserve_mission_fixedrange.db') - super_prob.get_val() # look at final fuel burn + dm.run_problem(super_prob) + # super_prob.run_aviary_problem(record_filename='reserve_mission_fixedrange.db') + # super_prob.get_val() # look at final fuel burn """ Ferry mission phase info: -Times (min): 0, 30, 810, 835 - Alt (ft): 0, 32000, 32000, 0 +Times (min): 0, 50, 812, 843 + Alt (ft): 0, 29500, 32000, 0 Mach: 0.3, 0.77, 0.77, 0.3 +Est. Range: 7001 nmi +Notes: 32k in 30 mins too fast for aviary, climb to low alt then slow rise +Intermediate mission phase info: +Times (min): 0, 50, 560, 590 + Alt (ft): 0, 29500, 32000, 0 + Mach: 0.3, 0.77, 0.77, 0.3 +Est. Range: 4839 nmi + +Max Payload mission phase info: +Times (min): 0, 50, 260, 290 + Alt (ft): 0, 29500, 32000, 0 + Mach: 0.3, 0.77, 0.77, 0.3 +Est. Range: 2272 nmi Hard to find multiple payload/range values for FwFm (737), so use C-5 instead Based on: diff --git a/outputted_phase_info.py b/outputted_phase_info.py index b78f6f884..9e9fd754f 100644 --- a/outputted_phase_info.py +++ b/outputted_phase_info.py @@ -1,83 +1,8 @@ phase_info = { "pre_mission": {"include_takeoff": False, "optimize_mass": True}, - "climb_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.3, "unitless"), - "final_mach": (0.75, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.77), "unitless"), - "initial_altitude": (0.0, "ft"), - "final_altitude": (28000.0, "ft"), - "altitude_bounds": ((0.0, 28500.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": True, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((0.0, 0.0), "min"), - "duration_bounds": ((25.0, 75.0), "min"), - }, - "initial_guesses": {"time": ([0.0, 50.0], "min")}, - }, - "cruise_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.75, "unitless"), - "final_mach": (0.75, "unitless"), - "mach_bounds": ((0.73, 0.77), "unitless"), - "initial_altitude": (28000.0, "ft"), - "final_altitude": (28000.0, "ft"), - "altitude_bounds": ((27500.0, 28500.0), "ft"), - "throttle_enforcement": "boundary_constraint", - "fix_initial": False, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((25.0, 75.0), "min"), - "duration_bounds": ((380.0, 1140.0), "min"), - }, - "initial_guesses": {"time": ([50.0, 760.0], "min")}, - }, - "descent_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.75, "unitless"), - "final_mach": (0.3, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.77), "unitless"), - "initial_altitude": (28000.0, "ft"), - "final_altitude": (0.0, "ft"), - "altitude_bounds": ((0.0, 28500.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": False, - "constrain_final": True, - "fix_duration": False, - "initial_bounds": ((405.0, 1215.0), "min"), - "duration_bounds": ((12.5, 37.5), "min"), - }, - "initial_guesses": {"time": ([810.0, 25.0], "min")}, - }, "post_mission": { "include_landing": False, "constrain_range": True, - "target_range": (6771.56, "nmi"), + "target_range": (0.0, "nmi"), }, } diff --git a/singlemission.py b/singlemission.py index 4719db68c..b63687287 100644 --- a/singlemission.py +++ b/singlemission.py @@ -1,12 +1,56 @@ import aviary.api as av -from c5_ferry_phase_info import phase_info +import sys +from c5_ferry_phase_info import phase_info as c5_ferry_phase_info +from c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info +from c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info + + +def modify_plane(orig_filename, payloads, ranges): + if len(sys.argv) > 1: + plane_name = orig_filename.split(".csv")[0] + mission = sys.argv[1].lower() + temp_filename = f"{plane_name}_{mission}.csv" + with open(orig_filename, "r") as orig_plane: + orig_lines = orig_plane.readlines() + with open(temp_filename, "w") as temp_plane: + try: + payload, misrange = payloads[mission], ranges[mission] + except KeyError: + payload, misrange = "", "" + for line in orig_lines: + if "aircraft:crew_and_payload:cargo_mass" in line and payload != "": + line = ",".join( + [line.split(",")[0], + str(payload), + line.split(",")[2]]) + + elif "mission:design:range" in line and misrange != "": + line = ",".join( + [line.split(",")[0], + str(misrange), + line.split(",")[2]]) + + temp_plane.write(line) + else: + return orig_filename + return temp_filename, mission + if __name__ == '__main__': prob = av.AviaryProblem() + plane_file = 'c5.csv' + payloads = {"ferry": 0, "intermediate": 120e3, "maxpayload": 281e3} + ranges = {"ferry": 7e3, "intermediate": 4.8e3, "maxpayload": 2.15e3} + plane_file, mission_name = modify_plane(plane_file, payloads, ranges) + phase_info = c5_maxpayload_phase_info + if mission_name == "intermediate": + phase_info = c5_intermediate_phase_info + elif mission_name == "ferry": + phase_info = c5_ferry_phase_info # Load aircraft and options data from user # Allow for user overrides here - prob.load_inputs('c5.csv', phase_info) + prob.load_inputs(plane_file, phase_info) # Preprocess inputs prob.check_and_preprocess_inputs() @@ -20,7 +64,7 @@ # Link phases and variables prob.link_phases() - prob.add_driver("SLSQP", max_iter=100) + prob.add_driver("SLSQP", max_iter=50) prob.add_design_variables() @@ -33,15 +77,29 @@ prob.set_initial_guesses() # remove all plots and extras - prob.run_aviary_problem(record_filename='c5_ferry.db') + prob.run_aviary_problem(record_filename=f'{plane_file.split(".csv")[0]}.db') # prob.get_val() # look at final fuel burn + prob.get_val('mission.summary.fuel_burned') """ Ferry mission phase info: -Times (min): 0, 30, 810, 835 - Alt (ft): 0, 32000, 32000, 0 +Times (min): 0, 50, 812, 843 + Alt (ft): 0, 29500, 32000, 0 + Mach: 0.3, 0.77, 0.77, 0.3 +Est. Range: 7001 nmi +Notes: 32k in 30 mins too fast for aviary, climb to low alt then slow rise + +Intermediate mission phase info: +Times (min): 0, 50, 560, 590 + Alt (ft): 0, 29500, 32000, 0 + Mach: 0.3, 0.77, 0.77, 0.3 +Est. Range: 4839 nmi + +Max Payload mission phase info: +Times (min): 0, 50, 260, 290 + Alt (ft): 0, 29500, 32000, 0 Mach: 0.3, 0.77, 0.77, 0.3 -Notes: 32k in 30 mins too fast for aviary, +Est. Range: 2272 nmi Hard to find multiple payload/range values for FwFm (737), so use C-5 instead Based on: From 16034f49ae060a1795451732552ee14a91c921d8 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 24 Jul 2024 14:57:01 -0400 Subject: [PATCH 009/113] multiple missions optimize, but no affect on results yet --- multimission.py | 117 ++++++++++++++++++++++++----------------------- singlemission.py | 6 ++- 2 files changed, 63 insertions(+), 60 deletions(-) diff --git a/multimission.py b/multimission.py index 2524cf330..2e98144bc 100644 --- a/multimission.py +++ b/multimission.py @@ -1,5 +1,5 @@ """ -Goal: use single aircraft description but optimize it for multiple missions simultaneously, +Goal: use single aircraft description but optimize it for multiple missions simultaneously, i.e. all missions are on the range-payload line instead of having excess performance Aircraft csv: defines plane, but also defines payload (passengers, cargo) which can vary with mission These will have to be specified in some alternate way such as a list correspond to mission # @@ -14,65 +14,66 @@ planes = ['c5_maxpayload.csv', 'c5_intermediate.csv'] phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] +weights = [1, 1] +num_missions = len(weights) if __name__ == '__main__': super_prob = om.Problem() - prob1 = av.AviaryProblem() - prob2 = av.AviaryProblem() - - # Load aircraft and options data from user - # Allow for user overrides here - prob1.load_inputs(planes[0], phase_infos[0]) - prob2.load_inputs(planes[1], phase_infos[1]) - - # Preprocess inputs - prob1.check_and_preprocess_inputs() - prob2.check_and_preprocess_inputs() - - prob1.add_pre_mission_systems() - prob2.add_pre_mission_systems() - - prob1.add_phases() - prob2.add_phases() - - prob1.add_post_mission_systems() - prob2.add_post_mission_systems() - - # Link phases and variables - prob1.link_phases() - prob2.link_phases() - - super_prob.model.add_subsystem('prob1', prob1) - super_prob.model.add_subsystem('prob2', prob2) - super_prob.model.add_subsystem('compound', - om.ExecComp('compound = a + b'), - promotes=['compound', 'a', 'b']) - super_prob.model.connect('prob1.mission.design.gross_mass', 'a') - super_prob.model.connect('prob2.mission.design.gross_mass', 'b') - super_prob.model.connect('prob1.mission.design.gross_mass', - 'prob2.mission.design.gross_mass') - super_prob.add_driver("SLSQP", max_iter=100) - - # super_prob.add_parameter('mission.design.gross_mass') - - # use submodelcomp to instantiate both problems inside of the super problem - # https://openmdao.org/newdocs/versions/latest/features/building_blocks/components/submodel_comp.html?highlight=subproblem - # promote the correct inputs and outputs from the submodels - # add an execComp that sums the fuel burn output - - # Load optimization problem formulation - # Detail which variables the optimizer can control - super_prob.model.add_objective('compound') # output from execcomp goes here) + probs = [] + + # define individual aviary problems + for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): + prob = av.AviaryProblem() + prob.load_inputs(plane, phase_info) + prob.check_and_preprocess_inputs() + prob.add_pre_mission_systems() + prob.add_phases() + prob.add_post_mission_systems() + prob.link_phases() + probs.append(prob) + + subcomp = om.SubmodelComp(problem=prob, + inputs=['mission:design:gross_mass'], + outputs=['mission:summary:fuel_burned']) + super_prob.model.add_subsystem(f'subcomp_{i}', subcomp) + + # creating variable strings that will represent fuel burn from each mission + fuel_burned_vars = [f"fuel_{i}" for i in range(num_missions)] + weighted_str = "+".join([f"{fuel}*{weight}" + for fuel, weight in zip(fuel_burned_vars, weights)]) + # weighted_str looks like: fuel_0 * weight[0] + fuel_1 * weight[1] + + # adding compound execComp to super problem + super_prob.model.add_subsystem('compound', om.ExecComp( + "compound = "+weighted_str), promotes=["compound", *fuel_burned_vars]) + + # connecting each subcomponent's fuel burn to super problem's unique fuel variables + for i in range(num_missions): + super_prob.model.connect(f"subcomp_{i}.mission:summary:fuel_burned", f"fuel_{i}") + + # create an output within superprob that connects to each subcomponents gross mass input + IVC = super_prob.model.add_subsystem('IVC', om.IndepVarComp(), promotes=['*']) + IVC.add_output('gross_mass', val=500e3, units='lbm') + + # specify gross mass as a design var + super_prob.model.add_design_var('gross_mass', lower=100e3, upper=1000e3, units='lbm') + + # connect gross mass output of super problem to each subcomponent's input gross mass + for i in range(num_missions): + super_prob.model.connect('gross_mass', f"subcomp_{i}.mission:design:gross_mass") + + super_prob.driver = om.ScipyOptimizeDriver() + super_prob.driver.options['optimizer'] = 'SLSQP' + + super_prob.model.add_objective('compound') # output from execcomp goes here super_prob.setup() - prob1.set_initial_guesses() - prob2.set_initial_guesses() + # set initial guesses for each aviary problem + for prob in probs: + prob.set_initial_guesses() - # remove all plots and extras dm.run_problem(super_prob) - # super_prob.run_aviary_problem(record_filename='reserve_mission_fixedrange.db') - # super_prob.get_val() # look at final fuel burn """ @@ -81,7 +82,7 @@ Alt (ft): 0, 29500, 32000, 0 Mach: 0.3, 0.77, 0.77, 0.3 Est. Range: 7001 nmi -Notes: 32k in 30 mins too fast for aviary, climb to low alt then slow rise +Notes: 32k in 30 mins too fast for aviary, climb to low alt then slow rise Intermediate mission phase info: Times (min): 0, 50, 560, 590 @@ -96,9 +97,9 @@ Est. Range: 2272 nmi Hard to find multiple payload/range values for FwFm (737), so use C-5 instead -Based on: - https://en.wikipedia.org/wiki/Lockheed_C-5_Galaxy#Specifications_(C-5M), - https://www.af.mil/About-Us/Fact-Sheets/Display/Article/1529718/c-5-abc-galaxy-and-c-5m-super-galaxy/ +Based on: + https://en.wikipedia.org/wiki/Lockheed_C-5_Galaxy#Specifications_(C-5M), + https://www.af.mil/About-Us/Fact-Sheets/Display/Article/1529718/c-5-abc-galaxy-and-c-5m-super-galaxy/ MTOW: 840,000 lb Max Payload: 281,000 lb @@ -110,7 +111,7 @@ 120,000 lb payload -> 4,800 nmi range (AF.mil) [intermediate case] 0 lb payload -> 7,000 nmi range (AF.mil) [ferry case] -Flight characteristics: - Cruise at M0.77 at 33k ft +Flight characteristics: + Cruise at M0.77 at 33k ft Max rate of climb: 2100 ft/min """ diff --git a/singlemission.py b/singlemission.py index b63687287..bf5cd91b6 100644 --- a/singlemission.py +++ b/singlemission.py @@ -77,9 +77,11 @@ def modify_plane(orig_filename, payloads, ranges): prob.set_initial_guesses() # remove all plots and extras - prob.run_aviary_problem(record_filename=f'{plane_file.split(".csv")[0]}.db') + prob.run_aviary_problem( + record_filename=f'{plane_file.split(".csv")[0]}.db', suppress_solver_print=True) # prob.get_val() # look at final fuel burn - prob.get_val('mission.summary.fuel_burned') + print( + f"Fuel burned: {prob.get_val(av.Mission.Summary.FUEL_BURNED,units='lbm')[0]:.3f} lbm") """ Ferry mission phase info: From 754ab91657744593156298c901052d1c3c64d11f Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Thu, 25 Jul 2024 08:45:05 -0400 Subject: [PATCH 010/113] removed indepedentvarcomp to handle common inputs --- multimission.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/multimission.py b/multimission.py index 2e98144bc..e7d4c7d14 100644 --- a/multimission.py +++ b/multimission.py @@ -35,7 +35,10 @@ subcomp = om.SubmodelComp(problem=prob, inputs=['mission:design:gross_mass'], outputs=['mission:summary:fuel_burned']) - super_prob.model.add_subsystem(f'subcomp_{i}', subcomp) + # promoting gross mass to be used as a design var + # all problems have same name for gross mass so they are connected + super_prob.model.add_subsystem(f'subcomp_{i}', subcomp, promotes_inputs=[ + 'mission:design:gross_mass']) # creating variable strings that will represent fuel burn from each mission fuel_burned_vars = [f"fuel_{i}" for i in range(num_missions)] @@ -48,19 +51,13 @@ "compound = "+weighted_str), promotes=["compound", *fuel_burned_vars]) # connecting each subcomponent's fuel burn to super problem's unique fuel variables + # fuel_0, fuel_1, ... don't have units assigned, #TODO find a solution to specify units for i in range(num_missions): super_prob.model.connect(f"subcomp_{i}.mission:summary:fuel_burned", f"fuel_{i}") - # create an output within superprob that connects to each subcomponents gross mass input - IVC = super_prob.model.add_subsystem('IVC', om.IndepVarComp(), promotes=['*']) - IVC.add_output('gross_mass', val=500e3, units='lbm') - # specify gross mass as a design var - super_prob.model.add_design_var('gross_mass', lower=100e3, upper=1000e3, units='lbm') - - # connect gross mass output of super problem to each subcomponent's input gross mass - for i in range(num_missions): - super_prob.model.connect('gross_mass', f"subcomp_{i}.mission:design:gross_mass") + super_prob.model.add_design_var( + 'mission:design:gross_mass', lower=100e3, upper=1000e3, units='lbm') super_prob.driver = om.ScipyOptimizeDriver() super_prob.driver.options['optimizer'] = 'SLSQP' @@ -82,7 +79,7 @@ Alt (ft): 0, 29500, 32000, 0 Mach: 0.3, 0.77, 0.77, 0.3 Est. Range: 7001 nmi -Notes: 32k in 30 mins too fast for aviary, climb to low alt then slow rise +Notes: 32k in 30 mins too fast for aviary, climb to low alt then slow rise through cruise Intermediate mission phase info: Times (min): 0, 50, 560, 590 From 9c284ba12e4508ad903c0911d9d6f504f3a18d46 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Thu, 25 Jul 2024 15:09:05 -0400 Subject: [PATCH 011/113] attempt to import multiple missions as dymos trajectories for multi mission support --- aviary/interface/methods_for_level1.py | 9 +- aviary/interface/methods_for_level2.py | 334 +- cannonball_copy.py | 195 +- multi_mission_importTraj_N2.html | 14840 +++++++++++++++++++++++ multimission.py | 12 +- multitraj.py | 153 + 6 files changed, 15312 insertions(+), 231 deletions(-) create mode 100644 multi_mission_importTraj_N2.html create mode 100644 multitraj.py diff --git a/aviary/interface/methods_for_level1.py b/aviary/interface/methods_for_level1.py index 3cb1815d8..74ef2becf 100644 --- a/aviary/interface/methods_for_level1.py +++ b/aviary/interface/methods_for_level1.py @@ -94,7 +94,9 @@ def run_aviary(aircraft_filename, phase_info, optimizer=None, prob.set_initial_guesses() prob.failed = prob.run_aviary_problem( - record_filename, restart_filename=restart_filename, run_driver=run_driver, make_plots=make_plots, optimization_history_filename=optimization_history_filename) + record_filename, restart_filename=restart_filename, run_driver=run_driver, + make_plots=make_plots, + optimization_history_filename=optimization_history_filename) return prob @@ -149,9 +151,8 @@ def run_level_1( def _setup_level1_parser(parser): def_outdir = os.path.join(os.getcwd(), "output") - parser.add_argument( - 'input_deck', metavar='indeck', type=str, nargs=1, help='Name of vehicle input deck file' - ) + parser.add_argument('input_deck', metavar='indeck', type=str, + nargs=1, help='Name of vehicle input deck file') parser.add_argument( "-o", "--outdir", default=def_outdir, help="Directory to write outputs" ) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index b251abab1..6b324ae9c 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -240,7 +240,9 @@ def __init__(self, analysis_scheme=AnalysisScheme.COLLOCATION, **kwargs): self.regular_phases = [] self.reserve_phases = [] - def load_inputs(self, aviary_inputs, phase_info=None, engine_builders=None, meta_data=BaseMetaData, verbosity=None): + def load_inputs( + self, aviary_inputs, phase_info=None, engine_builders=None, + meta_data=BaseMetaData, verbosity=None): """ This method loads the aviary_values inputs and options that the user specifies. They could specify files to load and values to @@ -330,10 +332,14 @@ def load_inputs(self, aviary_inputs, phase_info=None, engine_builders=None, meta self.aviary_inputs = aviary_inputs if mission_method is TWO_DEGREES_OF_FREEDOM: - aviary_inputs.set_val(Mission.Summary.CRUISE_MASS_FINAL, - val=self.initial_guesses['cruise_mass_final'], units='lbm') - aviary_inputs.set_val(Mission.Summary.GROSS_MASS, - val=self.initial_guesses['actual_takeoff_mass'], units='lbm') + aviary_inputs.set_val( + Mission.Summary.CRUISE_MASS_FINAL, val=self.initial_guesses + ['cruise_mass_final'], + units='lbm') + aviary_inputs.set_val( + Mission.Summary.GROSS_MASS, val=self.initial_guesses + ['actual_takeoff_mass'], + units='lbm') # Commonly referenced values self.cruise_alt = aviary_inputs.get_val( @@ -350,8 +356,10 @@ def load_inputs(self, aviary_inputs, phase_info=None, engine_builders=None, meta elif mission_method is HEIGHT_ENERGY: self.problem_type = aviary_inputs.get_val(Settings.PROBLEM_TYPE) - aviary_inputs.set_val(Mission.Summary.GROSS_MASS, - val=self.initial_guesses['actual_takeoff_mass'], units='lbm') + aviary_inputs.set_val( + Mission.Summary.GROSS_MASS, val=self.initial_guesses + ['actual_takeoff_mass'], + units='lbm') if 'target_range' in self.post_mission_info: aviary_inputs.set_val(Mission.Design.RANGE, wrapped_convert_units( phase_info['post_mission']['target_range'], 'NM'), units='NM') @@ -429,7 +437,8 @@ def check_and_preprocess_inputs(self): for idx, phase_name in enumerate(self.phase_info): if 'user_options' in self.phase_info[phase_name]: if 'target_distance' in self.phase_info[phase_name]["user_options"]: - target_distance = self.phase_info[phase_name]["user_options"]["target_distance"] + target_distance = self.phase_info[phase_name]["user_options"][ + "target_distance"] if target_distance[0] <= 0: raise ValueError( f"Invalid target_distance in [{phase_name}].[user_options]. " @@ -443,16 +452,20 @@ def check_and_preprocess_inputs(self): if (self.analysis_scheme is AnalysisScheme.COLLOCATION) and (self.mission_method is EquationsOfMotion.TWO_DEGREES_OF_FREEDOM): try: # if the user provided an option, use it - analytic = self.phase_info[phase_name]["user_options"]['analytic'] + analytic = self.phase_info[phase_name]["user_options"][ + 'analytic'] except KeyError: # if it isn't specified, only the default 2DOF cruise for collocation is analytic if 'cruise' in phase_name: - analytic = self.phase_info[phase_name]["user_options"]['analytic'] = True + analytic = self.phase_info[phase_name]["user_options"][ + 'analytic'] = True else: - analytic = self.phase_info[phase_name]["user_options"]['analytic'] = False + analytic = self.phase_info[phase_name]["user_options"][ + 'analytic'] = False if 'target_duration' in self.phase_info[phase_name]["user_options"]: - target_duration = self.phase_info[phase_name]["user_options"]["target_duration"] + target_duration = self.phase_info[phase_name]["user_options"][ + "target_duration"] if target_duration[0] <= 0: raise ValueError( f"Invalid target_duration in phase_info[{phase_name}][user_options]. " @@ -463,8 +476,8 @@ def check_and_preprocess_inputs(self): # Set duration_bounds and initial_guesses for time: self.phase_info[phase_name]["user_options"].update({ "duration_bounds": ((target_duration[0], target_duration[0]), target_duration[1])}) - self.phase_info[phase_name].update({ - "initial_guesses": {"time": ((target_duration[0], target_duration[0]), target_duration[1])}}) + self.phase_info[phase_name].update({"initial_guesses": {"time": ( + (target_duration[0], target_duration[0]), target_duration[1])}}) # Set Fixed_duration to true: self.phase_info[phase_name]["user_options"].update({ "fix_duration": True}) @@ -571,8 +584,9 @@ def add_pre_mission_systems(self): # Propulsion isn't included in core pre-mission group to avoid override step in # configure() - instead add it now - pre_mission.add_subsystem('core_propulsion', - subsystems['propulsion'].build_pre_mission(self.aviary_inputs),) + pre_mission.add_subsystem( + 'core_propulsion', subsystems['propulsion'].build_pre_mission( + self.aviary_inputs),) default_subsystems = [subsystems['geometry'], subsystems['aerodynamics'], @@ -747,14 +761,16 @@ def _add_premission_external_subsystems(self): # Define the expression for computing the sum of masses expr = 'subsystem_mass = ' + ' + '.join(formatted_names) - promotes_inputs_list = [(formatted_name, original_name) - for formatted_name, original_name in zip(formatted_names, mass_names)] + promotes_inputs_list = [ + (formatted_name, original_name) for formatted_name, + original_name in zip(formatted_names, mass_names)] # Create the ExecComp - self.pre_mission.add_subsystem('external_comp_sum', om.ExecComp(expr, units='kg'), - promotes_inputs=promotes_inputs_list, - promotes_outputs=[ - ('subsystem_mass', Aircraft.Design.EXTERNAL_SUBSYSTEMS_MASS)]) + self.pre_mission.add_subsystem( + 'external_comp_sum', om.ExecComp(expr, units='kg'), + promotes_inputs=promotes_inputs_list, + promotes_outputs=[('subsystem_mass', Aircraft.Design. + EXTERNAL_SUBSYSTEMS_MASS)]) def _add_groundroll_eq_constraint(self, phase): """ @@ -842,7 +858,8 @@ def _get_phase(self, phase_name, phase_idx): phase_builder = TwoDOFPhase phase_object = phase_builder.from_phase_info( - phase_name, phase_options, default_mission_subsystems, meta_data=self.meta_data) + phase_name, phase_options, default_mission_subsystems, + meta_data=self.meta_data) phase = phase_object.build_phase(aviary_options=self.aviary_inputs) @@ -972,9 +989,8 @@ def _get_phase(self, phase_name, phase_idx): if 'cruise' not in phase_name and self.mission_method is TWO_DEGREES_OF_FREEDOM: phase.add_control( - Dynamic.Mission.THROTTLE, targets=Dynamic.Mission.THROTTLE, units='unitless', - opt=False, - ) + Dynamic.Mission.THROTTLE, targets=Dynamic.Mission.THROTTLE, + units='unitless', opt=False,) return phase @@ -993,9 +1009,8 @@ def add_phases(self, phase_info_parameterization=None): traj: The Dymos Trajectory object containing the added mission phases. """ if phase_info_parameterization is not None: - self.phase_info, self.post_mission_info = phase_info_parameterization(self.phase_info, - self.post_mission_info, - self.aviary_inputs) + self.phase_info, self.post_mission_info = phase_info_parameterization( + self.phase_info, self.post_mission_info, self.aviary_inputs) phase_info = self.phase_info @@ -1035,12 +1050,11 @@ def add_phases(self, phase_info_parameterization=None): ('altitude_initial', Mission.Design.CRUISE_ALTITUDE)]) self.model.add_subsystem( - 'actual_descent_fuel', - om.ExecComp('actual_descent_fuel = traj_cruise_mass_final - traj_mass_final', - actual_descent_fuel={'units': 'lbm'}, - traj_cruise_mass_final={'units': 'lbm'}, - traj_mass_final={'units': 'lbm'}, - )) + 'actual_descent_fuel', om.ExecComp( + 'actual_descent_fuel = traj_cruise_mass_final - traj_mass_final', + actual_descent_fuel={'units': 'lbm'}, + traj_cruise_mass_final={'units': 'lbm'}, + traj_mass_final={'units': 'lbm'},)) self.model.connect('start_of_descent_mass', 'traj.SGMCruise_mass_trigger') self.model.connect( @@ -1093,7 +1107,8 @@ def add_subsystem_timeseries_outputs(phase, phase_name): if self.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): traj = setup_trajectory_params( - self.model, traj, self.aviary_inputs, phases, meta_data=self.meta_data, external_parameters=external_parameters) + self.model, traj, self.aviary_inputs, phases, + meta_data=self.meta_data, external_parameters=external_parameters) self.traj = traj @@ -1158,8 +1173,9 @@ def add_post_mission_systems(self, include_landing=True): mass_final={'units': 'lbm'}, fuel_burned={'units': 'lbm'}) - self.post_mission.add_subsystem('fuel_burned', ecomp, - promotes=[('fuel_burned', Mission.Summary.FUEL_BURNED)]) + self.post_mission.add_subsystem( + 'fuel_burned', ecomp, + promotes=[('fuel_burned', Mission.Summary.FUEL_BURNED)]) if self.analysis_scheme is AnalysisScheme.SHOOTING: # shooting method currently doesn't have timeseries @@ -1187,22 +1203,25 @@ def add_post_mission_systems(self, include_landing=True): mass_final={'units': 'lbm'}, reserve_fuel_burned={'units': 'lbm'}) - self.post_mission.add_subsystem('reserve_fuel_burned', ecomp, - promotes=[('reserve_fuel_burned', Mission.Summary.RESERVE_FUEL_BURNED)]) + self.post_mission.add_subsystem('reserve_fuel_burned', ecomp, promotes=[ + ('reserve_fuel_burned', Mission.Summary.RESERVE_FUEL_BURNED)]) if self.analysis_scheme is AnalysisScheme.SHOOTING: # shooting method currently doesn't have timeseries self.post_mission.promotes('reserve_fuel_burned', [ ('initial_mass', Mission.Landing.TOUCHDOWN_MASS), ]) - self.model.connect(f"traj.{self.reserve_phases[-1]}.states:mass", - "reserve_fuel_burned.mass_final", src_indices=[-1]) + self.model.connect( + f"traj.{self.reserve_phases[-1]}.states:mass", + "reserve_fuel_burned.mass_final", src_indices=[-1]) else: # timeseries has to be used because Breguet cruise phases don't have states - self.model.connect(f"traj.{self.reserve_phases[0]}.timeseries.mass", - "reserve_fuel_burned.initial_mass", src_indices=[0]) - self.model.connect(f"traj.{self.reserve_phases[-1]}.timeseries.mass", - "reserve_fuel_burned.mass_final", src_indices=[-1]) + self.model.connect( + f"traj.{self.reserve_phases[0]}.timeseries.mass", + "reserve_fuel_burned.initial_mass", src_indices=[0]) + self.model.connect( + f"traj.{self.reserve_phases[-1]}.timeseries.mass", + "reserve_fuel_burned.mass_final", src_indices=[-1]) self._add_fuel_reserve_component() @@ -1229,22 +1248,24 @@ def add_post_mission_systems(self, include_landing=True): for phase_name in self.phase_info: if 'target_distance' in self.phase_info[phase_name]["user_options"]: target_distance = wrapped_convert_units( - self.phase_info[phase_name]["user_options"]["target_distance"], 'nmi') + self.phase_info[phase_name]["user_options"] + ["target_distance"], + 'nmi') self.post_mission.add_subsystem( - f"{phase_name}_distance_constraint", - om.ExecComp( + f"{phase_name}_distance_constraint", om.ExecComp( "distance_resid = target_distance - (final_distance - initial_distance)", distance_resid={'units': 'nmi'}, target_distance={'val': target_distance, 'units': 'nmi'}, final_distance={'units': 'nmi'}, - initial_distance={'units': 'nmi'}, - )) + initial_distance={'units': 'nmi'},)) self.model.connect( f"traj.{phase_name}.timeseries.distance", - f"{phase_name}_distance_constraint.final_distance", src_indices=[-1]) + f"{phase_name}_distance_constraint.final_distance", + src_indices=[-1]) self.model.connect( f"traj.{phase_name}.timeseries.distance", - f"{phase_name}_distance_constraint.initial_distance", src_indices=[0]) + f"{phase_name}_distance_constraint.initial_distance", + src_indices=[0]) self.model.add_constraint( f"{phase_name}_distance_constraint.distance_resid", equals=0.0, ref=1e2) @@ -1252,22 +1273,23 @@ def add_post_mission_systems(self, include_landing=True): if 'target_duration' in self.phase_info[phase_name]["user_options"] and \ self.phase_info[phase_name]["user_options"].get("analytic", False): target_duration = wrapped_convert_units( - self.phase_info[phase_name]["user_options"]["target_duration"], 'min') + self.phase_info[phase_name]["user_options"] + ["target_duration"], + 'min') self.post_mission.add_subsystem( - f"{phase_name}_duration_constraint", - om.ExecComp( + f"{phase_name}_duration_constraint", om.ExecComp( "duration_resid = target_duration - (final_time - initial_time)", duration_resid={'units': 'min'}, target_duration={'val': target_duration, 'units': 'min'}, final_time={'units': 'min'}, - initial_time={'units': 'min'}, - )) + initial_time={'units': 'min'},)) self.model.connect( f"traj.{phase_name}.timeseries.time", f"{phase_name}_duration_constraint.final_time", src_indices=[-1]) self.model.connect( f"traj.{phase_name}.timeseries.time", - f"{phase_name}_duration_constraint.initial_time", src_indices=[0]) + f"{phase_name}_duration_constraint.initial_time", + src_indices=[0]) self.model.add_constraint( f"{phase_name}_duration_constraint.duration_resid", equals=0.0, ref=1e2) @@ -1424,7 +1446,8 @@ def link_phases(self): elif self.mission_method is SOLVED_2DOF: self.traj.link_phases(phases, [Dynamic.Mission.MASS], connected=True) self.traj.link_phases( - phases, [Dynamic.Mission.DISTANCE], units='ft', ref=1.e3, connected=False) + phases, [Dynamic.Mission.DISTANCE], + units='ft', ref=1.e3, connected=False) self.traj.link_phases(phases, ["time"], connected=False) if len(phases) > 2: @@ -1457,7 +1480,10 @@ def link_phases(self): # if either phase is rotation, we need to connect velocity # ascent to accel also requires velocity - if 'rotation' in (phase1, phase2) or ('ascent', 'accel') == (phase1, phase2): + if 'rotation' in ( + phase1, phase2) or ( + 'ascent', 'accel') == ( + phase1, phase2): states_to_link[Dynamic.Mission.VELOCITY] = true_unless_mpi # if the first phase is rotation, we also need alpha if phase1 == 'rotation': @@ -1490,7 +1516,8 @@ def link_phases(self): self.traj.add_linkage_constraint( phase1, phase2, 'time', prefix+'time', connected=True) self.traj.add_linkage_constraint( - phase1, phase2, 'distance', prefix+'distance', connected=True) + phase1, phase2, 'distance', prefix + 'distance', + connected=True) self.traj.add_linkage_constraint( phase1, phase2, 'mass', 'mass', connected=False, ref=1.0e5) @@ -1569,7 +1596,9 @@ def connect_with_common_params(self, source, target): for source, target in connect_map.items(): connect_with_common_params(self, source, target) - def add_driver(self, optimizer=None, use_coloring=None, max_iter=50, verbosity=Verbosity.BRIEF): + def add_driver( + self, optimizer=None, use_coloring=None, max_iter=50, + verbosity=Verbosity.BRIEF): """ Add an optimization driver to the Aviary problem. @@ -1755,8 +1784,8 @@ def add_design_variables(self): elif self.problem_type is ProblemType.ALTERNATE: self.model.add_design_var( Mission.Summary.GROSS_MASS, - lower=0, - upper=None, + lower=10., + upper=900e3, units='lbm', ref=175e3, ) @@ -1821,7 +1850,8 @@ def add_objective(self, objective_type=None, ref=None): if objective_type == 'mass': if self.analysis_scheme is AnalysisScheme.COLLOCATION: self.model.add_objective( - f"traj.{final_phase_name}.timeseries.{Dynamic.Mission.MASS}", index=-1, ref=ref) + f"traj.{final_phase_name}.timeseries.{Dynamic.Mission.MASS}", + index=-1, ref=ref) else: last_phase = self.traj._phases.items()[final_phase_name] last_phase.add_objective( @@ -1837,8 +1867,9 @@ def add_objective(self, objective_type=None, ref=None): elif objective_type == "fuel": self.model.add_objective(Mission.Objectives.FUEL, ref=ref) else: - raise ValueError(f"{objective_type} is not a valid objective.\nobjective_type must" - " be one of mass, time, hybrid_objective, fuel_burned, or fuel") + raise ValueError( + f"{objective_type} is not a valid objective.\nobjective_type must" + " be one of mass, time, hybrid_objective, fuel_burned, or fuel") else: # If no 'objective_type' is specified, we handle based on 'problem_type' # If 'ref' is not specified, assign a default value @@ -1891,25 +1922,32 @@ def _add_bus_variables_and_connect(self): for phase_name in phases: phase = getattr(self.traj.phases, phase_name) - phase.add_parameter(mission_var_name, opt=False, static_target=True, - units=base_units, shape=shape, targets=targets) + phase.add_parameter( + mission_var_name, opt=False, + static_target=True, units=base_units, + shape=shape, targets=targets) - self.model.connect(f'pre_mission.{bus_variable}', - f'traj.{phase_name}.parameters:{mission_var_name}') + self.model.connect( + f'pre_mission.{bus_variable}', + f'traj.{phase_name}.parameters:{mission_var_name}') else: phases = base_phases - self.traj.add_parameter(mission_var_name, opt=False, static_target=True, - units=base_units, shape=shape, targets={ - phase_name: [mission_var_name] for phase_name in phases}) + self.traj.add_parameter( + mission_var_name, opt=False, static_target=True, + units=base_units, shape=shape, + targets={phase_name: [mission_var_name] + for phase_name in phases}) self.model.connect( - f'pre_mission.{bus_variable}', f'traj.parameters:'+mission_var_name) + f'pre_mission.{bus_variable}', + f'traj.parameters:' + mission_var_name) if 'post_mission_name' in bus_variables[bus_variable]: - self.model.connect(f'pre_mission.{external_subsystem.name}.{bus_variable}', - f'post_mission.{external_subsystem.name}.{bus_variables[bus_variable]["post_mission_name"]}') + self.model.connect( + f'pre_mission.{external_subsystem.name}.{bus_variable}', + f'post_mission.{external_subsystem.name}.{bus_variables[bus_variable]["post_mission_name"]}') def setup(self, **kwargs): """ @@ -2127,8 +2165,8 @@ def _add_guesses(self, phase_name, phase, guesses): state_keys = ["mass", Dynamic.Mission.DISTANCE] else: control_keys = ["velocity_rate", "throttle"] - state_keys = ["altitude", "mass", - Dynamic.Mission.DISTANCE, Dynamic.Mission.VELOCITY, "flight_path_angle", "alpha"] + state_keys = ["altitude", "mass", Dynamic.Mission.DISTANCE, + Dynamic.Mission.VELOCITY, "flight_path_angle", "alpha"] if self.mission_method is TWO_DEGREES_OF_FREEDOM and phase_name == 'ascent': # Alpha is a control for ascent. control_keys.append('alpha') @@ -2159,8 +2197,10 @@ def _add_guesses(self, phase_name, phase, guesses): # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds if 'time' not in guesses: - initial_bounds = self.phase_info[phase_name]['user_options']['initial_bounds'] - duration_bounds = self.phase_info[phase_name]['user_options']['duration_bounds'] + initial_bounds = self.phase_info[phase_name]['user_options'][ + 'initial_bounds'] + duration_bounds = self.phase_info[phase_name]['user_options'][ + 'duration_bounds'] # Add a check for the initial and duration bounds, raise an error if they are not consistent if initial_bounds[1] != duration_bounds[1]: raise ValueError( @@ -2186,11 +2226,17 @@ def _add_guesses(self, phase_name, phase, guesses): val, guess_key, phase), units=units) except KeyError: try: - self.set_val(f'traj.{phase_name}.polynomial_controls:{guess_key}', self._process_guess_var( - val, guess_key, phase), units=units) + self.set_val( + f'traj.{phase_name}.polynomial_controls:{guess_key}', + self._process_guess_var( + val, guess_key, phase), + units=units) except KeyError: - self.set_val(f'traj.{phase_name}.bspline_controls:{guess_key}', self._process_guess_var( - val, guess_key, phase), units=units) + self.set_val( + f'traj.{phase_name}.bspline_controls:{guess_key}', + self._process_guess_var( + val, guess_key, phase), + units=units) if self.mission_method is SOLVED_2DOF: continue @@ -2204,8 +2250,10 @@ def _add_guesses(self, phase_name, phase, guesses): elif guess_key in prob_keys: self.set_val(guess_key, val, units=units) elif ":" in guess_key: - self.set_val(f'traj.{phase_name}.{guess_key}', self._process_guess_var( - val, guess_key, phase), units=units) + self.set_val( + f'traj.{phase_name}.{guess_key}', self._process_guess_var( + val, guess_key, phase), + units=units) else: # raise error if the guess key is not recognized raise ValueError( @@ -2265,10 +2313,10 @@ def _add_guesses(self, phase_name, phase, guesses): Dynamic.Mission.DISTANCE, ys=ys) ) - def run_aviary_problem(self, - record_filename="problem_history.db", - optimization_history_filename=None, - restart_filename=None, suppress_solver_print=True, run_driver=True, simulate=False, make_plots=True): + def run_aviary_problem(self, record_filename="problem_history.db", + optimization_history_filename=None, restart_filename=None, + suppress_solver_print=True, run_driver=True, simulate=False, + make_plots=True): """ This function actually runs the Aviary problem, which could be a simulation, optimization, or a driver execution, depending on the arguments provided. @@ -2304,8 +2352,9 @@ def run_aviary_problem(self, # and run mission, and dynamics if run_driver: - failed = dm.run_problem(self, run_driver=run_driver, simulate=simulate, make_plots=make_plots, - solution_record_file=record_filename, restart=restart_filename) + failed = dm.run_problem( + self, run_driver=run_driver, simulate=simulate, make_plots=make_plots, + solution_record_file=record_filename, restart=restart_filename) else: # prevent UserWarning that is displayed when an event is triggered warnings.filterwarnings('ignore', category=UserWarning) @@ -2339,12 +2388,14 @@ def _add_vrotate_comp(self): 'vrot_comp.mass', src_indices=om.slicer[0, ...]) vrot_eq_comp = self.model.add_subsystem("vrot_eq_comp", om.EQConstraintComp()) - vrot_eq_comp.add_eq_output("v_rotate_error", eq_units="kn", - lhs_name="v_rot_computed", rhs_name="groundroll_v_final", add_constraint=True) + vrot_eq_comp.add_eq_output( + "v_rotate_error", eq_units="kn", lhs_name="v_rot_computed", + rhs_name="groundroll_v_final", add_constraint=True) self.model.connect('vrot_comp.Vrot', 'vrot_eq_comp.v_rot_computed') - self.model.connect('traj.groundroll.timeseries.velocity', - 'vrot_eq_comp.groundroll_v_final', src_indices=om.slicer[-1, ...]) + self.model.connect( + 'traj.groundroll.timeseries.velocity', 'vrot_eq_comp.groundroll_v_final', + src_indices=om.slicer[-1, ...]) def _save_to_csv_file(self, filename): with open(filename, 'w', newline='') as csvfile: @@ -2382,7 +2433,8 @@ def _add_height_energy_landing_systems(self): last_flight_phase_name = list(self.phase_info.keys())[-1] control_type_string = 'control_values' - if self.phase_info[last_flight_phase_name]['user_options'].get('use_polynomial_control', True): + if self.phase_info[last_flight_phase_name]['user_options'].get( + 'use_polynomial_control', True): if not use_new_dymos_syntax: control_type_string = 'polynomial_control_values' @@ -2395,8 +2447,8 @@ def _add_height_energy_landing_systems(self): def _add_post_mission_takeoff_systems(self): first_flight_phase_name = list(self.phase_info.keys())[0] - connect_takeoff_to_climb = not self.phase_info[first_flight_phase_name]['user_options'].get( - 'add_initial_mass_constraint', True) + connect_takeoff_to_climb = not self.phase_info[first_flight_phase_name][ + 'user_options'].get('add_initial_mass_constraint', True) if connect_takeoff_to_climb: self.model.connect(Mission.Takeoff.FINAL_MASS, @@ -2405,11 +2457,13 @@ def _add_post_mission_takeoff_systems(self): f'traj.{first_flight_phase_name}.initial_states:distance') control_type_string = 'control_values' - if self.phase_info[first_flight_phase_name]['user_options'].get('use_polynomial_control', True): + if self.phase_info[first_flight_phase_name]['user_options'].get( + 'use_polynomial_control', True): if not use_new_dymos_syntax: control_type_string = 'polynomial_control_values' - if self.phase_info[first_flight_phase_name]['user_options'].get('optimize_mach', False): + if self.phase_info[first_flight_phase_name]['user_options'].get( + 'optimize_mach', False): # Create an ExecComp to compute the difference in mach mach_diff_comp = om.ExecComp( 'mach_resid_for_connecting_takeoff = final_mach - initial_mach') @@ -2418,23 +2472,27 @@ def _add_post_mission_takeoff_systems(self): # Connect the inputs to the mach difference component self.model.connect(Mission.Takeoff.FINAL_MACH, 'mach_diff_comp.final_mach') - self.model.connect(f'traj.{first_flight_phase_name}.{control_type_string}:mach', - 'mach_diff_comp.initial_mach', src_indices=[0]) + self.model.connect( + f'traj.{first_flight_phase_name}.{control_type_string}:mach', + 'mach_diff_comp.initial_mach', src_indices=[0]) # Add constraint for mach difference self.model.add_constraint( 'mach_diff_comp.mach_resid_for_connecting_takeoff', equals=0.0) - if self.phase_info[first_flight_phase_name]['user_options'].get('optimize_altitude', False): + if self.phase_info[first_flight_phase_name]['user_options'].get( + 'optimize_altitude', False): # Similar steps for altitude difference alt_diff_comp = om.ExecComp( - 'altitude_resid_for_connecting_takeoff = final_altitude - initial_altitude', units='ft') + 'altitude_resid_for_connecting_takeoff = final_altitude - initial_altitude', + units='ft') self.model.add_subsystem('alt_diff_comp', alt_diff_comp) self.model.connect(Mission.Takeoff.FINAL_ALTITUDE, 'alt_diff_comp.final_altitude') - self.model.connect(f'traj.{first_flight_phase_name}.{control_type_string}:altitude', - 'alt_diff_comp.initial_altitude', src_indices=[0]) + self.model.connect( + f'traj.{first_flight_phase_name}.{control_type_string}:altitude', + 'alt_diff_comp.initial_altitude', src_indices=[0]) self.model.add_constraint( 'alt_diff_comp.altitude_resid_for_connecting_takeoff', equals=0.0) @@ -2507,34 +2565,36 @@ def _add_fuel_reserve_component(self, post_mission=True, RESERVE_FUEL_FRACTION = self.aviary_inputs.get_val( Aircraft.Design.RESERVE_FUEL_FRACTION, units='unitless') if RESERVE_FUEL_FRACTION != 0: - reserve_fuel_frac = om.ExecComp('reserve_fuel_frac_mass = reserve_fuel_fraction * (takeoff_mass - final_mass)', - reserve_fuel_frac_mass={"units": "lbm"}, - reserve_fuel_fraction={ - "units": "unitless", "val": RESERVE_FUEL_FRACTION}, - final_mass={"units": "lbm"}, - takeoff_mass={"units": "lbm"}) - - reserve_calc_location.add_subsystem("reserve_fuel_frac", reserve_fuel_frac, - promotes_inputs=[("takeoff_mass", Mission.Summary.GROSS_MASS), - ("final_mass", - Mission.Landing.TOUCHDOWN_MASS), - ("reserve_fuel_fraction", Aircraft.Design.RESERVE_FUEL_FRACTION)], - promotes_outputs=["reserve_fuel_frac_mass"]) + reserve_fuel_frac = om.ExecComp( + 'reserve_fuel_frac_mass = reserve_fuel_fraction * (takeoff_mass - final_mass)', + reserve_fuel_frac_mass={"units": "lbm"}, + reserve_fuel_fraction={"units": "unitless", + "val": RESERVE_FUEL_FRACTION}, + final_mass={"units": "lbm"}, + takeoff_mass={"units": "lbm"}) + + reserve_calc_location.add_subsystem( + "reserve_fuel_frac", reserve_fuel_frac, + promotes_inputs=[("takeoff_mass", Mission.Summary.GROSS_MASS), + ("final_mass", Mission.Landing.TOUCHDOWN_MASS), + ("reserve_fuel_fraction", Aircraft.Design. + RESERVE_FUEL_FRACTION)], + promotes_outputs=["reserve_fuel_frac_mass"]) RESERVE_FUEL_ADDITIONAL = self.aviary_inputs.get_val( Aircraft.Design.RESERVE_FUEL_ADDITIONAL, units='lbm') - reserve_fuel = om.ExecComp('reserve_fuel = reserve_fuel_frac_mass + reserve_fuel_additional + reserve_fuel_burned', - reserve_fuel={"units": "lbm", 'shape': 1}, - reserve_fuel_frac_mass={"units": "lbm", "val": 0}, - reserve_fuel_additional={ - "units": "lbm", "val": RESERVE_FUEL_ADDITIONAL}, - reserve_fuel_burned={"units": "lbm", "val": 0}) - - reserve_calc_location.add_subsystem("reserve_fuel", reserve_fuel, - promotes_inputs=["reserve_fuel_frac_mass", - ("reserve_fuel_additional", - Aircraft.Design.RESERVE_FUEL_ADDITIONAL), - ("reserve_fuel_burned", Mission.Summary.RESERVE_FUEL_BURNED)], - promotes_outputs=[ - ("reserve_fuel", reserves_name)] - ) + reserve_fuel = om.ExecComp( + 'reserve_fuel = reserve_fuel_frac_mass + reserve_fuel_additional + reserve_fuel_burned', + reserve_fuel={"units": "lbm", 'shape': 1}, + reserve_fuel_frac_mass={"units": "lbm", "val": 0}, + reserve_fuel_additional={"units": "lbm", "val": RESERVE_FUEL_ADDITIONAL}, + reserve_fuel_burned={"units": "lbm", "val": 0}) + + reserve_calc_location.add_subsystem( + "reserve_fuel", reserve_fuel, + promotes_inputs=["reserve_fuel_frac_mass", + ("reserve_fuel_additional", Aircraft.Design. + RESERVE_FUEL_ADDITIONAL), + ("reserve_fuel_burned", + Mission.Summary.RESERVE_FUEL_BURNED)], + promotes_outputs=[("reserve_fuel", reserves_name)]) diff --git a/cannonball_copy.py b/cannonball_copy.py index 2124345ec..9f1d81303 100644 --- a/cannonball_copy.py +++ b/cannonball_copy.py @@ -17,7 +17,6 @@ Could also add a "fuel" parameter which can then be minimized. """ -# Working version class CannonballSizing(om.ExplicitComponent): @@ -119,6 +118,7 @@ def compute(self, inputs, outputs): outputs['ke'] = 0.5*m*v**2 +# ODEs are unique to each traj created def createTrajectory(ke_max): traj = dm.Trajectory() transcription = dm.Radau(num_segments=5, order=3, compressed=True) @@ -142,7 +142,7 @@ def createTrajectory(ke_max): phase.add_parameter('price', units='USD', static_target=True, val=10) phase.add_parameter('CD', units=None, static_target=True, val=0.5) - descent.add_objective('r', loc='final', scaler=-1.0) # negative means to maximize + # descent.add_objective('r', loc='final', scaler=-1.0) # negative means to maximize for param in ('CD', 'm', 'S', 'price'): traj.add_parameter(param, static_target=True) @@ -160,28 +160,43 @@ def createTrajectory(ke_max): p.driver.options['optimizer'] = 'SLSQP' p.driver.declare_coloring() -p.model.add_subsystem('size_comp', CannonballSizing(), +kes = [4e5, 5e5, 6e5] +# 2:1 ratio (or 1:2) causes results that essentially don't optimize the 1 mission, +# 1.01 works, 1.009 doesn't +# 2:1:1 works?! - may be related some normalization/bounds issue +weights = [2.1, 1.5, 1.1] +num_trajs = len(kes) + +p.model.add_subsystem(f"sizing_comp", CannonballSizing(), promotes_inputs=['radius', 'dens']) + p.model.set_input_defaults('dens', val=7.87, units='g/cm**3') p.model.add_design_var('radius', lower=0.01, upper=0.10, ref0=0.01, ref=0.10, units='m') -kes = [4e5, 5e5] trajs, ascents, descents = [], [], [] -for ke in kes: - a, b, c = createTrajectory(ke) - trajs.append(a) - ascents.append(b) - descents.append(c) -# traj, ascent, descent = createTrajectory(4e5) -p.model.add_subsystem('traj', trajs[1]) -ascent = ascents[1] -descent = descents[1] - -# Issue Connections -p.model.connect('size_comp.mass', 'traj.parameters:m') -p.model.connect('size_comp.price', 'traj.parameters:price') -p.model.connect('size_comp.S', 'traj.parameters:S') +for i, ke in enumerate(kes): + traj, ascent, descent = createTrajectory(ke) + p.model.add_subsystem(f"traj_{i}", traj) + + # Issue Connections + p.model.connect(f"sizing_comp.mass", f"traj_{i}.parameters:m") + p.model.connect(f"sizing_comp.S", f"traj_{i}.parameters:S") + p.model.connect(f"sizing_comp.price", f"traj_{i}.parameters:price") + trajs.append(traj) + ascents.append(ascent) + descents.append(descent) + +ranges = [f"r{i}" for i in range(num_trajs)] +weighted_sum_str = "+".join([f"{weight}*{r}" for r, weight in zip(ranges, weights)]) +p.model.add_subsystem('compoundComp', om.ExecComp("compound_range="+weighted_sum_str), + promotes=['compound_range', *ranges]) + +for i in range(num_trajs): + p.model.connect(f"traj_{i}.descent.states:r", ranges[i], src_indices=-1) + +p.model.add_objective('compound_range', scaler=-1) + # A linear solver at the top level can improve performance. p.model.linear_solver = om.DirectSolver() @@ -190,23 +205,25 @@ def createTrajectory(ke_max): p.set_val('radius', 0.05, units='m') p.set_val('dens', 7.87, units='g/cm**3') -p.set_val('traj.parameters:CD', 0.5) +for i, (ascent, descent) in enumerate(zip(ascents, descents)): + p.set_val(f"traj_{i}.parameters:CD", 0.5) -p.set_val('traj.ascent.t_initial', 0.0) -p.set_val('traj.ascent.t_duration', 10.0) -# list is initial and final, based on phase info some are fixed others are not -p.set_val('traj.ascent.states:r', ascent.interp('r', [0, 100])) -p.set_val('traj.ascent.states:h', ascent.interp('h', [0, 100])) -p.set_val('traj.ascent.states:v', ascent.interp('v', [200, 150])) -p.set_val('traj.ascent.states:gam', ascent.interp('gam', [25, 0]), units='deg') + p.set_val(f"traj_{i}.ascent.t_initial", 0.0) + p.set_val(f"traj_{i}.ascent.t_duration", 10.0) + # list is initial and final, based on phase info some are fixed others are not + p.set_val(f"traj_{i}.ascent.states:r", ascent.interp('r', [0, 100])) + p.set_val(f'traj_{i}.ascent.states:h', ascent.interp('h', [0, 100])) + p.set_val(f'traj_{i}.ascent.states:v', ascent.interp('v', [200, 150])) + p.set_val(f'traj_{i}.ascent.states:gam', ascent.interp('gam', [25, 0]), units='deg') -p.set_val('traj.descent.t_initial', 10.0) -p.set_val('traj.descent.t_duration', 10.0) + p.set_val(f'traj_{i}.descent.t_initial', 10.0) + p.set_val(f'traj_{i}.descent.t_duration', 10.0) -p.set_val('traj.descent.states:r', descent.interp('r', [100, 200])) -p.set_val('traj.descent.states:h', descent.interp('h', [100, 0])) -p.set_val('traj.descent.states:v', descent.interp('v', [150, 200])) -p.set_val('traj.descent.states:gam', descent.interp('gam', [0, -45]), units='deg') + p.set_val(f'traj_{i}.descent.states:r', descent.interp('r', [100, 200])) + p.set_val(f'traj_{i}.descent.states:h', descent.interp('h', [100, 0])) + p.set_val(f'traj_{i}.descent.states:v', descent.interp('v', [150, 200])) + p.set_val(f'traj_{i}.descent.states:gam', + descent.interp('gam', [0, -45]), units='deg') dm.run_problem(p, simulate=True) @@ -215,60 +232,66 @@ def createTrajectory(ke_max): def plotstuff(): - rad = p.get_val('radius', units='m')[0] - print(f'optimal radius: {rad} m ') - mass = p.get_val('size_comp.mass', units='kg')[0] - print(f'cannonball mass: {mass} kg ') - price = p.get_val('size_comp.price', units='USD')[0] - print(f'cannonball price: ${price:.2f}') - area = p.get_val('size_comp.S', units='cm**2')[0] - print(f'cannonball aerodynamic reference area: {area} cm**2 ') - angle = p.get_val('traj.ascent.timeseries.gam', units='deg')[0, 0] - print(f'launch angle: {angle} deg') - max_range = p.get_val('traj.descent.timeseries.r')[-1, 0] - print(f'maximum range: {max_range} m') - - fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10, 6)) - time_imp = {'ascent': p.get_val('traj.ascent.timeseries.time'), - 'descent': p.get_val('traj.descent.timeseries.time')} - time_exp = {'ascent': sim.get_val('traj.ascent.timeseries.time'), - 'descent': sim.get_val('traj.descent.timeseries.time')} - r_imp = {'ascent': p.get_val('traj.ascent.timeseries.r'), - 'descent': p.get_val('traj.descent.timeseries.r')} - r_exp = {'ascent': sim.get_val('traj.ascent.timeseries.r'), - 'descent': sim.get_val('traj.descent.timeseries.r')} - h_imp = {'ascent': p.get_val('traj.ascent.timeseries.h'), - 'descent': p.get_val('traj.descent.timeseries.h')} - h_exp = {'ascent': sim.get_val('traj.ascent.timeseries.h'), - 'descent': sim.get_val('traj.descent.timeseries.h')} - - axes.plot(r_imp['ascent'], h_imp['ascent'], 'bo') - axes.plot(r_imp['descent'], h_imp['descent'], 'ro') - axes.plot(r_exp['ascent'], h_exp['ascent'], 'b--') - axes.plot(r_exp['descent'], h_exp['descent'], 'r--') - - axes.set_xlabel('range (m)') - axes.set_ylabel('altitude (m)') - axes.grid(True) - - fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(10, 6)) - states = ['r', 'h', 'v', 'gam'] - for i, state in enumerate(states): - x_imp = {'ascent': sol.get_val(f'traj.ascent.timeseries.{state}'), - 'descent': sol.get_val(f'traj.descent.timeseries.{state}')} - - x_exp = {'ascent': sim.get_val(f'traj.ascent.timeseries.{state}'), - 'descent': sim.get_val(f'traj.descent.timeseries.{state}')} - - axes[i].set_ylabel(state) - axes[i].grid(True) - - axes[i].plot(time_imp['ascent'], x_imp['ascent'], 'bo') - axes[i].plot(time_imp['descent'], x_imp['descent'], 'ro') - axes[i].plot(time_exp['ascent'], x_exp['ascent'], 'b--') - axes[i].plot(time_exp['descent'], x_exp['descent'], 'r--') - - plt.show() + print("\n\n=================================================") + print( + f"Optimized {num_trajs} trajectories with weights: {', '.join(map(str,weights))}") + rad = p.get_val('radius', units='cm')[0] + mass = p.get_val('sizing_comp.mass', units='kg')[0] + price = p.get_val('sizing_comp.price', units='USD')[0] + area = p.get_val('sizing_comp.S', units='cm**2')[0] + print("\nOptimal Cannonball Description:") + print( + f"\tRadius: {rad:.2f} cm, Mass: {mass:.2f} kg, Price: ${price:.2f}, Area: {area:.2f} sqcm") + + print("\nOptimal Trajectory Descriptions:") + for i, ke in enumerate(kes): + angle = p.get_val(f'traj_{i}.ascent.timeseries.gam', units='deg')[0, 0] + max_range = p.get_val(f'traj_{i}.descent.timeseries.r')[-1, 0] + + print( + f"\tKE: {ke/1e3:.2f} KJ, Launch Angle: {angle:.2f} deg, Max Range: {max_range:.2f} m") + + # fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10, 6)) + # time_imp = {'ascent': p.get_val('traj_0.ascent.timeseries.time'), + # 'descent': p.get_val('traj_0.descent.timeseries.time')} + # time_exp = {'ascent': sim.get_val('traj_0.ascent.timeseries.time'), + # 'descent': sim.get_val('traj_0.descent.timeseries.time')} + # r_imp = {'ascent': p.get_val('traj_0.ascent.timeseries.r'), + # 'descent': p.get_val('traj_0.descent.timeseries.r')} + # r_exp = {'ascent': sim.get_val('traj_0.ascent.timeseries.r'), + # 'descent': sim.get_val('traj_0.descent.timeseries.r')} + # h_imp = {'ascent': p.get_val('traj_0.ascent.timeseries.h'), + # 'descent': p.get_val('traj_0.descent.timeseries.h')} + # h_exp = {'ascent': sim.get_val('traj_0.ascent.timeseries.h'), + # 'descent': sim.get_val('traj_0.descent.timeseries.h')} + + # axes.plot(r_imp['ascent'], h_imp['ascent'], 'bo') + # axes.plot(r_imp['descent'], h_imp['descent'], 'ro') + # axes.plot(r_exp['ascent'], h_exp['ascent'], 'b--') + # axes.plot(r_exp['descent'], h_exp['descent'], 'r--') + + # axes.set_xlabel('range (m)') + # axes.set_ylabel('altitude (m)') + # axes.grid(True) + + # fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(10, 6)) + # states = ['r', 'h', 'v', 'gam'] + # for i, state in enumerate(states): + # x_imp = {'ascent': sol.get_val(f'traj_0.ascent.timeseries.{state}'), + # 'descent': sol.get_val(f'traj_0.descent.timeseries.{state}')} + + # x_exp = {'ascent': sim.get_val(f'traj_0.ascent.timeseries.{state}'), + # 'descent': sim.get_val(f'traj_0.descent.timeseries.{state}')} + + # axes[i].set_ylabel(state) + # axes[i].grid(True) + + # axes[i].plot(time_imp['ascent'], x_imp['ascent'], 'bo') + # axes[i].plot(time_imp['descent'], x_imp['descent'], 'ro') + # axes[i].plot(time_exp['ascent'], x_exp['ascent'], 'b--') + # axes[i].plot(time_exp['descent'], x_exp['descent'], 'r--') + + # plt.show() plotstuff() diff --git a/multi_mission_importTraj_N2.html b/multi_mission_importTraj_N2.html new file mode 100644 index 000000000..c1b62f22d --- /dev/null +++ b/multi_mission_importTraj_N2.html @@ -0,0 +1,14840 @@ + + + +OpenMDAO Model Hierarchy and N2 diagram + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+
+
+ + + +
+
+ + +
+
+ + + + + +
+
+ + + + +
+
+ +
+
+ +
+ +
+
+ +
+ +
+
+ Processing... +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+
+ + + +
+ +
+ +
+
+ +
+
+
+
+ N2 Information +
+ + +
+ +
+
+
+
+
+ + + + + + + + + + +
+ +
+ +
+ +
+ +
+

Left-click on a node in the model hierarchy to navigate to that node.
+ Right-click on a node to collapse/expand it. + Alt-right-click on a node with variables to select which ones to hide.
+ Note: Right-click in Firefox displays a browser menu. To disable that, + visit about:config and set dom.event.contextmenu.enabled + to true.
+ Hover over any cell in the matrix to display its connections + as arrows. Click that cell to make those arrows persistent. +

+

Toolbar Help

+
+ Snapshot of toolbar buttons + +
+
+ +
+ + + + + + +
Variable NameVisible
+
+ + +
+
+
+ Search + +
+
+ + + +
+
+
+ + + + + + + diff --git a/multimission.py b/multimission.py index e7d4c7d14..c5da0f2b2 100644 --- a/multimission.py +++ b/multimission.py @@ -32,13 +32,13 @@ prob.link_phases() probs.append(prob) - subcomp = om.SubmodelComp(problem=prob, - inputs=['mission:design:gross_mass'], - outputs=['mission:summary:fuel_burned']) + subcomp = om.SubmodelComp( + problem=prob, inputs=['mission:design:gross_mass', 'aircraft:wing:span'], + outputs=['mission:summary:fuel_burned']) # promoting gross mass to be used as a design var # all problems have same name for gross mass so they are connected super_prob.model.add_subsystem(f'subcomp_{i}', subcomp, promotes_inputs=[ - 'mission:design:gross_mass']) + 'mission:design:gross_mass', 'aircraft:wing:span']) # creating variable strings that will represent fuel burn from each mission fuel_burned_vars = [f"fuel_{i}" for i in range(num_missions)] @@ -59,6 +59,10 @@ super_prob.model.add_design_var( 'mission:design:gross_mass', lower=100e3, upper=1000e3, units='lbm') + # this throws error: output not found for this design var + # super_prob.model.add_design_var( + # 'aircraft:design:span', lower=100., upper=300., units='ft') + super_prob.driver = om.ScipyOptimizeDriver() super_prob.driver.options['optimizer'] = 'SLSQP' diff --git a/multitraj.py b/multitraj.py new file mode 100644 index 000000000..6a833de6c --- /dev/null +++ b/multitraj.py @@ -0,0 +1,153 @@ +""" +Goal: use single aircraft description but optimize it for multiple missions simultaneously, +i.e. all missions are on the range-payload line instead of having excess performance +Aircraft csv: defines plane, but also defines payload (passengers, cargo) which can vary with mission + These will have to be specified in some alternate way such as a list correspond to mission # +Phase info: defines a particular mission, will have multiple phase infos +""" +import warnings +import aviary.api as av +import openmdao.api as om +import dymos as dm +from aviary.variable_info.enums import ProblemType +from c5_ferry_phase_info import phase_info as c5_ferry_phase_info +from c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info +from c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info +from aviary.variable_info.variable_meta_data import _MetaData as MetaData + +planes = ['c5_maxpayload.csv', 'c5_intermediate.csv'] +phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] +weights = [1, 1] +num_missions = len(weights) + +# "comp?.a can be used to reference multiple comp1.a comp2.a etc" + + +def setupprob(super_prob): + # Aviary's problem setup wrapper uses these ignored warnings to suppress + # some warnings related to variable promotion. Replicating that here with + # setup for the super problem + with warnings.catch_warnings(): + warnings.simplefilter("ignore", om.OpenMDAOWarning) + warnings.simplefilter("ignore", om.PromotionWarning) + super_prob.setup() + + +if __name__ == '__main__': + super_prob = om.Problem() + probs = [] + prefix = "problem_" + + # define individual aviary problems + for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): + prob = av.AviaryProblem() + prob.load_inputs(plane, phase_info) + prob.check_and_preprocess_inputs() + prob.add_pre_mission_systems() + traj = prob.add_phases() # save dymos traj to add to super problem as a subsystem + prob.add_post_mission_systems() + prob.link_phases() + prob.problem_type = ProblemType.ALTERNATE # adds summary gross mass as design var + prob.add_design_variables() + probs.append(prob) + + group = om.Group() # this group will contain all the promoted aviary vars + group.add_subsystem("pre", prob.pre_mission) + group.add_subsystem("traj", traj) + group.add_subsystem("post", prob.post_mission) + + # setting defaults for these variables to suppress errors + longlst = [ + 'mission:summary:gross_mass', 'aircraft:wing:sweep', + 'aircraft:wing:thickness_to_chord', 'aircraft:wing:area', + 'aircraft:wing:taper_ratio', 'mission:design:gross_mass'] + for var in longlst: + group.set_input_defaults( + var, val=MetaData[var]['default_value'], + units=MetaData[var]['units']) + + # add group and promote design gross mass (common input amongst multiple missions) + # in this way it represents the MTOW + super_prob.model.add_subsystem(prefix+f'{i}', group, promotes=[ + 'mission:design:gross_mass']) + + # add design gross mass as a design var + super_prob.model.add_design_var( + 'mission:design:gross_mass', lower=100e3, upper=1000e3) + + for i in range(num_missions): + # connecting each subcomponent's fuel burn to super problem's unique fuel variables + super_prob.model.connect( + prefix+f"{i}.mission:summary:fuel_burned", f"fuel_{i}") + + # create constraint to force each mission's summary gross mass to not + # exceed the common mission design gross mass (aka MTOW) + super_prob.model.add_subsystem(f'MTOW_constraint{i}', om.ExecComp( + 'mtow_resid = design_gross_mass - summary_gross_mass'), + promotes=[('summary_gross_mass', prefix+f'{i}.mission:summary:gross_mass'), + ('design_gross_mass', 'mission:design:gross_mass')]) + + super_prob.model.add_constraint(f'MTOW_constraint{i}.mtow_resid', lower=0.) + + # creating variable strings that will represent fuel burn from each mission + fuel_burned_vars = [f"fuel_{i}" for i in range(num_missions)] + weighted_str = "+".join([f"{fuel}*{weight}" + for fuel, weight in zip(fuel_burned_vars, weights)]) + # weighted_str looks like: fuel_0 * weight[0] + fuel_1 * weight[1] + + # adding compound execComp to super problem + super_prob.model.add_subsystem('compound_fuel_burn_objective', om.ExecComp( + "compound = "+weighted_str), promotes=["compound", *fuel_burned_vars]) + + super_prob.driver = om.ScipyOptimizeDriver() + super_prob.driver.options['optimizer'] = 'SLSQP' + super_prob.model.add_objective('compound') # output from execcomp goes here + + setupprob(super_prob) + om.n2(super_prob, outfile="multi_mission_importTraj_N2.html") # create N2 diagram + # for prob in probs: + # # prob.setup() + # prob.set_initial_guesses() + + # dm.run_problem(super_prob) + + +""" +Ferry mission phase info: +Times (min): 0, 50, 812, 843 + Alt (ft): 0, 29500, 32000, 0 + Mach: 0.3, 0.77, 0.77, 0.3 +Est. Range: 7001 nmi +Notes: 32k in 30 mins too fast for aviary, climb to low alt then slow rise through cruise + +Intermediate mission phase info: +Times (min): 0, 50, 560, 590 + Alt (ft): 0, 29500, 32000, 0 + Mach: 0.3, 0.77, 0.77, 0.3 +Est. Range: 4839 nmi + +Max Payload mission phase info: +Times (min): 0, 50, 260, 290 + Alt (ft): 0, 29500, 32000, 0 + Mach: 0.3, 0.77, 0.77, 0.3 +Est. Range: 2272 nmi + +Hard to find multiple payload/range values for FwFm (737), so use C-5 instead +Based on: + https://en.wikipedia.org/wiki/Lockheed_C-5_Galaxy#Specifications_(C-5M), + https://www.af.mil/About-Us/Fact-Sheets/Display/Article/1529718/c-5-abc-galaxy-and-c-5m-super-galaxy/ + +MTOW: 840,000 lb +Max Payload: 281,000 lb +Max Fuel: 341,446 lb +Empty Weight: 380,000 lb -> leaves 460,000 lb for fuel+payload (max fuel + max payload = 622,446 lb) + +Payload/range: + 281,000 lb payload -> 2,150 nmi range (AF.mil) [max payload case] + 120,000 lb payload -> 4,800 nmi range (AF.mil) [intermediate case] + 0 lb payload -> 7,000 nmi range (AF.mil) [ferry case] + +Flight characteristics: + Cruise at M0.77 at 33k ft + Max rate of climb: 2100 ft/min +""" From aebe4d2befcd6b60b77a186ab81957e0f79ed5f6 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Fri, 26 Jul 2024 14:51:59 -0400 Subject: [PATCH 012/113] aviary style cannonball problem --- AvCannonball.html | 14840 ++++++++++++++++++++++++++++++++++++++++++++ avcannonball.py | 268 + cannonball.py | 14 +- multimission.py | 3 +- 4 files changed, 15121 insertions(+), 4 deletions(-) create mode 100644 AvCannonball.html create mode 100644 avcannonball.py diff --git a/AvCannonball.html b/AvCannonball.html new file mode 100644 index 000000000..12372760f --- /dev/null +++ b/AvCannonball.html @@ -0,0 +1,14840 @@ + + + +OpenMDAO Model Hierarchy and N2 diagram + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+
+
+ + + +
+
+ + +
+
+ + + + + +
+
+ + + + +
+
+ +
+
+ +
+ +
+
+ +
+ +
+
+ Processing... +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+
+ + + +
+ +
+ +
+
+ +
+
+
+
+ N2 Information +
+ + +
+ +
+
+
+
+
+ + + + + + + + + + +
+ +
+ +
+ +
+ +
+

Left-click on a node in the model hierarchy to navigate to that node.
+ Right-click on a node to collapse/expand it. + Alt-right-click on a node with variables to select which ones to hide.
+ Note: Right-click in Firefox displays a browser menu. To disable that, + visit about:config and set dom.event.contextmenu.enabled + to true.
+ Hover over any cell in the matrix to display its connections + as arrows. Click that cell to make those arrows persistent. +

+

Toolbar Help

+
+ Snapshot of toolbar buttons + +
+
+ +
+ + + + + + +
Variable NameVisible
+
+ + +
+
+
+ Search + +
+
+ + + +
+
+
+ + + + + + + diff --git a/avcannonball.py b/avcannonball.py new file mode 100644 index 000000000..4961ae85b --- /dev/null +++ b/avcannonball.py @@ -0,0 +1,268 @@ +from dymos.models.atmosphere.atmos_1976 import USatm1976Data +from scipy.interpolate import interp1d +import openmdao.api as om +import dymos as dm +import numpy as np +import sys + + +class CannonballProblem(om.Problem): + def __init__(self): + super().__init__() + self.model = CannonballGroup() + self.pre_mission = PreMissionGroup() + self.post_mission = PostMissionGroup() + self.traj = None + self.model.add_subsystem('pre', self.pre_mission, + promotes_inputs=['*']) + self.model.add_subsystem('post', self.post_mission) + + def add_trajectory(self, ke_max=1e2): + # traj = self.model.add_subsystem('traj', dm.Trajectory(), promotes=['*']) + traj = dm.Trajectory() + transcription = dm.Radau(num_segments=5, order=3, compressed=True) + ascent = dm.Phase(ode_class=CannonballODE, transcription=transcription) + traj.add_phase('ascent', ascent) + + transcription = dm.GaussLobatto(num_segments=5, order=3, compressed=True) + descent = dm.Phase(ode_class=CannonballODE, transcription=transcription) + traj.add_phase('descent', descent) + + for phase in (ascent, descent): + is_ascent = phase.name == "ascent" + phase.set_time_options(fix_initial=True if is_ascent else False, + duration_bounds=(1, 100), duration_ref=100, units='s') + phase.set_state_options('r', fix_initial=is_ascent, fix_final=False) + phase.set_state_options('h', fix_initial=is_ascent, fix_final=not is_ascent) + phase.set_state_options('gam', fix_initial=False, fix_final=is_ascent) + phase.set_state_options('v', fix_initial=False, fix_final=False) + phase.add_parameter('S', units='m**2', static_target=True, val=0.005) + phase.add_parameter('m', units='kg', static_target=True, val=1.0) + phase.add_parameter('price', units='USD', static_target=True, val=10) + phase.add_parameter('CD', units=None, static_target=True, val=0.5) + + # descent.add_objective('r', loc='final', scaler=-1.0) # negative means to maximize + for param in ('CD', 'm', 'S', 'price'): + traj.add_parameter(param, static_target=True) + + # Link Phases (link time and all state variables) + traj.link_phases(phases=['ascent', 'descent'], vars=['*']) + # have to set muzzle energy here before setup for sim to run properly + ascent.add_boundary_constraint('ke', loc='initial', + upper=ke_max, lower=0, ref=100000) + self.traj = traj + self.model.add_subsystem('traj', traj) + self.phases = [ascent, descent] + + def setDefaults(self): + self.model.set_input_defaults('dens', val=7.87, units='g/cm**3') + + def addDesVar(self): + self.model.add_design_var('radius', lower=0.01, upper=0.10, + ref0=0.01, ref=0.10, units='m') + + def linkPhases(self): + self.model.connect('sizing_comp.mass', 'traj.parameters:m') + self.model.connect('sizing_comp.S', 'traj.parameters:S') + self.model.connect('sizing_comp.price', 'traj.parameters:price') + + def setInitialVals(self): + self.set_val('radius', 0.05, units='m') + self.set_val('dens', 7.87, units='g/cm**3') + + self.set_val("traj.parameters:CD", 0.5) + + self.set_val("traj.ascent.t_initial", 0.0) + self.set_val("traj.ascent.t_duration", 10.0) + # list is initial and final, based on phase info some are fixed others are not + ascent, descent = self.phases + self.set_val("traj.ascent.states:r", ascent.interp('r', [0, 100])) + self.set_val('traj.ascent.states:h', ascent.interp('h', [0, 100])) + self.set_val('traj.ascent.states:v', ascent.interp('v', [200, 150])) + self.set_val('traj.ascent.states:gam', + ascent.interp('gam', [25, 0]), units='deg') + + self.set_val('traj.descent.t_initial', 10.0) + self.set_val('traj.descent.t_duration', 10.0) + + self.set_val('traj.descent.states:r', descent.interp('r', [100, 200])) + self.set_val('traj.descent.states:h', descent.interp('h', [100, 0])) + self.set_val('traj.descent.states:v', descent.interp('v', [150, 200])) + self.set_val('traj.descent.states:gam', + descent.interp('gam', [0, -45]), units='deg') + + +class CannonballGroup(om.Group): + def __init__(self): + super().__init__() + + +class PreMissionGroup(om.Group): + def __init__(self): + super().__init__() + self.sizingcomp = CannonballSizing() + self.add_subsystem('sizing_comp', self.sizingcomp, + promotes_inputs=['*']) + + +class PostMissionGroup(om.Group): + pass + + +class CannonballODE(om.ExplicitComponent): + def initialize(self): + self.options.declare('num_nodes', types=int) + + def setup(self): + nn = self.options['num_nodes'] + # static params + self.add_input('m', units='kg') + self.add_input('S', units='m**2') + self.add_input('CD', 0.5) + + # time varying inputs + self.add_input('h', units='m', shape=nn) + self.add_input('v', units='m/s', shape=nn) + self.add_input('gam', units='rad', shape=nn) + + # state rates + self.add_output('v_dot', shape=nn, units='m/s**2', + tags=['dymos.state_rate_source:v']) + self.add_output('gam_dot', shape=nn, units='rad/s', + tags=['dymos.state_rate_source:gam']) + self.add_output('h_dot', shape=nn, units='m/s', + tags=['dymos.state_rate_source:h']) + self.add_output('r_dot', shape=nn, units='m/s', + tags=['dymos.state_rate_source:r']) + self.add_output('ke', shape=nn, units='J') + + # Ask OpenMDAO to compute the partial derivatives using complex-step + # with a partial coloring algorithm for improved performance, and use + # a graph coloring algorithm to automatically detect the sparsity pattern. + self.declare_coloring(wrt='*', method='cs') + + alt_data = USatm1976Data.alt * om.unit_conversion('ft', 'm')[0] + rho_data = USatm1976Data.rho * om.unit_conversion('slug/ft**3', 'kg/m**3')[0] + self.rho_interp = interp1d(np.array(alt_data, dtype=complex), + np.array(rho_data, dtype=complex), + kind='linear') + + def compute(self, inputs, outputs): + + gam = inputs['gam'] + v = inputs['v'] + h = inputs['h'] + m = inputs['m'] + S = inputs['S'] + CD = inputs['CD'] + + GRAVITY = 9.80665 # m/s**2 + + # handle complex-step gracefully from the interpolant + if np.iscomplexobj(h): + rho = self.rho_interp(inputs['h']) + else: + rho = self.rho_interp(inputs['h']).real + + q = 0.5*rho*inputs['v']**2 + qS = q * S + D = qS * CD + cgam = np.cos(gam) + sgam = np.sin(gam) + outputs['v_dot'] = - D/m-GRAVITY*sgam + outputs['gam_dot'] = -(GRAVITY/v)*cgam + outputs['h_dot'] = v*sgam + outputs['r_dot'] = v*cgam + outputs['ke'] = 0.5*m*v**2 + + +class CannonballSizing(om.ExplicitComponent): + def setup(self): + self.add_input(name='radius', val=1.0, units='m') + self.add_input(name='dens', val=7870., units='kg/m**3') + + self.add_output(name='mass', shape=(1,), units='kg') + self.add_output(name='S', shape=(1,), units='m**2') + self.add_output(name='price', shape=(1,), units='USD') + + self.declare_partials(of='mass', wrt='dens') + self.declare_partials(of='mass', wrt='radius') + self.declare_partials(of='S', wrt='radius') + self.declare_partials(of='price', wrt='radius') + self.declare_partials(of='price', wrt='dens') + + def compute(self, inputs, outputs): + radius = inputs['radius'] + dens = inputs['dens'] + outputs['mass'] = (4/3.) * dens * np.pi * radius ** 3 + outputs['S'] = np.pi * radius ** 2 + outputs['price'] = (4/3.) * dens * np.pi * radius ** 3 * 10 # $10 per kg + + def compute_partials(self, inputs, partials): + radius = inputs['radius'] + dens = inputs['dens'] + partials['mass', 'dens'] = (4/3.) * np.pi * radius ** 3 + partials['mass', 'radius'] = 4. * dens * np.pi * radius ** 2 + partials['S', 'radius'] = 2 * np.pi * radius + partials['price', 'dens'] = (4/3.) * np.pi * radius ** 3 * 10 + partials['price', 'radius'] = 4. * dens * np.pi * radius ** 2 * 10 + + +# if run as python avcannonball.py n2, it will create an N2 +makeN2 = False +if len(sys.argv) > 1: + if "n2" in sys.argv[1].lower(): + makeN2 = True + +# handling of multiple KEs +kes = [4e3] +weights = [1] +# if fewer weights present than KEs, use same weight +if len(kes) > len(weights): + weights = [1]*len(kes) +elif len(kes) < len(weights): + raise Exception("Cannot have more weights than cannons!") +num_trajs = len(kes) + +probs = [] +super_prob = om.Problem() + +for i, ke in enumerate(kes): + prob = CannonballProblem() + prob.add_trajectory(ke_max=ke) + prob.setDefaults() + + group = om.Group() + group.add_subsystem('pre', prob.pre_mission) + group.add_subsystem('traj', prob.traj) + group.add_subsystem('post', prob.post_mission) + super_prob.model.add_subsystem(f'probgroup_{i}', group) + probs.append(prob) + +ranges = [f"r{i}" for i in range(num_trajs)] # looks like: [r0, r1, ...] +# weighted_sum_str looks like: 1*r0+1*r1+... +weighted_sum_str = "+".join([f"{weight}*{r}" for r, weight in zip(ranges, weights)]) +super_prob.model.add_subsystem('compoundComp', om.ExecComp( + "compound_range=" + weighted_sum_str), + promotes=['compound_range', *ranges]) + +for i in range(num_trajs): + super_prob.model.connect( + f'probgroup_{i}.traj.descent.states:r', ranges[i], + src_indices=-1) + +super_prob.model.add_objective('compound_range', scaler=-1) # maximize range + +super_prob.driver = om.ScipyOptimizeDriver() +super_prob.driver.options['optimizer'] = 'SLSQP' +super_prob.driver.declare_coloring() +super_prob.model.linear_solver = om.DirectSolver() +super_prob.setup() + +for prob in probs: + prob.setup() + prob.setInitialVals() + +if makeN2: + om.n2(super_prob, outfile='AvCannonball.html') +dm.run_problem(super_prob) diff --git a/cannonball.py b/cannonball.py index 9f1d81303..9d1fc49d3 100644 --- a/cannonball.py +++ b/cannonball.py @@ -1,4 +1,3 @@ -from os import stat import numpy as np from scipy.interpolate import interp1d import matplotlib.pyplot as plt @@ -191,9 +190,18 @@ def createTrajectory(ke_max): weighted_sum_str = "+".join([f"{weight}*{r}" for r, weight in zip(ranges, weights)]) p.model.add_subsystem('compoundComp', om.ExecComp("compound_range="+weighted_sum_str), promotes=['compound_range', *ranges]) - for i in range(num_trajs): - p.model.connect(f"traj_{i}.descent.states:r", ranges[i], src_indices=-1) + p.model.connect(f"traj_{i}.descent.states:r", f'r{i}', src_indices=-1) +# p.model.add_subsystem('compoundComp', +# om.ExecComp("compound_range=dot(ranges,weights)", +# weights={'val': weights}, +# ranges={'val': np.ones(num_trajs), 'units': 'm'}), +# promotes=['compound_range', 'ranges', 'weights']) + +# gg = [f'traj_{i}.descent.states:r' for i in range(num_trajs)] +# p.model.connect(gg, 'ranges', src_indices=-1) +# for i in range(num_trajs): +# p.model.connect(f"traj_{i}.descent.states:r", f'ranges[{i}]', src_indices=-1) p.model.add_objective('compound_range', scaler=-1) diff --git a/multimission.py b/multimission.py index c5da0f2b2..4506c0cb4 100644 --- a/multimission.py +++ b/multimission.py @@ -75,7 +75,8 @@ prob.set_initial_guesses() dm.run_problem(super_prob) - + print(super_prob.check_partials()) + # om.n2(super_prob) """ Ferry mission phase info: From 4abb769078f4b5235d494980967171944e0a5749 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Fri, 26 Jul 2024 18:15:53 -0400 Subject: [PATCH 013/113] working cannonball model with trajectory/pre mission copying --- AvCannonball.html | 2 +- avcannonball.py | 317 +++++++++++++++++++++++++++++++++++----------- cannonball.py | 4 +- 3 files changed, 246 insertions(+), 77 deletions(-) diff --git a/AvCannonball.html b/AvCannonball.html index 12372760f..ba97bc8b3 100644 --- a/AvCannonball.html +++ b/AvCannonball.html @@ -3255,7 +3255,7 @@

Toolbar Help

diff --git a/avcannonball.py b/avcannonball.py index 4961ae85b..b80a0fda9 100644 --- a/avcannonball.py +++ b/avcannonball.py @@ -1,5 +1,6 @@ from dymos.models.atmosphere.atmos_1976 import USatm1976Data from scipy.interpolate import interp1d +import matplotlib.pyplot as plt import openmdao.api as om import dymos as dm import numpy as np @@ -13,12 +14,11 @@ def __init__(self): self.pre_mission = PreMissionGroup() self.post_mission = PostMissionGroup() self.traj = None - self.model.add_subsystem('pre', self.pre_mission, - promotes_inputs=['*']) - self.model.add_subsystem('post', self.post_mission) + self.model.add_subsystem('pre_mission', self.pre_mission, + promotes=['*']) + self.model.add_subsystem('post_mission', self.post_mission) def add_trajectory(self, ke_max=1e2): - # traj = self.model.add_subsystem('traj', dm.Trajectory(), promotes=['*']) traj = dm.Trajectory() transcription = dm.Radau(num_segments=5, order=3, compressed=True) ascent = dm.Phase(ode_class=CannonballODE, transcription=transcription) @@ -55,20 +55,20 @@ def add_trajectory(self, ke_max=1e2): self.phases = [ascent, descent] def setDefaults(self): - self.model.set_input_defaults('dens', val=7.87, units='g/cm**3') + self.model.set_input_defaults('density', val=7.87, units='g/cm**3') def addDesVar(self): self.model.add_design_var('radius', lower=0.01, upper=0.10, ref0=0.01, ref=0.10, units='m') - def linkPhases(self): - self.model.connect('sizing_comp.mass', 'traj.parameters:m') - self.model.connect('sizing_comp.S', 'traj.parameters:S') - self.model.connect('sizing_comp.price', 'traj.parameters:price') + def connectPreTraj(self): + self.model.connect('mass', 'traj.parameters:m') + self.model.connect('S', 'traj.parameters:S') + self.model.connect('price', 'traj.parameters:price') def setInitialVals(self): self.set_val('radius', 0.05, units='m') - self.set_val('dens', 7.87, units='g/cm**3') + self.set_val('density', 7.87, units='g/cm**3') self.set_val("traj.parameters:CD", 0.5) @@ -102,7 +102,7 @@ def __init__(self): super().__init__() self.sizingcomp = CannonballSizing() self.add_subsystem('sizing_comp', self.sizingcomp, - promotes_inputs=['*']) + promotes=['*']) class PostMissionGroup(om.Group): @@ -179,33 +179,33 @@ def compute(self, inputs, outputs): class CannonballSizing(om.ExplicitComponent): def setup(self): self.add_input(name='radius', val=1.0, units='m') - self.add_input(name='dens', val=7870., units='kg/m**3') + self.add_input(name='density', val=7870., units='kg/m**3') self.add_output(name='mass', shape=(1,), units='kg') self.add_output(name='S', shape=(1,), units='m**2') self.add_output(name='price', shape=(1,), units='USD') - self.declare_partials(of='mass', wrt='dens') + self.declare_partials(of='mass', wrt='density') self.declare_partials(of='mass', wrt='radius') self.declare_partials(of='S', wrt='radius') self.declare_partials(of='price', wrt='radius') - self.declare_partials(of='price', wrt='dens') + self.declare_partials(of='price', wrt='density') def compute(self, inputs, outputs): radius = inputs['radius'] - dens = inputs['dens'] - outputs['mass'] = (4/3.) * dens * np.pi * radius ** 3 + density = inputs['density'] + outputs['mass'] = (4/3.) * density * np.pi * radius ** 3 outputs['S'] = np.pi * radius ** 2 - outputs['price'] = (4/3.) * dens * np.pi * radius ** 3 * 10 # $10 per kg + outputs['price'] = (4/3.) * density * np.pi * radius ** 3 * 10 # $10 per kg def compute_partials(self, inputs, partials): radius = inputs['radius'] - dens = inputs['dens'] - partials['mass', 'dens'] = (4/3.) * np.pi * radius ** 3 - partials['mass', 'radius'] = 4. * dens * np.pi * radius ** 2 + density = inputs['density'] + partials['mass', 'density'] = (4/3.) * np.pi * radius ** 3 + partials['mass', 'radius'] = 4. * density * np.pi * radius ** 2 partials['S', 'radius'] = 2 * np.pi * radius - partials['price', 'dens'] = (4/3.) * np.pi * radius ** 3 * 10 - partials['price', 'radius'] = 4. * dens * np.pi * radius ** 2 * 10 + partials['price', 'density'] = (4/3.) * np.pi * radius ** 3 * 10 + partials['price', 'radius'] = 4. * density * np.pi * radius ** 2 * 10 # if run as python avcannonball.py n2, it will create an N2 @@ -214,55 +214,224 @@ def compute_partials(self, inputs, partials): if "n2" in sys.argv[1].lower(): makeN2 = True -# handling of multiple KEs -kes = [4e3] -weights = [1] -# if fewer weights present than KEs, use same weight -if len(kes) > len(weights): - weights = [1]*len(kes) -elif len(kes) < len(weights): - raise Exception("Cannot have more weights than cannons!") -num_trajs = len(kes) - -probs = [] -super_prob = om.Problem() - -for i, ke in enumerate(kes): - prob = CannonballProblem() - prob.add_trajectory(ke_max=ke) - prob.setDefaults() - - group = om.Group() - group.add_subsystem('pre', prob.pre_mission) - group.add_subsystem('traj', prob.traj) - group.add_subsystem('post', prob.post_mission) - super_prob.model.add_subsystem(f'probgroup_{i}', group) - probs.append(prob) - -ranges = [f"r{i}" for i in range(num_trajs)] # looks like: [r0, r1, ...] -# weighted_sum_str looks like: 1*r0+1*r1+... -weighted_sum_str = "+".join([f"{weight}*{r}" for r, weight in zip(ranges, weights)]) -super_prob.model.add_subsystem('compoundComp', om.ExecComp( - "compound_range=" + weighted_sum_str), - promotes=['compound_range', *ranges]) - -for i in range(num_trajs): - super_prob.model.connect( - f'probgroup_{i}.traj.descent.states:r', ranges[i], - src_indices=-1) - -super_prob.model.add_objective('compound_range', scaler=-1) # maximize range - -super_prob.driver = om.ScipyOptimizeDriver() -super_prob.driver.options['optimizer'] = 'SLSQP' -super_prob.driver.declare_coloring() -super_prob.model.linear_solver = om.DirectSolver() -super_prob.setup() - -for prob in probs: - prob.setup() - prob.setInitialVals() - -if makeN2: - om.n2(super_prob, outfile='AvCannonball.html') -dm.run_problem(super_prob) + +def runAvCannonball(kes=[4e3], weights=[1]): + # handling of multiple KEs + # if fewer weights present than KEs, use same weight + if len(kes) > len(weights): + weights = [1]*len(kes) + elif len(kes) < len(weights): + raise Exception("Cannot have more weights than cannons!") + num_trajs = len(kes) + + probs = [] + super_prob = om.Problem() + + # create sub problems and add them to super in a group + # group prevents spillage of promoted vars into super + prefix = "group" # prefix for each om.Group + for i, ke in enumerate(kes): + prob = CannonballProblem() + prob.add_trajectory(ke_max=ke) + prob.setDefaults() + prob.addDesVar() # doesn't seem to do anything + prob.connectPreTraj() # doesn't seem to actually do anything + + group = om.Group() + group.add_subsystem('pre_mission', prob.pre_mission) + group.add_subsystem('traj', prob.traj) + group.add_subsystem('post_mission', prob.post_mission) + # promoting radius and density keeps it constant for all missions + super_prob.model.add_subsystem(prefix+f'_{i}', group, + promotes_inputs=['radius', 'density']) + probs.append(prob) + + # create an execComp with a compound range function to maximize range + # for all cannons with a weighted function + ranges = [f"r{i}" for i in range(num_trajs)] # looks like: [r0, r1, ...] + # weighted_sum_str looks like: 1*r0+1*r1+... + weighted_sum_str = "+".join([f"{weight}*{r}" for r, weight in zip(ranges, weights)]) + super_prob.model.add_subsystem('compoundComp', om.ExecComp( + "compound_range=" + weighted_sum_str), + promotes=['compound_range', *ranges]) + + # controlling radius to affect mass/ballistic coeff + super_prob.model.add_design_var('radius', lower=0.01, upper=0.10, + ref0=0.01, ref=0.10, units='m') + + for i in range(num_trajs): + # connect end of trajectory range to compound range input + super_prob.model.connect( + prefix+f'_{i}.traj.descent.states:r', ranges[i], + src_indices=-1) + + # connect pre-mission parameters to trajectory counter parts + # this connection would happen within each problem's internal function, + # but since we're extracting the components into a larger problem, + # these connections have to be made at the super problem level + super_prob.model.connect( + prefix+f'_{i}.mass', prefix+f'_{i}.traj.parameters:m') + super_prob.model.connect( + prefix+f'_{i}.S', prefix+f'_{i}.traj.parameters:S') + super_prob.model.connect( + prefix+f'_{i}.price', prefix+f'_{i}.traj.parameters:price') + + super_prob.model.add_objective('compound_range', scaler=-1) # maximize range + + super_prob.driver = om.ScipyOptimizeDriver() + super_prob.driver.options['optimizer'] = 'SLSQP' + super_prob.driver.declare_coloring() + super_prob.model.linear_solver = om.DirectSolver() + super_prob.setup() + + for i, prob in enumerate(probs): + reference = prefix+f"_{i}" + super_prob.set_val(reference+'.radius', 0.05, units='m') + super_prob.set_val(reference+'.density', 7.87, units='g/cm**3') + + super_prob.set_val(reference+".traj.parameters:CD", 0.5) + + super_prob.set_val(reference+".traj.ascent.t_initial", 0.0) + super_prob.set_val(reference+".traj.ascent.t_duration", 10.0) + # list is initial and final, based on phase info some are fixed others are not + ascent, descent = prob.phases + super_prob.set_val(reference+".traj.ascent.states:r", + ascent.interp('r', [0, 100])) + super_prob.set_val(reference+'.traj.ascent.states:h', + ascent.interp('h', [0, 100])) + super_prob.set_val(reference+'.traj.ascent.states:v', + ascent.interp('v', [200, 150])) + super_prob.set_val(reference+'.traj.ascent.states:gam', + ascent.interp('gam', [25, 0]), units='deg') + + super_prob.set_val(reference+'.traj.descent.t_initial', 10.0) + super_prob.set_val(reference+'.traj.descent.t_duration', 10.0) + + super_prob.set_val(reference+'.traj.descent.states:r', + descent.interp('r', [100, 200])) + super_prob.set_val(reference+'.traj.descent.states:h', + descent.interp('h', [100, 0])) + super_prob.set_val(reference+'.traj.descent.states:v', + descent.interp('v', [150, 200])) + super_prob.set_val(reference+'.traj.descent.states:gam', + descent.interp('gam', [0, -45]), units='deg') + + if makeN2: + om.n2(super_prob, outfile='AvCannonball.html') + + dm.run_problem(super_prob) + return super_prob, prefix, num_trajs, kes, weights + + +def printOutput(super_prob, prefix, num_trajs, kes, weights): + # formatted output + print("\n\n=================================================") + print( + f"Optimized {num_trajs} trajectories with weights: {', '.join(map(str,weights))}") + rad = super_prob.get_val('radius', units='cm')[0] + + mass0 = super_prob.get_val(prefix+'_0.mass', units='kg')[0] + price0 = super_prob.get_val(prefix+'_0.price', units='USD')[0] + area0 = super_prob.get_val(prefix+'_0.S', units='cm**2')[0] + + # mass, price, S are outputs from sizing. These should be common amongst all + # trajectories, however since they're outputs they cannot be promoted upto + # super problem without unique names. This loop checks their values with + # value of the first trajectory to ensure they are the same. + if num_trajs > 1: + for i in range(num_trajs-1): + mass = super_prob.get_val(prefix+f'_{i+1}.mass', units='kg')[0] + price = super_prob.get_val(prefix+f'_{i+1}.price', units='USD')[0] + area = super_prob.get_val(prefix+f'_{i+1}.S', units='cm**2')[0] + if mass != mass0 or price != price0 or area != area0: + raise Exception( + "Masses, Prices, and/or Areas are not equivalent between trajectories.") + + print("\nOptimal Cannonball Description:") + print( + f"\tRadius: {rad:.2f} cm, Mass: {mass0:.2f} kg, Price: ${price0:.2f}, Area: {area0:.2f} sqcm") + + print("\nOptimal Trajectory Descriptions:") + ranges = 0 + for i, ke in enumerate(kes): + angle = super_prob.get_val( + prefix+f'_{i}.traj.ascent.timeseries.gam', units='deg')[0, 0] + max_range = super_prob.get_val( + prefix+f'_{i}.traj.descent.timeseries.r')[-1, 0] + + print( + f"\tKE: {ke/1e3:.2f} KJ, Launch Angle: {angle:.2f} deg, Max Range: {max_range:.2f} m") + ranges += weights[i]*max_range + print(f"System range: {ranges}") + + +def plotOutput(super_prob, prefix, num_trajs, kes, weights, show=True): + if show: + _, ax = plt.subplots() + timevals = [] + hvals = [] + rvals = [] + for i in range(num_trajs): + tv = [] + hv = [] + rv = [] + for phase in ('ascent', 'descent'): + tv.append(super_prob.get_val( + prefix+f'_{i}.traj.{phase}.timeseries.time')) + hv.append(super_prob.get_val( + prefix+f'_{i}.traj.{phase}.timeseries.h')) + rv.append(super_prob.get_val( + prefix+f'_{i}.traj.{phase}.timeseries.r')) + + timevals.append(np.vstack(tv)) + hvals.append(np.vstack(hv)) + rvals.append(np.vstack(rv)) + if show: + ax.plot(rvals[-1], hvals[-1]) + + if show: + plt.grid() + plt.legend([f"Weights = {weight}" for weight in weights]) + plt.title(f"Cannonballs With KEs: {kes} J") + plt.show() + return timevals, rvals, hvals + + +if __name__ == '__main__': + testing_weights = [[3, 2, 2], [2, 2, 3]] + kes = [4e5, 5e5, 6e5] + legendlst = [] + rs, hs = [], [] + for i, weighting in enumerate(testing_weights): + super_prob, prefix, num_trajs, kes, weights = runAvCannonball( + kes=kes, weights=weighting) + printOutput(super_prob, prefix, num_trajs, kes, weights) + tvals, rvals, hvals = plotOutput( + super_prob, prefix, num_trajs, kes, weights, show=False) + + for r, h, weight in zip(rvals, hvals, weighting): + rs.append(r) + hs.append(h) + legendlst.append(f"Group: {weighting}, Weight: {weight}") + + _, ax = plt.subplots() + for r, h in zip(rs, hs): + ax.plot(r, h) + plt.grid() + plt.legend(legendlst) + plt.title(f"Cannonballs With KEs: {kes} J") + plt.show() + + +""" +Findings: +- connections between trajectory parameters and pre-mission parameters have to be made at + super problem level, running the cannonballproblem method to form those connections has seemingly + no effect, causing divide by zero errors b/c the trajectory value is not set + +- design var has to be set in super problem, cannonballproblem design var is not manipulated by optimizer, + giving a result with the default value for ball radius + +- initial values have to be set at super problem level, running cannonballproblem's initial value function + throws error that setval cannot run before setup (even though superproblem setup was run). +""" diff --git a/cannonball.py b/cannonball.py index 9d1fc49d3..ac49ea051 100644 --- a/cannonball.py +++ b/cannonball.py @@ -159,11 +159,11 @@ def createTrajectory(ke_max): p.driver.options['optimizer'] = 'SLSQP' p.driver.declare_coloring() -kes = [4e5, 5e5, 6e5] +kes = [4e5, 5e5] # 2:1 ratio (or 1:2) causes results that essentially don't optimize the 1 mission, # 1.01 works, 1.009 doesn't # 2:1:1 works?! - may be related some normalization/bounds issue -weights = [2.1, 1.5, 1.1] +weights = [1, 1] num_trajs = len(kes) p.model.add_subsystem(f"sizing_comp", CannonballSizing(), From de3598e0bfc4e0980f8a6d39994ac2d855fcc9ac Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Mon, 29 Jul 2024 11:43:59 -0400 Subject: [PATCH 014/113] updated next steps for multimission --- AvCannonball.html | 2 +- AvCannonball_noconnect.html | 14840 ++++++++++++++++++++++++++++++++++ avcannonball.py | 84 +- multitraj.py | 13 +- 4 files changed, 14915 insertions(+), 24 deletions(-) create mode 100644 AvCannonball_noconnect.html diff --git a/AvCannonball.html b/AvCannonball.html index ba97bc8b3..e29612ed5 100644 --- a/AvCannonball.html +++ b/AvCannonball.html @@ -3255,7 +3255,7 @@

Toolbar Help

diff --git a/AvCannonball_noconnect.html b/AvCannonball_noconnect.html new file mode 100644 index 000000000..ae1c7e4c2 --- /dev/null +++ b/AvCannonball_noconnect.html @@ -0,0 +1,14840 @@ + + + +OpenMDAO Model Hierarchy and N2 diagram + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+
+
+ + + +
+
+ + +
+
+ + + + + +
+
+ + + + +
+
+ +
+
+ +
+ +
+
+ +
+ +
+
+ Processing... +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+
+ + + +
+ +
+ +
+
+ +
+
+
+
+ N2 Information +
+ + +
+ +
+
+
+
+
+ + + + + + + + + + +
+ +
+ +
+ +
+ +
+

Left-click on a node in the model hierarchy to navigate to that node.
+ Right-click on a node to collapse/expand it. + Alt-right-click on a node with variables to select which ones to hide.
+ Note: Right-click in Firefox displays a browser menu. To disable that, + visit about:config and set dom.event.contextmenu.enabled + to true.
+ Hover over any cell in the matrix to display its connections + as arrows. Click that cell to make those arrows persistent. +

+

Toolbar Help

+
+ Snapshot of toolbar buttons + +
+
+ +
+ + + + + + +
Variable NameVisible
+
+ + +
+
+
+ Search + +
+
+ + + +
+
+
+ + + + + + + diff --git a/avcannonball.py b/avcannonball.py index b80a0fda9..9d2efb363 100644 --- a/avcannonball.py +++ b/avcannonball.py @@ -208,14 +208,7 @@ def compute_partials(self, inputs, partials): partials['price', 'radius'] = 4. * density * np.pi * radius ** 2 * 10 -# if run as python avcannonball.py n2, it will create an N2 -makeN2 = False -if len(sys.argv) > 1: - if "n2" in sys.argv[1].lower(): - makeN2 = True - - -def runAvCannonball(kes=[4e3], weights=[1]): +def runAvCannonball(kes=[4e3], weights=[1], makeN2=False): # handling of multiple KEs # if fewer weights present than KEs, use same weight if len(kes) > len(weights): @@ -397,41 +390,90 @@ def plotOutput(super_prob, prefix, num_trajs, kes, weights, show=True): return timevals, rvals, hvals -if __name__ == '__main__': - testing_weights = [[3, 2, 2], [2, 2, 3]] - kes = [4e5, 5e5, 6e5] +def multiTestCase(makeN2=False): + testing_weights = [[2, 1.2], [1.2, 2]] + kes = [1e5, 6e5] legendlst = [] rs, hs = [], [] - for i, weighting in enumerate(testing_weights): + for weighting in testing_weights: super_prob, prefix, num_trajs, kes, weights = runAvCannonball( - kes=kes, weights=weighting) + kes=kes, weights=weighting, makeN2=makeN2) printOutput(super_prob, prefix, num_trajs, kes, weights) tvals, rvals, hvals = plotOutput( super_prob, prefix, num_trajs, kes, weights, show=False) - for r, h, weight in zip(rvals, hvals, weighting): + for r, h, weight, ke in zip(rvals, hvals, weighting, kes): rs.append(r) hs.append(h) - legendlst.append(f"Group: {weighting}, Weight: {weight}") + legendlst.append(f"KE: {ke/1e3} kJ, Weight: {weight} of {weighting}") _, ax = plt.subplots() for r, h in zip(rs, hs): ax.plot(r, h) plt.grid() - plt.legend(legendlst) - plt.title(f"Cannonballs With KEs: {kes} J") + plt.legend(legendlst, loc='upper left') + titlestr = ", ".join([str(ke/1e3) for ke in kes]) + plt.title(f"Cannonballs With KEs: {titlestr} kJ") plt.show() +if __name__ == '__main__': + # if run as python avcannonball.py n2, it will create an N2 + makeN2 = False + singlerun = True + if len(sys.argv) > 1: + if "n2" in sys.argv: + makeN2 = True + if "multi" in sys.argv: + # runs multiple weightings to see what impact system optimization makes + multiTestCase(makeN2) + singlerun = False + + if singlerun: + # singular weighting run + super_prob, prefix, num_trajs, kes, weights = runAvCannonball( + kes=[4e5, 6e5], weights=[2, 1.5], makeN2=makeN2) + printOutput(super_prob, prefix, num_trajs, kes, weights) + plotOutput(super_prob, prefix, num_trajs, kes, weights) + + """ Findings: -- connections between trajectory parameters and pre-mission parameters have to be made at - super problem level, running the cannonballproblem method to form those connections has seemingly - no effect, causing divide by zero errors b/c the trajectory value is not set +- connections between trajectory parameters and pre-mission parameters (and post-mission for aviary) + have to be made at super problem level, running the cannonballproblem method to form those connections + has seemingly no effect, causing divide by zero errors b/c the trajectory value is not set - design var has to be set in super problem, cannonballproblem design var is not manipulated by optimizer, giving a result with the default value for ball radius - initial values have to be set at super problem level, running cannonballproblem's initial value function throws error that setval cannot run before setup (even though superproblem setup was run). -""" + +What works: +- copying instances of pre, traj, and post mission subsystems and adding to a super problem +- internal linkages between trajectory phases works without super problem references +- compound objective between multiple trajectories works +- connections between 2 problems to maintain same physical size of cannonball (i.e. airplane) +- optimization runs, gives sensible results + +To apply to Aviary: +- link_phases (includes connections to post/pre and traj) +- add_design_vars - sizing components, subsystem level variables + (aviary currently adds aero, prop des vars along with any external subsystem) +- set_initial_guesses + +Next setps: +- multi_mission specific add des var that adds them at super prob level + - aviary's design var can still be run at the aviaryProblem level it just won't have any effect + +- multi_mission link phases that does post/pre to traj connection + - aviary's link phases can still be run it just won't create trajectory to pre mission var connections + - be careful with connections vs. promotions + +- initial guesses, what's the best solution? + - possible ideas: + - use aviary's existing functions to create initial values, but use set val outside on super prob + - would require minimal mods to aviary to not run set val when a flag is passed + - write a fully seperate initial guesses function + - would be problematic to maintain with changes/new additions + """ diff --git a/multitraj.py b/multitraj.py index 6a833de6c..8b3adde98 100644 --- a/multitraj.py +++ b/multitraj.py @@ -5,6 +5,7 @@ These will have to be specified in some alternate way such as a list correspond to mission # Phase info: defines a particular mission, will have multiple phase infos """ +import sys import warnings import aviary.api as av import openmdao.api as om @@ -38,6 +39,11 @@ def setupprob(super_prob): probs = [] prefix = "problem_" + makeN2 = False + if len(sys.argv) > 1: + if "n2" in sys.argv: + makeN2 = True + # define individual aviary problems for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): prob = av.AviaryProblem() @@ -46,7 +52,7 @@ def setupprob(super_prob): prob.add_pre_mission_systems() traj = prob.add_phases() # save dymos traj to add to super problem as a subsystem prob.add_post_mission_systems() - prob.link_phases() + prob.link_phases() # this is half working / connect statements from outside of traj to inside are failing prob.problem_type = ProblemType.ALTERNATE # adds summary gross mass as design var prob.add_design_variables() probs.append(prob) @@ -104,7 +110,10 @@ def setupprob(super_prob): super_prob.model.add_objective('compound') # output from execcomp goes here setupprob(super_prob) - om.n2(super_prob, outfile="multi_mission_importTraj_N2.html") # create N2 diagram + if makeN2: + om.n2(super_prob, outfile="multi_mission_importTraj_N2.html") # create N2 diagram + + # cannot use this b/c initial guesses (i.e. setval func) has to be called on super prob level # for prob in probs: # # prob.setup() # prob.set_initial_guesses() From 4ffdbcafee95116eb30926824a92711e6ff2b0b9 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Mon, 29 Jul 2024 13:09:19 -0400 Subject: [PATCH 015/113] checkpt --- avcannonball.py | 2 ++ cannonball.py | 3 +++ multitraj.py | 19 +++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/avcannonball.py b/avcannonball.py index 9d2efb363..70e8052ef 100644 --- a/avcannonball.py +++ b/avcannonball.py @@ -1,3 +1,5 @@ +# Cannonball Multi Mission Example with Aviary-esque setup +# Each mission is defined as a "CannonballProblem", akin to AviaryProblem from dymos.models.atmosphere.atmos_1976 import USatm1976Data from scipy.interpolate import interp1d import matplotlib.pyplot as plt diff --git a/cannonball.py b/cannonball.py index ac49ea051..fc2fe1b9a 100644 --- a/cannonball.py +++ b/cannonball.py @@ -1,3 +1,6 @@ +# Cannonball Multi Mission Example +# A single openMDAO problem is populated with Sizing (pre-mission) +# and Trajectory subsystems (any number of missions) import numpy as np from scipy.interpolate import interp1d import matplotlib.pyplot as plt diff --git a/multitraj.py b/multitraj.py index 8b3adde98..a143aa24d 100644 --- a/multitraj.py +++ b/multitraj.py @@ -24,6 +24,25 @@ # "comp?.a can be used to reference multiple comp1.a comp2.a etc" +class MultiMissionProblem(om.Problem): + def __init__(self): + super().__init__() + self.model.add_subsystem() + + def add_design_variable(): + pass + + def link_pre_post_traj(): + pass + + def set_initial_values(): + pass + + +def add_design_var(): + pass + + def setupprob(super_prob): # Aviary's problem setup wrapper uses these ignored warnings to suppress # some warnings related to variable promotion. Replicating that here with From 9bc6c305ae05f4da195b6609ad132157e3155fb3 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Tue, 30 Jul 2024 08:54:55 -0400 Subject: [PATCH 016/113] checkpt on min time to climb example --- avcannonball.py | 7 +- checkdiff_0.txt | 115 ++++++++++++++++++ checkdiff_1.txt | 115 ++++++++++++++++++ min_time_climb.py | 290 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 524 insertions(+), 3 deletions(-) create mode 100644 checkdiff_0.txt create mode 100644 checkdiff_1.txt create mode 100644 min_time_climb.py diff --git a/avcannonball.py b/avcannonball.py index 70e8052ef..bb48ec9de 100644 --- a/avcannonball.py +++ b/avcannonball.py @@ -393,7 +393,7 @@ def plotOutput(super_prob, prefix, num_trajs, kes, weights, show=True): def multiTestCase(makeN2=False): - testing_weights = [[2, 1.2], [1.2, 2]] + testing_weights = [[2, 1.2], [1.2, 2], [1, 1]] kes = [1e5, 6e5] legendlst = [] rs, hs = [], [] @@ -410,8 +410,9 @@ def multiTestCase(makeN2=False): legendlst.append(f"KE: {ke/1e3} kJ, Weight: {weight} of {weighting}") _, ax = plt.subplots() - for r, h in zip(rs, hs): - ax.plot(r, h) + colors = ['r--', 'r-', 'b--', 'b-', 'g--', 'g-'] # same color for each cannonball + for r, h, col in zip(rs, hs, colors): + ax.plot(r, h, col) plt.grid() plt.legend(legendlst, loc='upper left') titlestr = ", ".join([str(ke/1e3) for ke in kes]) diff --git a/checkdiff_0.txt b/checkdiff_0.txt new file mode 100644 index 000000000..73765b1a6 --- /dev/null +++ b/checkdiff_0.txt @@ -0,0 +1,115 @@ +time to climb: 255.4723 + +{'h': [array([[ 100. ], + [ 385.84286893], + [ 2524.05538825], + [ 6330.19786708], + [ 8398.09721022], + [ 8398.09721022], + [ 9496.91321874], + [ 8224.65719818], + [ 7524.51936893], + [ 7967.69790418], + [ 7967.69790418], + [ 7685.19578827], + [ 9594.55531382], + [14749.31150762], + [16000. ]]), array([[ 100. ], + [ 385.84286893], + [ 2524.05538825], + [ 6330.19786708], + [ 8398.09721022], + [ 8398.09721022], + [ 9496.91321874], + [ 8224.65719818], + [ 7524.51936893], + [ 7967.69790418], + [ 7967.69790418], + [ 7685.19578827], + [ 9594.55531382], + [14749.31150762], + [16000. ]])], 'r': [array([[ 0. ], + [ 2512.93182958], + [ 9270.65900027], + [16562.87651865], + [20107.2482066 ], + [20107.2482066 ], + [23842.87063336], + [32631.84519492], + [43410.06296693], + [49556.7344816 ], + [49556.7344816 ], + [55970.23796015], + [68204.10399411], + [77757.98698928], + [81884.92516855]]), array([[ 0. ], + [ 2512.93182958], + [ 9270.65900027], + [16562.87651865], + [20107.2482066 ], + [20107.2482066 ], + [23842.87063336], + [32631.84519492], + [43410.06296693], + [49556.7344816 ], + [49556.7344816 ], + [55970.23796015], + [68204.10399411], + [77757.98698928], + [81884.92516855]])], 'thrust': [array([[28040.14632377], + [30685.43462476], + [29491.23905419], + [21324.01785314], + [16249.20034523], + [16249.20034523], + [14664.76010049], + [21846.64091725], + [26953.27860842], + [26642.24161996], + [26642.24161996], + [29154.81655621], + [23634.90073868], + [ 8283.02344799], + [ 6125.4488035 ]]), array([[28040.14632377], + [30685.43462476], + [29491.23905419], + [21324.01785314], + [16249.20034523], + [16249.20034523], + [14664.76010049], + [21846.64091725], + [26953.27860842], + [26642.24161996], + [26642.24161996], + [29154.81655621], + [23634.90073868], + [ 8283.02344799], + [ 6125.4488035 ]])], 'v': [array([[135.964 ], + [206.74599571], + [288.82701778], + [289.73862165], + [267.15878958], + [267.15878958], + [274.87468561], + [362.50881292], + [412.28028855], + [422.61189319], + [422.61189319], + [447.73120108], + [436.16635522], + [323.37066419], + [295.06331582]]), array([[135.964 ], + [206.74599571], + [288.82701778], + [289.73862165], + [267.15878958], + [267.15878958], + [274.87468561], + [362.50881292], + [412.28028855], + [422.61189319], + [422.61189319], + [447.73120108], + [436.16635522], + [323.37066419], + [295.06331582]])]} \ No newline at end of file diff --git a/checkdiff_1.txt b/checkdiff_1.txt new file mode 100644 index 000000000..bc9e3b06e --- /dev/null +++ b/checkdiff_1.txt @@ -0,0 +1,115 @@ +time to climb: 275.9943 + +{'h': [array([[ 100. ], + [ 100.00014197], + [ 928.14250857], + [ 4480.12875143], + [ 5854.4279326 ], + [ 5854.4279326 ], + [ 5753.74074866], + [ 6447.30263607], + [ 7351.40997855], + [ 7374.41870514], + [ 7374.41870514], + [ 7253.93701586], + [ 9040.49548007], + [14442.70128356], + [16000. ]]), array([[ 100. ], + [ 100.00014197], + [ 928.14250857], + [ 4480.12875143], + [ 5854.4279326 ], + [ 5854.4279326 ], + [ 5753.74074866], + [ 6447.30263607], + [ 7351.40997855], + [ 7374.41870514], + [ 7374.41870514], + [ 7253.93701586], + [ 9040.49548007], + [14442.70128356], + [16000. ]])], 'r': [array([[ 0. ], + [ 2968.68666017], + [12073.2967696 ], + [21409.53672779], + [26092.61326574], + [26092.61326574], + [31572.04020064], + [42731.10842357], + [54452.94145834], + [61010.61290372], + [61010.61290372], + [67904.86290601], + [81412.77032767], + [92062.07191714], + [96493.47916893]]), array([[ 0. ], + [ 2968.68666017], + [12073.2967696 ], + [21409.53672779], + [26092.61326574], + [26092.61326574], + [31572.04020064], + [42731.10842357], + [54452.94145834], + [61010.61290372], + [61010.61290372], + [67904.86290601], + [81412.77032767], + [92062.07191714], + [96493.47916893]])], 'thrust': [array([[28040.14632377], + [33053.39975829], + [35400.10858351], + [26698.70379863], + [24686.71521391], + [24686.71521391], + [27055.27519258], + [27213.87562323], + [26664.92757684], + [28163.60265986], + [28163.60265986], + [30118.83428395], + [25621.94463206], + [ 8898.75312877], + [ 6125.4488035 ]]), array([[28040.14632377], + [33053.39975829], + [35400.10858351], + [26698.70379863], + [24686.71521391], + [24686.71521391], + [27055.27519258], + [27213.87562323], + [26664.92757684], + [28163.60265986], + [28163.60265986], + [30118.83428395], + [25621.94463206], + [ 8898.75312877], + [ 6125.4488035 ]])], 'v': [array([[135.964 ], + [238.02678694], + [340.85855179], + [313.48707194], + [327.58435172], + [327.58435172], + [358.34086544], + [381.72767454], + [402.72069599], + [423.91555025], + [423.91555025], + [446.68626447], + [445.20261297], + [330.9922242 ], + [295.06331582]]), array([[135.964 ], + [238.02678694], + [340.85855179], + [313.48707194], + [327.58435172], + [327.58435172], + [358.34086544], + [381.72767454], + [402.72069599], + [423.91555025], + [423.91555025], + [446.68626447], + [445.20261297], + [330.9922242 ], + [295.06331582]])]} \ No newline at end of file diff --git a/min_time_climb.py b/min_time_climb.py new file mode 100644 index 000000000..1700c6a4b --- /dev/null +++ b/min_time_climb.py @@ -0,0 +1,290 @@ +import openmdao.api as om +import dymos as dm +from dymos.examples.min_time_climb.min_time_climb_ode import MinTimeClimbODE +import matplotlib.pyplot as plt +import numpy as np +import sys + + +def min_time_climb(height=20e3, + optimizer='SLSQP', num_seg=3, transcription='gauss-lobatto', + transcription_order=5, force_alloc_complex=False, add_rate=False, + time_name='time'): + + p = om.Problem(model=om.Group()) + + p.driver = om.ScipyOptimizeDriver() + p.driver.options['optimizer'] = optimizer + p.driver.declare_coloring() + + if optimizer == 'SNOPT': + p.driver.opt_settings['Major iterations limit'] = 1000 + p.driver.opt_settings['iSumm'] = 6 + p.driver.opt_settings['Major feasibility tolerance'] = 1.0E-6 + p.driver.opt_settings['Major optimality tolerance'] = 1.0E-6 + p.driver.opt_settings['Function precision'] = 1.0E-12 + p.driver.opt_settings['Linesearch tolerance'] = 0.1 + p.driver.opt_settings['Major step limit'] = 0.5 + elif optimizer == 'IPOPT': + p.driver.opt_settings['tol'] = 1.0E-5 + p.driver.opt_settings['print_level'] = 0 + p.driver.opt_settings['mu_strategy'] = 'monotone' + p.driver.opt_settings['bound_mult_init_method'] = 'mu-based' + p.driver.opt_settings['mu_init'] = 0.01 + + t = {'gauss-lobatto': dm.GaussLobatto( + num_segments=num_seg, order=transcription_order), + 'radau-ps': dm.Radau(num_segments=num_seg, order=transcription_order)} + + traj = dm.Trajectory() + + phase = dm.Phase(ode_class=MinTimeClimbODE, transcription=t[transcription]) + traj.add_phase('phase0', phase) + + p.model.add_subsystem('traj', traj) + + phase.set_time_options(fix_initial=True, duration_bounds=(50, 400), + duration_ref=100.0, name=time_name) + + phase.add_state('r', fix_initial=True, lower=0, upper=1.0E6, + ref=1.0E3, defect_ref=1.0E3, units='m', + rate_source='flight_dynamics.r_dot') + + phase.add_state('h', fix_initial=True, lower=1, upper=height, + ref=height, defect_ref=height, units='m', + rate_source='flight_dynamics.h_dot', targets=['h']) + + phase.add_state('v', fix_initial=True, lower=10.0, + ref=1.0E2, defect_ref=1.0E2, units='m/s', + rate_source='flight_dynamics.v_dot', targets=['v']) + + phase.add_state('gam', fix_initial=True, lower=-1.5, upper=1.5, + ref=1.0, defect_ref=1.0, units='rad', + rate_source='flight_dynamics.gam_dot', targets=['gam']) + + phase.add_state('m', fix_initial=True, lower=10.0, upper=1.0E5, + ref=10_000, defect_ref=10_000, units='kg', + rate_source='prop.m_dot', targets=['m']) + + phase.add_control('alpha', units='deg', lower=-8.0, upper=8.0, scaler=1.0, + rate_continuity=True, rate_continuity_scaler=100.0, + rate2_continuity=False, targets=['alpha']) + + phase.add_parameter('S', val=49.2386, units='m**2', opt=False, targets=['S']) + phase.add_parameter('Isp', val=1600.0, units='s', opt=False, targets=['Isp']) + phase.add_parameter('throttle', val=1.0, opt=False, targets=['throttle']) + + phase.add_boundary_constraint('h', loc='final', equals=height, scaler=1.0E-3) + phase.add_boundary_constraint('aero.mach', loc='final', equals=1.0) + phase.add_boundary_constraint('gam', loc='final', equals=0.0) + + phase.add_path_constraint(name='h', lower=100.0, upper=height, ref=height) + phase.add_path_constraint(name='aero.mach', lower=0.1, upper=1.8) + + # Unnecessary but included to test capability + phase.add_path_constraint(name='alpha', lower=-8, upper=8) + phase.add_path_constraint(name=f'{time_name}', lower=0, upper=400) + phase.add_path_constraint(name=f'{time_name}_phase', lower=0, upper=400) + + # Minimize time at the end of the phase + phase.add_objective(time_name, loc='final', ref=1.0) + + # test mixing wildcard ODE variable expansion and unit overrides + phase.add_timeseries_output(['aero.*', 'prop.thrust', 'prop.m_dot'], + units={'aero.f_lift': 'lbf', 'prop.thrust': 'lbf'}) + + # test adding rate as timeseries output + if add_rate: + phase.add_timeseries_rate_output('aero.mach') + + p.model.linear_solver = om.DirectSolver() + + p.setup(check=True, force_alloc_complex=force_alloc_complex) + + p['traj.phase0.t_initial'] = 0.0 + p['traj.phase0.t_duration'] = 350.0 + + p['traj.phase0.states:r'] = phase.interp('r', [0.0, 111319.54]) + p['traj.phase0.states:h'] = phase.interp('h', [100.0, 20000.0]) + p['traj.phase0.states:v'] = phase.interp('v', [135.964, 283.159]) + p['traj.phase0.states:gam'] = phase.interp('gam', [0.0, 0.0]) + p['traj.phase0.states:m'] = phase.interp('m', [19030.468, 16841.431]) + p['traj.phase0.controls:alpha'] = phase.interp('alpha', [0.0, 0.0]) + + dm.run_problem(p, simulate=True) + + return p + + +def checkDeviation(filenum=0): + heights = [16e3]*2 + times_to_climb = [] + timeseries_pts = {'h': [], 'r': [], 'thrust': [], 'v': []} + prefix = 'traj.phase0.timeseries.' + + for height in heights: + p = min_time_climb(height=height) + sol = om.CaseReader('dymos_solution.db').get_case('final') + sim = om.CaseReader('dymos_simulation.db').get_case('final') + times_to_climb.append(p.get_val('traj.phase0.timeseries.time', + units='s')[-1][0]) + for var, varlst in timeseries_pts.items(): + varlst.append(sol.get_val(prefix+var)) + + print("\n\n=======================================") + with open(f'checkdiff_{filenum}.txt', 'w') as fp: + fp.write(f'time to climb: {times_to_climb[0]: .4f}\n\n') + fp.write(str(timeseries_pts)) + + for key in timeseries_pts.keys(): + timeseries_pts[key] = np.array( + timeseries_pts[key][1:]) - timeseries_pts[key][0] + print(f"Max difference in {key}: {np.max(timeseries_pts[key]):.2f}") + + print(f"Time to climb: {times_to_climb[0]:.2f}") + print(f"Standard deviation of time to climb in {len(heights)}" + + f" cases: {np.std(times_to_climb):.2f}") + for key in timeseries_pts.keys(): + print(f"Standard deviation of {key} in {len(heights)} cases:" + + f" {np.std(timeseries_pts[key]):.2f}") + + +def multiHeightTest(): + heights = [8e3, 10e3] + prefix = 'traj.phase0.timeseries.' + plotvars = {'r': ['h'], 'time': ['v', 'thrust', 'm_dot', 'alpha']} + varnames = {prefix+x: [prefix+y for y in ylst] for x, ylst in plotvars.items()} + numplots = sum([len(item) for item in plotvars.values()]) + data = {f'h{i}': {} for i in range(len(heights))} + + for j, height in enumerate(heights): + p = min_time_climb(height=height) + wing_area = p.get_val('traj.phase0.parameters:S', units='m**2')[0] + sol = om.CaseReader('dymos_solution.db').get_case('final') + sim = om.CaseReader('dymos_simulation.db').get_case('final') + + print("\n\n=======================================") + print(f"Time to climb {height/1e3} km: " + + f"{p.get_val('traj.phase0.timeseries.time',units='s')[-1][0]:.2f}" + + f" s with wing area: {wing_area} sqm") + + for xname in varnames.keys(): + xsol = sol.get_val(xname) + xsim = sim.get_val(xname) + if not xname in data.keys(): + data[f'h{j}'][xname] = {'x': (xsol, xsim), 'y': []} + for yname in varnames[xname]: + if not 'yname' in data[f'h{j}'][xname].keys(): + data[f'h{j}'][xname]['yname'] = [yname] + else: + data[f'h{j}'][xname]['yname'].append(yname) + ysol = sol.get_val(yname) + ysim = sim.get_val(yname) + data[f'h{j}'][xname]['y'].append((ysol, ysim)) + + colors = ['r', 'b'] + for j in range(len(heights)): + datadict = data[f'h{j}'] + i = 1 + for xname in datadict.keys(): + xsol, xsim = datadict[xname]['x'] + for (ysol, ysim), yname in zip(datadict[xname]['y'], datadict[xname]['yname']): + ax = plt.subplot(int(numplots/2), numplots-int(numplots/2), i) + if max(ysim) > 1e3: + ysol, ysim = ysol/1e3, ysim/1e3 + plt.plot(xsol, ysol, f'{colors[j]}o', fillstyle='none') + plt.plot(xsim, ysim, colors[j]) + plt.xlabel(xname.split(prefix)[1]) + plt.ylabel(yname.split(prefix)[1]) + if j == 0: + plt.grid(visible=True) + i += 1 + plt.show() + + +"""It seems that when the dymos problem is run multiple times within a single +run of this script, the output values are all the same for all timeseries. + +But when the script itself is run again, these values can differ very largely, +optimization takes a very different number of iterations, and the profile looks very +different. Time to climb is also different.""" +if __name__ == '__main__': + if len(sys.argv) > 1 and 'filenum' in sys.argv[1]: + checkDeviation(filenum=sys.argv[1].split('filenum=')[1]) + # multiHeightTest() + + +""" +var names + 'traj.phase0.controls:alpha' + 'traj.phase0.t_initial' + 'traj.phase0.t_duration' + 'traj.phase0.parameters:S' + 'traj.phase0.parameters:Isp' + 'traj.phase0.parameters:throttle' + 'traj.phase0.collocation_constraint.defects:gam' + 'traj.phase0.control_rates:alpha_rate' + 'traj.phase0.control_rates:alpha_rate2' + 'traj.phase0.control_values:alpha' + 'traj.phase0.states:gam' + 'traj.phase0.states:h' + 'traj.phase0.states:m' + 'traj.phase0.states:r' + 'traj.phase0.states:v' + 'traj.phase0.interleave_comp.all_values:CD' + 'traj.phase0.parameter_vals:Isp' + 'traj.phase0.parameter_vals:S' + 'traj.phase0.parameter_vals:throttle' + 'traj.phase0.t_duration_val' + 'traj.phase0.t_initial_val' + 'traj.phase0.rhs_col.aero.CD' + 'traj.phase0.rhs_disc.aero.CL' + 'traj.phase0.rhs_disc.aero.CD0' + 'traj.phase0.rhs_disc.aero.CLa' + 'traj.phase0.rhs_disc.aero.kappa' + 'traj.phase0.rhs_disc.aero.f_drag' + 'traj.phase0.rhs_disc.aero.f_lift' + 'traj.phase0.rhs_disc.aero.mach' + 'traj.phase0.rhs_disc.aero.q' + 'traj.phase0.rhs_disc.atmos.drhos_dh' + 'traj.phase0.rhs_disc.atmos.pres' + 'traj.phase0.rhs_disc.atmos.rho' + 'traj.phase0.rhs_disc.atmos.sos' + 'traj.phase0.rhs_disc.atmos.temp' + 'traj.phase0.rhs_disc.atmos.viscosity' + 'traj.phase0.rhs_disc.flight_dynamics.gam_dot' + 'traj.phase0.rhs_disc.flight_dynamics.h_dot' + 'traj.phase0.rhs_disc.flight_dynamics.r_dot' + 'traj.phase0.rhs_disc.flight_dynamics.v_dot' + 'traj.phase0.rhs_disc.prop.max_thrust' + 'traj.phase0.rhs_disc.prop.m_dot' + 'traj.phase0.rhs_disc.prop.thrust' + 'traj.phase0.state_interp.state_col:gam': array([[ 0.0702449 ], + 'traj.phase0.state_interp.state_col:h' + 'traj.phase0.state_interp.state_col:m' + 'traj.phase0.state_interp.state_col:r' + 'traj.phase0.state_interp.state_col:v' + 'traj.phase0.dt_dstau' + 'traj.phase0.t' + 'traj.phase0.t_phase' + 'traj.phase0.timeseries.CD': array([[0.0195346 ], + 'traj.phase0.timeseries.CD0' + 'traj.phase0.timeseries.CL' + 'traj.phase0.timeseries.CLa' + 'traj.phase0.timeseries.alpha' + 'traj.phase0.timeseries.f_drag' + 'traj.phase0.timeseries.f_lift' + 'traj.phase0.timeseries.gam' + 'traj.phase0.timeseries.h' + 'traj.phase0.timeseries.kappa' + 'traj.phase0.timeseries.m' + 'traj.phase0.timeseries.m_dot' + 'traj.phase0.timeseries.mach' + 'traj.phase0.timeseries.q' + 'traj.phase0.timeseries.r' + 'traj.phase0.timeseries.thrust' + 'traj.phase0.timeseries.time' + 'traj.phase0.timeseries.time_phase' + 'traj.phase0.timeseries.v' + + """ From 6a32d971b4bf38f8578e8f1516e86b2d65067bdc Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 31 Jul 2024 09:12:29 -0400 Subject: [PATCH 017/113] renamed files, added copy model cannonball example --- AvCannonball.html | 14840 ---------------- AvCannonball_noconnect.html | 14840 ---------------- cannonball_copy.py | 297 - checkdiff_0.txt | 226 +- checkdiff_1.txt | 226 +- min_time_climb.py | 5 +- ...onball.py => multI_cannonball_copyparts.py | 4 +- multi_aviary_copymodel.py | 449 + multimission.py => multi_aviary_submodel.py | 0 multi_cannonball_copymodel.py | 407 + multi_mission_importTraj_N2.html | 14840 ---------------- multitraj.py | 181 - 12 files changed, 1087 insertions(+), 45228 deletions(-) delete mode 100644 AvCannonball.html delete mode 100644 AvCannonball_noconnect.html delete mode 100644 cannonball_copy.py rename avcannonball.py => multI_cannonball_copyparts.py (99%) create mode 100644 multi_aviary_copymodel.py rename multimission.py => multi_aviary_submodel.py (100%) create mode 100644 multi_cannonball_copymodel.py delete mode 100644 multi_mission_importTraj_N2.html delete mode 100644 multitraj.py diff --git a/AvCannonball.html b/AvCannonball.html deleted file mode 100644 index e29612ed5..000000000 --- a/AvCannonball.html +++ /dev/null @@ -1,14840 +0,0 @@ - - - -OpenMDAO Model Hierarchy and N2 diagram - - - - - - - - - - - - - - - - - -
-
- -
-
- -
- - -
-
-
-
- - - -
-
- - -
-
- - - - - -
-
- - - - -
-
- -
-
- -
- -
-
- -
- -
-
- Processing... -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

-
-
- - - -
- -
- -
-
- -
-
-
-
- N2 Information -
- - -
- -
-
-
-
-
- - - - - - - - - - -
- -
- -
- -
- -
-

Left-click on a node in the model hierarchy to navigate to that node.
- Right-click on a node to collapse/expand it. - Alt-right-click on a node with variables to select which ones to hide.
- Note: Right-click in Firefox displays a browser menu. To disable that, - visit about:config and set dom.event.contextmenu.enabled - to true.
- Hover over any cell in the matrix to display its connections - as arrows. Click that cell to make those arrows persistent. -

-

Toolbar Help

-
- Snapshot of toolbar buttons - -
-
- -
- - - - - - -
Variable NameVisible
-
- - -
-
-
- Search - -
-
- - - -
-
-
- - - - - - - diff --git a/AvCannonball_noconnect.html b/AvCannonball_noconnect.html deleted file mode 100644 index ae1c7e4c2..000000000 --- a/AvCannonball_noconnect.html +++ /dev/null @@ -1,14840 +0,0 @@ - - - -OpenMDAO Model Hierarchy and N2 diagram - - - - - - - - - - - - - - - - - -
-
- -
-
- -
- - -
-
-
-
- - - -
-
- - -
-
- - - - - -
-
- - - - -
-
- -
-
- -
- -
-
- -
- -
-
- Processing... -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

-
-
- - - -
- -
- -
-
- -
-
-
-
- N2 Information -
- - -
- -
-
-
-
-
- - - - - - - - - - -
- -
- -
- -
- -
-

Left-click on a node in the model hierarchy to navigate to that node.
- Right-click on a node to collapse/expand it. - Alt-right-click on a node with variables to select which ones to hide.
- Note: Right-click in Firefox displays a browser menu. To disable that, - visit about:config and set dom.event.contextmenu.enabled - to true.
- Hover over any cell in the matrix to display its connections - as arrows. Click that cell to make those arrows persistent. -

-

Toolbar Help

-
- Snapshot of toolbar buttons - -
-
- -
- - - - - - -
Variable NameVisible
-
- - -
-
-
- Search - -
-
- - - -
-
-
- - - - - - - diff --git a/cannonball_copy.py b/cannonball_copy.py deleted file mode 100644 index 9f1d81303..000000000 --- a/cannonball_copy.py +++ /dev/null @@ -1,297 +0,0 @@ -from os import stat -import numpy as np -from scipy.interpolate import interp1d -import matplotlib.pyplot as plt -import openmdao.api as om -import dymos as dm -from dymos.models.atmosphere.atmos_1976 import USatm1976Data - -""" -Currently has linked sizing and motion ODEs, want to add ability to have -multiple trajectories (and associated ODEs) that are linked with the same -sizing class. radii/density etc can be defined as 1xn inputs, with n corresponding -to num of missions. - -Additionally need to incorporate some output into a compound objective that is optimized, -aside from each mission optimizing for max range. Could for example assign $/kg of material. - -Could also add a "fuel" parameter which can then be minimized. -""" - - -class CannonballSizing(om.ExplicitComponent): - def setup(self): - self.add_input(name='radius', val=1.0, units='m') - self.add_input(name='dens', val=7870., units='kg/m**3') - - self.add_output(name='mass', shape=(1,), units='kg') - self.add_output(name='S', shape=(1,), units='m**2') - self.add_output(name='price', shape=(1,), units='USD') - - self.declare_partials(of='mass', wrt='dens') - self.declare_partials(of='mass', wrt='radius') - self.declare_partials(of='S', wrt='radius') - self.declare_partials(of='price', wrt='radius') - self.declare_partials(of='price', wrt='dens') - - def compute(self, inputs, outputs): - radius = inputs['radius'] - dens = inputs['dens'] - outputs['mass'] = (4/3.) * dens * np.pi * radius ** 3 - outputs['S'] = np.pi * radius ** 2 - outputs['price'] = (4/3.) * dens * np.pi * radius ** 3 * 10 # $10 per kg - - def compute_partials(self, inputs, partials): - radius = inputs['radius'] - dens = inputs['dens'] - partials['mass', 'dens'] = (4/3.) * np.pi * radius ** 3 - partials['mass', 'radius'] = 4. * dens * np.pi * radius ** 2 - partials['S', 'radius'] = 2 * np.pi * radius - partials['price', 'dens'] = (4/3.) * np.pi * radius ** 3 * 10 - partials['price', 'radius'] = 4. * dens * np.pi * radius ** 2 * 10 - - -class CannonballODE(om.ExplicitComponent): - def initialize(self): - self.options.declare('num_nodes', types=int) - - def setup(self): - nn = self.options['num_nodes'] - # static params - self.add_input('m', units='kg') - self.add_input('S', units='m**2') - self.add_input('CD', 0.5) - - # time varying inputs - self.add_input('h', units='m', shape=nn) - self.add_input('v', units='m/s', shape=nn) - self.add_input('gam', units='rad', shape=nn) - - # state rates - self.add_output('v_dot', shape=nn, units='m/s**2', - tags=['dymos.state_rate_source:v']) - self.add_output('gam_dot', shape=nn, units='rad/s', - tags=['dymos.state_rate_source:gam']) - self.add_output('h_dot', shape=nn, units='m/s', - tags=['dymos.state_rate_source:h']) - self.add_output('r_dot', shape=nn, units='m/s', - tags=['dymos.state_rate_source:r']) - self.add_output('ke', shape=nn, units='J') - - # Ask OpenMDAO to compute the partial derivatives using complex-step - # with a partial coloring algorithm for improved performance, and use - # a graph coloring algorithm to automatically detect the sparsity pattern. - self.declare_coloring(wrt='*', method='cs') - - alt_data = USatm1976Data.alt * om.unit_conversion('ft', 'm')[0] - rho_data = USatm1976Data.rho * om.unit_conversion('slug/ft**3', 'kg/m**3')[0] - self.rho_interp = interp1d(np.array(alt_data, dtype=complex), - np.array(rho_data, dtype=complex), - kind='linear') - - def compute(self, inputs, outputs): - - gam = inputs['gam'] - v = inputs['v'] - h = inputs['h'] - m = inputs['m'] - S = inputs['S'] - CD = inputs['CD'] - - GRAVITY = 9.80665 # m/s**2 - - # handle complex-step gracefully from the interpolant - if np.iscomplexobj(h): - rho = self.rho_interp(inputs['h']) - else: - rho = self.rho_interp(inputs['h']).real - - q = 0.5*rho*inputs['v']**2 - qS = q * S - D = qS * CD - cgam = np.cos(gam) - sgam = np.sin(gam) - outputs['v_dot'] = - D/m-GRAVITY*sgam - outputs['gam_dot'] = -(GRAVITY/v)*cgam - outputs['h_dot'] = v*sgam - outputs['r_dot'] = v*cgam - outputs['ke'] = 0.5*m*v**2 - - -# ODEs are unique to each traj created -def createTrajectory(ke_max): - traj = dm.Trajectory() - transcription = dm.Radau(num_segments=5, order=3, compressed=True) - ascent = dm.Phase(ode_class=CannonballODE, transcription=transcription) - traj.add_phase('ascent', ascent) - - transcription = dm.GaussLobatto(num_segments=5, order=3, compressed=True) - descent = dm.Phase(ode_class=CannonballODE, transcription=transcription) - traj.add_phase('descent', descent) - - for phase in (ascent, descent): - is_ascent = phase.name == "ascent" - phase.set_time_options(fix_initial=True if is_ascent else False, - duration_bounds=(1, 100), duration_ref=100, units='s') - phase.set_state_options('r', fix_initial=is_ascent, fix_final=False) - phase.set_state_options('h', fix_initial=is_ascent, fix_final=not is_ascent) - phase.set_state_options('gam', fix_initial=False, fix_final=is_ascent) - phase.set_state_options('v', fix_initial=False, fix_final=False) - phase.add_parameter('S', units='m**2', static_target=True, val=0.005) - phase.add_parameter('m', units='kg', static_target=True, val=1.0) - phase.add_parameter('price', units='USD', static_target=True, val=10) - phase.add_parameter('CD', units=None, static_target=True, val=0.5) - - # descent.add_objective('r', loc='final', scaler=-1.0) # negative means to maximize - for param in ('CD', 'm', 'S', 'price'): - traj.add_parameter(param, static_target=True) - - # Link Phases (link time and all state variables) - traj.link_phases(phases=['ascent', 'descent'], vars=['*']) - # have to set muzzle energy here before setup for sim to run properly - ascent.add_boundary_constraint('ke', loc='initial', - upper=ke_max, lower=0, ref=100000) - return traj, ascent, descent - - -p = om.Problem(model=om.Group()) - -p.driver = om.ScipyOptimizeDriver() -p.driver.options['optimizer'] = 'SLSQP' -p.driver.declare_coloring() - -kes = [4e5, 5e5, 6e5] -# 2:1 ratio (or 1:2) causes results that essentially don't optimize the 1 mission, -# 1.01 works, 1.009 doesn't -# 2:1:1 works?! - may be related some normalization/bounds issue -weights = [2.1, 1.5, 1.1] -num_trajs = len(kes) - -p.model.add_subsystem(f"sizing_comp", CannonballSizing(), - promotes_inputs=['radius', 'dens']) - -p.model.set_input_defaults('dens', val=7.87, units='g/cm**3') -p.model.add_design_var('radius', lower=0.01, upper=0.10, - ref0=0.01, ref=0.10, units='m') - -trajs, ascents, descents = [], [], [] -for i, ke in enumerate(kes): - traj, ascent, descent = createTrajectory(ke) - p.model.add_subsystem(f"traj_{i}", traj) - - # Issue Connections - p.model.connect(f"sizing_comp.mass", f"traj_{i}.parameters:m") - p.model.connect(f"sizing_comp.S", f"traj_{i}.parameters:S") - p.model.connect(f"sizing_comp.price", f"traj_{i}.parameters:price") - trajs.append(traj) - ascents.append(ascent) - descents.append(descent) - -ranges = [f"r{i}" for i in range(num_trajs)] -weighted_sum_str = "+".join([f"{weight}*{r}" for r, weight in zip(ranges, weights)]) -p.model.add_subsystem('compoundComp', om.ExecComp("compound_range="+weighted_sum_str), - promotes=['compound_range', *ranges]) - -for i in range(num_trajs): - p.model.connect(f"traj_{i}.descent.states:r", ranges[i], src_indices=-1) - -p.model.add_objective('compound_range', scaler=-1) - - -# A linear solver at the top level can improve performance. -p.model.linear_solver = om.DirectSolver() -p.setup() - -p.set_val('radius', 0.05, units='m') -p.set_val('dens', 7.87, units='g/cm**3') - -for i, (ascent, descent) in enumerate(zip(ascents, descents)): - p.set_val(f"traj_{i}.parameters:CD", 0.5) - - p.set_val(f"traj_{i}.ascent.t_initial", 0.0) - p.set_val(f"traj_{i}.ascent.t_duration", 10.0) - # list is initial and final, based on phase info some are fixed others are not - p.set_val(f"traj_{i}.ascent.states:r", ascent.interp('r', [0, 100])) - p.set_val(f'traj_{i}.ascent.states:h', ascent.interp('h', [0, 100])) - p.set_val(f'traj_{i}.ascent.states:v', ascent.interp('v', [200, 150])) - p.set_val(f'traj_{i}.ascent.states:gam', ascent.interp('gam', [25, 0]), units='deg') - - p.set_val(f'traj_{i}.descent.t_initial', 10.0) - p.set_val(f'traj_{i}.descent.t_duration', 10.0) - - p.set_val(f'traj_{i}.descent.states:r', descent.interp('r', [100, 200])) - p.set_val(f'traj_{i}.descent.states:h', descent.interp('h', [100, 0])) - p.set_val(f'traj_{i}.descent.states:v', descent.interp('v', [150, 200])) - p.set_val(f'traj_{i}.descent.states:gam', - descent.interp('gam', [0, -45]), units='deg') - - -dm.run_problem(p, simulate=True) -sol = om.CaseReader('dymos_solution.db').get_case('final') -sim = om.CaseReader('dymos_simulation.db').get_case('final') - - -def plotstuff(): - print("\n\n=================================================") - print( - f"Optimized {num_trajs} trajectories with weights: {', '.join(map(str,weights))}") - rad = p.get_val('radius', units='cm')[0] - mass = p.get_val('sizing_comp.mass', units='kg')[0] - price = p.get_val('sizing_comp.price', units='USD')[0] - area = p.get_val('sizing_comp.S', units='cm**2')[0] - print("\nOptimal Cannonball Description:") - print( - f"\tRadius: {rad:.2f} cm, Mass: {mass:.2f} kg, Price: ${price:.2f}, Area: {area:.2f} sqcm") - - print("\nOptimal Trajectory Descriptions:") - for i, ke in enumerate(kes): - angle = p.get_val(f'traj_{i}.ascent.timeseries.gam', units='deg')[0, 0] - max_range = p.get_val(f'traj_{i}.descent.timeseries.r')[-1, 0] - - print( - f"\tKE: {ke/1e3:.2f} KJ, Launch Angle: {angle:.2f} deg, Max Range: {max_range:.2f} m") - - # fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10, 6)) - # time_imp = {'ascent': p.get_val('traj_0.ascent.timeseries.time'), - # 'descent': p.get_val('traj_0.descent.timeseries.time')} - # time_exp = {'ascent': sim.get_val('traj_0.ascent.timeseries.time'), - # 'descent': sim.get_val('traj_0.descent.timeseries.time')} - # r_imp = {'ascent': p.get_val('traj_0.ascent.timeseries.r'), - # 'descent': p.get_val('traj_0.descent.timeseries.r')} - # r_exp = {'ascent': sim.get_val('traj_0.ascent.timeseries.r'), - # 'descent': sim.get_val('traj_0.descent.timeseries.r')} - # h_imp = {'ascent': p.get_val('traj_0.ascent.timeseries.h'), - # 'descent': p.get_val('traj_0.descent.timeseries.h')} - # h_exp = {'ascent': sim.get_val('traj_0.ascent.timeseries.h'), - # 'descent': sim.get_val('traj_0.descent.timeseries.h')} - - # axes.plot(r_imp['ascent'], h_imp['ascent'], 'bo') - # axes.plot(r_imp['descent'], h_imp['descent'], 'ro') - # axes.plot(r_exp['ascent'], h_exp['ascent'], 'b--') - # axes.plot(r_exp['descent'], h_exp['descent'], 'r--') - - # axes.set_xlabel('range (m)') - # axes.set_ylabel('altitude (m)') - # axes.grid(True) - - # fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(10, 6)) - # states = ['r', 'h', 'v', 'gam'] - # for i, state in enumerate(states): - # x_imp = {'ascent': sol.get_val(f'traj_0.ascent.timeseries.{state}'), - # 'descent': sol.get_val(f'traj_0.descent.timeseries.{state}')} - - # x_exp = {'ascent': sim.get_val(f'traj_0.ascent.timeseries.{state}'), - # 'descent': sim.get_val(f'traj_0.descent.timeseries.{state}')} - - # axes[i].set_ylabel(state) - # axes[i].grid(True) - - # axes[i].plot(time_imp['ascent'], x_imp['ascent'], 'bo') - # axes[i].plot(time_imp['descent'], x_imp['descent'], 'ro') - # axes[i].plot(time_exp['ascent'], x_exp['ascent'], 'b--') - # axes[i].plot(time_exp['descent'], x_exp['descent'], 'r--') - - # plt.show() - - -plotstuff() diff --git a/checkdiff_0.txt b/checkdiff_0.txt index 73765b1a6..f83bd9f6c 100644 --- a/checkdiff_0.txt +++ b/checkdiff_0.txt @@ -1,115 +1,115 @@ -time to climb: 255.4723 +time to climb: 217.2520 {'h': [array([[ 100. ], - [ 385.84286893], - [ 2524.05538825], - [ 6330.19786708], - [ 8398.09721022], - [ 8398.09721022], - [ 9496.91321874], - [ 8224.65719818], - [ 7524.51936893], - [ 7967.69790418], - [ 7967.69790418], - [ 7685.19578827], - [ 9594.55531382], - [14749.31150762], - [16000. ]]), array([[ 100. ], - [ 385.84286893], - [ 2524.05538825], - [ 6330.19786708], - [ 8398.09721022], - [ 8398.09721022], - [ 9496.91321874], - [ 8224.65719818], - [ 7524.51936893], - [ 7967.69790418], - [ 7967.69790418], - [ 7685.19578827], - [ 9594.55531382], - [14749.31150762], - [16000. ]])], 'r': [array([[ 0. ], - [ 2512.93182958], - [ 9270.65900027], - [16562.87651865], - [20107.2482066 ], - [20107.2482066 ], - [23842.87063336], - [32631.84519492], - [43410.06296693], - [49556.7344816 ], - [49556.7344816 ], - [55970.23796015], - [68204.10399411], - [77757.98698928], - [81884.92516855]]), array([[ 0. ], - [ 2512.93182958], - [ 9270.65900027], - [16562.87651865], - [20107.2482066 ], - [20107.2482066 ], - [23842.87063336], - [32631.84519492], - [43410.06296693], - [49556.7344816 ], - [49556.7344816 ], - [55970.23796015], - [68204.10399411], - [77757.98698928], - [81884.92516855]])], 'thrust': [array([[28040.14632377], - [30685.43462476], - [29491.23905419], - [21324.01785314], - [16249.20034523], - [16249.20034523], - [14664.76010049], - [21846.64091725], - [26953.27860842], - [26642.24161996], - [26642.24161996], - [29154.81655621], - [23634.90073868], - [ 8283.02344799], - [ 6125.4488035 ]]), array([[28040.14632377], - [30685.43462476], - [29491.23905419], - [21324.01785314], - [16249.20034523], - [16249.20034523], - [14664.76010049], - [21846.64091725], - [26953.27860842], - [26642.24161996], - [26642.24161996], - [29154.81655621], - [23634.90073868], - [ 8283.02344799], - [ 6125.4488035 ]])], 'v': [array([[135.964 ], - [206.74599571], - [288.82701778], - [289.73862165], - [267.15878958], - [267.15878958], - [274.87468561], - [362.50881292], - [412.28028855], - [422.61189319], - [422.61189319], - [447.73120108], - [436.16635522], - [323.37066419], - [295.06331582]]), array([[135.964 ], - [206.74599571], - [288.82701778], - [289.73862165], - [267.15878958], - [267.15878958], - [274.87468561], - [362.50881292], - [412.28028855], - [422.61189319], - [422.61189319], - [447.73120108], - [436.16635522], - [323.37066419], - [295.06331582]])]} \ No newline at end of file + [ 103.80775766], + [ 930.71769738], + [ 2018.93438639], + [ 1079.40343002], + [ 1079.40343002], + [ 100.50805119], + [ 1438.27501212], + [ 1602.57149682], + [ 1904.86259749], + [ 1904.86259749], + [ 3712.98528547], + [ 7915.33675389], + [ 9999.15426009], + [10000. ]]), array([[ 100. ], + [ 103.80775766], + [ 930.71769738], + [ 2018.93438639], + [ 1079.40343002], + [ 1079.40343002], + [ 100.50805119], + [ 1438.27501212], + [ 1602.57149682], + [ 1904.86259749], + [ 1904.86259749], + [ 3712.98528547], + [ 7915.33675389], + [ 9999.15426009], + [10000. ]])], 'r': [array([[ 0. ], + [ 2164.77845444], + [ 8473.61758302], + [16609.52293651], + [21085.59321018], + [21085.59321018], + [25851.44200422], + [34547.78294612], + [42985.06162566], + [47584.61382911], + [47584.61382911], + [51585.06694611], + [57432.22219674], + [63136.01715066], + [66759.00094891]]), array([[ 0. ], + [ 2164.77845444], + [ 8473.61758302], + [16609.52293651], + [21085.59321018], + [21085.59321018], + [25851.44200422], + [34547.78294612], + [42985.06162566], + [47584.61382911], + [47584.61382911], + [51585.06694611], + [57432.22219674], + [63136.01715066], + [66759.00094891]])], 'thrust': [array([[28040.14632377], + [31556.75143551], + [34632.8452248 ], + [34460.21958075], + [36675.29708332], + [36675.29708332], + [37236.1319661 ], + [34983.71270878], + [35728.22081081], + [34948.49191097], + [34948.49191097], + [29809.33906985], + [17293.91714046], + [13796.64728958], + [14828.82136199]]), array([[28040.14632377], + [31556.75143551], + [34632.8452248 ], + [34460.21958075], + [36675.29708332], + [36675.29708332], + [37236.1319661 ], + [34983.71270878], + [35728.22081081], + [34948.49191097], + [34948.49191097], + [29809.33906985], + [17293.91714046], + [13796.64728958], + [14828.82136199]])], 'v': [array([[135.964 ], + [208.97354876], + [320.68563986], + [359.68260029], + [388.15357668], + [388.15357668], + [390.55430662], + [351.23126062], + [374.4217715 ], + [366.01620721], + [366.01620721], + [335.87183483], + [271.12367442], + [274.0747837 ], + [299.52547901]]), array([[135.964 ], + [208.97354876], + [320.68563986], + [359.68260029], + [388.15357668], + [388.15357668], + [390.55430662], + [351.23126062], + [374.4217715 ], + [366.01620721], + [366.01620721], + [335.87183483], + [271.12367442], + [274.0747837 ], + [299.52547901]])]} \ No newline at end of file diff --git a/checkdiff_1.txt b/checkdiff_1.txt index bc9e3b06e..ed7e9d1b6 100644 --- a/checkdiff_1.txt +++ b/checkdiff_1.txt @@ -1,115 +1,115 @@ -time to climb: 275.9943 +time to climb: 157.8796 {'h': [array([[ 100. ], - [ 100.00014197], - [ 928.14250857], - [ 4480.12875143], - [ 5854.4279326 ], - [ 5854.4279326 ], - [ 5753.74074866], - [ 6447.30263607], - [ 7351.40997855], - [ 7374.41870514], - [ 7374.41870514], - [ 7253.93701586], - [ 9040.49548007], - [14442.70128356], - [16000. ]]), array([[ 100. ], - [ 100.00014197], - [ 928.14250857], - [ 4480.12875143], - [ 5854.4279326 ], - [ 5854.4279326 ], - [ 5753.74074866], - [ 6447.30263607], - [ 7351.40997855], - [ 7374.41870514], - [ 7374.41870514], - [ 7253.93701586], - [ 9040.49548007], - [14442.70128356], - [16000. ]])], 'r': [array([[ 0. ], - [ 2968.68666017], - [12073.2967696 ], - [21409.53672779], - [26092.61326574], - [26092.61326574], - [31572.04020064], - [42731.10842357], - [54452.94145834], - [61010.61290372], - [61010.61290372], - [67904.86290601], - [81412.77032767], - [92062.07191714], - [96493.47916893]]), array([[ 0. ], - [ 2968.68666017], - [12073.2967696 ], - [21409.53672779], - [26092.61326574], - [26092.61326574], - [31572.04020064], - [42731.10842357], - [54452.94145834], - [61010.61290372], - [61010.61290372], - [67904.86290601], - [81412.77032767], - [92062.07191714], - [96493.47916893]])], 'thrust': [array([[28040.14632377], - [33053.39975829], - [35400.10858351], - [26698.70379863], - [24686.71521391], - [24686.71521391], - [27055.27519258], - [27213.87562323], - [26664.92757684], - [28163.60265986], - [28163.60265986], - [30118.83428395], - [25621.94463206], - [ 8898.75312877], - [ 6125.4488035 ]]), array([[28040.14632377], - [33053.39975829], - [35400.10858351], - [26698.70379863], - [24686.71521391], - [24686.71521391], - [27055.27519258], - [27213.87562323], - [26664.92757684], - [28163.60265986], - [28163.60265986], - [30118.83428395], - [25621.94463206], - [ 8898.75312877], - [ 6125.4488035 ]])], 'v': [array([[135.964 ], - [238.02678694], - [340.85855179], - [313.48707194], - [327.58435172], - [327.58435172], - [358.34086544], - [381.72767454], - [402.72069599], - [423.91555025], - [423.91555025], - [446.68626447], - [445.20261297], - [330.9922242 ], - [295.06331582]]), array([[135.964 ], - [238.02678694], - [340.85855179], - [313.48707194], - [327.58435172], - [327.58435172], - [358.34086544], - [381.72767454], - [402.72069599], - [423.91555025], - [423.91555025], - [446.68626447], - [445.20261297], - [330.9922242 ], - [295.06331582]])]} \ No newline at end of file + [ 515.07613051], + [ 1381.81693255], + [ 101.0458639 ], + [ 172.85115116], + [ 172.85115116], + [ 816.09835065], + [ 979.82075129], + [ 3756.26728314], + [ 5485.0832487 ], + [ 5485.0832487 ], + [ 6275.04817479], + [ 8240.0346346 ], + [ 9882.93735171], + [10000. ]]), array([[ 100. ], + [ 515.07613051], + [ 1381.81693255], + [ 101.0458639 ], + [ 172.85115116], + [ 172.85115116], + [ 816.09835065], + [ 979.82075129], + [ 3756.26728314], + [ 5485.0832487 ], + [ 5485.0832487 ], + [ 6275.04817479], + [ 8240.0346346 ], + [ 9882.93735171], + [10000. ]])], 'r': [array([[ 0. ], + [ 1206.82136366], + [ 3914.17528984], + [ 8451.44496816], + [11399.92146116], + [11399.92146116], + [14365.84009676], + [20639.75294521], + [25288.31640182], + [27271.04173952], + [27271.04173952], + [29881.11674619], + [34591.83602889], + [39138.45065608], + [41792.19739333]]), array([[ 0. ], + [ 1206.82136366], + [ 3914.17528984], + [ 8451.44496816], + [11399.92146116], + [11399.92146116], + [14365.84009676], + [20639.75294521], + [25288.31640182], + [27271.04173952], + [27271.04173952], + [29881.11674619], + [34591.83602889], + [39138.45065608], + [41792.19739333]])], 'thrust': [array([[28040.14632377], + [27840.96435929], + [27801.17232139], + [36538.29991158], + [36783.4253821 ], + [36783.4253821 ], + [35767.31775612], + [35695.44888759], + [27672.82594699], + [23340.56296487], + [23340.56296487], + [22190.71836546], + [17569.77743693], + [14367.81307749], + [14828.82136199]]), array([[28040.14632377], + [27840.96435929], + [27801.17232139], + [36538.29991158], + [36783.4253821 ], + [36783.4253821 ], + [35767.31775612], + [35695.44888759], + [27672.82594699], + [23340.56296487], + [23340.56296487], + [22190.71836546], + [17569.77743693], + [14367.81307749], + [14828.82136199]])], 'v': [array([[135.964 ], + [152.24096545], + [200.85748578], + [328.70862359], + [346.73855457], + [346.73855457], + [346.4022868 ], + [351.79430504], + [304.2851606 ], + [294.30253244], + [294.30253244], + [302.5443161 ], + [289.57065259], + [283.7594102 ], + [299.52547901]]), array([[135.964 ], + [152.24096545], + [200.85748578], + [328.70862359], + [346.73855457], + [346.73855457], + [346.4022868 ], + [351.79430504], + [304.2851606 ], + [294.30253244], + [294.30253244], + [302.5443161 ], + [289.57065259], + [283.7594102 ], + [299.52547901]])]} \ No newline at end of file diff --git a/min_time_climb.py b/min_time_climb.py index 1700c6a4b..8c0d42cf8 100644 --- a/min_time_climb.py +++ b/min_time_climb.py @@ -15,7 +15,7 @@ def min_time_climb(height=20e3, p.driver = om.ScipyOptimizeDriver() p.driver.options['optimizer'] = optimizer - p.driver.declare_coloring() + # p.driver.declare_coloring() if optimizer == 'SNOPT': p.driver.opt_settings['Major iterations limit'] = 1000 @@ -117,7 +117,7 @@ def min_time_climb(height=20e3, def checkDeviation(filenum=0): - heights = [16e3]*2 + heights = [10e3]*2 times_to_climb = [] timeseries_pts = {'h': [], 'r': [], 'thrust': [], 'v': []} prefix = 'traj.phase0.timeseries.' @@ -209,6 +209,7 @@ def multiHeightTest(): optimization takes a very different number of iterations, and the profile looks very different. Time to climb is also different.""" if __name__ == '__main__': + np.random.seed(0) if len(sys.argv) > 1 and 'filenum' in sys.argv[1]: checkDeviation(filenum=sys.argv[1].split('filenum=')[1]) # multiHeightTest() diff --git a/avcannonball.py b/multI_cannonball_copyparts.py similarity index 99% rename from avcannonball.py rename to multI_cannonball_copyparts.py index bb48ec9de..6ae9ea40f 100644 --- a/avcannonball.py +++ b/multI_cannonball_copyparts.py @@ -312,7 +312,7 @@ def runAvCannonball(kes=[4e3], weights=[1], makeN2=False): descent.interp('gam', [0, -45]), units='deg') if makeN2: - om.n2(super_prob, outfile='AvCannonball.html') + om.n2(super_prob, outfile='multi_cannonball_copyparts.html') dm.run_problem(super_prob) return super_prob, prefix, num_trajs, kes, weights @@ -421,7 +421,7 @@ def multiTestCase(makeN2=False): if __name__ == '__main__': - # if run as python avcannonball.py n2, it will create an N2 + # if run as python multi_cannonball_copyparts.py n2, it will create an N2 makeN2 = False singlerun = True if len(sys.argv) > 1: diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py new file mode 100644 index 000000000..3cdbe1e77 --- /dev/null +++ b/multi_aviary_copymodel.py @@ -0,0 +1,449 @@ +""" +Goal: use single aircraft description but optimize it for multiple missions simultaneously, +i.e. all missions are on the range-payload line instead of having excess performance +Aircraft csv: defines plane, but also defines payload (passengers, cargo) which can vary with mission + These will have to be specified in some alternate way such as a list correspond to mission # +Phase info: defines a particular mission, will have multiple phase infos +""" +import sys +import warnings +import aviary.api as av +import openmdao.api as om +import dymos as dm +import numpy as np +from aviary.variable_info.enums import ProblemType +from c5_ferry_phase_info import phase_info as c5_ferry_phase_info +from c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info +from c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info +from aviary.variable_info.variable_meta_data import _MetaData as MetaData +from aviary.variable_info.variables import Mission, Dynamic +from aviary.interface.methods_for_level2 import wrapped_convert_units +from aviary.variable_info.enums import EquationsOfMotion + +TWO_DEGREES_OF_FREEDOM = EquationsOfMotion.TWO_DEGREES_OF_FREEDOM +HEIGHT_ENERGY = EquationsOfMotion.HEIGHT_ENERGY +SOLVED_2DOF = EquationsOfMotion.SOLVED_2DOF + +# "comp?.a can be used to reference multiple comp1.a comp2.a etc" + + +class MultiMissionProblem(om.Problem): + def __init__(self, planes, phase_infos, weights): + super().__init__() + self.num_missions = len(planes) + # phase infos and planes length must match - this maybe unnecessary if + # different planes (payloads) fly same mission (say pax vs cargo) + # or if same payload flies 2 different missions (altitude/mach differences) + if self.num_missions != len(phase_infos): + raise Exception("Length of planes and phase_infos must be the same!") + + # if fewer weights than planes are provided, assign equal weights for all planes + if len(weights) < self.num_missions: + weights = [1]*self.num_missions + # if more weights than planes, raise exception + elif len(weights) > self.num_missions: + raise Exception("Length of weights cannot exceed length of planes!") + self.weights = weights + + self.group_prefix = 'group' + self.probs = [] + # define individual aviary problems + for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): + prob = av.AviaryProblem() + prob.load_inputs(plane, phase_info) + prob.check_and_preprocess_inputs() + prob.add_pre_mission_systems() + prob.add_phases() + prob.add_post_mission_systems() + prob.link_phases() + prob.add_design_variables() # should not work at super prob level + self.probs.append(prob) + + self.model.add_subsystem( + self.group_prefix + f'_{i}', prob.model, + promotes=['mission:design:gross_mass']) + + def add_design_variables(self): + self.model.add_design_var('mission:design:gross_mass', lower=10., upper=900e3) + + def add_driver(self): + self.driver = om.ScipyOptimizeDriver() + self.driver.options['optimizer'] = 'SLSQP' + self.driver.declare_coloring() + self.model.linear_solver = om.DirectSolver() + + def add_objective(self): + weights = self.weights + fuel_burned_vars = [f"fuel_{i}" for i in range(self.num_missions)] + weighted_str = "+".join([f"{fuel}*{weight}" + for fuel, weight in zip(fuel_burned_vars, weights)]) + # weighted_str looks like: fuel_0 * weight[0] + fuel_1 * weight[1] + + # adding compound execComp to super problem + self.model.add_subsystem('compound_fuel_burn_objective', om.ExecComp( + "compound = "+weighted_str), promotes=["compound", *fuel_burned_vars]) + + for i in range(self.num_missions): + # connecting each subcomponent's fuel burn to super problem's unique fuel variables + self.model.connect( + self.group_prefix+f"_{i}.mission:summary:fuel_burned", f"fuel_{i}") + self.model.add_objective('compound') + + def setup_wrapper(self): + """Wrapper for om.Problem setup with warning ignoring and setting options""" + for prob in self.probs: + prob.model.options['aviary_options'] = prob.aviary_inputs + prob.model.options['aviary_metadata'] = prob.meta_data + prob.model.options['phase_info'] = prob.phase_info + + # Aviary's problem setup wrapper uses these ignored warnings to suppress + # some warnings related to variable promotion. Replicating that here with + # setup for the super problem + with warnings.catch_warnings(): + warnings.simplefilter("ignore", om.OpenMDAOWarning) + warnings.simplefilter("ignore", om.PromotionWarning) + self.setup() + + def create_N2(self, outfile='aviary_multi_traj.html'): + om.n2(self, outfile=outfile) + + def initvals(self): + for i, prob in enumerate(self.probs): + self.set_val(self.group_prefix + + f'_{i}.aircraft:design:landing_to_takeoff_mass_ratio', 0.5) + # Grab the trajectory object from the model + traj = prob.model.traj + + # Determine which phases to loop over, fetching them from the trajectory + phase_items = traj._phases.items() + + # Loop over each phase and set initial guesses for the state and control variables + for idx, (phase_name, phase) in enumerate(phase_items): + # If not, fetch the initial guesses specific to the phase + # check if guesses exist for this phase + if "initial_guesses" in prob.phase_info[phase_name]: + guesses = prob.phase_info[phase_name]['initial_guesses'] + else: + guesses = {} + + # ||||||||||||| _add_subsystem_guesses + # Get all subsystems associated with the phase + all_subsystems = prob._get_all_subsystems( + prob.phase_info[phase_name]['external_subsystems']) + + # Loop over each subsystem + for subsystem in all_subsystems: + # Fetch the initial guesses for the subsystem + initial_guesses = subsystem.get_initial_guesses() + + # Loop over each guess + for key, val in initial_guesses.items(): + # Identify the type of the guess (state or control) + type = val.pop('type') + if 'state' in type: + path_string = 'states' + elif 'control' in type: + path_string = 'controls' + + # Process the guess variable (handles array interpolation) + val['val'] = prob._process_guess_var(val['val'], key, phase) + + # Set the initial guess in the problem + self.set_val( + self.group_prefix + + f'_{i}.traj.{phase_name}.{path_string}:{key}', **val) + + # Set initial guesses for states and controls for each phase + + # |||||||||||||||||||||| _add_guesses + # If using the GASP model, set initial guesses for the rotation mass and flight duration + if prob.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): + control_keys = ["mach", "altitude"] + state_keys = ["mass", Dynamic.Mission.DISTANCE] + prob_keys = ["tau_gear", "tau_flaps"] + + # for the simple mission method, use the provided initial and final mach and altitude values from phase_info + if prob.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): + initial_altitude = wrapped_convert_units( + prob.phase_info[phase_name]['user_options'] + ['initial_altitude'], + 'ft') + final_altitude = wrapped_convert_units( + prob.phase_info[phase_name]['user_options']['final_altitude'], 'ft') + initial_mach = prob.phase_info[phase_name]['user_options'][ + 'initial_mach'] + final_mach = prob.phase_info[phase_name]['user_options'][ + 'final_mach'] + + guesses["mach"] = ([initial_mach[0], final_mach[0]], "unitless") + guesses["altitude"] = ([initial_altitude, final_altitude], 'ft') + + if prob.mission_method is HEIGHT_ENERGY: + # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds + if 'time' not in guesses: + initial_bounds = wrapped_convert_units( + prob.phase_info[phase_name]['user_options']['initial_bounds'], 's') + duration_bounds = wrapped_convert_units( + prob.phase_info[phase_name]['user_options']['duration_bounds'], 's') + guesses["time"] = ([np.mean(initial_bounds[0]), np.mean( + duration_bounds[0])], 's') + + # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds + if 'time' not in guesses: + initial_bounds = prob.phase_info[phase_name]['user_options'][ + 'initial_bounds'] + duration_bounds = prob.phase_info[phase_name]['user_options'][ + 'duration_bounds'] + # Add a check for the initial and duration bounds, raise an error if they are not consistent + if initial_bounds[1] != duration_bounds[1]: + raise ValueError( + f"Initial and duration bounds for {phase_name} are not consistent.") + guesses["time"] = ([np.mean(initial_bounds[0]), np.mean( + duration_bounds[0])], initial_bounds[1]) + + for guess_key, guess_data in guesses.items(): + val, units = guess_data + + # Set initial guess for time variables + if 'time' == guess_key and prob.mission_method is not SOLVED_2DOF: + self.set_val( + self.group_prefix + f'_{i}.traj.{phase_name}.t_initial', + val[0], + units=units) + self.set_val( + self.group_prefix + f'_{i}.traj.{phase_name}.t_duration', + val[1], + units=units) + + else: + # Set initial guess for control variables + if guess_key in control_keys: + try: + self.set_val(self.group_prefix + + f'_{i}.traj.{phase_name}.controls:{guess_key}', + prob._process_guess_var( + val, guess_key, phase), + units=units) + except KeyError: + try: + self.set_val( + self.group_prefix + + f'_{i}.traj.{phase_name}.polynomial_controls:{guess_key}', + prob._process_guess_var(val, guess_key, phase), + units=units) + except KeyError: + self.set_val( + self.group_prefix + + f'_{i}.traj.{phase_name}.bspline_controls:{guess_key}', + prob._process_guess_var(val, guess_key, phase), + units=units) + + if guess_key in control_keys: + pass + # Set initial guess for state variables + elif guess_key in state_keys: + self.set_val(self.group_prefix + + f'_{i}.traj.{phase_name}.states:{guess_key}', + prob._process_guess_var( + val, guess_key, phase), + units=units) + elif guess_key in prob_keys: + self.set_val( + self.group_prefix+f'_{i}.'+guess_key, val, units=units) + elif ":" in guess_key: + self.set_val( + self.group_prefix + f'_{i}.traj.{phase_name}.{guess_key}', + prob._process_guess_var(val, guess_key, phase), + units=units) + else: + # raise error if the guess key is not recognized + raise ValueError( + f"Initial guess key {guess_key} in {phase_name} is not recognized.") + + # We need some special logic for these following variables because GASP computes + # initial guesses using some knowledge of the mission duration and other variables + # that are only available after calling `create_vehicle`. Thus these initial guess + # values are not included in the `phase_info` object. + + base_phase = phase_name + if 'mass' not in guesses: + mass_guess = prob.aviary_inputs.get_val( + Mission.Design.GROSS_MASS, units='lbm') + # Set the mass guess as the initial value for the mass state variable + self.set_val(self.group_prefix+f'_{i}.traj.{phase_name}.states:mass', + mass_guess, units='lbm') + + # if 'time' not in guesses: + # # Determine initial time and duration guesses depending on the phase name + # if 'desc1' == base_phase: + # t_initial = flight_duration*.9 + # t_duration = flight_duration*.04 + # elif 'desc2' in base_phase: + # t_initial = flight_duration*.94 + # t_duration = 5000 + # # Set the time guesses as the initial values for the time-related trajectory variables + # self.set_val(f"traj.{phase_name}.t_initial", + # t_initial, units='s') + # self.set_val(f"traj.{phase_name}.t_duration", + # t_duration, units='s') + + def run(self): + dm.run_problem(self) + + # def link_pre_post_traj(self): + # for i, prob in enumerate(self.probs): + # prefix = self.group_prefix+f'_{i}.' + + # self.model.connect(prefix + + # f'traj.{prob.regular_phases[-1]}.timeseries.distance', + # Mission.Summary.RANGE, src_indices=[-1], + # flat_src_indices=True) + + +if __name__ == '__main__': + makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False + planes = ['c5_maxpayload.csv', 'c5_intermediate.csv'] + phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] + weights = [1, 1] + super_prob = MultiMissionProblem(planes, phase_infos, weights) + super_prob.add_driver() + super_prob.add_design_variables() + super_prob.add_objective() + super_prob.setup_wrapper() + super_prob.initvals() + if makeN2: + super_prob.create_N2() + super_prob.run() + + +# ========================================================================= old code + # super_prob = om.Problem() + # num_missions = len(weights) + # probs = [] + # prefix = "problem_" + + # makeN2 = False + # if len(sys.argv) > 1: + # if "n2" in sys.argv: + # makeN2 = True + + # # define individual aviary problems + # for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): + # prob = av.AviaryProblem() + # prob.load_inputs(plane, phase_info) + # prob.check_and_preprocess_inputs() + # prob.add_pre_mission_systems() + # traj = prob.add_phases() # save dymos traj to add to super problem as a subsystem + # prob.add_post_mission_systems() + # prob.link_phases() # this is half working / connect statements from outside of traj to inside are failing + # prob.problem_type = ProblemType.ALTERNATE # adds summary gross mass as design var + # prob.add_design_variables() + # probs.append(prob) + + # group = om.Group() # this group will contain all the promoted aviary vars + # group.add_subsystem("pre", prob.pre_mission) + # group.add_subsystem("traj", traj) + # group.add_subsystem("post", prob.post_mission) + + # # setting defaults for these variables to suppress errors + # longlst = [ + # 'mission:summary:gross_mass', 'aircraft:wing:sweep', + # 'aircraft:wing:thickness_to_chord', 'aircraft:wing:area', + # 'aircraft:wing:taper_ratio', 'mission:design:gross_mass'] + # for var in longlst: + # group.set_input_defaults( + # var, val=MetaData[var]['default_value'], + # units=MetaData[var]['units']) + + # # add group and promote design gross mass (common input amongst multiple missions) + # # in this way it represents the MTOW + # super_prob.model.add_subsystem(prefix+f'{i}', group, promotes=[ + # 'mission:design:gross_mass']) + + # # add design gross mass as a design var + # super_prob.model.add_design_var( + # 'mission:design:gross_mass', lower=100e3, upper=1000e3) + + # for i in range(num_missions): + # # connecting each subcomponent's fuel burn to super problem's unique fuel variables + # super_prob.model.connect( + # prefix+f"{i}.mission:summary:fuel_burned", f"fuel_{i}") + + # # create constraint to force each mission's summary gross mass to not + # # exceed the common mission design gross mass (aka MTOW) + # super_prob.model.add_subsystem(f'MTOW_constraint{i}', om.ExecComp( + # 'mtow_resid = design_gross_mass - summary_gross_mass'), + # promotes=[('summary_gross_mass', prefix+f'{i}.mission:summary:gross_mass'), + # ('design_gross_mass', 'mission:design:gross_mass')]) + + # super_prob.model.add_constraint(f'MTOW_constraint{i}.mtow_resid', lower=0.) + + # # creating variable strings that will represent fuel burn from each mission + # fuel_burned_vars = [f"fuel_{i}" for i in range(num_missions)] + # weighted_str = "+".join([f"{fuel}*{weight}" + # for fuel, weight in zip(fuel_burned_vars, weights)]) + # # weighted_str looks like: fuel_0 * weight[0] + fuel_1 * weight[1] + + # # adding compound execComp to super problem + # super_prob.model.add_subsystem('compound_fuel_burn_objective', om.ExecComp( + # "compound = "+weighted_str), promotes=["compound", *fuel_burned_vars]) + + # super_prob.driver = om.ScipyOptimizeDriver() + # super_prob.driver.options['optimizer'] = 'SLSQP' + # super_prob.model.add_objective('compound') # output from execcomp goes here + + # with warnings.catch_warnings(): + # warnings.simplefilter("ignore", om.OpenMDAOWarning) + # warnings.simplefilter("ignore", om.PromotionWarning) + # super_prob.setup() + + # if makeN2: + # om.n2(super_prob, outfile="multi_mission_importTraj_N2.html") # create N2 diagram + + # # cannot use this b/c initial guesses (i.e. setval func) has to be called on super prob level + # # for prob in probs: + # # # prob.setup() + # # prob.set_initial_guesses() + + # # dm.run_problem(super_prob) + + +""" +Ferry mission phase info: +Times (min): 0, 50, 812, 843 + Alt (ft): 0, 29500, 32000, 0 + Mach: 0.3, 0.77, 0.77, 0.3 +Est. Range: 7001 nmi +Notes: 32k in 30 mins too fast for aviary, climb to low alt then slow rise through cruise + +Intermediate mission phase info: +Times (min): 0, 50, 560, 590 + Alt (ft): 0, 29500, 32000, 0 + Mach: 0.3, 0.77, 0.77, 0.3 +Est. Range: 4839 nmi + +Max Payload mission phase info: +Times (min): 0, 50, 260, 290 + Alt (ft): 0, 29500, 32000, 0 + Mach: 0.3, 0.77, 0.77, 0.3 +Est. Range: 2272 nmi + +Hard to find multiple payload/range values for FwFm (737), so use C-5 instead +Based on: + https://en.wikipedia.org/wiki/Lockheed_C-5_Galaxy#Specifications_(C-5M), + https://www.af.mil/About-Us/Fact-Sheets/Display/Article/1529718/c-5-abc-galaxy-and-c-5m-super-galaxy/ + +MTOW: 840,000 lb +Max Payload: 281,000 lb +Max Fuel: 341,446 lb +Empty Weight: 380,000 lb -> leaves 460,000 lb for fuel+payload (max fuel + max payload = 622,446 lb) + +Payload/range: + 281,000 lb payload -> 2,150 nmi range (AF.mil) [max payload case] + 120,000 lb payload -> 4,800 nmi range (AF.mil) [intermediate case] + 0 lb payload -> 7,000 nmi range (AF.mil) [ferry case] + +Flight characteristics: + Cruise at M0.77 at 33k ft + Max rate of climb: 2100 ft/min +""" diff --git a/multimission.py b/multi_aviary_submodel.py similarity index 100% rename from multimission.py rename to multi_aviary_submodel.py diff --git a/multi_cannonball_copymodel.py b/multi_cannonball_copymodel.py new file mode 100644 index 000000000..64ed68e1f --- /dev/null +++ b/multi_cannonball_copymodel.py @@ -0,0 +1,407 @@ +# Cannonball Multi Mission Example with Aviary-esque setup +# Each mission is defined as a "CannonballProblem", akin to AviaryProblem +from dymos.models.atmosphere.atmos_1976 import USatm1976Data +from scipy.interpolate import interp1d +import matplotlib.pyplot as plt +import openmdao.api as om +import dymos as dm +import numpy as np +import sys + + +class CannonballProblem(om.Problem): + def __init__(self): + super().__init__() + self.model = CannonballGroup() + self.pre_mission = PreMissionGroup() + self.post_mission = PostMissionGroup() + self.traj = None + self.model.add_subsystem('pre_mission', self.pre_mission, + promotes=['*']) + self.model.add_subsystem('post_mission', self.post_mission) + + def add_trajectory(self, ke_max=1e2): + traj = dm.Trajectory() + transcription = dm.Radau(num_segments=5, order=3, compressed=True) + ascent = dm.Phase(ode_class=CannonballODE, transcription=transcription) + traj.add_phase('ascent', ascent) + + transcription = dm.GaussLobatto(num_segments=5, order=3, compressed=True) + descent = dm.Phase(ode_class=CannonballODE, transcription=transcription) + traj.add_phase('descent', descent) + + for phase in (ascent, descent): + is_ascent = phase.name == "ascent" + phase.set_time_options(fix_initial=True if is_ascent else False, + duration_bounds=(1, 100), duration_ref=100, units='s') + phase.set_state_options('r', fix_initial=is_ascent, fix_final=False) + phase.set_state_options('h', fix_initial=is_ascent, fix_final=not is_ascent) + phase.set_state_options('gam', fix_initial=False, fix_final=is_ascent) + phase.set_state_options('v', fix_initial=False, fix_final=False) + phase.add_parameter('S', units='m**2', static_target=True, val=0.005) + phase.add_parameter('m', units='kg', static_target=True, val=1.0) + phase.add_parameter('price', units='USD', static_target=True, val=10) + phase.add_parameter('CD', units=None, static_target=True, val=0.5) + + # descent.add_objective('r', loc='final', scaler=-1.0) # negative means to maximize + for param in ('CD', 'm', 'S', 'price'): + traj.add_parameter(param, static_target=True) + + # Link Phases (link time and all state variables) + traj.link_phases(phases=['ascent', 'descent'], vars=['*']) + # have to set muzzle energy here before setup for sim to run properly + ascent.add_boundary_constraint('ke', loc='initial', + upper=ke_max, lower=0, ref=100000) + self.traj = traj + self.model.add_subsystem('traj', traj) + self.phases = [ascent, descent] + + def setDefaults(self): + self.model.set_input_defaults('density', val=7.87, units='g/cm**3') + + def addDesVar(self): + self.model.add_design_var('radius', lower=0.01, upper=0.10, + ref0=0.01, ref=0.10, units='m') + + def connectPreTraj(self): + self.model.connect('mass', 'traj.parameters:m') + self.model.connect('S', 'traj.parameters:S') + self.model.connect('price', 'traj.parameters:price') + + def setInitialVals(self, super_problem=None, prefix=""): + ref = self + if super_problem is not None and prefix != "": + ref = super_problem + + ref.set_val(prefix+'radius', 0.05, units='m') + ref.set_val(prefix+'density', 7.87, units='g/cm**3') + + ref.set_val(prefix+"traj.parameters:CD", 0.5) + ref.set_val(prefix+"traj.ascent.t_initial", 0.0) + ref.set_val(prefix+"traj.ascent.t_duration", 10.0) + + # list is initial and final, based on phase info some are fixed others are not + ascent, descent = self.phases + ref.set_val(prefix+"traj.ascent.states:r", ascent.interp('r', [0, 100])) + ref.set_val(prefix+'traj.ascent.states:h', ascent.interp('h', [0, 100])) + ref.set_val(prefix+'traj.ascent.states:v', ascent.interp('v', [200, 150])) + ref.set_val(prefix+'traj.ascent.states:gam', + ascent.interp('gam', [25, 0]), units='deg') + + ref.set_val(prefix+'traj.descent.t_initial', 10.0) + ref.set_val(prefix+'traj.descent.t_duration', 10.0) + ref.set_val(prefix+'traj.descent.states:r', descent.interp('r', [100, 200])) + ref.set_val(prefix+'traj.descent.states:h', descent.interp('h', [100, 0])) + ref.set_val(prefix+'traj.descent.states:v', descent.interp('v', [150, 200])) + ref.set_val(prefix+'traj.descent.states:gam', + descent.interp('gam', [0, -45]), units='deg') + + +class CannonballGroup(om.Group): + def __init__(self): + super().__init__() + + +class PreMissionGroup(om.Group): + def __init__(self): + super().__init__() + self.sizingcomp = CannonballSizing() + self.add_subsystem('sizing_comp', self.sizingcomp, + promotes=['*']) + + +class PostMissionGroup(om.Group): + pass + + +class CannonballODE(om.ExplicitComponent): + def initialize(self): + self.options.declare('num_nodes', types=int) + + def setup(self): + nn = self.options['num_nodes'] + # static params + self.add_input('m', units='kg') + self.add_input('S', units='m**2') + self.add_input('CD', 0.5) + + # time varying inputs + self.add_input('h', units='m', shape=nn) + self.add_input('v', units='m/s', shape=nn) + self.add_input('gam', units='rad', shape=nn) + + # state rates + self.add_output('v_dot', shape=nn, units='m/s**2', + tags=['dymos.state_rate_source:v']) + self.add_output('gam_dot', shape=nn, units='rad/s', + tags=['dymos.state_rate_source:gam']) + self.add_output('h_dot', shape=nn, units='m/s', + tags=['dymos.state_rate_source:h']) + self.add_output('r_dot', shape=nn, units='m/s', + tags=['dymos.state_rate_source:r']) + self.add_output('ke', shape=nn, units='J') + + # Ask OpenMDAO to compute the partial derivatives using complex-step + # with a partial coloring algorithm for improved performance, and use + # a graph coloring algorithm to automatically detect the sparsity pattern. + self.declare_coloring(wrt='*', method='cs') + + alt_data = USatm1976Data.alt * om.unit_conversion('ft', 'm')[0] + rho_data = USatm1976Data.rho * om.unit_conversion('slug/ft**3', 'kg/m**3')[0] + self.rho_interp = interp1d(np.array(alt_data, dtype=complex), + np.array(rho_data, dtype=complex), + kind='linear') + + def compute(self, inputs, outputs): + + gam = inputs['gam'] + v = inputs['v'] + h = inputs['h'] + m = inputs['m'] + S = inputs['S'] + CD = inputs['CD'] + + GRAVITY = 9.80665 # m/s**2 + + # handle complex-step gracefully from the interpolant + if np.iscomplexobj(h): + rho = self.rho_interp(inputs['h']) + else: + rho = self.rho_interp(inputs['h']).real + + q = 0.5*rho*inputs['v']**2 + qS = q * S + D = qS * CD + cgam = np.cos(gam) + sgam = np.sin(gam) + outputs['v_dot'] = - D/m-GRAVITY*sgam + outputs['gam_dot'] = -(GRAVITY/v)*cgam + outputs['h_dot'] = v*sgam + outputs['r_dot'] = v*cgam + outputs['ke'] = 0.5*m*v**2 + + +class CannonballSizing(om.ExplicitComponent): + def setup(self): + self.add_input(name='radius', val=1.0, units='m') + self.add_input(name='density', val=7870., units='kg/m**3') + + self.add_output(name='mass', shape=(1,), units='kg') + self.add_output(name='S', shape=(1,), units='m**2') + self.add_output(name='price', shape=(1,), units='USD') + + self.declare_partials(of='mass', wrt='density') + self.declare_partials(of='mass', wrt='radius') + self.declare_partials(of='S', wrt='radius') + self.declare_partials(of='price', wrt='radius') + self.declare_partials(of='price', wrt='density') + + def compute(self, inputs, outputs): + radius = inputs['radius'] + density = inputs['density'] + outputs['mass'] = (4/3.) * density * np.pi * radius ** 3 + outputs['S'] = np.pi * radius ** 2 + outputs['price'] = (4/3.) * density * np.pi * radius ** 3 * 10 # $10 per kg + + def compute_partials(self, inputs, partials): + radius = inputs['radius'] + density = inputs['density'] + partials['mass', 'density'] = (4/3.) * np.pi * radius ** 3 + partials['mass', 'radius'] = 4. * density * np.pi * radius ** 2 + partials['S', 'radius'] = 2 * np.pi * radius + partials['price', 'density'] = (4/3.) * np.pi * radius ** 3 * 10 + partials['price', 'radius'] = 4. * density * np.pi * radius ** 2 * 10 + + +def runAvCannonball(kes=[4e3], weights=[1], makeN2=False): + # handling of multiple KEs + # if fewer weights present than KEs, use same weight + if len(kes) > len(weights): + weights = [1]*len(kes) + elif len(kes) < len(weights): + raise Exception("Cannot have more weights than cannons!") + num_trajs = len(kes) + + probs = [] + super_prob = om.Problem() + + # create sub problems and add them to super in a group + # group prevents spillage of promoted vars into super + prefix = "group" # prefix for each om.Group + for i, ke in enumerate(kes): + prob = CannonballProblem() + prob.add_trajectory(ke_max=ke) + prob.setDefaults() + prob.addDesVar() # doesn't seem to do anything + prob.connectPreTraj() + + super_prob.model.add_subsystem(prefix+f'_{i}', prob.model, + promotes_inputs=['radius', 'density']) + probs.append(prob) + + # create an execComp with a compound range function to maximize range + # for all cannons with a weighted function + ranges = [f"r{i}" for i in range(num_trajs)] # looks like: [r0, r1, ...] + # weighted_sum_str looks like: 1*r0+1*r1+... + weighted_sum_str = "+".join([f"{weight}*{r}" for r, weight in zip(ranges, weights)]) + super_prob.model.add_subsystem('compoundComp', om.ExecComp( + "compound_range=" + weighted_sum_str), + promotes=['compound_range', *ranges]) + + # controlling radius to affect mass/ballistic coeff + super_prob.model.add_design_var('radius', lower=0.01, upper=0.10, + ref0=0.01, ref=0.10, units='m') + + for i in range(num_trajs): + # connect end of trajectory range to compound range input + super_prob.model.connect( + prefix+f'_{i}.traj.descent.states:r', ranges[i], + src_indices=-1) + + super_prob.model.add_objective('compound_range', scaler=-1) # maximize range + + super_prob.driver = om.ScipyOptimizeDriver() + super_prob.driver.options['optimizer'] = 'SLSQP' + super_prob.driver.declare_coloring() + super_prob.model.linear_solver = om.DirectSolver() + super_prob.setup() + + for i, prob in enumerate(probs): + subprefix = prefix+f"_{i}." + prob.setInitialVals(super_prob, subprefix) + + if makeN2: + om.n2(super_prob, outfile='multi_cannonball_modelcopy.html') + + dm.run_problem(super_prob) + return super_prob, prefix, num_trajs, kes, weights + + +def printOutput(super_prob, prefix, num_trajs, kes, weights): + # formatted output + print("\n\n=================================================") + print( + f"Optimized {num_trajs} trajectories with weights: {', '.join(map(str,weights))}") + rad = super_prob.get_val('radius', units='cm')[0] + + mass0 = super_prob.get_val(prefix+'_0.mass', units='kg')[0] + price0 = super_prob.get_val(prefix+'_0.price', units='USD')[0] + area0 = super_prob.get_val(prefix+'_0.S', units='cm**2')[0] + + # mass, price, S are outputs from sizing. These should be common amongst all + # trajectories, however since they're outputs they cannot be promoted upto + # super problem without unique names. This loop checks their values with + # value of the first trajectory to ensure they are the same. + if num_trajs > 1: + for i in range(num_trajs-1): + mass = super_prob.get_val(prefix+f'_{i+1}.mass', units='kg')[0] + price = super_prob.get_val(prefix+f'_{i+1}.price', units='USD')[0] + area = super_prob.get_val(prefix+f'_{i+1}.S', units='cm**2')[0] + if mass != mass0 or price != price0 or area != area0: + raise Exception( + "Masses, Prices, and/or Areas are not equivalent between trajectories.") + + print("\nOptimal Cannonball Description:") + print( + f"\tRadius: {rad:.2f} cm, Mass: {mass0:.2f} kg, Price: ${price0:.2f}, Area: {area0:.2f} sqcm") + + print("\nOptimal Trajectory Descriptions:") + ranges = 0 + for i, ke in enumerate(kes): + angle = super_prob.get_val( + prefix+f'_{i}.traj.ascent.timeseries.gam', units='deg')[0, 0] + max_range = super_prob.get_val( + prefix+f'_{i}.traj.descent.timeseries.r')[-1, 0] + + print( + f"\tKE: {ke/1e3:.2f} KJ, Launch Angle: {angle:.2f} deg, Max Range: {max_range:.2f} m") + ranges += weights[i]*max_range + print(f"System range: {ranges}") + + +def plotOutput(super_prob, prefix, num_trajs, kes, weights, show=True): + if show: + _, ax = plt.subplots() + timevals = [] + hvals = [] + rvals = [] + for i in range(num_trajs): + tv = [] + hv = [] + rv = [] + for phase in ('ascent', 'descent'): + tv.append(super_prob.get_val( + prefix+f'_{i}.traj.{phase}.timeseries.time')) + hv.append(super_prob.get_val( + prefix+f'_{i}.traj.{phase}.timeseries.h')) + rv.append(super_prob.get_val( + prefix+f'_{i}.traj.{phase}.timeseries.r')) + + timevals.append(np.vstack(tv)) + hvals.append(np.vstack(hv)) + rvals.append(np.vstack(rv)) + if show: + ax.plot(rvals[-1], hvals[-1]) + + if show: + plt.grid() + plt.legend([f"Weights = {weight}" for weight in weights]) + plt.title(f"Cannonballs With KEs: {kes} J") + plt.show() + return timevals, rvals, hvals + + +def multiTestCase(makeN2=False): + testing_weights = [[2, 1.2], [1.2, 2], [1, 1]] + kes = [1e5, 6e5] + legendlst = [] + rs, hs = [], [] + for weighting in testing_weights: + super_prob, prefix, num_trajs, kes, weights = runAvCannonball( + kes=kes, weights=weighting, makeN2=makeN2) + printOutput(super_prob, prefix, num_trajs, kes, weights) + tvals, rvals, hvals = plotOutput( + super_prob, prefix, num_trajs, kes, weights, show=False) + + for r, h, weight, ke in zip(rvals, hvals, weighting, kes): + rs.append(r) + hs.append(h) + legendlst.append(f"KE: {ke/1e3} kJ, Weight: {weight} of {weighting}") + + _, ax = plt.subplots() + colors = ['r--', 'r-', 'b--', 'b-', 'g--', 'g-'] # same color for each cannonball + for r, h, col in zip(rs, hs, colors): + ax.plot(r, h, col) + plt.grid() + plt.legend(legendlst, loc='upper left') + titlestr = ", ".join([str(ke/1e3) for ke in kes]) + plt.title(f"Cannonballs With KEs: {titlestr} kJ") + plt.show() + + +if __name__ == '__main__': + # if run as python avcannonball.py n2, it will create an N2 + makeN2 = False + singlerun = True + if len(sys.argv) > 1: + if "n2" in sys.argv: + makeN2 = True + if "multi" in sys.argv: + # runs multiple weightings to see what impact system optimization makes + multiTestCase(makeN2) + singlerun = False + + if singlerun: + # singular weighting run + super_prob, prefix, num_trajs, kes, weights = runAvCannonball( + kes=[4e5, 6e5], weights=[2, 1.5], makeN2=makeN2) + printOutput(super_prob, prefix, num_trajs, kes, weights) + plotOutput(super_prob, prefix, num_trajs, kes, weights) + + +""" +Findings: +- importing prob.model solves the issue of connecting traj to pre/post mission (at least in cannonball) +- initial values can be set with the internal function as long as set_val gets called on the super problem instance + and as such the variable name passed in contains the unique reference + """ diff --git a/multi_mission_importTraj_N2.html b/multi_mission_importTraj_N2.html deleted file mode 100644 index c1b62f22d..000000000 --- a/multi_mission_importTraj_N2.html +++ /dev/null @@ -1,14840 +0,0 @@ - - - -OpenMDAO Model Hierarchy and N2 diagram - - - - - - - - - - - - - - - - - -
-
- -
-
- -
- - -
-
-
-
- - - -
-
- - -
-
- - - - - -
-
- - - - -
-
- -
-
- -
- -
-
- -
- -
-
- Processing... -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

-
-
- - - -
- -
- -
-
- -
-
-
-
- N2 Information -
- - -
- -
-
-
-
-
- - - - - - - - - - -
- -
- -
- -
- -
-

Left-click on a node in the model hierarchy to navigate to that node.
- Right-click on a node to collapse/expand it. - Alt-right-click on a node with variables to select which ones to hide.
- Note: Right-click in Firefox displays a browser menu. To disable that, - visit about:config and set dom.event.contextmenu.enabled - to true.
- Hover over any cell in the matrix to display its connections - as arrows. Click that cell to make those arrows persistent. -

-

Toolbar Help

-
- Snapshot of toolbar buttons - -
-
- -
- - - - - - -
Variable NameVisible
-
- - -
-
-
- Search - -
-
- - - -
-
-
- - - - - - - diff --git a/multitraj.py b/multitraj.py deleted file mode 100644 index a143aa24d..000000000 --- a/multitraj.py +++ /dev/null @@ -1,181 +0,0 @@ -""" -Goal: use single aircraft description but optimize it for multiple missions simultaneously, -i.e. all missions are on the range-payload line instead of having excess performance -Aircraft csv: defines plane, but also defines payload (passengers, cargo) which can vary with mission - These will have to be specified in some alternate way such as a list correspond to mission # -Phase info: defines a particular mission, will have multiple phase infos -""" -import sys -import warnings -import aviary.api as av -import openmdao.api as om -import dymos as dm -from aviary.variable_info.enums import ProblemType -from c5_ferry_phase_info import phase_info as c5_ferry_phase_info -from c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info -from c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info -from aviary.variable_info.variable_meta_data import _MetaData as MetaData - -planes = ['c5_maxpayload.csv', 'c5_intermediate.csv'] -phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] -weights = [1, 1] -num_missions = len(weights) - -# "comp?.a can be used to reference multiple comp1.a comp2.a etc" - - -class MultiMissionProblem(om.Problem): - def __init__(self): - super().__init__() - self.model.add_subsystem() - - def add_design_variable(): - pass - - def link_pre_post_traj(): - pass - - def set_initial_values(): - pass - - -def add_design_var(): - pass - - -def setupprob(super_prob): - # Aviary's problem setup wrapper uses these ignored warnings to suppress - # some warnings related to variable promotion. Replicating that here with - # setup for the super problem - with warnings.catch_warnings(): - warnings.simplefilter("ignore", om.OpenMDAOWarning) - warnings.simplefilter("ignore", om.PromotionWarning) - super_prob.setup() - - -if __name__ == '__main__': - super_prob = om.Problem() - probs = [] - prefix = "problem_" - - makeN2 = False - if len(sys.argv) > 1: - if "n2" in sys.argv: - makeN2 = True - - # define individual aviary problems - for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): - prob = av.AviaryProblem() - prob.load_inputs(plane, phase_info) - prob.check_and_preprocess_inputs() - prob.add_pre_mission_systems() - traj = prob.add_phases() # save dymos traj to add to super problem as a subsystem - prob.add_post_mission_systems() - prob.link_phases() # this is half working / connect statements from outside of traj to inside are failing - prob.problem_type = ProblemType.ALTERNATE # adds summary gross mass as design var - prob.add_design_variables() - probs.append(prob) - - group = om.Group() # this group will contain all the promoted aviary vars - group.add_subsystem("pre", prob.pre_mission) - group.add_subsystem("traj", traj) - group.add_subsystem("post", prob.post_mission) - - # setting defaults for these variables to suppress errors - longlst = [ - 'mission:summary:gross_mass', 'aircraft:wing:sweep', - 'aircraft:wing:thickness_to_chord', 'aircraft:wing:area', - 'aircraft:wing:taper_ratio', 'mission:design:gross_mass'] - for var in longlst: - group.set_input_defaults( - var, val=MetaData[var]['default_value'], - units=MetaData[var]['units']) - - # add group and promote design gross mass (common input amongst multiple missions) - # in this way it represents the MTOW - super_prob.model.add_subsystem(prefix+f'{i}', group, promotes=[ - 'mission:design:gross_mass']) - - # add design gross mass as a design var - super_prob.model.add_design_var( - 'mission:design:gross_mass', lower=100e3, upper=1000e3) - - for i in range(num_missions): - # connecting each subcomponent's fuel burn to super problem's unique fuel variables - super_prob.model.connect( - prefix+f"{i}.mission:summary:fuel_burned", f"fuel_{i}") - - # create constraint to force each mission's summary gross mass to not - # exceed the common mission design gross mass (aka MTOW) - super_prob.model.add_subsystem(f'MTOW_constraint{i}', om.ExecComp( - 'mtow_resid = design_gross_mass - summary_gross_mass'), - promotes=[('summary_gross_mass', prefix+f'{i}.mission:summary:gross_mass'), - ('design_gross_mass', 'mission:design:gross_mass')]) - - super_prob.model.add_constraint(f'MTOW_constraint{i}.mtow_resid', lower=0.) - - # creating variable strings that will represent fuel burn from each mission - fuel_burned_vars = [f"fuel_{i}" for i in range(num_missions)] - weighted_str = "+".join([f"{fuel}*{weight}" - for fuel, weight in zip(fuel_burned_vars, weights)]) - # weighted_str looks like: fuel_0 * weight[0] + fuel_1 * weight[1] - - # adding compound execComp to super problem - super_prob.model.add_subsystem('compound_fuel_burn_objective', om.ExecComp( - "compound = "+weighted_str), promotes=["compound", *fuel_burned_vars]) - - super_prob.driver = om.ScipyOptimizeDriver() - super_prob.driver.options['optimizer'] = 'SLSQP' - super_prob.model.add_objective('compound') # output from execcomp goes here - - setupprob(super_prob) - if makeN2: - om.n2(super_prob, outfile="multi_mission_importTraj_N2.html") # create N2 diagram - - # cannot use this b/c initial guesses (i.e. setval func) has to be called on super prob level - # for prob in probs: - # # prob.setup() - # prob.set_initial_guesses() - - # dm.run_problem(super_prob) - - -""" -Ferry mission phase info: -Times (min): 0, 50, 812, 843 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 7001 nmi -Notes: 32k in 30 mins too fast for aviary, climb to low alt then slow rise through cruise - -Intermediate mission phase info: -Times (min): 0, 50, 560, 590 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 4839 nmi - -Max Payload mission phase info: -Times (min): 0, 50, 260, 290 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 2272 nmi - -Hard to find multiple payload/range values for FwFm (737), so use C-5 instead -Based on: - https://en.wikipedia.org/wiki/Lockheed_C-5_Galaxy#Specifications_(C-5M), - https://www.af.mil/About-Us/Fact-Sheets/Display/Article/1529718/c-5-abc-galaxy-and-c-5m-super-galaxy/ - -MTOW: 840,000 lb -Max Payload: 281,000 lb -Max Fuel: 341,446 lb -Empty Weight: 380,000 lb -> leaves 460,000 lb for fuel+payload (max fuel + max payload = 622,446 lb) - -Payload/range: - 281,000 lb payload -> 2,150 nmi range (AF.mil) [max payload case] - 120,000 lb payload -> 4,800 nmi range (AF.mil) [intermediate case] - 0 lb payload -> 7,000 nmi range (AF.mil) [ferry case] - -Flight characteristics: - Cruise at M0.77 at 33k ft - Max rate of climb: 2100 ft/min -""" From 8c11e98db712655e7b67d4f781026dd5d2fb6a14 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 31 Jul 2024 09:14:21 -0400 Subject: [PATCH 018/113] renamed single mission file --- singlemission.py => single_aviary.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename singlemission.py => single_aviary.py (100%) diff --git a/singlemission.py b/single_aviary.py similarity index 100% rename from singlemission.py rename to single_aviary.py From c2065d5e104f1599270a679b67d65eeaa59f06b1 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 31 Jul 2024 09:22:59 -0400 Subject: [PATCH 019/113] added N2s for all examples --- multi_aviary_copymodel.html | 14840 ++++++++++++++++++++++++++++++ multi_aviary_copymodel.py | 4 +- multi_aviary_submodel.html | 14840 ++++++++++++++++++++++++++++++ multi_aviary_submodel.py | 7 +- multi_cannonball_copymodel.html | 14840 ++++++++++++++++++++++++++++++ multi_cannonball_copymodel.py | 2 +- multi_cannonball_copyparts.html | 14840 ++++++++++++++++++++++++++++++ 7 files changed, 59369 insertions(+), 4 deletions(-) create mode 100644 multi_aviary_copymodel.html create mode 100644 multi_aviary_submodel.html create mode 100644 multi_cannonball_copymodel.html create mode 100644 multi_cannonball_copyparts.html diff --git a/multi_aviary_copymodel.html b/multi_aviary_copymodel.html new file mode 100644 index 000000000..b44798028 --- /dev/null +++ b/multi_aviary_copymodel.html @@ -0,0 +1,14840 @@ + + + +OpenMDAO Model Hierarchy and N2 diagram + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+
+
+ + + +
+
+ + +
+
+ + + + + +
+
+ + + + +
+
+ +
+
+ +
+ +
+
+ +
+ +
+
+ Processing... +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+
+ + + +
+ +
+ +
+
+ +
+
+
+
+ N2 Information +
+ + +
+ +
+
+
+
+
+ + + + + + + + + + +
+ +
+ +
+ +
+ +
+

Left-click on a node in the model hierarchy to navigate to that node.
+ Right-click on a node to collapse/expand it. + Alt-right-click on a node with variables to select which ones to hide.
+ Note: Right-click in Firefox displays a browser menu. To disable that, + visit about:config and set dom.event.contextmenu.enabled + to true.
+ Hover over any cell in the matrix to display its connections + as arrows. Click that cell to make those arrows persistent. +

+

Toolbar Help

+
+ Snapshot of toolbar buttons + +
+
+ +
+ + + + + + +
Variable NameVisible
+
+ + +
+
+
+ Search + +
+
+ + + +
+
+
+ + + + + + + diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 3cdbe1e77..469b876bb 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -104,7 +104,7 @@ def setup_wrapper(self): warnings.simplefilter("ignore", om.PromotionWarning) self.setup() - def create_N2(self, outfile='aviary_multi_traj.html'): + def create_N2(self, outfile='multi_aviary_copymodel.html'): om.n2(self, outfile=outfile) def initvals(self): @@ -310,7 +310,7 @@ def run(self): super_prob.add_design_variables() super_prob.add_objective() super_prob.setup_wrapper() - super_prob.initvals() + # super_prob.initvals() if makeN2: super_prob.create_N2() super_prob.run() diff --git a/multi_aviary_submodel.html b/multi_aviary_submodel.html new file mode 100644 index 000000000..8e59df467 --- /dev/null +++ b/multi_aviary_submodel.html @@ -0,0 +1,14840 @@ + + + +OpenMDAO Model Hierarchy and N2 diagram + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+
+
+ + + +
+
+ + +
+
+ + + + + +
+
+ + + + +
+
+ +
+
+ +
+ +
+
+ +
+ +
+
+ Processing... +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+
+ + + +
+ +
+ +
+
+ +
+
+
+
+ N2 Information +
+ + +
+ +
+
+
+
+
+ + + + + + + + + + +
+ +
+ +
+ +
+ +
+

Left-click on a node in the model hierarchy to navigate to that node.
+ Right-click on a node to collapse/expand it. + Alt-right-click on a node with variables to select which ones to hide.
+ Note: Right-click in Firefox displays a browser menu. To disable that, + visit about:config and set dom.event.contextmenu.enabled + to true.
+ Hover over any cell in the matrix to display its connections + as arrows. Click that cell to make those arrows persistent. +

+

Toolbar Help

+
+ Snapshot of toolbar buttons + +
+
+ +
+ + + + + + +
Variable NameVisible
+
+ + +
+
+
+ Search + +
+
+ + + +
+
+
+ + + + + + + diff --git a/multi_aviary_submodel.py b/multi_aviary_submodel.py index 4506c0cb4..7435aebd6 100644 --- a/multi_aviary_submodel.py +++ b/multi_aviary_submodel.py @@ -5,6 +5,7 @@ These will have to be specified in some alternate way such as a list correspond to mission # Phase info: defines a particular mission, will have multiple phase infos """ +import sys import aviary.api as av import openmdao.api as om import dymos as dm @@ -18,6 +19,7 @@ num_missions = len(weights) if __name__ == '__main__': + makeN2 = True if len(sys.argv) > 1 and sys.argv[1] == "n2" else False super_prob = om.Problem() probs = [] @@ -74,9 +76,12 @@ for prob in probs: prob.set_initial_guesses() + if makeN2: + om.n2(super_prob, outfile='multi_aviary_submodel.html') + dm.run_problem(super_prob) print(super_prob.check_partials()) - # om.n2(super_prob) + """ Ferry mission phase info: diff --git a/multi_cannonball_copymodel.html b/multi_cannonball_copymodel.html new file mode 100644 index 000000000..2dcaf5bd5 --- /dev/null +++ b/multi_cannonball_copymodel.html @@ -0,0 +1,14840 @@ + + + +OpenMDAO Model Hierarchy and N2 diagram + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+
+
+ + + +
+
+ + +
+
+ + + + + +
+
+ + + + +
+
+ +
+
+ +
+ +
+
+ +
+ +
+
+ Processing... +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+
+ + + +
+ +
+ +
+
+ +
+
+
+
+ N2 Information +
+ + +
+ +
+
+
+
+
+ + + + + + + + + + +
+ +
+ +
+ +
+ +
+

Left-click on a node in the model hierarchy to navigate to that node.
+ Right-click on a node to collapse/expand it. + Alt-right-click on a node with variables to select which ones to hide.
+ Note: Right-click in Firefox displays a browser menu. To disable that, + visit about:config and set dom.event.contextmenu.enabled + to true.
+ Hover over any cell in the matrix to display its connections + as arrows. Click that cell to make those arrows persistent. +

+

Toolbar Help

+
+ Snapshot of toolbar buttons + +
+
+ +
+ + + + + + +
Variable NameVisible
+
+ + +
+
+
+ Search + +
+
+ + + +
+
+
+ + + + + + + diff --git a/multi_cannonball_copymodel.py b/multi_cannonball_copymodel.py index 64ed68e1f..86eba920b 100644 --- a/multi_cannonball_copymodel.py +++ b/multi_cannonball_copymodel.py @@ -271,7 +271,7 @@ def runAvCannonball(kes=[4e3], weights=[1], makeN2=False): prob.setInitialVals(super_prob, subprefix) if makeN2: - om.n2(super_prob, outfile='multi_cannonball_modelcopy.html') + om.n2(super_prob, outfile='multi_cannonball_copymodel.html') dm.run_problem(super_prob) return super_prob, prefix, num_trajs, kes, weights diff --git a/multi_cannonball_copyparts.html b/multi_cannonball_copyparts.html new file mode 100644 index 000000000..e29612ed5 --- /dev/null +++ b/multi_cannonball_copyparts.html @@ -0,0 +1,14840 @@ + + + +OpenMDAO Model Hierarchy and N2 diagram + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+
+
+ + + +
+
+ + +
+
+ + + + + +
+
+ + + + +
+
+ +
+
+ +
+ +
+
+ +
+ +
+
+ Processing... +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+
+ + + +
+ +
+ +
+
+ +
+
+
+
+ N2 Information +
+ + +
+ +
+
+
+
+
+ + + + + + + + + + +
+ +
+ +
+ +
+ +
+

Left-click on a node in the model hierarchy to navigate to that node.
+ Right-click on a node to collapse/expand it. + Alt-right-click on a node with variables to select which ones to hide.
+ Note: Right-click in Firefox displays a browser menu. To disable that, + visit about:config and set dom.event.contextmenu.enabled + to true.
+ Hover over any cell in the matrix to display its connections + as arrows. Click that cell to make those arrows persistent. +

+

Toolbar Help

+
+ Snapshot of toolbar buttons + +
+
+ +
+ + + + + + +
Variable NameVisible
+
+ + +
+
+
+ Search + +
+
+ + + +
+
+
+ + + + + + + From abcf2bfeb0add8f7cc11b2103a84afd540f2670a Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 31 Jul 2024 11:21:39 -0400 Subject: [PATCH 020/113] fixed randomness issues with min time climb, increasing num of segments --- min_time_climb.py | 20 +++++++++++--------- multi_aviary_copymodel.py | 1 + 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/min_time_climb.py b/min_time_climb.py index 8c0d42cf8..c711b4b08 100644 --- a/min_time_climb.py +++ b/min_time_climb.py @@ -7,15 +7,15 @@ def min_time_climb(height=20e3, - optimizer='SLSQP', num_seg=3, transcription='gauss-lobatto', - transcription_order=5, force_alloc_complex=False, add_rate=False, + optimizer='SLSQP', num_seg=9, transcription='gauss-lobatto', + transcription_order=3, force_alloc_complex=False, add_rate=False, time_name='time'): p = om.Problem(model=om.Group()) p.driver = om.ScipyOptimizeDriver() p.driver.options['optimizer'] = optimizer - # p.driver.declare_coloring() + p.driver.declare_coloring() if optimizer == 'SNOPT': p.driver.opt_settings['Major iterations limit'] = 1000 @@ -50,7 +50,7 @@ def min_time_climb(height=20e3, ref=1.0E3, defect_ref=1.0E3, units='m', rate_source='flight_dynamics.r_dot') - phase.add_state('h', fix_initial=True, lower=1, upper=height, + phase.add_state('h', fix_initial=True, lower=0, upper=height, ref=height, defect_ref=height, units='m', rate_source='flight_dynamics.h_dot', targets=['h']) @@ -74,7 +74,7 @@ def min_time_climb(height=20e3, phase.add_parameter('Isp', val=1600.0, units='s', opt=False, targets=['Isp']) phase.add_parameter('throttle', val=1.0, opt=False, targets=['throttle']) - phase.add_boundary_constraint('h', loc='final', equals=height, scaler=1.0E-3) + phase.add_boundary_constraint('h', loc='final', equals=height) # , scaler=1.0E-3) phase.add_boundary_constraint('aero.mach', loc='final', equals=1.0) phase.add_boundary_constraint('gam', loc='final', equals=0.0) @@ -105,7 +105,7 @@ def min_time_climb(height=20e3, p['traj.phase0.t_duration'] = 350.0 p['traj.phase0.states:r'] = phase.interp('r', [0.0, 111319.54]) - p['traj.phase0.states:h'] = phase.interp('h', [100.0, 20000.0]) + p['traj.phase0.states:h'] = phase.interp('h', [100.0, height]) p['traj.phase0.states:v'] = phase.interp('v', [135.964, 283.159]) p['traj.phase0.states:gam'] = phase.interp('gam', [0.0, 0.0]) p['traj.phase0.states:m'] = phase.interp('m', [19030.468, 16841.431]) @@ -117,6 +117,8 @@ def min_time_climb(height=20e3, def checkDeviation(filenum=0): + """Function to run min time climb problem multiple times for the same height and report any deviation in results. + Made to check for random results in outputs, fixed 7/31, seems to be caused by transcription order being 5 not 3""" heights = [10e3]*2 times_to_climb = [] timeseries_pts = {'h': [], 'r': [], 'thrust': [], 'v': []} @@ -150,7 +152,7 @@ def checkDeviation(filenum=0): def multiHeightTest(): - heights = [8e3, 10e3] + heights = [6e3, 10e3] prefix = 'traj.phase0.timeseries.' plotvars = {'r': ['h'], 'time': ['v', 'thrust', 'm_dot', 'alpha']} varnames = {prefix+x: [prefix+y for y in ylst] for x, ylst in plotvars.items()} @@ -209,10 +211,10 @@ def multiHeightTest(): optimization takes a very different number of iterations, and the profile looks very different. Time to climb is also different.""" if __name__ == '__main__': - np.random.seed(0) if len(sys.argv) > 1 and 'filenum' in sys.argv[1]: checkDeviation(filenum=sys.argv[1].split('filenum=')[1]) - # multiHeightTest() + else: + multiHeightTest() """ diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 469b876bb..9d410e245 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -108,6 +108,7 @@ def create_N2(self, outfile='multi_aviary_copymodel.html'): om.n2(self, outfile=outfile) def initvals(self): + """attempting to copy over aviary code for setting initial values and changing references""" for i, prob in enumerate(self.probs): self.set_val(self.group_prefix + f'_{i}.aircraft:design:landing_to_takeoff_mass_ratio', 0.5) From 23221845bc1ecf103925c289e1bbcb86f35e770e Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 31 Jul 2024 13:46:11 -0400 Subject: [PATCH 021/113] updated methods for level 2 with initial vals able to use set val on passed in problem --- aviary/interface/methods_for_level2.py | 180 +- multi_aviary_copymodel.html | 2 +- multi_aviary_copymodel.py | 389 +- single_aviary.html | 14840 +++++++++++++++++++++++ single_aviary.py | 5 + 5 files changed, 15097 insertions(+), 319 deletions(-) create mode 100644 single_aviary.html diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index 66d59a9df..9c72f4f3f 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -1970,29 +1970,18 @@ def setup(self, **kwargs): warnings.simplefilter("ignore", om.PromotionWarning) super().setup(**kwargs) - def set_initial_guesses(self): - """ - Call `set_val` on the trajectory for states and controls to seed - the problem with reasonable initial guesses. This is especially - important for collocation methods. - - This method first identifies all phases in the trajectory then - loops over each phase. Specific initial guesses - are added depending on the phase and mission method. Cruise is treated - as a special phase for GASP-based missions because it is an AnalyticPhase - in Dymos. For this phase, we handle the initial guesses first separately - and continue to the next phase after that. For other phases, we set the initial - guesses for states and controls according to the information available - in the 'initial_guesses' attribute of the phase. - """ + def set_initial_guesses(self, parent_prob=None, parent_prefix=""): + setvalprob = self + if parent_prob is not None and parent_prefix != "": + setvalprob = parent_prob # Grab the trajectory object from the model if self.analysis_scheme is AnalysisScheme.SHOOTING: if self.problem_type is ProblemType.SIZING: - self.set_val(Mission.Summary.GROSS_MASS, - self.get_val(Mission.Design.GROSS_MASS)) + setvalprob.set_val(parent_prefix+Mission.Summary.GROSS_MASS, + self.get_val(Mission.Design.GROSS_MASS)) - self.set_val("traj.SGMClimb_"+Dynamic.Mission.ALTITUDE + - "_trigger", val=self.cruise_alt, units="ft") + setvalprob.set_val(parent_prefix+"traj.SGMClimb_"+Dynamic.Mission.ALTITUDE + + "_trigger", val=self.cruise_alt, units="ft") return @@ -2023,52 +2012,26 @@ def set_initial_guesses(self): if 'mass' == guess_key: # Set initial and duration mass for the analytic cruise phase. # Note we are integrating over mass, not time for this phase. - self.set_val(f'traj.{phase_name}.t_initial', - val[0], units=units) - self.set_val(f'traj.{phase_name}.t_duration', - val[1], units=units) + setvalprob.set_val(parent_prefix+f'traj.{phase_name}.t_initial', + val[0], units=units) + setvalprob.set_val(parent_prefix+f'traj.{phase_name}.t_duration', + val[1], units=units) else: # Otherwise, set the value of the parameter in the trajectory phase - self.set_val(f'traj.{phase_name}.parameters:{guess_key}', - val, units=units) + setvalprob.set_val( + parent_prefix + f'traj.{phase_name}.parameters:{guess_key}', + val, units=units) continue # If not cruise and GASP, add subsystem guesses - self._add_subsystem_guesses(phase_name, phase) + self._add_subsystem_guesses(phase_name, phase, setvalprob, parent_prefix) # Set initial guesses for states and controls for each phase - self._add_guesses(phase_name, phase, guesses) + self._add_guesses(phase_name, phase, guesses, setvalprob, parent_prefix) def _process_guess_var(self, val, key, phase): - """ - Process the guess variable, which can either be a float or an array of floats. - - This method is responsible for interpolating initial guesses when the user - provides a list or array of values rather than a single float. It interpolates - the guess values across the phase's domain for a given variable, be it a control - or a state variable. The interpolation is performed between -1 and 1 (representing - the normalized phase time domain), using the numpy linspace function. - - The result of this method is a single value or an array of interpolated values - that can be used to seed the optimization problem with initial guesses. - - Parameters - ---------- - val : float or list/array of floats - The initial guess value(s) for a particular variable. - key : str - The key identifying the variable for which the initial guess is provided. - phase : Phase - The phase for which the variable is being set. - - Returns - ------- - val : float or array of floats - The processed guess value(s) to be used in the optimization problem. - """ - # Check if val is not a single float if not isinstance(val, float): # If val is an array of values @@ -2094,24 +2057,7 @@ def _process_guess_var(self, val, key, phase): # Return the processed guess value(s) return val - def _add_subsystem_guesses(self, phase_name, phase): - """ - Adds the initial guesses for each subsystem of a given phase to the problem. - - This method first fetches all subsystems associated with the given phase. - It then loops over each subsystem and fetches its initial guesses. For each - guess, it identifies whether the guess corresponds to a state or a control - variable and then processes the guess variable. After this, the initial - guess is set in the problem using the `set_val` method. - - Parameters - ---------- - phase_name : str - The name of the phase for which the subsystem guesses are being added. - phase : Phase - The phase object for which the subsystem guesses are being added. - """ - + def _add_subsystem_guesses(self, phase_name, phase, setvalprob, parent_prefix): # Get all subsystems associated with the phase all_subsystems = self._get_all_subsystems( self.phase_info[phase_name]['external_subsystems']) @@ -2134,28 +2080,10 @@ def _add_subsystem_guesses(self, phase_name, phase): val['val'] = self._process_guess_var(val['val'], key, phase) # Set the initial guess in the problem - self.set_val(f'traj.{phase_name}.{path_string}:{key}', **val) - - def _add_guesses(self, phase_name, phase, guesses): - """ - Adds the initial guesses for each variable of a given phase to the problem. - - This method sets the initial guesses for time, control, state, and problem-specific - variables for a given phase. If using the GASP model, it also handles some special - cases that are not covered in the `phase_info` object. These include initial guesses - for mass, time, and distance, which are determined based on the phase name and other - mission-related variables. - - Parameters - ---------- - phase_name : str - The name of the phase for which the guesses are being added. - phase : Phase - The phase object for which the guesses are being added. - guesses : dict - A dictionary containing the initial guesses for the phase. - """ + setvalprob.set_val( + parent_prefix+f'traj.{phase_name}.{path_string}:{key}', **val) + def _add_guesses(self, phase_name, phase, guesses, setvalprob, parent_prefix): # If using the GASP model, set initial guesses for the rotation mass and flight duration if self.mission_method is TWO_DEGREES_OF_FREEDOM: rotation_mass = self.initial_guesses['rotation_mass'] @@ -2214,30 +2142,32 @@ def _add_guesses(self, phase_name, phase, guesses): # Set initial guess for time variables if 'time' == guess_key and self.mission_method is not SOLVED_2DOF: - self.set_val(f'traj.{phase_name}.t_initial', - val[0], units=units) - self.set_val(f'traj.{phase_name}.t_duration', - val[1], units=units) + setvalprob.set_val(parent_prefix+f'traj.{phase_name}.t_initial', + val[0], units=units) + setvalprob.set_val(parent_prefix+f'traj.{phase_name}.t_duration', + val[1], units=units) else: # Set initial guess for control variables if guess_key in control_keys: try: - self.set_val(f'traj.{phase_name}.controls:{guess_key}', self._process_guess_var( - val, guess_key, phase), units=units) + setvalprob.set_val( + parent_prefix + f'traj.{phase_name}.controls:{guess_key}', + self._process_guess_var(val, guess_key, phase), + units=units) except KeyError: try: - self.set_val( + setvalprob.set_val( + parent_prefix + f'traj.{phase_name}.polynomial_controls:{guess_key}', - self._process_guess_var( - val, guess_key, phase), + self._process_guess_var(val, guess_key, phase), units=units) except KeyError: - self.set_val( - f'traj.{phase_name}.bspline_controls:{guess_key}', - self._process_guess_var( - val, guess_key, phase), - units=units) + setvalprob.set_val(parent_prefix + + f'traj.{phase_name}.bspline_controls:{guess_key}', + self._process_guess_var( + val, guess_key, phase), + units=units) if self.mission_method is SOLVED_2DOF: continue @@ -2246,15 +2176,17 @@ def _add_guesses(self, phase_name, phase, guesses): pass # Set initial guess for state variables elif guess_key in state_keys: - self.set_val(f'traj.{phase_name}.states:{guess_key}', self._process_guess_var( - val, guess_key, phase), units=units) + setvalprob.set_val(parent_prefix + + f'traj.{phase_name}.states:{guess_key}', self. + _process_guess_var(val, guess_key, phase), + units=units) elif guess_key in prob_keys: - self.set_val(guess_key, val, units=units) + setvalprob.set_val(parent_prefix+guess_key, val, units=units) elif ":" in guess_key: - self.set_val( - f'traj.{phase_name}.{guess_key}', self._process_guess_var( - val, guess_key, phase), - units=units) + setvalprob.set_val(parent_prefix + + f'traj.{phase_name}.{guess_key}', self._process_guess_var( + val, guess_key, phase), + units=units) else: # raise error if the guess key is not recognized raise ValueError( @@ -2284,8 +2216,8 @@ def _add_guesses(self, phase_name, phase, guesses): mass_guess = self.aviary_inputs.get_val( Mission.Design.GROSS_MASS, units='lbm') # Set the mass guess as the initial value for the mass state variable - self.set_val(f'traj.{phase_name}.states:mass', - mass_guess, units='lbm') + setvalprob.set_val(parent_prefix+f'traj.{phase_name}.states:mass', + mass_guess, units='lbm') if 'time' not in guesses: # Determine initial time and duration guesses depending on the phase name @@ -2296,10 +2228,10 @@ def _add_guesses(self, phase_name, phase, guesses): t_initial = flight_duration*.94 t_duration = 5000 # Set the time guesses as the initial values for the time-related trajectory variables - self.set_val(f"traj.{phase_name}.t_initial", - t_initial, units='s') - self.set_val(f"traj.{phase_name}.t_duration", - t_duration, units='s') + setvalprob.set_val(parent_prefix+f"traj.{phase_name}.t_initial", + t_initial, units='s') + setvalprob.set_val(parent_prefix+f"traj.{phase_name}.t_duration", + t_duration, units='s') if self.mission_method is TWO_DEGREES_OF_FREEDOM: if 'distance' not in guesses: @@ -2309,10 +2241,10 @@ def _add_guesses(self, phase_name, phase, guesses): elif 'desc2' in base_phase: ys = [self.target_range*.99, self.target_range] # Set the distance guesses as the initial values for the distance state variable - self.set_val( - f"traj.{phase_name}.states:distance", phase.interp( - Dynamic.Mission.DISTANCE, ys=ys) - ) + setvalprob.set_val(parent_prefix + + f"traj.{phase_name}.states:distance", phase.interp( + Dynamic.Mission.DISTANCE, ys=ys) + ) def run_aviary_problem(self, record_filename="problem_history.db", optimization_history_filename=None, restart_filename=None, diff --git a/multi_aviary_copymodel.html b/multi_aviary_copymodel.html index b44798028..5e3f7127c 100644 --- a/multi_aviary_copymodel.html +++ b/multi_aviary_copymodel.html @@ -3255,7 +3255,7 @@

Toolbar Help

diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 9d410e245..11e61451b 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -11,7 +11,7 @@ import openmdao.api as om import dymos as dm import numpy as np -from aviary.variable_info.enums import ProblemType +from aviary.variable_info.enums import ProblemType, AnalysisScheme from c5_ferry_phase_info import phase_info as c5_ferry_phase_info from c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info from c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info @@ -69,7 +69,7 @@ def add_design_variables(self): def add_driver(self): self.driver = om.ScipyOptimizeDriver() self.driver.options['optimizer'] = 'SLSQP' - self.driver.declare_coloring() + # self.driver.declare_coloring() self.model.linear_solver = om.DirectSolver() def add_objective(self): @@ -107,198 +107,10 @@ def setup_wrapper(self): def create_N2(self, outfile='multi_aviary_copymodel.html'): om.n2(self, outfile=outfile) - def initvals(self): - """attempting to copy over aviary code for setting initial values and changing references""" - for i, prob in enumerate(self.probs): - self.set_val(self.group_prefix + - f'_{i}.aircraft:design:landing_to_takeoff_mass_ratio', 0.5) - # Grab the trajectory object from the model - traj = prob.model.traj - - # Determine which phases to loop over, fetching them from the trajectory - phase_items = traj._phases.items() - - # Loop over each phase and set initial guesses for the state and control variables - for idx, (phase_name, phase) in enumerate(phase_items): - # If not, fetch the initial guesses specific to the phase - # check if guesses exist for this phase - if "initial_guesses" in prob.phase_info[phase_name]: - guesses = prob.phase_info[phase_name]['initial_guesses'] - else: - guesses = {} - - # ||||||||||||| _add_subsystem_guesses - # Get all subsystems associated with the phase - all_subsystems = prob._get_all_subsystems( - prob.phase_info[phase_name]['external_subsystems']) - - # Loop over each subsystem - for subsystem in all_subsystems: - # Fetch the initial guesses for the subsystem - initial_guesses = subsystem.get_initial_guesses() - - # Loop over each guess - for key, val in initial_guesses.items(): - # Identify the type of the guess (state or control) - type = val.pop('type') - if 'state' in type: - path_string = 'states' - elif 'control' in type: - path_string = 'controls' - - # Process the guess variable (handles array interpolation) - val['val'] = prob._process_guess_var(val['val'], key, phase) - - # Set the initial guess in the problem - self.set_val( - self.group_prefix + - f'_{i}.traj.{phase_name}.{path_string}:{key}', **val) - - # Set initial guesses for states and controls for each phase - - # |||||||||||||||||||||| _add_guesses - # If using the GASP model, set initial guesses for the rotation mass and flight duration - if prob.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): - control_keys = ["mach", "altitude"] - state_keys = ["mass", Dynamic.Mission.DISTANCE] - prob_keys = ["tau_gear", "tau_flaps"] - - # for the simple mission method, use the provided initial and final mach and altitude values from phase_info - if prob.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): - initial_altitude = wrapped_convert_units( - prob.phase_info[phase_name]['user_options'] - ['initial_altitude'], - 'ft') - final_altitude = wrapped_convert_units( - prob.phase_info[phase_name]['user_options']['final_altitude'], 'ft') - initial_mach = prob.phase_info[phase_name]['user_options'][ - 'initial_mach'] - final_mach = prob.phase_info[phase_name]['user_options'][ - 'final_mach'] - - guesses["mach"] = ([initial_mach[0], final_mach[0]], "unitless") - guesses["altitude"] = ([initial_altitude, final_altitude], 'ft') - - if prob.mission_method is HEIGHT_ENERGY: - # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds - if 'time' not in guesses: - initial_bounds = wrapped_convert_units( - prob.phase_info[phase_name]['user_options']['initial_bounds'], 's') - duration_bounds = wrapped_convert_units( - prob.phase_info[phase_name]['user_options']['duration_bounds'], 's') - guesses["time"] = ([np.mean(initial_bounds[0]), np.mean( - duration_bounds[0])], 's') - - # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds - if 'time' not in guesses: - initial_bounds = prob.phase_info[phase_name]['user_options'][ - 'initial_bounds'] - duration_bounds = prob.phase_info[phase_name]['user_options'][ - 'duration_bounds'] - # Add a check for the initial and duration bounds, raise an error if they are not consistent - if initial_bounds[1] != duration_bounds[1]: - raise ValueError( - f"Initial and duration bounds for {phase_name} are not consistent.") - guesses["time"] = ([np.mean(initial_bounds[0]), np.mean( - duration_bounds[0])], initial_bounds[1]) - - for guess_key, guess_data in guesses.items(): - val, units = guess_data - - # Set initial guess for time variables - if 'time' == guess_key and prob.mission_method is not SOLVED_2DOF: - self.set_val( - self.group_prefix + f'_{i}.traj.{phase_name}.t_initial', - val[0], - units=units) - self.set_val( - self.group_prefix + f'_{i}.traj.{phase_name}.t_duration', - val[1], - units=units) - - else: - # Set initial guess for control variables - if guess_key in control_keys: - try: - self.set_val(self.group_prefix + - f'_{i}.traj.{phase_name}.controls:{guess_key}', - prob._process_guess_var( - val, guess_key, phase), - units=units) - except KeyError: - try: - self.set_val( - self.group_prefix + - f'_{i}.traj.{phase_name}.polynomial_controls:{guess_key}', - prob._process_guess_var(val, guess_key, phase), - units=units) - except KeyError: - self.set_val( - self.group_prefix + - f'_{i}.traj.{phase_name}.bspline_controls:{guess_key}', - prob._process_guess_var(val, guess_key, phase), - units=units) - - if guess_key in control_keys: - pass - # Set initial guess for state variables - elif guess_key in state_keys: - self.set_val(self.group_prefix + - f'_{i}.traj.{phase_name}.states:{guess_key}', - prob._process_guess_var( - val, guess_key, phase), - units=units) - elif guess_key in prob_keys: - self.set_val( - self.group_prefix+f'_{i}.'+guess_key, val, units=units) - elif ":" in guess_key: - self.set_val( - self.group_prefix + f'_{i}.traj.{phase_name}.{guess_key}', - prob._process_guess_var(val, guess_key, phase), - units=units) - else: - # raise error if the guess key is not recognized - raise ValueError( - f"Initial guess key {guess_key} in {phase_name} is not recognized.") - - # We need some special logic for these following variables because GASP computes - # initial guesses using some knowledge of the mission duration and other variables - # that are only available after calling `create_vehicle`. Thus these initial guess - # values are not included in the `phase_info` object. - - base_phase = phase_name - if 'mass' not in guesses: - mass_guess = prob.aviary_inputs.get_val( - Mission.Design.GROSS_MASS, units='lbm') - # Set the mass guess as the initial value for the mass state variable - self.set_val(self.group_prefix+f'_{i}.traj.{phase_name}.states:mass', - mass_guess, units='lbm') - - # if 'time' not in guesses: - # # Determine initial time and duration guesses depending on the phase name - # if 'desc1' == base_phase: - # t_initial = flight_duration*.9 - # t_duration = flight_duration*.04 - # elif 'desc2' in base_phase: - # t_initial = flight_duration*.94 - # t_duration = 5000 - # # Set the time guesses as the initial values for the time-related trajectory variables - # self.set_val(f"traj.{phase_name}.t_initial", - # t_initial, units='s') - # self.set_val(f"traj.{phase_name}.t_duration", - # t_duration, units='s') - def run(self): - dm.run_problem(self) - - # def link_pre_post_traj(self): - # for i, prob in enumerate(self.probs): - # prefix = self.group_prefix+f'_{i}.' - - # self.model.connect(prefix + - # f'traj.{prob.regular_phases[-1]}.timeseries.distance', - # Mission.Summary.RANGE, src_indices=[-1], - # flat_src_indices=True) + self.run_model() + self.check_totals(method='fd') + # dm.run_problem(self) if __name__ == '__main__': @@ -311,11 +123,200 @@ def run(self): super_prob.add_design_variables() super_prob.add_objective() super_prob.setup_wrapper() - # super_prob.initvals() + for i, prob in enumerate(super_prob.probs): + super_prob.set_val( + super_prob.group_prefix + + f"_{i}.aircraft:design:landing_to_takeoff_mass_ratio", 0.5) + prob.set_initial_guesses(super_prob, super_prob.group_prefix+f"_{i}.") + print(super_prob.get_val(super_prob.group_prefix + + f"_{i}.aircraft:design:landing_to_takeoff_mass_ratio")) + print(super_prob.get_val(super_prob.group_prefix + + f"_{i}.mission:summary:range")) if makeN2: super_prob.create_N2() super_prob.run() + # def initvals(self): + # """attempting to copy over aviary code for setting initial values and changing references""" + # for i, prob in enumerate(self.probs): + # setvalprob.set_val(parent_prefix+self.group_prefix + + # f'_{i}.aircraft:design:landing_to_takeoff_mass_ratio', 0.5) + # # Grab the trajectory object from the model + # traj = prob.model.traj + + # # Determine which phases to loop over, fetching them from the trajectory + # phase_items = traj._phases.items() + + # # Loop over each phase and set initial guesses for the state and control variables + # for idx, (phase_name, phase) in enumerate(phase_items): + # # If not, fetch the initial guesses specific to the phase + # # check if guesses exist for this phase + # if "initial_guesses" in prob.phase_info[phase_name]: + # guesses = prob.phase_info[phase_name]['initial_guesses'] + # else: + # guesses = {} + + # # ||||||||||||| _add_subsystem_guesses + # # Get all subsystems associated with the phase + # all_subsystems = prob._get_all_subsystems( + # prob.phase_info[phase_name]['external_subsystems']) + + # # Loop over each subsystem + # for subsystem in all_subsystems: + # # Fetch the initial guesses for the subsystem + # initial_guesses = subsystem.get_initial_guesses() + + # # Loop over each guess + # for key, val in initial_guesses.items(): + # # Identify the type of the guess (state or control) + # type = val.pop('type') + # if 'state' in type: + # path_string = 'states' + # elif 'control' in type: + # path_string = 'controls' + + # # Process the guess variable (handles array interpolation) + # val['val'] = prob._process_guess_var(val['val'], key, phase) + + # # Set the initial guess in the problem + # setvalprob.set_val(parent_prefix+ + # self.group_prefix + + # f'_{i}.traj.{phase_name}.{path_string}:{key}', **val) + + # # Set initial guesses for states and controls for each phase + + # # |||||||||||||||||||||| _add_guesses + # # If using the GASP model, set initial guesses for the rotation mass and flight duration + # if prob.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): + # control_keys = ["mach", "altitude"] + # state_keys = ["mass", Dynamic.Mission.DISTANCE] + # prob_keys = ["tau_gear", "tau_flaps"] + + # # for the simple mission method, use the provided initial and final mach and altitude values from phase_info + # if prob.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): + # initial_altitude = wrapped_convert_units( + # prob.phase_info[phase_name]['user_options'] + # ['initial_altitude'], + # 'ft') + # final_altitude = wrapped_convert_units( + # prob.phase_info[phase_name]['user_options']['final_altitude'], 'ft') + # initial_mach = prob.phase_info[phase_name]['user_options'][ + # 'initial_mach'] + # final_mach = prob.phase_info[phase_name]['user_options'][ + # 'final_mach'] + + # guesses["mach"] = ([initial_mach[0], final_mach[0]], "unitless") + # guesses["altitude"] = ([initial_altitude, final_altitude], 'ft') + + # if prob.mission_method is HEIGHT_ENERGY: + # # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds + # if 'time' not in guesses: + # initial_bounds = wrapped_convert_units( + # prob.phase_info[phase_name]['user_options']['initial_bounds'], 's') + # duration_bounds = wrapped_convert_units( + # prob.phase_info[phase_name]['user_options']['duration_bounds'], 's') + # guesses["time"] = ([np.mean(initial_bounds[0]), np.mean( + # duration_bounds[0])], 's') + + # # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds + # if 'time' not in guesses: + # initial_bounds = prob.phase_info[phase_name]['user_options'][ + # 'initial_bounds'] + # duration_bounds = prob.phase_info[phase_name]['user_options'][ + # 'duration_bounds'] + # # Add a check for the initial and duration bounds, raise an error if they are not consistent + # if initial_bounds[1] != duration_bounds[1]: + # raise ValueError( + # f"Initial and duration bounds for {phase_name} are not consistent.") + # guesses["time"] = ([np.mean(initial_bounds[0]), np.mean( + # duration_bounds[0])], initial_bounds[1]) + + # for guess_key, guess_data in guesses.items(): + # val, units = guess_data + + # # Set initial guess for time variables + # if 'time' == guess_key and prob.mission_method is not SOLVED_2DOF: + # setvalprob.set_val(parent_prefix+ + # self.group_prefix + f'_{i}.traj.{phase_name}.t_initial', + # val[0], + # units=units) + # setvalprob.set_val(parent_prefix+ + # self.group_prefix + f'_{i}.traj.{phase_name}.t_duration', + # val[1], + # units=units) + + # else: + # # Set initial guess for control variables + # if guess_key in control_keys: + # try: + # setvalprob.set_val(parent_prefix+self.group_prefix + + # f'_{i}.traj.{phase_name}.controls:{guess_key}', + # prob._process_guess_var( + # val, guess_key, phase), + # units=units) + # except KeyError: + # try: + # setvalprob.set_val(parent_prefix+ + # self.group_prefix + + # f'_{i}.traj.{phase_name}.polynomial_controls:{guess_key}', + # prob._process_guess_var(val, guess_key, phase), + # units=units) + # except KeyError: + # setvalprob.set_val(parent_prefix+ + # self.group_prefix + + # f'_{i}.traj.{phase_name}.bspline_controls:{guess_key}', + # prob._process_guess_var(val, guess_key, phase), + # units=units) + + # if guess_key in control_keys: + # pass + # # Set initial guess for state variables + # elif guess_key in state_keys: + # setvalprob.set_val(parent_prefix+self.group_prefix + + # f'_{i}.traj.{phase_name}.states:{guess_key}', + # prob._process_guess_var( + # val, guess_key, phase), + # units=units) + # elif guess_key in prob_keys: + # setvalprob.set_val(parent_prefix+ + # self.group_prefix+f'_{i}.'+guess_key, val, units=units) + # elif ":" in guess_key: + # setvalprob.set_val(parent_prefix+ + # self.group_prefix + f'_{i}.traj.{phase_name}.{guess_key}', + # prob._process_guess_var(val, guess_key, phase), + # units=units) + # else: + # # raise error if the guess key is not recognized + # raise ValueError( + # f"Initial guess key {guess_key} in {phase_name} is not recognized.") + + # # We need some special logic for these following variables because GASP computes + # # initial guesses using some knowledge of the mission duration and other variables + # # that are only available after calling `create_vehicle`. Thus these initial guess + # # values are not included in the `phase_info` object. + + # base_phase = phase_name + # if 'mass' not in guesses: + # mass_guess = prob.aviary_inputs.get_val( + # Mission.Design.GROSS_MASS, units='lbm') + # # Set the mass guess as the initial value for the mass state variable + # setvalprob.set_val(parent_prefix+self.group_prefix+f'_{i}.traj.{phase_name}.states:mass', + # mass_guess, units='lbm') + + # # if 'time' not in guesses: + # # # Determine initial time and duration guesses depending on the phase name + # # if 'desc1' == base_phase: + # # t_initial = flight_duration*.9 + # # t_duration = flight_duration*.04 + # # elif 'desc2' in base_phase: + # # t_initial = flight_duration*.94 + # # t_duration = 5000 + # # # Set the time guesses as the initial values for the time-related trajectory variables + # # setvalprob.set_val(parent_prefix+f"traj.{phase_name}.t_initial", + # # t_initial, units='s') + # # setvalprob.set_val(parent_prefix+f"traj.{phase_name}.t_duration", + # # t_duration, units='s') + # ========================================================================= old code # super_prob = om.Problem() diff --git a/single_aviary.html b/single_aviary.html new file mode 100644 index 000000000..5cb7b0313 --- /dev/null +++ b/single_aviary.html @@ -0,0 +1,14840 @@ + + + +OpenMDAO Model Hierarchy and N2 diagram + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+
+
+ + + +
+
+ + +
+
+ + + + + +
+
+ + + + +
+
+ +
+
+ +
+ +
+
+ +
+ +
+
+ Processing... +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+
+ + + +
+ +
+ +
+
+ +
+
+
+
+ N2 Information +
+ + +
+ +
+
+
+
+
+ + + + + + + + + + +
+ +
+ +
+ +
+ +
+

Left-click on a node in the model hierarchy to navigate to that node.
+ Right-click on a node to collapse/expand it. + Alt-right-click on a node with variables to select which ones to hide.
+ Note: Right-click in Firefox displays a browser menu. To disable that, + visit about:config and set dom.event.contextmenu.enabled + to true.
+ Hover over any cell in the matrix to display its connections + as arrows. Click that cell to make those arrows persistent. +

+

Toolbar Help

+
+ Snapshot of toolbar buttons + +
+
+ +
+ + + + + + +
Variable NameVisible
+
+ + +
+
+
+ Search + +
+
+ + + +
+
+
+ + + + + + + diff --git a/single_aviary.py b/single_aviary.py index bf5cd91b6..35acbcb4f 100644 --- a/single_aviary.py +++ b/single_aviary.py @@ -1,4 +1,5 @@ import aviary.api as av +import openmdao.api as om import sys from c5_ferry_phase_info import phase_info as c5_ferry_phase_info from c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info @@ -37,6 +38,7 @@ def modify_plane(orig_filename, payloads, ranges): if __name__ == '__main__': + makeN2 = True if len(sys.argv) > 2 and "n2" in sys.argv else False prob = av.AviaryProblem() plane_file = 'c5.csv' payloads = {"ferry": 0, "intermediate": 120e3, "maxpayload": 281e3} @@ -74,6 +76,9 @@ def modify_plane(orig_filename, payloads, ranges): prob.setup() + if makeN2: + om.n2(prob, outfile='single_aviary.html') + prob.set_initial_guesses() # remove all plots and extras From d3588434f26561c1f2dc9a7aeb6329cd1a21a575 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 31 Jul 2024 14:14:32 -0400 Subject: [PATCH 022/113] cehckpt --- min_time_climb.py | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/min_time_climb.py b/min_time_climb.py index c711b4b08..c51ea006f 100644 --- a/min_time_climb.py +++ b/min_time_climb.py @@ -70,7 +70,7 @@ def min_time_climb(height=20e3, rate_continuity=True, rate_continuity_scaler=100.0, rate2_continuity=False, targets=['alpha']) - phase.add_parameter('S', val=49.2386, units='m**2', opt=False, targets=['S']) + phase.add_parameter('S', val=49.2386, units='m**2', opt=True, targets=['S']) phase.add_parameter('Isp', val=1600.0, units='s', opt=False, targets=['Isp']) phase.add_parameter('throttle', val=1.0, opt=False, targets=['throttle']) @@ -152,9 +152,10 @@ def checkDeviation(filenum=0): def multiHeightTest(): - heights = [6e3, 10e3] + heights = [12e3, 20e3] prefix = 'traj.phase0.timeseries.' plotvars = {'r': ['h'], 'time': ['v', 'thrust', 'm_dot', 'alpha']} + plotunits = {'r': ['km', 'km'], 'time': ['s', 'm/s', 'kN', 'kg/s', 'deg']} varnames = {prefix+x: [prefix+y for y in ylst] for x, ylst in plotvars.items()} numplots = sum([len(item) for item in plotvars.values()]) data = {f'h{i}': {} for i in range(len(heights))} @@ -170,37 +171,41 @@ def multiHeightTest(): f"{p.get_val('traj.phase0.timeseries.time',units='s')[-1][0]:.2f}" + f" s with wing area: {wing_area} sqm") - for xname in varnames.keys(): - xsol = sol.get_val(xname) - xsim = sim.get_val(xname) + for xname, unitkey in zip(varnames.keys(), plotunits.keys()): + xsol = sol.get_val(xname, units=plotunits[unitkey][0]) + xsim = sim.get_val(xname, units=plotunits[unitkey][0]) if not xname in data.keys(): data[f'h{j}'][xname] = {'x': (xsol, xsim), 'y': []} - for yname in varnames[xname]: + for i, yname in enumerate(varnames[xname]): if not 'yname' in data[f'h{j}'][xname].keys(): data[f'h{j}'][xname]['yname'] = [yname] else: data[f'h{j}'][xname]['yname'].append(yname) - ysol = sol.get_val(yname) - ysim = sim.get_val(yname) + ysol = sol.get_val(yname, units=plotunits[unitkey][i+1]) + ysim = sim.get_val(yname, units=plotunits[unitkey][i+1]) data[f'h{j}'][xname]['y'].append((ysol, ysim)) colors = ['r', 'b'] + legendlst = [] for j in range(len(heights)): datadict = data[f'h{j}'] i = 1 - for xname in datadict.keys(): + for xname, unitkey in zip(datadict.keys(), plotunits.keys()): xsol, xsim = datadict[xname]['x'] - for (ysol, ysim), yname in zip(datadict[xname]['y'], datadict[xname]['yname']): - ax = plt.subplot(int(numplots/2), numplots-int(numplots/2), i) - if max(ysim) > 1e3: - ysol, ysim = ysol/1e3, ysim/1e3 + for (ysol, ysim), yname, yunit in zip(datadict[xname]['y'], datadict[xname]['yname'], plotunits[unitkey][1:]): + plt.subplot(int(numplots/2), numplots-int(numplots/2), i) + # if max(ysim) > 1e3: + # ysol, ysim = ysol/1e3, ysim/1e3 plt.plot(xsol, ysol, f'{colors[j]}o', fillstyle='none') plt.plot(xsim, ysim, colors[j]) - plt.xlabel(xname.split(prefix)[1]) - plt.ylabel(yname.split(prefix)[1]) + plt.xlabel(f"{xname.split(prefix)[1]} ({plotunits[unitkey][0]})") + plt.ylabel(f"{yname.split(prefix)[1]} ({yunit})") if j == 0: plt.grid(visible=True) i += 1 + for datatype in ('Solution', 'Simulation'): + legendlst.append(f"{datatype} @ h = {heights[j]/1e3} km") + plt.figlegend(legendlst) plt.show() From c3c3004d3c7f85c0026072ed37714b956bc33474 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Thu, 1 Aug 2024 09:46:24 -0400 Subject: [PATCH 023/113] restructured files --- .../n2_multi_aviary_copymodel.html | 2 +- .../n2_multi_aviary_submodel.html | 0 .../n2_multi_cannonball_copymodel.html | 0 .../n2_multi_cannonball_copyparts.html | 0 .../n2_multi_min_time_to_climb.html | 2 +- c5.csv => c5_models/c5.csv | 0 c5_ferry.csv => c5_models/c5_ferry.csv | 0 .../c5_ferry_phase_info.py | 0 .../c5_intermediate.csv | 0 .../c5_intermediate_phase_info.py | 0 .../c5_maxpayload.csv | 0 .../c5_maxpayload_phase_info.py | 0 .../cannonball.py | 0 .../multi_cannonball_copymodel.py | 4 +- .../multi_cannonball_copyparts.py | 4 +- checkdiff_0.txt | 115 ----------- checkdiff_1.txt | 115 ----------- createN2.py | 8 + .../min_time_climb.py | 62 +++--- .../multi_min_time_to_climb.py | 178 ++++++++++++++++++ multi_aviary_copymodel.py | 16 +- multi_aviary_submodel.py | 11 +- outputted_phase_info.py | 8 - single_aviary.py | 6 +- 24 files changed, 246 insertions(+), 285 deletions(-) rename multi_aviary_copymodel.html => N2s/n2_multi_aviary_copymodel.html (99%) rename multi_aviary_submodel.html => N2s/n2_multi_aviary_submodel.html (100%) rename multi_cannonball_copymodel.html => N2s/n2_multi_cannonball_copymodel.html (100%) rename multi_cannonball_copyparts.html => N2s/n2_multi_cannonball_copyparts.html (100%) rename single_aviary.html => N2s/n2_multi_min_time_to_climb.html (85%) rename c5.csv => c5_models/c5.csv (100%) rename c5_ferry.csv => c5_models/c5_ferry.csv (100%) rename c5_ferry_phase_info.py => c5_models/c5_ferry_phase_info.py (100%) rename c5_intermediate.csv => c5_models/c5_intermediate.csv (100%) rename c5_intermediate_phase_info.py => c5_models/c5_intermediate_phase_info.py (100%) rename c5_maxpayload.csv => c5_models/c5_maxpayload.csv (100%) rename c5_maxpayload_phase_info.py => c5_models/c5_maxpayload_phase_info.py (100%) rename cannonball.py => cannonball_models/cannonball.py (100%) rename multi_cannonball_copymodel.py => cannonball_models/multi_cannonball_copymodel.py (99%) rename multI_cannonball_copyparts.py => cannonball_models/multi_cannonball_copyparts.py (99%) delete mode 100644 checkdiff_0.txt delete mode 100644 checkdiff_1.txt create mode 100644 createN2.py rename min_time_climb.py => min_time_climb_models/min_time_climb.py (86%) create mode 100644 min_time_climb_models/multi_min_time_to_climb.py delete mode 100644 outputted_phase_info.py diff --git a/multi_aviary_copymodel.html b/N2s/n2_multi_aviary_copymodel.html similarity index 99% rename from multi_aviary_copymodel.html rename to N2s/n2_multi_aviary_copymodel.html index 5e3f7127c..e1f80b09c 100644 --- a/multi_aviary_copymodel.html +++ b/N2s/n2_multi_aviary_copymodel.html @@ -3255,7 +3255,7 @@

Toolbar Help

diff --git a/multi_aviary_submodel.html b/N2s/n2_multi_aviary_submodel.html similarity index 100% rename from multi_aviary_submodel.html rename to N2s/n2_multi_aviary_submodel.html diff --git a/multi_cannonball_copymodel.html b/N2s/n2_multi_cannonball_copymodel.html similarity index 100% rename from multi_cannonball_copymodel.html rename to N2s/n2_multi_cannonball_copymodel.html diff --git a/multi_cannonball_copyparts.html b/N2s/n2_multi_cannonball_copyparts.html similarity index 100% rename from multi_cannonball_copyparts.html rename to N2s/n2_multi_cannonball_copyparts.html diff --git a/single_aviary.html b/N2s/n2_multi_min_time_to_climb.html similarity index 85% rename from single_aviary.html rename to N2s/n2_multi_min_time_to_climb.html index 5cb7b0313..7b4a51ce7 100644 --- a/single_aviary.html +++ b/N2s/n2_multi_min_time_to_climb.html @@ -3255,7 +3255,7 @@

Toolbar Help

diff --git a/c5.csv b/c5_models/c5.csv similarity index 100% rename from c5.csv rename to c5_models/c5.csv diff --git a/c5_ferry.csv b/c5_models/c5_ferry.csv similarity index 100% rename from c5_ferry.csv rename to c5_models/c5_ferry.csv diff --git a/c5_ferry_phase_info.py b/c5_models/c5_ferry_phase_info.py similarity index 100% rename from c5_ferry_phase_info.py rename to c5_models/c5_ferry_phase_info.py diff --git a/c5_intermediate.csv b/c5_models/c5_intermediate.csv similarity index 100% rename from c5_intermediate.csv rename to c5_models/c5_intermediate.csv diff --git a/c5_intermediate_phase_info.py b/c5_models/c5_intermediate_phase_info.py similarity index 100% rename from c5_intermediate_phase_info.py rename to c5_models/c5_intermediate_phase_info.py diff --git a/c5_maxpayload.csv b/c5_models/c5_maxpayload.csv similarity index 100% rename from c5_maxpayload.csv rename to c5_models/c5_maxpayload.csv diff --git a/c5_maxpayload_phase_info.py b/c5_models/c5_maxpayload_phase_info.py similarity index 100% rename from c5_maxpayload_phase_info.py rename to c5_models/c5_maxpayload_phase_info.py diff --git a/cannonball.py b/cannonball_models/cannonball.py similarity index 100% rename from cannonball.py rename to cannonball_models/cannonball.py diff --git a/multi_cannonball_copymodel.py b/cannonball_models/multi_cannonball_copymodel.py similarity index 99% rename from multi_cannonball_copymodel.py rename to cannonball_models/multi_cannonball_copymodel.py index 86eba920b..06effc571 100644 --- a/multi_cannonball_copymodel.py +++ b/cannonball_models/multi_cannonball_copymodel.py @@ -271,7 +271,9 @@ def runAvCannonball(kes=[4e3], weights=[1], makeN2=False): prob.setInitialVals(super_prob, subprefix) if makeN2: - om.n2(super_prob, outfile='multi_cannonball_copymodel.html') + sys.path.append('../') + from createN2 import createN2 + createN2(__file__, super_prob) dm.run_problem(super_prob) return super_prob, prefix, num_trajs, kes, weights diff --git a/multI_cannonball_copyparts.py b/cannonball_models/multi_cannonball_copyparts.py similarity index 99% rename from multI_cannonball_copyparts.py rename to cannonball_models/multi_cannonball_copyparts.py index 6ae9ea40f..327b983d2 100644 --- a/multI_cannonball_copyparts.py +++ b/cannonball_models/multi_cannonball_copyparts.py @@ -312,7 +312,9 @@ def runAvCannonball(kes=[4e3], weights=[1], makeN2=False): descent.interp('gam', [0, -45]), units='deg') if makeN2: - om.n2(super_prob, outfile='multi_cannonball_copyparts.html') + sys.path.append('../') + from createN2 import createN2 + createN2(__file__, super_prob) dm.run_problem(super_prob) return super_prob, prefix, num_trajs, kes, weights diff --git a/checkdiff_0.txt b/checkdiff_0.txt deleted file mode 100644 index f83bd9f6c..000000000 --- a/checkdiff_0.txt +++ /dev/null @@ -1,115 +0,0 @@ -time to climb: 217.2520 - -{'h': [array([[ 100. ], - [ 103.80775766], - [ 930.71769738], - [ 2018.93438639], - [ 1079.40343002], - [ 1079.40343002], - [ 100.50805119], - [ 1438.27501212], - [ 1602.57149682], - [ 1904.86259749], - [ 1904.86259749], - [ 3712.98528547], - [ 7915.33675389], - [ 9999.15426009], - [10000. ]]), array([[ 100. ], - [ 103.80775766], - [ 930.71769738], - [ 2018.93438639], - [ 1079.40343002], - [ 1079.40343002], - [ 100.50805119], - [ 1438.27501212], - [ 1602.57149682], - [ 1904.86259749], - [ 1904.86259749], - [ 3712.98528547], - [ 7915.33675389], - [ 9999.15426009], - [10000. ]])], 'r': [array([[ 0. ], - [ 2164.77845444], - [ 8473.61758302], - [16609.52293651], - [21085.59321018], - [21085.59321018], - [25851.44200422], - [34547.78294612], - [42985.06162566], - [47584.61382911], - [47584.61382911], - [51585.06694611], - [57432.22219674], - [63136.01715066], - [66759.00094891]]), array([[ 0. ], - [ 2164.77845444], - [ 8473.61758302], - [16609.52293651], - [21085.59321018], - [21085.59321018], - [25851.44200422], - [34547.78294612], - [42985.06162566], - [47584.61382911], - [47584.61382911], - [51585.06694611], - [57432.22219674], - [63136.01715066], - [66759.00094891]])], 'thrust': [array([[28040.14632377], - [31556.75143551], - [34632.8452248 ], - [34460.21958075], - [36675.29708332], - [36675.29708332], - [37236.1319661 ], - [34983.71270878], - [35728.22081081], - [34948.49191097], - [34948.49191097], - [29809.33906985], - [17293.91714046], - [13796.64728958], - [14828.82136199]]), array([[28040.14632377], - [31556.75143551], - [34632.8452248 ], - [34460.21958075], - [36675.29708332], - [36675.29708332], - [37236.1319661 ], - [34983.71270878], - [35728.22081081], - [34948.49191097], - [34948.49191097], - [29809.33906985], - [17293.91714046], - [13796.64728958], - [14828.82136199]])], 'v': [array([[135.964 ], - [208.97354876], - [320.68563986], - [359.68260029], - [388.15357668], - [388.15357668], - [390.55430662], - [351.23126062], - [374.4217715 ], - [366.01620721], - [366.01620721], - [335.87183483], - [271.12367442], - [274.0747837 ], - [299.52547901]]), array([[135.964 ], - [208.97354876], - [320.68563986], - [359.68260029], - [388.15357668], - [388.15357668], - [390.55430662], - [351.23126062], - [374.4217715 ], - [366.01620721], - [366.01620721], - [335.87183483], - [271.12367442], - [274.0747837 ], - [299.52547901]])]} \ No newline at end of file diff --git a/checkdiff_1.txt b/checkdiff_1.txt deleted file mode 100644 index ed7e9d1b6..000000000 --- a/checkdiff_1.txt +++ /dev/null @@ -1,115 +0,0 @@ -time to climb: 157.8796 - -{'h': [array([[ 100. ], - [ 515.07613051], - [ 1381.81693255], - [ 101.0458639 ], - [ 172.85115116], - [ 172.85115116], - [ 816.09835065], - [ 979.82075129], - [ 3756.26728314], - [ 5485.0832487 ], - [ 5485.0832487 ], - [ 6275.04817479], - [ 8240.0346346 ], - [ 9882.93735171], - [10000. ]]), array([[ 100. ], - [ 515.07613051], - [ 1381.81693255], - [ 101.0458639 ], - [ 172.85115116], - [ 172.85115116], - [ 816.09835065], - [ 979.82075129], - [ 3756.26728314], - [ 5485.0832487 ], - [ 5485.0832487 ], - [ 6275.04817479], - [ 8240.0346346 ], - [ 9882.93735171], - [10000. ]])], 'r': [array([[ 0. ], - [ 1206.82136366], - [ 3914.17528984], - [ 8451.44496816], - [11399.92146116], - [11399.92146116], - [14365.84009676], - [20639.75294521], - [25288.31640182], - [27271.04173952], - [27271.04173952], - [29881.11674619], - [34591.83602889], - [39138.45065608], - [41792.19739333]]), array([[ 0. ], - [ 1206.82136366], - [ 3914.17528984], - [ 8451.44496816], - [11399.92146116], - [11399.92146116], - [14365.84009676], - [20639.75294521], - [25288.31640182], - [27271.04173952], - [27271.04173952], - [29881.11674619], - [34591.83602889], - [39138.45065608], - [41792.19739333]])], 'thrust': [array([[28040.14632377], - [27840.96435929], - [27801.17232139], - [36538.29991158], - [36783.4253821 ], - [36783.4253821 ], - [35767.31775612], - [35695.44888759], - [27672.82594699], - [23340.56296487], - [23340.56296487], - [22190.71836546], - [17569.77743693], - [14367.81307749], - [14828.82136199]]), array([[28040.14632377], - [27840.96435929], - [27801.17232139], - [36538.29991158], - [36783.4253821 ], - [36783.4253821 ], - [35767.31775612], - [35695.44888759], - [27672.82594699], - [23340.56296487], - [23340.56296487], - [22190.71836546], - [17569.77743693], - [14367.81307749], - [14828.82136199]])], 'v': [array([[135.964 ], - [152.24096545], - [200.85748578], - [328.70862359], - [346.73855457], - [346.73855457], - [346.4022868 ], - [351.79430504], - [304.2851606 ], - [294.30253244], - [294.30253244], - [302.5443161 ], - [289.57065259], - [283.7594102 ], - [299.52547901]]), array([[135.964 ], - [152.24096545], - [200.85748578], - [328.70862359], - [346.73855457], - [346.73855457], - [346.4022868 ], - [351.79430504], - [304.2851606 ], - [294.30253244], - [294.30253244], - [302.5443161 ], - [289.57065259], - [283.7594102 ], - [299.52547901]])]} \ No newline at end of file diff --git a/createN2.py b/createN2.py new file mode 100644 index 000000000..a41f99de6 --- /dev/null +++ b/createN2.py @@ -0,0 +1,8 @@ +from openmdao.api import n2 +from os.path import basename, dirname, join, abspath + + +def createN2(fileref, prob): + n2folder = join(dirname(abspath(__file__)), "N2s") + n2(prob, outfile=join(n2folder, + f"n2_{basename(fileref).split('.')[0]}.html")) diff --git a/min_time_climb.py b/min_time_climb_models/min_time_climb.py similarity index 86% rename from min_time_climb.py rename to min_time_climb_models/min_time_climb.py index c51ea006f..1f6e77b11 100644 --- a/min_time_climb.py +++ b/min_time_climb_models/min_time_climb.py @@ -4,6 +4,7 @@ import matplotlib.pyplot as plt import numpy as np import sys +from createN2 import createN2 def min_time_climb(height=20e3, @@ -104,11 +105,11 @@ def min_time_climb(height=20e3, p['traj.phase0.t_initial'] = 0.0 p['traj.phase0.t_duration'] = 350.0 - p['traj.phase0.states:r'] = phase.interp('r', [0.0, 111319.54]) + p['traj.phase0.states:r'] = phase.interp('r', [0.0, 100e3]) p['traj.phase0.states:h'] = phase.interp('h', [100.0, height]) p['traj.phase0.states:v'] = phase.interp('v', [135.964, 283.159]) p['traj.phase0.states:gam'] = phase.interp('gam', [0.0, 0.0]) - p['traj.phase0.states:m'] = phase.interp('m', [19030.468, 16841.431]) + p['traj.phase0.states:m'] = phase.interp('m', [30e3, 16e3]) p['traj.phase0.controls:alpha'] = phase.interp('alpha', [0.0, 0.0]) dm.run_problem(p, simulate=True) @@ -152,28 +153,34 @@ def checkDeviation(filenum=0): def multiHeightTest(): - heights = [12e3, 20e3] + heights = [6e3, 18e3] prefix = 'traj.phase0.timeseries.' - plotvars = {'r': ['h'], 'time': ['v', 'thrust', 'm_dot', 'alpha']} - plotunits = {'r': ['km', 'km'], 'time': ['s', 'm/s', 'kN', 'kg/s', 'deg']} + # these dictionaries are defined with the x-variable and its units as the key, + # with corresponding y-variables and units in a list as the key's value + # allows for multiple y vars to be plotted against same x var + plotvars = {'r': ['h'], 'time': ['h', 'v', 'thrust', 'm_dot', 'alpha']} + plotunits = {'km': ['km'], 's': ['km', 'm/s', 'kN', 'kg/s', 'deg']} varnames = {prefix+x: [prefix+y for y in ylst] for x, ylst in plotvars.items()} - numplots = sum([len(item) for item in plotvars.values()]) + numplots = sum([len(yvars) for yvars in plotvars.values()]) data = {f'h{i}': {} for i in range(len(heights))} + times = [] for j, height in enumerate(heights): p = min_time_climb(height=height) wing_area = p.get_val('traj.phase0.parameters:S', units='m**2')[0] sol = om.CaseReader('dymos_solution.db').get_case('final') sim = om.CaseReader('dymos_simulation.db').get_case('final') + timetoclimb = p.get_val('traj.phase0.timeseries.time', units='s')[-1][0] + times.append(timetoclimb) print("\n\n=======================================") print(f"Time to climb {height/1e3} km: " + - f"{p.get_val('traj.phase0.timeseries.time',units='s')[-1][0]:.2f}" + + f"{timetoclimb:.2f}" + f" s with wing area: {wing_area} sqm") - for xname, unitkey in zip(varnames.keys(), plotunits.keys()): - xsol = sol.get_val(xname, units=plotunits[unitkey][0]) - xsim = sim.get_val(xname, units=plotunits[unitkey][0]) + for xname, xunit in zip(varnames.keys(), plotunits.keys()): + xsol = sol.get_val(xname, units=xunit) + xsim = sim.get_val(xname, units=xunit) if not xname in data.keys(): data[f'h{j}'][xname] = {'x': (xsol, xsim), 'y': []} for i, yname in enumerate(varnames[xname]): @@ -181,31 +188,34 @@ def multiHeightTest(): data[f'h{j}'][xname]['yname'] = [yname] else: data[f'h{j}'][xname]['yname'].append(yname) - ysol = sol.get_val(yname, units=plotunits[unitkey][i+1]) - ysim = sim.get_val(yname, units=plotunits[unitkey][i+1]) + ysol = sol.get_val(yname, units=plotunits[xunit][i]) + ysim = sim.get_val(yname, units=plotunits[xunit][i]) data[f'h{j}'][xname]['y'].append((ysol, ysim)) - colors = ['r', 'b'] + colors = ['r', 'b', 'g', 'm', 'k'] legendlst = [] for j in range(len(heights)): datadict = data[f'h{j}'] - i = 1 - for xname, unitkey in zip(datadict.keys(), plotunits.keys()): + plot_idx = 1 + for xname, xunit in zip(datadict.keys(), plotunits.keys()): xsol, xsim = datadict[xname]['x'] - for (ysol, ysim), yname, yunit in zip(datadict[xname]['y'], datadict[xname]['yname'], plotunits[unitkey][1:]): - plt.subplot(int(numplots/2), numplots-int(numplots/2), i) - # if max(ysim) > 1e3: - # ysol, ysim = ysol/1e3, ysim/1e3 + for (ysol, ysim), yname, yunit in zip(datadict[xname]['y'], datadict[xname]['yname'], plotunits[xunit]): + plt.subplot(2, int(numplots/2), plot_idx) plt.plot(xsol, ysol, f'{colors[j]}o', fillstyle='none') plt.plot(xsim, ysim, colors[j]) - plt.xlabel(f"{xname.split(prefix)[1]} ({plotunits[unitkey][0]})") + plt.xlabel(f"{xname.split(prefix)[1]} ({xunit})") plt.ylabel(f"{yname.split(prefix)[1]} ({yunit})") - if j == 0: - plt.grid(visible=True) - i += 1 + plt.grid(visible=True) + plot_idx += 1 + for datatype in ('Solution', 'Simulation'): - legendlst.append(f"{datatype} @ h = {heights[j]/1e3} km") - plt.figlegend(legendlst) + legendlst.append(f"h = {heights[j]/1e3} km, {datatype} ") + plt.figlegend(legendlst, ncols=2, loc='lower center') + plt.tight_layout(pad=2) + titlestr = ", ".join( + [f"{time:.1f} s to h = {height/1e3:.1f} km" for time, height + in zip(times, heights)]) + plt.suptitle(f"Minimum Time to Climb: "+titlestr) plt.show() @@ -216,7 +226,7 @@ def multiHeightTest(): optimization takes a very different number of iterations, and the profile looks very different. Time to climb is also different.""" if __name__ == '__main__': - if len(sys.argv) > 1 and 'filenum' in sys.argv[1]: + if 'filenum' in sys.argv[1]: checkDeviation(filenum=sys.argv[1].split('filenum=')[1]) else: multiHeightTest() diff --git a/min_time_climb_models/multi_min_time_to_climb.py b/min_time_climb_models/multi_min_time_to_climb.py new file mode 100644 index 000000000..0a710dc61 --- /dev/null +++ b/min_time_climb_models/multi_min_time_to_climb.py @@ -0,0 +1,178 @@ +import openmdao.api as om +import dymos as dm +from dymos.examples.min_time_climb.min_time_climb_ode import MinTimeClimbODE +import matplotlib.pyplot as plt +import numpy as np +import sys + + +class MinTimeClimbProblem(om.Problem): + def __init__(self, target_height=20e3, initial_mass=20e3): + super().__init__() + self.model = om.Group() + self.target_height = target_height + self.initial_mass = initial_mass + + def setOptimizer(self, driver='scipy', optimizer='SLSQP'): + self.driver = om.pyOptSparseDriver() if driver == "pyoptsparse" else om.ScipyOptimizeDriver() + self.driver.options['optimizer'] = optimizer + self.driver.declare_coloring() + if optimizer == 'SNOPT': + self.driver.opt_settings['Major iterations limit'] = 1000 + self.driver.opt_settings['iSumm'] = 6 + self.driver.opt_settings['Major feasibility tolerance'] = 1.0E-6 + self.driver.opt_settings['Major optimality tolerance'] = 1.0E-6 + self.driver.opt_settings['Function precision'] = 1.0E-12 + self.driver.opt_settings['Linesearch tolerance'] = 0.1 + self.driver.opt_settings['Major step limit'] = 0.5 + elif optimizer == 'IPOPT': + self.driver.opt_settings['tol'] = 1.0E-5 + self.driver.opt_settings['print_level'] = 0 + self.driver.opt_settings['mu_strategy'] = 'monotone' + self.driver.opt_settings['bound_mult_init_method'] = 'mu-based' + self.driver.opt_settings['mu_init'] = 0.01 + + self.model.linear_solver = om.DirectSolver() + + def addTrajectory(self, num_seg=9, transcription='gauss-lobatto', + transcription_order=3): + t = {'gauss-lobatto': dm.GaussLobatto( + num_segments=num_seg, order=transcription_order), + 'radau-ps': dm.Radau(num_segments=num_seg, order=transcription_order)} + + traj = dm.Trajectory() + phase = dm.Phase(ode_class=MinTimeClimbODE, transcription=t[transcription]) + traj.add_phase('phase0', phase) + + height = self.target_height + time_name = 'time' + add_rate = False + phase.set_time_options(fix_initial=True, duration_bounds=(50, 600), + duration_ref=100.0, name=time_name) + + phase.add_state('r', fix_initial=True, lower=0, upper=1.0E6, + ref=1.0E3, defect_ref=1.0E3, units='m', + rate_source='flight_dynamics.r_dot') + + phase.add_state('h', fix_initial=True, lower=0, upper=height, + ref=height, defect_ref=height, units='m', + rate_source='flight_dynamics.h_dot', targets=['h']) + + phase.add_state('v', fix_initial=True, lower=10.0, + ref=1.0E2, defect_ref=1.0E2, units='m/s', + rate_source='flight_dynamics.v_dot', targets=['v']) + + phase.add_state('gam', fix_initial=True, lower=-1.5, upper=1.5, + ref=1.0, defect_ref=1.0, units='rad', + rate_source='flight_dynamics.gam_dot', targets=['gam']) + + phase.add_state('m', fix_initial=True, lower=10.0, upper=1.0E5, + ref=10_000, defect_ref=10_000, units='kg', + rate_source='prop.m_dot', targets=['m']) + + phase.add_control('alpha', units='deg', lower=-8.0, upper=8.0, scaler=1.0, + rate_continuity=True, rate_continuity_scaler=100.0, + rate2_continuity=False, targets=['alpha']) + + phase.add_parameter('S', val=49.2386, units='m**2', opt=True, targets=['S']) + phase.add_parameter('Isp', val=1600.0, units='s', opt=False, targets=['Isp']) + phase.add_parameter('throttle', val=1.0, opt=False, targets=['throttle']) + + phase.add_boundary_constraint( + 'h', loc='final', equals=height) # , scaler=1.0E-3) + phase.add_boundary_constraint('aero.mach', loc='final', equals=1.0) + phase.add_boundary_constraint('gam', loc='final', equals=0.0) + + phase.add_path_constraint(name='h', lower=100.0, upper=height, ref=height) + phase.add_path_constraint(name='aero.mach', lower=0.1, upper=1.8) + + # Unnecessary but included to test capability + phase.add_path_constraint(name='alpha', lower=-8, upper=8) + phase.add_path_constraint(name=f'{time_name}', lower=0, upper=400) + phase.add_path_constraint(name=f'{time_name}_phase', lower=0, upper=400) + + # Minimize time at the end of the phase + # phase.add_objective(time_name, loc='final', ref=1.0) + + # test mixing wildcard ODE variable expansion and unit overrides + phase.add_timeseries_output(['aero.*', 'prop.thrust', 'prop.m_dot'], + units={'aero.f_lift': 'lbf', 'prop.thrust': 'lbf'}) + + # test adding rate as timeseries output + if add_rate: + phase.add_timeseries_rate_output('aero.mach') + + self.phase = phase + self.model.add_subsystem('traj', traj, promotes=['*']) + + def setInitialConditions(self, super_prob=None, prefix=""): + ref = self + if super_prob is not None and prefix != "": + ref = super_prob + ref[prefix+'traj.phase0.t_initial'] = 0.0 + ref[prefix+'traj.phase0.t_duration'] = 350.0 + ref[prefix+'traj.phase0.states:r'] = self.phase.interp('r', [0.0, 100e3]) + ref[prefix+'traj.phase0.states:h'] = self.phase.interp( + 'h', [100.0, self.target_height]) + ref[prefix+'traj.phase0.states:v'] = self.phase.interp('v', [135.964, 283.159]) + ref[prefix+'traj.phase0.states:gam'] = self.phase.interp('gam', [0.0, 0.0]) + ref[prefix+'traj.phase0.states:m'] = self.phase.interp( + 'm', [self.initial_mass, 10e3]) + ref[prefix+'traj.phase0.controls:alpha'] = self.phase.interp('alpha', [0.0, 0.0]) + + +if __name__ == '__main__': + makeN2 = True if "n2" in sys.argv else False + heights = [6e3, 18e3] + weights = [1, 1] + num_missions = len(heights) + super_prob = om.Problem() + probs = [] + for i, height in enumerate(heights): + prob = MinTimeClimbProblem(height, 30e3) + # prob.setOptimizer() + prob.addTrajectory() + super_prob.model.add_subsystem( + f"group_{i}", prob.model, promotes=[('phase0.parameters:S', 'S')]) + probs.append(prob) + + super_prob.model.add_design_var('S', lower=1, upper=100, units='m**2') + + times = [f"time_{i}" for i in range(num_missions)] + weighted_sum_str = "+".join([f"{time}*{weight}" for time, + weight in zip(times, weights)]) + super_prob.model.add_subsystem('compoundComp', om.ExecComp( + "compound_time=" + weighted_sum_str), + promotes=['compound_time', *times]) + + for i in range(num_missions): + super_prob.model.connect(f"group_{i}.phase0.t", times[i], src_indices=-1) + super_prob.model.add_objective('compound_time') + + super_prob.driver = om.ScipyOptimizeDriver() + super_prob.driver.options['optimizer'] = 'SLSQP' + super_prob.driver.declare_coloring() + super_prob.model.linear_solver = om.DirectSolver() + + super_prob.setup() + if makeN2: + sys.path.append('../') + from createN2 import createN2 + createN2(__file__, super_prob) + for i, prob in enumerate(probs): + prob.setInitialConditions(super_prob, f"group_{i}.") + + dm.run_problem(super_prob) + wing_area = super_prob.get_val('S', units='m**2')[0] + # sol = om.CaseReader('dymos_solution.db').get_case('final') + # sim = om.CaseReader('dymos_simulation.db').get_case('final') + print("\n\n=====================================") + for i in range(num_missions): + timetoclimb = super_prob.get_val(f'group_{i}.phase0.t', units='s')[-1] + print(f"TtoC: {timetoclimb}, S: {wing_area}") + xsol = super_prob.get_val(f"group_{i}.phase0.timeseries.r") + ysol = super_prob.get_val(f"group_{i}.phase0.timeseries.h") + plt.plot(xsol, ysol) + + plt.grid() + plt.show() diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 11e61451b..e0a0cb23f 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -12,9 +12,9 @@ import dymos as dm import numpy as np from aviary.variable_info.enums import ProblemType, AnalysisScheme -from c5_ferry_phase_info import phase_info as c5_ferry_phase_info -from c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info -from c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info +from c5_models.c5_ferry_phase_info import phase_info as c5_ferry_phase_info +from c5_models.c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info +from c5_models.c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info from aviary.variable_info.variable_meta_data import _MetaData as MetaData from aviary.variable_info.variables import Mission, Dynamic from aviary.interface.methods_for_level2 import wrapped_convert_units @@ -102,10 +102,7 @@ def setup_wrapper(self): with warnings.catch_warnings(): warnings.simplefilter("ignore", om.OpenMDAOWarning) warnings.simplefilter("ignore", om.PromotionWarning) - self.setup() - - def create_N2(self, outfile='multi_aviary_copymodel.html'): - om.n2(self, outfile=outfile) + self.setup(check='all') def run(self): self.run_model() @@ -115,7 +112,7 @@ def run(self): if __name__ == '__main__': makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False - planes = ['c5_maxpayload.csv', 'c5_intermediate.csv'] + planes = ['c5_models/c5_maxpayload.csv', 'c5_models/c5_intermediate.csv'] phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] weights = [1, 1] super_prob = MultiMissionProblem(planes, phase_infos, weights) @@ -133,7 +130,8 @@ def run(self): print(super_prob.get_val(super_prob.group_prefix + f"_{i}.mission:summary:range")) if makeN2: - super_prob.create_N2() + from createN2 import createN2 + createN2(__file__, super_prob) super_prob.run() # def initvals(self): diff --git a/multi_aviary_submodel.py b/multi_aviary_submodel.py index 7435aebd6..c1a640c72 100644 --- a/multi_aviary_submodel.py +++ b/multi_aviary_submodel.py @@ -9,11 +9,11 @@ import aviary.api as av import openmdao.api as om import dymos as dm -from c5_ferry_phase_info import phase_info as c5_ferry_phase_info -from c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info -from c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info +from c5_models.c5_ferry_phase_info import phase_info as c5_ferry_phase_info +from c5_models.c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info +from c5_models.c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info -planes = ['c5_maxpayload.csv', 'c5_intermediate.csv'] +planes = ['c5_models/c5_maxpayload.csv', 'c5_models/c5_intermediate.csv'] phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] weights = [1, 1] num_missions = len(weights) @@ -77,7 +77,8 @@ prob.set_initial_guesses() if makeN2: - om.n2(super_prob, outfile='multi_aviary_submodel.html') + from createN2 import createN2 + createN2(__file__, super_prob) dm.run_problem(super_prob) print(super_prob.check_partials()) diff --git a/outputted_phase_info.py b/outputted_phase_info.py deleted file mode 100644 index 9e9fd754f..000000000 --- a/outputted_phase_info.py +++ /dev/null @@ -1,8 +0,0 @@ -phase_info = { - "pre_mission": {"include_takeoff": False, "optimize_mass": True}, - "post_mission": { - "include_landing": False, - "constrain_range": True, - "target_range": (0.0, "nmi"), - }, -} diff --git a/single_aviary.py b/single_aviary.py index 35acbcb4f..5966b37d6 100644 --- a/single_aviary.py +++ b/single_aviary.py @@ -1,9 +1,9 @@ +from c5_models.c5_ferry_phase_info import phase_info as c5_ferry_phase_info +from c5_models.c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info +from c5_models.c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info import aviary.api as av import openmdao.api as om import sys -from c5_ferry_phase_info import phase_info as c5_ferry_phase_info -from c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info -from c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info def modify_plane(orig_filename, payloads, ranges): From cf1fcfdbf288d336c78fc825fd35862781bc5aed Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Thu, 1 Aug 2024 09:50:21 -0400 Subject: [PATCH 024/113] checkpt --- min_time_climb_models/min_time_climb.py | 1 - 1 file changed, 1 deletion(-) diff --git a/min_time_climb_models/min_time_climb.py b/min_time_climb_models/min_time_climb.py index 1f6e77b11..44b07395a 100644 --- a/min_time_climb_models/min_time_climb.py +++ b/min_time_climb_models/min_time_climb.py @@ -4,7 +4,6 @@ import matplotlib.pyplot as plt import numpy as np import sys -from createN2 import createN2 def min_time_climb(height=20e3, From 9053df3d47b6d653c1dd70c5474c9a6de63b2a88 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Thu, 1 Aug 2024 15:16:04 -0400 Subject: [PATCH 025/113] reasonable multi mission for min time to climb, plot helper for min time funcs --- min_time_climb_models/min_time_climb.py | 129 ++++++------------ .../multi_min_time_to_climb.py | 53 +++---- min_time_climb_models/plot_helper.py | 88 ++++++++++++ 3 files changed, 163 insertions(+), 107 deletions(-) create mode 100644 min_time_climb_models/plot_helper.py diff --git a/min_time_climb_models/min_time_climb.py b/min_time_climb_models/min_time_climb.py index 44b07395a..a49c956f9 100644 --- a/min_time_climb_models/min_time_climb.py +++ b/min_time_climb_models/min_time_climb.py @@ -1,19 +1,21 @@ import openmdao.api as om import dymos as dm from dymos.examples.min_time_climb.min_time_climb_ode import MinTimeClimbODE +from plot_helper import make_min_time_climb_plot import matplotlib.pyplot as plt import numpy as np import sys -def min_time_climb(height=20e3, - optimizer='SLSQP', num_seg=9, transcription='gauss-lobatto', - transcription_order=3, force_alloc_complex=False, add_rate=False, - time_name='time'): +def min_time_climb( + height=20e3, driver='scipy', optimizer='SLSQP', num_seg=15, + transcription='gauss-lobatto', transcription_order=3, force_alloc_complex=False, + add_rate=False, time_name='time', simfile='dymos_simulatin.db', + solfile='dymos_solution.db'): p = om.Problem(model=om.Group()) - p.driver = om.ScipyOptimizeDriver() + p.driver = om.ScipyOptimizeDriver() if driver == 'scipy' else om.pyOptSparseDriver() p.driver.options['optimizer'] = optimizer p.driver.declare_coloring() @@ -41,8 +43,6 @@ def min_time_climb(height=20e3, phase = dm.Phase(ode_class=MinTimeClimbODE, transcription=t[transcription]) traj.add_phase('phase0', phase) - p.model.add_subsystem('traj', traj) - phase.set_time_options(fix_initial=True, duration_bounds=(50, 400), duration_ref=100.0, name=time_name) @@ -70,7 +70,8 @@ def min_time_climb(height=20e3, rate_continuity=True, rate_continuity_scaler=100.0, rate2_continuity=False, targets=['alpha']) - phase.add_parameter('S', val=49.2386, units='m**2', opt=True, targets=['S']) + phase.add_parameter('S', val=42.554663555518836, + units='m**2', opt=True, targets=['S']) phase.add_parameter('Isp', val=1600.0, units='s', opt=False, targets=['Isp']) phase.add_parameter('throttle', val=1.0, opt=False, targets=['throttle']) @@ -80,6 +81,7 @@ def min_time_climb(height=20e3, phase.add_path_constraint(name='h', lower=100.0, upper=height, ref=height) phase.add_path_constraint(name='aero.mach', lower=0.1, upper=1.8) + # phase.add_path_constraint(name='gam', lower=-23, upper=23, units='deg') # Unnecessary but included to test capability phase.add_path_constraint(name='alpha', lower=-8, upper=8) @@ -97,21 +99,24 @@ def min_time_climb(height=20e3, if add_rate: phase.add_timeseries_rate_output('aero.mach') + p.model.add_subsystem('traj', traj, promotes=['*']) + p.model.linear_solver = om.DirectSolver() p.setup(check=True, force_alloc_complex=force_alloc_complex) - p['traj.phase0.t_initial'] = 0.0 - p['traj.phase0.t_duration'] = 350.0 + p.set_val('phase0.t_initial', 0.0) + p.set_val('phase0.t_duration', 350.0) - p['traj.phase0.states:r'] = phase.interp('r', [0.0, 100e3]) - p['traj.phase0.states:h'] = phase.interp('h', [100.0, height]) - p['traj.phase0.states:v'] = phase.interp('v', [135.964, 283.159]) - p['traj.phase0.states:gam'] = phase.interp('gam', [0.0, 0.0]) - p['traj.phase0.states:m'] = phase.interp('m', [30e3, 16e3]) - p['traj.phase0.controls:alpha'] = phase.interp('alpha', [0.0, 0.0]) + p.set_val('phase0.states:r', phase.interp('r', [0.0, 100e3])) + p.set_val('phase0.states:h', phase.interp('h', [100.0, height])) + p.set_val('phase0.states:v', phase.interp('v', [135.964, 283.159])) + p.set_val('phase0.states:gam', phase.interp('gam', [0.0, 0.0])) + p.set_val('phase0.states:m', phase.interp('m', [30e3, 16e3])) + p.set_val('phase0.controls:alpha', phase.interp('alpha', [0.0, 0.0])) - dm.run_problem(p, simulate=True) + dm.run_problem(p, simulate=True, simulation_record_file=simfile, + solution_record_file=solfile) return p @@ -153,79 +158,35 @@ def checkDeviation(filenum=0): def multiHeightTest(): heights = [6e3, 18e3] - prefix = 'traj.phase0.timeseries.' - # these dictionaries are defined with the x-variable and its units as the key, - # with corresponding y-variables and units in a list as the key's value - # allows for multiple y vars to be plotted against same x var - plotvars = {'r': ['h'], 'time': ['h', 'v', 'thrust', 'm_dot', 'alpha']} - plotunits = {'km': ['km'], 's': ['km', 'm/s', 'kN', 'kg/s', 'deg']} - varnames = {prefix+x: [prefix+y for y in ylst] for x, ylst in plotvars.items()} - numplots = sum([len(yvars) for yvars in plotvars.values()]) - data = {f'h{i}': {} for i in range(len(heights))} times = [] + areas = [] + outfiles = {'sol': [], 'sim': []} for j, height in enumerate(heights): - p = min_time_climb(height=height) - wing_area = p.get_val('traj.phase0.parameters:S', units='m**2')[0] - sol = om.CaseReader('dymos_solution.db').get_case('final') - sim = om.CaseReader('dymos_simulation.db').get_case('final') - timetoclimb = p.get_val('traj.phase0.timeseries.time', units='s')[-1][0] - times.append(timetoclimb) + solfile = f'single_solution_{j}.db' + simfile = f'single_simulation_{j}.db' + outfiles['sim'].append(simfile) + outfiles['sol'].append(solfile) + p = min_time_climb( + height=height, simfile=simfile, + solfile=solfile) + areas.append(p.get_val('phase0.parameters:S', units='m**2')[0]) + times.append(p.get_val('phase0.timeseries.time', units='s')[-1][0]) - print("\n\n=======================================") + print("\n\n=======================================") + # print(p.get_val('phase.flight_dynamics.gam_dot')) + for time, area, height in zip(times, areas, heights): print(f"Time to climb {height/1e3} km: " + - f"{timetoclimb:.2f}" + - f" s with wing area: {wing_area} sqm") - - for xname, xunit in zip(varnames.keys(), plotunits.keys()): - xsol = sol.get_val(xname, units=xunit) - xsim = sim.get_val(xname, units=xunit) - if not xname in data.keys(): - data[f'h{j}'][xname] = {'x': (xsol, xsim), 'y': []} - for i, yname in enumerate(varnames[xname]): - if not 'yname' in data[f'h{j}'][xname].keys(): - data[f'h{j}'][xname]['yname'] = [yname] - else: - data[f'h{j}'][xname]['yname'].append(yname) - ysol = sol.get_val(yname, units=plotunits[xunit][i]) - ysim = sim.get_val(yname, units=plotunits[xunit][i]) - data[f'h{j}'][xname]['y'].append((ysol, ysim)) - - colors = ['r', 'b', 'g', 'm', 'k'] - legendlst = [] - for j in range(len(heights)): - datadict = data[f'h{j}'] - plot_idx = 1 - for xname, xunit in zip(datadict.keys(), plotunits.keys()): - xsol, xsim = datadict[xname]['x'] - for (ysol, ysim), yname, yunit in zip(datadict[xname]['y'], datadict[xname]['yname'], plotunits[xunit]): - plt.subplot(2, int(numplots/2), plot_idx) - plt.plot(xsol, ysol, f'{colors[j]}o', fillstyle='none') - plt.plot(xsim, ysim, colors[j]) - plt.xlabel(f"{xname.split(prefix)[1]} ({xunit})") - plt.ylabel(f"{yname.split(prefix)[1]} ({yunit})") - plt.grid(visible=True) - plot_idx += 1 - - for datatype in ('Solution', 'Simulation'): - legendlst.append(f"h = {heights[j]/1e3} km, {datatype} ") - plt.figlegend(legendlst, ncols=2, loc='lower center') - plt.tight_layout(pad=2) - titlestr = ", ".join( - [f"{time:.1f} s to h = {height/1e3:.1f} km" for time, height - in zip(times, heights)]) - plt.suptitle(f"Minimum Time to Climb: "+titlestr) - plt.show() - - -"""It seems that when the dymos problem is run multiple times within a single -run of this script, the output values are all the same for all timeseries. - -But when the script itself is run again, these values can differ very largely, -optimization takes a very different number of iterations, and the profile looks very -different. Time to climb is also different.""" + f"{time:.2f}" + + f" s with wing area: {area} sqm") + make_min_time_climb_plot( + solfile=outfiles['sol'], + simfile=outfiles['sim'], + omitpromote='traj') + + if __name__ == '__main__': - if 'filenum' in sys.argv[1]: + if 'filenum' in sys.argv: checkDeviation(filenum=sys.argv[1].split('filenum=')[1]) else: multiHeightTest() diff --git a/min_time_climb_models/multi_min_time_to_climb.py b/min_time_climb_models/multi_min_time_to_climb.py index 0a710dc61..b378526ef 100644 --- a/min_time_climb_models/multi_min_time_to_climb.py +++ b/min_time_climb_models/multi_min_time_to_climb.py @@ -1,6 +1,7 @@ import openmdao.api as om import dymos as dm from dymos.examples.min_time_climb.min_time_climb_ode import MinTimeClimbODE +from plot_helper import make_min_time_climb_plot import matplotlib.pyplot as plt import numpy as np import sys @@ -34,7 +35,7 @@ def setOptimizer(self, driver='scipy', optimizer='SLSQP'): self.model.linear_solver = om.DirectSolver() - def addTrajectory(self, num_seg=9, transcription='gauss-lobatto', + def addTrajectory(self, num_seg=15, transcription='gauss-lobatto', transcription_order=3): t = {'gauss-lobatto': dm.GaussLobatto( num_segments=num_seg, order=transcription_order), @@ -85,6 +86,7 @@ def addTrajectory(self, num_seg=9, transcription='gauss-lobatto', phase.add_path_constraint(name='h', lower=100.0, upper=height, ref=height) phase.add_path_constraint(name='aero.mach', lower=0.1, upper=1.8) + # phase.add_path_constraint(name='gam', lower=-23, upper=23, units='deg') # Unnecessary but included to test capability phase.add_path_constraint(name='alpha', lower=-8, upper=8) @@ -109,16 +111,19 @@ def setInitialConditions(self, super_prob=None, prefix=""): ref = self if super_prob is not None and prefix != "": ref = super_prob - ref[prefix+'traj.phase0.t_initial'] = 0.0 - ref[prefix+'traj.phase0.t_duration'] = 350.0 - ref[prefix+'traj.phase0.states:r'] = self.phase.interp('r', [0.0, 100e3]) - ref[prefix+'traj.phase0.states:h'] = self.phase.interp( - 'h', [100.0, self.target_height]) - ref[prefix+'traj.phase0.states:v'] = self.phase.interp('v', [135.964, 283.159]) - ref[prefix+'traj.phase0.states:gam'] = self.phase.interp('gam', [0.0, 0.0]) - ref[prefix+'traj.phase0.states:m'] = self.phase.interp( - 'm', [self.initial_mass, 10e3]) - ref[prefix+'traj.phase0.controls:alpha'] = self.phase.interp('alpha', [0.0, 0.0]) + phase = self.phase + ref.set_val(prefix+'traj.phase0.t_initial', 0.0) + ref.set_val(prefix+'traj.phase0.t_duration', 350.0) + + ref.set_val(prefix+'traj.phase0.states:r', phase.interp('r', [0.0, 100e3])) + ref.set_val(prefix+'traj.phase0.states:h', phase.interp( + 'h', [100.0, self.target_height])) + ref.set_val(prefix+'traj.phase0.states:v', phase.interp('v', [135.964, 283.159])) + ref.set_val(prefix+'traj.phase0.states:gam', phase.interp('gam', [0.0, 0.0])) + ref.set_val(prefix+'traj.phase0.states:m', + phase.interp('m', [self.initial_mass, 16e3])) + ref.set_val(prefix+'traj.phase0.controls:alpha', + phase.interp('alpha', [0.0, 0.0])) if __name__ == '__main__': @@ -126,11 +131,11 @@ def setInitialConditions(self, super_prob=None, prefix=""): heights = [6e3, 18e3] weights = [1, 1] num_missions = len(heights) + super_prob = om.Problem() probs = [] for i, height in enumerate(heights): prob = MinTimeClimbProblem(height, 30e3) - # prob.setOptimizer() prob.addTrajectory() super_prob.model.add_subsystem( f"group_{i}", prob.model, promotes=[('phase0.parameters:S', 'S')]) @@ -146,11 +151,14 @@ def setInitialConditions(self, super_prob=None, prefix=""): promotes=['compound_time', *times]) for i in range(num_missions): - super_prob.model.connect(f"group_{i}.phase0.t", times[i], src_indices=-1) + super_prob.model.connect( + f"group_{i}.phase0.t", times[i], + src_indices=-1) super_prob.model.add_objective('compound_time') - super_prob.driver = om.ScipyOptimizeDriver() - super_prob.driver.options['optimizer'] = 'SLSQP' + # super_prob.driver = om.ScipyOptimizeDriver() + super_prob.driver = om.pyOptSparseDriver() + super_prob.driver.options['optimizer'] = 'SLSQP' # 'IPOPT' super_prob.driver.declare_coloring() super_prob.model.linear_solver = om.DirectSolver() @@ -159,20 +167,19 @@ def setInitialConditions(self, super_prob=None, prefix=""): sys.path.append('../') from createN2 import createN2 createN2(__file__, super_prob) + for i, prob in enumerate(probs): prob.setInitialConditions(super_prob, f"group_{i}.") - dm.run_problem(super_prob) + dm.run_problem(super_prob, simulate=True) + wing_area = super_prob.get_val('S', units='m**2')[0] - # sol = om.CaseReader('dymos_solution.db').get_case('final') - # sim = om.CaseReader('dymos_simulation.db').get_case('final') print("\n\n=====================================") for i in range(num_missions): timetoclimb = super_prob.get_val(f'group_{i}.phase0.t', units='s')[-1] print(f"TtoC: {timetoclimb}, S: {wing_area}") - xsol = super_prob.get_val(f"group_{i}.phase0.timeseries.r") - ysol = super_prob.get_val(f"group_{i}.phase0.timeseries.h") - plt.plot(xsol, ysol) - plt.grid() - plt.show() + make_min_time_climb_plot( + solfile='dymos_solution.db', + simfile=['dymos_simulation.db', 'dymos_simulation_1.db'], + solprefix='group', omitpromote='traj') diff --git a/min_time_climb_models/plot_helper.py b/min_time_climb_models/plot_helper.py new file mode 100644 index 000000000..cb3d3db68 --- /dev/null +++ b/min_time_climb_models/plot_helper.py @@ -0,0 +1,88 @@ +import matplotlib.pyplot as plt +from openmdao.api import CaseReader + + +def make_min_time_climb_plot( + solfile='dymos_solution.db', simfile='dymos_simulation.db', solprefix='', + omitpromote=None): + + singleprob, multiprob, multitraj = True, False, False + if isinstance(solfile, list) and isinstance(simfile, list): + multiprob, singleprob = True, False + if len(solfile) != len(simfile): + raise Exception( + "Must provide same number of solution and simulation files with separate problems") + + elif isinstance(simfile, list) and isinstance(solfile, str): + multitraj, singleprob = True, False + solfile = [solfile]*len(simfile) + if solprefix == '': + raise Exception( + "When plotting multiple trajectories, must provide prefix to access solutions!") + + if singleprob: + solfile, simfile = [solfile], [simfile] + + plotvars = [('r', 'h'), + ('time', 'h'), + ('time', 'v'), + ('time', 'thrust'), + ('time', 'gam'), + ('time', 'alpha')] + plotunits = [ + ('km', 'km'), + ('s', 'km'), + ('s', 'm/s'), + ('s', 'kN'), + ('s', 'deg'), + ('s', 'deg')] + + numplots = len(plotvars) + tsprefix = 'traj.phase0.timeseries.' + + sols = [CaseReader(file).get_case('final') for file in solfile] + sims = [CaseReader(file).get_case('final') for file in simfile] + colors = ['r', 'b', 'g', 'm'] + legend = [] + areas = [] + heights = [None]*len(simfile) + + for i, (solf, simf) in enumerate(zip(sols, sims)): + for j, ((xvar, yvar), (xunit, yunit)) in enumerate(zip(plotvars, plotunits)): + plt.subplot(2, int(numplots/2), j+1) + xname, yname = addPrefix(tsprefix, (xvar, yvar)) + xsim = simf.get_val(xname, units=xunit) + ysim = simf.get_val(yname, units=yunit) + if omitpromote is not None: + xname = xname.replace(omitpromote+".", "") + yname = yname.replace(omitpromote+".", "") + if multitraj: + xname, yname = addPrefix(f"{solprefix}_{i}.", (xname, yname)) + xsol = solf.get_val(xname, units=xunit) + ysol = solf.get_val(yname, units=yunit) + if yvar == "h" and not heights[i]: + heights[i] = ysol[-1][0] + plt.plot(xsol, ysol, f"{colors[i]}o", fillstyle='none') + plt.plot(xsim, ysim, colors[i]) + plt.xlabel(f"{xvar} ({xunit})") + plt.ylabel(f"{yvar} ({yunit})") + plt.grid(visible=True) + legend.append(f"{heights[i]} {plotunits[0][1]} solution") + legend.append(f"{heights[i]} {plotunits[0][1]} simulation") + try: + areas.append(round(solf.get_val('S')[0], 2)) + except KeyError: + areas.append(round(solf.get_val('phase0.parameters:S')[0], 2)) + plt.figlegend(legend, ncols=len(simfile)) + plt.suptitle(f"Min Time to Climb, wing areas: {areas}") + plt.tight_layout(pad=1) + plt.show() + + +def addPrefix(prefix, iterable): + return [prefix+item for item in iterable] + + +if __name__ == '__main__': + make_min_time_climb_plot(solfile=['dymos_solution_0.db', 'dymos_solution_1.db'], + simfile=['dymos_simulation_0.db', 'dymos_simulation_1.db']) From 531c41f3b6684bb97b418cf1a6b1953a182a2d7d Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Fri, 2 Aug 2024 12:15:10 -0400 Subject: [PATCH 026/113] added comparison func to multi min time climb to compare with singular optimization --- min_time_climb_models/min_time_climb.py | 279 ++++++++++-------- .../multi_min_time_to_climb.py | 259 +++++++--------- min_time_climb_models/plot_helper.py | 32 +- multi_aviary_copymodel.py | 15 +- 4 files changed, 288 insertions(+), 297 deletions(-) diff --git a/min_time_climb_models/min_time_climb.py b/min_time_climb_models/min_time_climb.py index a49c956f9..b4b9dcd67 100644 --- a/min_time_climb_models/min_time_climb.py +++ b/min_time_climb_models/min_time_climb.py @@ -7,118 +7,136 @@ import sys -def min_time_climb( - height=20e3, driver='scipy', optimizer='SLSQP', num_seg=15, - transcription='gauss-lobatto', transcription_order=3, force_alloc_complex=False, - add_rate=False, time_name='time', simfile='dymos_simulatin.db', - solfile='dymos_solution.db'): - - p = om.Problem(model=om.Group()) - - p.driver = om.ScipyOptimizeDriver() if driver == 'scipy' else om.pyOptSparseDriver() - p.driver.options['optimizer'] = optimizer - p.driver.declare_coloring() - - if optimizer == 'SNOPT': - p.driver.opt_settings['Major iterations limit'] = 1000 - p.driver.opt_settings['iSumm'] = 6 - p.driver.opt_settings['Major feasibility tolerance'] = 1.0E-6 - p.driver.opt_settings['Major optimality tolerance'] = 1.0E-6 - p.driver.opt_settings['Function precision'] = 1.0E-12 - p.driver.opt_settings['Linesearch tolerance'] = 0.1 - p.driver.opt_settings['Major step limit'] = 0.5 - elif optimizer == 'IPOPT': - p.driver.opt_settings['tol'] = 1.0E-5 - p.driver.opt_settings['print_level'] = 0 - p.driver.opt_settings['mu_strategy'] = 'monotone' - p.driver.opt_settings['bound_mult_init_method'] = 'mu-based' - p.driver.opt_settings['mu_init'] = 0.01 - - t = {'gauss-lobatto': dm.GaussLobatto( - num_segments=num_seg, order=transcription_order), - 'radau-ps': dm.Radau(num_segments=num_seg, order=transcription_order)} - - traj = dm.Trajectory() - - phase = dm.Phase(ode_class=MinTimeClimbODE, transcription=t[transcription]) - traj.add_phase('phase0', phase) - - phase.set_time_options(fix_initial=True, duration_bounds=(50, 400), - duration_ref=100.0, name=time_name) - - phase.add_state('r', fix_initial=True, lower=0, upper=1.0E6, - ref=1.0E3, defect_ref=1.0E3, units='m', - rate_source='flight_dynamics.r_dot') - - phase.add_state('h', fix_initial=True, lower=0, upper=height, - ref=height, defect_ref=height, units='m', - rate_source='flight_dynamics.h_dot', targets=['h']) - - phase.add_state('v', fix_initial=True, lower=10.0, - ref=1.0E2, defect_ref=1.0E2, units='m/s', - rate_source='flight_dynamics.v_dot', targets=['v']) - - phase.add_state('gam', fix_initial=True, lower=-1.5, upper=1.5, - ref=1.0, defect_ref=1.0, units='rad', - rate_source='flight_dynamics.gam_dot', targets=['gam']) - - phase.add_state('m', fix_initial=True, lower=10.0, upper=1.0E5, - ref=10_000, defect_ref=10_000, units='kg', - rate_source='prop.m_dot', targets=['m']) - - phase.add_control('alpha', units='deg', lower=-8.0, upper=8.0, scaler=1.0, - rate_continuity=True, rate_continuity_scaler=100.0, - rate2_continuity=False, targets=['alpha']) - - phase.add_parameter('S', val=42.554663555518836, - units='m**2', opt=True, targets=['S']) - phase.add_parameter('Isp', val=1600.0, units='s', opt=False, targets=['Isp']) - phase.add_parameter('throttle', val=1.0, opt=False, targets=['throttle']) - - phase.add_boundary_constraint('h', loc='final', equals=height) # , scaler=1.0E-3) - phase.add_boundary_constraint('aero.mach', loc='final', equals=1.0) - phase.add_boundary_constraint('gam', loc='final', equals=0.0) - - phase.add_path_constraint(name='h', lower=100.0, upper=height, ref=height) - phase.add_path_constraint(name='aero.mach', lower=0.1, upper=1.8) - # phase.add_path_constraint(name='gam', lower=-23, upper=23, units='deg') - - # Unnecessary but included to test capability - phase.add_path_constraint(name='alpha', lower=-8, upper=8) - phase.add_path_constraint(name=f'{time_name}', lower=0, upper=400) - phase.add_path_constraint(name=f'{time_name}_phase', lower=0, upper=400) - - # Minimize time at the end of the phase - phase.add_objective(time_name, loc='final', ref=1.0) - - # test mixing wildcard ODE variable expansion and unit overrides - phase.add_timeseries_output(['aero.*', 'prop.thrust', 'prop.m_dot'], - units={'aero.f_lift': 'lbf', 'prop.thrust': 'lbf'}) - - # test adding rate as timeseries output - if add_rate: - phase.add_timeseries_rate_output('aero.mach') - - p.model.add_subsystem('traj', traj, promotes=['*']) - - p.model.linear_solver = om.DirectSolver() - - p.setup(check=True, force_alloc_complex=force_alloc_complex) - - p.set_val('phase0.t_initial', 0.0) - p.set_val('phase0.t_duration', 350.0) - - p.set_val('phase0.states:r', phase.interp('r', [0.0, 100e3])) - p.set_val('phase0.states:h', phase.interp('h', [100.0, height])) - p.set_val('phase0.states:v', phase.interp('v', [135.964, 283.159])) - p.set_val('phase0.states:gam', phase.interp('gam', [0.0, 0.0])) - p.set_val('phase0.states:m', phase.interp('m', [30e3, 16e3])) - p.set_val('phase0.controls:alpha', phase.interp('alpha', [0.0, 0.0])) - - dm.run_problem(p, simulate=True, simulation_record_file=simfile, - solution_record_file=solfile) - - return p +class MinTimeClimbProblem(om.Problem): + def __init__( + self, target_height=20e3, + modelinfo={'m_initial': 16e3, 'S': 49.24, 'v_initial': 150, 'h_initial': 10, + 'mach_final': 1.0}): + super().__init__() + defaults = {'m_initial': 16e3, 'S': 49.24, 'v_initial': 150, 'h_initial': 10, + 'mach_final': 1.0} + for key in defaults.keys(): + if key not in modelinfo.keys(): + modelinfo[key] = defaults[key] + + self.model = om.Group() + self.target_height = target_height + self.modelinfo = modelinfo + + def setOptimizer(self, driver='scipy', optimizer='SLSQP'): + self.driver = om.pyOptSparseDriver() if driver == "pyoptsparse" else om.ScipyOptimizeDriver() + self.driver.options['optimizer'] = optimizer + self.driver.declare_coloring() + if optimizer == 'SNOPT': + self.driver.opt_settings['Major iterations limit'] = 1000 + self.driver.opt_settings['iSumm'] = 6 + self.driver.opt_settings['Major feasibility tolerance'] = 1.0E-6 + self.driver.opt_settings['Major optimality tolerance'] = 1.0E-6 + self.driver.opt_settings['Function precision'] = 1.0E-12 + self.driver.opt_settings['Linesearch tolerance'] = 0.1 + self.driver.opt_settings['Major step limit'] = 0.5 + elif optimizer == 'IPOPT': + self.driver.opt_settings['tol'] = 1.0E-5 + self.driver.opt_settings['print_level'] = 0 + self.driver.opt_settings['mu_strategy'] = 'monotone' + self.driver.opt_settings['bound_mult_init_method'] = 'mu-based' + self.driver.opt_settings['mu_init'] = 0.01 + + self.model.linear_solver = om.DirectSolver() + + def addTrajectory(self, num_seg=15, transcription='gauss-lobatto', + transcription_order=3, optWing=False): + t = {'gauss-lobatto': dm.GaussLobatto( + num_segments=num_seg, order=transcription_order), + 'radau-ps': dm.Radau(num_segments=num_seg, order=transcription_order)} + + traj = dm.Trajectory() + phase = dm.Phase(ode_class=MinTimeClimbODE, transcription=t[transcription]) + traj.add_phase('phase0', phase) + + height = self.target_height + time_name = 'time' + add_rate = False + phase.set_time_options(fix_initial=True, duration_bounds=(50, 600), + duration_ref=100.0, name=time_name) + + phase.add_state('r', fix_initial=True, lower=0, upper=1.0E6, + ref=1.0E3, defect_ref=1.0E3, units='m', + rate_source='flight_dynamics.r_dot') + + phase.add_state('h', fix_initial=True, lower=0, upper=height, + ref=height, defect_ref=height, units='m', + rate_source='flight_dynamics.h_dot', targets=['h']) + + phase.add_state('v', fix_initial=True, lower=10.0, + ref=1.0E2, defect_ref=1.0E2, units='m/s', + rate_source='flight_dynamics.v_dot', targets=['v']) + + phase.add_state('gam', fix_initial=True, lower=-1.5, upper=1.5, + ref=1.0, defect_ref=1.0, units='rad', + rate_source='flight_dynamics.gam_dot', targets=['gam']) + + phase.add_state('m', fix_initial=True, lower=10.0, upper=1.0E5, + ref=10_000, defect_ref=10_000, units='kg', + rate_source='prop.m_dot', targets=['m']) + + phase.add_control('alpha', units='deg', lower=-8.0, upper=8.0, scaler=1.0, + rate_continuity=True, rate_continuity_scaler=100.0, + rate2_continuity=False, targets=['alpha']) + + phase.add_parameter('S', val=self.modelinfo['S'], units='m**2', + opt=optWing, targets=['S']) + phase.add_parameter('Isp', val=1600.0, units='s', opt=False, targets=['Isp']) + phase.add_parameter('throttle', val=1.0, opt=False, targets=['throttle']) + + phase.add_boundary_constraint( + 'h', loc='final', equals=height) # , scaler=1.0E-3) + phase.add_boundary_constraint( + 'aero.mach', loc='final', equals=self.modelinfo['mach_final']) + phase.add_boundary_constraint('gam', loc='final', equals=0.0) + + phase.add_path_constraint(name='h', lower=100.0, upper=height, ref=height) + phase.add_path_constraint(name='aero.mach', lower=0.1, upper=1.8) + # phase.add_path_constraint(name='gam', lower=-23, upper=23, units='deg') + + # Unnecessary but included to test capability + phase.add_path_constraint(name='alpha', lower=-8, upper=8) + phase.add_path_constraint(name=f'{time_name}', lower=0, upper=600) + phase.add_path_constraint(name=f'{time_name}_phase', lower=0, upper=600) + + # test mixing wildcard ODE variable expansion and unit overrides + phase.add_timeseries_output(['aero.*', 'prop.thrust', 'prop.m_dot'], + units={'aero.f_lift': 'lbf', 'prop.thrust': 'lbf'}) + + # test adding rate as timeseries output + if add_rate: + phase.add_timeseries_rate_output('aero.mach') + + self.phase = phase + self.model.add_subsystem('traj', traj, promotes=['*']) + + def setInitialConditions(self, super_prob=None, prefix=""): + ref = self + if super_prob is not None and prefix != "": + ref = super_prob + phase = self.phase + ref.set_val(prefix+'traj.phase0.t_initial', 0.0) + ref.set_val(prefix+'traj.phase0.t_duration', 350.0) + + ref.set_val(prefix+'traj.phase0.states:r', phase.interp('r', [0.0, 100e3])) + ref.set_val(prefix+'traj.phase0.states:h', phase.interp( + 'h', [self.modelinfo['h_initial'], self.target_height])) + ref.set_val(prefix+'traj.phase0.states:v', + phase.interp('v', [self.modelinfo['v_initial'], 280])) + ref.set_val(prefix+'traj.phase0.states:gam', phase.interp('gam', [0.0, 0.0])) + ref.set_val(prefix+'traj.phase0.states:m', + phase.interp('m', [self.modelinfo['m_initial'], 16e3])) + ref.set_val(prefix+'traj.phase0.controls:alpha', + phase.interp('alpha', [0.0, 0.0])) + + def addObjective(self): + # Minimize time at the end of the phase + self.phase.add_objective('time', loc='final', ref=1.0) def checkDeviation(filenum=0): @@ -130,7 +148,13 @@ def checkDeviation(filenum=0): prefix = 'traj.phase0.timeseries.' for height in heights: - p = min_time_climb(height=height) + p = MinTimeClimbProblem(target_height=height) + p.addTrajectory() + p.addObjective() + p.setOptimizer(driver='pyoptsparse') + p.setup() + p.setInitialConditions() + dm.run_problem(p, simulate=True) sol = om.CaseReader('dymos_solution.db').get_case('final') sim = om.CaseReader('dymos_simulation.db').get_case('final') times_to_climb.append(p.get_val('traj.phase0.timeseries.time', @@ -156,7 +180,7 @@ def checkDeviation(filenum=0): f" {np.std(timeseries_pts[key]):.2f}") -def multiHeightTest(): +def multiHeightTest(printResults=True): heights = [6e3, 18e3] times = [] areas = [] @@ -167,23 +191,32 @@ def multiHeightTest(): simfile = f'single_simulation_{j}.db' outfiles['sim'].append(simfile) outfiles['sol'].append(solfile) - p = min_time_climb( - height=height, simfile=simfile, - solfile=solfile) + p = MinTimeClimbProblem(target_height=height) + p.addTrajectory(optWing=True) + p.addObjective() + p.setOptimizer(driver='pyoptsparse') + p.setup() + p.setInitialConditions() + dm.run_problem( + p, simulate=True, solution_record_file=solfile, + simulation_record_file=simfile) areas.append(p.get_val('phase0.parameters:S', units='m**2')[0]) times.append(p.get_val('phase0.timeseries.time', units='s')[-1][0]) - print("\n\n=======================================") - # print(p.get_val('phase.flight_dynamics.gam_dot')) - for time, area, height in zip(times, areas, heights): - print(f"Time to climb {height/1e3} km: " + - f"{time:.2f}" + - f" s with wing area: {area} sqm") + if printResults: + print("\n\n=======================================") + for time, area, height in zip(times, areas, heights): + print(f"Time to climb {height/1e3} km: " + + f"{time:.2f}" + + f" s with wing area: {area} sqm") + make_min_time_climb_plot( solfile=outfiles['sol'], simfile=outfiles['sim'], omitpromote='traj') + return outfiles + if __name__ == '__main__': if 'filenum' in sys.argv: diff --git a/min_time_climb_models/multi_min_time_to_climb.py b/min_time_climb_models/multi_min_time_to_climb.py index b378526ef..7fecae749 100644 --- a/min_time_climb_models/multi_min_time_to_climb.py +++ b/min_time_climb_models/multi_min_time_to_climb.py @@ -1,181 +1,80 @@ import openmdao.api as om import dymos as dm -from dymos.examples.min_time_climb.min_time_climb_ode import MinTimeClimbODE from plot_helper import make_min_time_climb_plot +from min_time_climb import MinTimeClimbProblem import matplotlib.pyplot as plt -import numpy as np import sys -class MinTimeClimbProblem(om.Problem): - def __init__(self, target_height=20e3, initial_mass=20e3): +class MultiMinTime(om.Problem): + def __init__( + self, heights, weights, optWing=False, modelinfo={}): super().__init__() - self.model = om.Group() - self.target_height = target_height - self.initial_mass = initial_mass - - def setOptimizer(self, driver='scipy', optimizer='SLSQP'): - self.driver = om.pyOptSparseDriver() if driver == "pyoptsparse" else om.ScipyOptimizeDriver() - self.driver.options['optimizer'] = optimizer + if len(weights) > len(heights): + raise Exception("Can't have more weights than heights!") + elif len(weights) < len(heights): + weights = [1]*len(heights) + + self.weights = weights + self.num_missions = len(heights) + self.probs = [] + + for i, height in enumerate(heights): + prob = MinTimeClimbProblem( + target_height=height, modelinfo=modelinfo) + prob.addTrajectory(optWing=optWing) + self.model.add_subsystem( + f"group_{i}", prob.model, promotes=[('phase0.parameters:S', 'S')]) + self.probs.append(prob) + if optWing: + self.model.add_design_var('S', lower=1, upper=100, units='m**2') + + def addCompoundObj(self): + num_missions = self.num_missions + weights = self.weights + times = [f"time_{i}" for i in range(num_missions)] + weighted_sum_str = "+".join([f"{time}*{weight}" for time, + weight in zip(times, weights)]) + self.model.add_subsystem('compoundComp', om.ExecComp( + "compound_time=" + weighted_sum_str), + promotes=['compound_time', *times]) + + for i in range(num_missions): + self.model.connect( + f"group_{i}.phase0.t", times[i], + src_indices=-1) + self.model.add_objective('compound_time') + + def addDriver(self, driver='pyoptsparse', optimizer='SLSQP'): + self.driver = om.pyOptSparseDriver() \ + if driver == 'pyoptsparse' else \ + om.ScipyOptimizeDriver() + self.driver.options['optimizer'] = optimizer # 'IPOPT' self.driver.declare_coloring() - if optimizer == 'SNOPT': - self.driver.opt_settings['Major iterations limit'] = 1000 - self.driver.opt_settings['iSumm'] = 6 - self.driver.opt_settings['Major feasibility tolerance'] = 1.0E-6 - self.driver.opt_settings['Major optimality tolerance'] = 1.0E-6 - self.driver.opt_settings['Function precision'] = 1.0E-12 - self.driver.opt_settings['Linesearch tolerance'] = 0.1 - self.driver.opt_settings['Major step limit'] = 0.5 - elif optimizer == 'IPOPT': - self.driver.opt_settings['tol'] = 1.0E-5 - self.driver.opt_settings['print_level'] = 0 - self.driver.opt_settings['mu_strategy'] = 'monotone' - self.driver.opt_settings['bound_mult_init_method'] = 'mu-based' - self.driver.opt_settings['mu_init'] = 0.01 - self.model.linear_solver = om.DirectSolver() - def addTrajectory(self, num_seg=15, transcription='gauss-lobatto', - transcription_order=3): - t = {'gauss-lobatto': dm.GaussLobatto( - num_segments=num_seg, order=transcription_order), - 'radau-ps': dm.Radau(num_segments=num_seg, order=transcription_order)} - - traj = dm.Trajectory() - phase = dm.Phase(ode_class=MinTimeClimbODE, transcription=t[transcription]) - traj.add_phase('phase0', phase) - - height = self.target_height - time_name = 'time' - add_rate = False - phase.set_time_options(fix_initial=True, duration_bounds=(50, 600), - duration_ref=100.0, name=time_name) - - phase.add_state('r', fix_initial=True, lower=0, upper=1.0E6, - ref=1.0E3, defect_ref=1.0E3, units='m', - rate_source='flight_dynamics.r_dot') - - phase.add_state('h', fix_initial=True, lower=0, upper=height, - ref=height, defect_ref=height, units='m', - rate_source='flight_dynamics.h_dot', targets=['h']) - - phase.add_state('v', fix_initial=True, lower=10.0, - ref=1.0E2, defect_ref=1.0E2, units='m/s', - rate_source='flight_dynamics.v_dot', targets=['v']) - - phase.add_state('gam', fix_initial=True, lower=-1.5, upper=1.5, - ref=1.0, defect_ref=1.0, units='rad', - rate_source='flight_dynamics.gam_dot', targets=['gam']) - - phase.add_state('m', fix_initial=True, lower=10.0, upper=1.0E5, - ref=10_000, defect_ref=10_000, units='kg', - rate_source='prop.m_dot', targets=['m']) - - phase.add_control('alpha', units='deg', lower=-8.0, upper=8.0, scaler=1.0, - rate_continuity=True, rate_continuity_scaler=100.0, - rate2_continuity=False, targets=['alpha']) - - phase.add_parameter('S', val=49.2386, units='m**2', opt=True, targets=['S']) - phase.add_parameter('Isp', val=1600.0, units='s', opt=False, targets=['Isp']) - phase.add_parameter('throttle', val=1.0, opt=False, targets=['throttle']) - - phase.add_boundary_constraint( - 'h', loc='final', equals=height) # , scaler=1.0E-3) - phase.add_boundary_constraint('aero.mach', loc='final', equals=1.0) - phase.add_boundary_constraint('gam', loc='final', equals=0.0) - - phase.add_path_constraint(name='h', lower=100.0, upper=height, ref=height) - phase.add_path_constraint(name='aero.mach', lower=0.1, upper=1.8) - # phase.add_path_constraint(name='gam', lower=-23, upper=23, units='deg') - - # Unnecessary but included to test capability - phase.add_path_constraint(name='alpha', lower=-8, upper=8) - phase.add_path_constraint(name=f'{time_name}', lower=0, upper=400) - phase.add_path_constraint(name=f'{time_name}_phase', lower=0, upper=400) - - # Minimize time at the end of the phase - # phase.add_objective(time_name, loc='final', ref=1.0) - - # test mixing wildcard ODE variable expansion and unit overrides - phase.add_timeseries_output(['aero.*', 'prop.thrust', 'prop.m_dot'], - units={'aero.f_lift': 'lbf', 'prop.thrust': 'lbf'}) - - # test adding rate as timeseries output - if add_rate: - phase.add_timeseries_rate_output('aero.mach') - - self.phase = phase - self.model.add_subsystem('traj', traj, promotes=['*']) - - def setInitialConditions(self, super_prob=None, prefix=""): - ref = self - if super_prob is not None and prefix != "": - ref = super_prob - phase = self.phase - ref.set_val(prefix+'traj.phase0.t_initial', 0.0) - ref.set_val(prefix+'traj.phase0.t_duration', 350.0) - - ref.set_val(prefix+'traj.phase0.states:r', phase.interp('r', [0.0, 100e3])) - ref.set_val(prefix+'traj.phase0.states:h', phase.interp( - 'h', [100.0, self.target_height])) - ref.set_val(prefix+'traj.phase0.states:v', phase.interp('v', [135.964, 283.159])) - ref.set_val(prefix+'traj.phase0.states:gam', phase.interp('gam', [0.0, 0.0])) - ref.set_val(prefix+'traj.phase0.states:m', - phase.interp('m', [self.initial_mass, 16e3])) - ref.set_val(prefix+'traj.phase0.controls:alpha', - phase.interp('alpha', [0.0, 0.0])) + def setICs(self): + for i, prob in enumerate(self.probs): + prob.setInitialConditions(self, f"group_{i}.") -if __name__ == '__main__': +def multiExample(): makeN2 = True if "n2" in sys.argv else False - heights = [6e3, 18e3] - weights = [1, 1] - num_missions = len(heights) - - super_prob = om.Problem() - probs = [] - for i, height in enumerate(heights): - prob = MinTimeClimbProblem(height, 30e3) - prob.addTrajectory() - super_prob.model.add_subsystem( - f"group_{i}", prob.model, promotes=[('phase0.parameters:S', 'S')]) - probs.append(prob) - - super_prob.model.add_design_var('S', lower=1, upper=100, units='m**2') - - times = [f"time_{i}" for i in range(num_missions)] - weighted_sum_str = "+".join([f"{time}*{weight}" for time, - weight in zip(times, weights)]) - super_prob.model.add_subsystem('compoundComp', om.ExecComp( - "compound_time=" + weighted_sum_str), - promotes=['compound_time', *times]) - - for i in range(num_missions): - super_prob.model.connect( - f"group_{i}.phase0.t", times[i], - src_indices=-1) - super_prob.model.add_objective('compound_time') - - # super_prob.driver = om.ScipyOptimizeDriver() - super_prob.driver = om.pyOptSparseDriver() - super_prob.driver.options['optimizer'] = 'SLSQP' # 'IPOPT' - super_prob.driver.declare_coloring() - super_prob.model.linear_solver = om.DirectSolver() - + super_prob = MultiMinTime(heights=[6e3, 18e3], weights=[1, 1], + optWing=True, modelinfo={'m_initial': 20e3}) + super_prob.addCompoundObj() + super_prob.addDriver() super_prob.setup() + super_prob.setICs() if makeN2: sys.path.append('../') from createN2 import createN2 createN2(__file__, super_prob) - - for i, prob in enumerate(probs): - prob.setInitialConditions(super_prob, f"group_{i}.") - dm.run_problem(super_prob, simulate=True) wing_area = super_prob.get_val('S', units='m**2')[0] print("\n\n=====================================") - for i in range(num_missions): + for i in range(super_prob.num_missions): timetoclimb = super_prob.get_val(f'group_{i}.phase0.t', units='s')[-1] print(f"TtoC: {timetoclimb}, S: {wing_area}") @@ -183,3 +82,53 @@ def setInitialConditions(self, super_prob=None, prefix=""): solfile='dymos_solution.db', simfile=['dymos_simulation.db', 'dymos_simulation_1.db'], solprefix='group', omitpromote='traj') + + +def comparison(): + heights = [10e3, 15e3] + weights = [1, 1] + optimize_wing = True + m_0 = 23e3 + modelinfo = {'m_initial': m_0, 'S': 49.24, 'v_initial': 104, 'h_initial': 100, + 'mach_final': 1.0} + + solfiles, simfiles = [], [] + for i, height in enumerate(heights): + p = MinTimeClimbProblem(target_height=height, modelinfo=modelinfo) + p.addTrajectory(optWing=optimize_wing) + p.addObjective() + p.setOptimizer(driver='pyoptsparse') + p.setup() + p.setInitialConditions() + solfile, simfile = f'Sol_Comp_{i}.db', f'Sim_Comp_{i}.db' + solfiles.append(solfile) + simfiles.append(simfile) + dm.run_problem( + p, simulate=True, solution_record_file=solfile, + simulation_record_file=simfile) + + super_prob = MultiMinTime(heights=heights, weights=weights, + optWing=optimize_wing, modelinfo=modelinfo) + super_prob.addCompoundObj() + super_prob.addDriver() + super_prob.setup() + super_prob.setICs() + dm.run_problem(super_prob, simulate=True) + + fig1, fig2 = plt.figure(1), plt.figure(2) + make_min_time_climb_plot( + solfile=solfiles, simfile=simfiles, omitpromote='traj', show=False, fig=fig1, + extratitle=f"{m_0} kg") + make_min_time_climb_plot( + solfile='dymos_solution.db', + simfile=['dymos_simulation.db', 'dymos_simulation_1.db'], + solprefix='group', omitpromote='traj', show=False, fig=fig2, + extratitle=f"{m_0} kg") + plt.show() + + +if __name__ == '__main__': + if "comparison" in sys.argv: + comparison() + else: + multiExample() diff --git a/min_time_climb_models/plot_helper.py b/min_time_climb_models/plot_helper.py index cb3d3db68..695991d0f 100644 --- a/min_time_climb_models/plot_helper.py +++ b/min_time_climb_models/plot_helper.py @@ -4,7 +4,7 @@ def make_min_time_climb_plot( solfile='dymos_solution.db', simfile='dymos_simulation.db', solprefix='', - omitpromote=None): + omitpromote=None, show=True, fig=None, extratitle=''): singleprob, multiprob, multitraj = True, False, False if isinstance(solfile, list) and isinstance(simfile, list): @@ -38,6 +38,7 @@ def make_min_time_climb_plot( ('s', 'deg')] numplots = len(plotvars) + axes = [None]*numplots tsprefix = 'traj.phase0.timeseries.' sols = [CaseReader(file).get_case('final') for file in solfile] @@ -47,9 +48,17 @@ def make_min_time_climb_plot( areas = [] heights = [None]*len(simfile) + if fig is None: + fig = plt.figure() for i, (solf, simf) in enumerate(zip(sols, sims)): for j, ((xvar, yvar), (xunit, yunit)) in enumerate(zip(plotvars, plotunits)): - plt.subplot(2, int(numplots/2), j+1) + if axes[j] is None: + ax = fig.add_subplot(2, int(numplots/2), j+1, + xlabel=f"{xvar} ({xunit})", + ylabel=f"{yvar} ({yunit})") + axes[j] = ax + else: + ax = axes[j] xname, yname = addPrefix(tsprefix, (xvar, yvar)) xsim = simf.get_val(xname, units=xunit) ysim = simf.get_val(yname, units=yunit) @@ -61,22 +70,21 @@ def make_min_time_climb_plot( xsol = solf.get_val(xname, units=xunit) ysol = solf.get_val(yname, units=yunit) if yvar == "h" and not heights[i]: - heights[i] = ysol[-1][0] - plt.plot(xsol, ysol, f"{colors[i]}o", fillstyle='none') - plt.plot(xsim, ysim, colors[i]) - plt.xlabel(f"{xvar} ({xunit})") - plt.ylabel(f"{yvar} ({yunit})") - plt.grid(visible=True) + heights[i] = round(ysol[-1][0]) + ax.plot(xsol, ysol, f"{colors[i]}o", fillstyle='none') + ax.plot(xsim, ysim, colors[i]) + ax.grid(visible=True) legend.append(f"{heights[i]} {plotunits[0][1]} solution") legend.append(f"{heights[i]} {plotunits[0][1]} simulation") try: areas.append(round(solf.get_val('S')[0], 2)) except KeyError: areas.append(round(solf.get_val('phase0.parameters:S')[0], 2)) - plt.figlegend(legend, ncols=len(simfile)) - plt.suptitle(f"Min Time to Climb, wing areas: {areas}") - plt.tight_layout(pad=1) - plt.show() + fig.legend(legend, ncols=len(simfile), loc='lower center') + fig.suptitle(f"Min Time to Climb, wing areas: {areas}, {extratitle}") + fig.tight_layout(pad=1) + if show: + plt.show() def addPrefix(prefix, iterable): diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index e0a0cb23f..c7bc8daf3 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -67,10 +67,10 @@ def add_design_variables(self): self.model.add_design_var('mission:design:gross_mass', lower=10., upper=900e3) def add_driver(self): - self.driver = om.ScipyOptimizeDriver() - self.driver.options['optimizer'] = 'SLSQP' - # self.driver.declare_coloring() - self.model.linear_solver = om.DirectSolver() + self.driver = om.pyOptSparseDriver() + self.driver.options['optimizer'] = 'IPOPT' + self.driver.declare_coloring() + # self.model.linear_solver = om.DirectSolver() def add_objective(self): weights = self.weights @@ -105,9 +105,10 @@ def setup_wrapper(self): self.setup(check='all') def run(self): - self.run_model() - self.check_totals(method='fd') - # dm.run_problem(self) + # self.run_model() + # self.check_totals(method='fd', compact_print=True) + self.model.set_solver_print(0) + dm.run_problem(self, make_plots=True) if __name__ == '__main__': From cff9d90f588a4a92e4f184cab5e88f8addc25fbe Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Fri, 2 Aug 2024 14:58:19 -0400 Subject: [PATCH 027/113] added weight comparison to min time to climb example --- .../multi_min_time_to_climb.py | 41 ++++++++++++++++++- min_time_climb_models/plot_helper.py | 12 +++--- multi_aviary_copymodel.py | 6 +-- 3 files changed, 50 insertions(+), 9 deletions(-) diff --git a/min_time_climb_models/multi_min_time_to_climb.py b/min_time_climb_models/multi_min_time_to_climb.py index 7fecae749..bb6431f67 100644 --- a/min_time_climb_models/multi_min_time_to_climb.py +++ b/min_time_climb_models/multi_min_time_to_climb.py @@ -31,7 +31,7 @@ def __init__( def addCompoundObj(self): num_missions = self.num_missions - weights = self.weights + weights = [float(weight/sum(self.weights)) for weight in self.weights] times = [f"time_{i}" for i in range(num_missions)] weighted_sum_str = "+".join([f"{time}*{weight}" for time, weight in zip(times, weights)]) @@ -59,6 +59,7 @@ def setICs(self): def multiExample(): + """Example of multi mission min time to climb problem.""" makeN2 = True if "n2" in sys.argv else False super_prob = MultiMinTime(heights=[6e3, 18e3], weights=[1, 1], optWing=True, modelinfo={'m_initial': 20e3}) @@ -84,7 +85,43 @@ def multiExample(): solprefix='group', omitpromote='traj') +def weightCompare(): + """Runs the multi mission min time to climb problem for different weights. Shows + impact of changing weights on 1 figure.""" + heights = [10e3, 15e3] + weights_to_test = [[1, 3], [3, 1]] + modelinfo = {'m_initial': 18e3, 'S': 49.24, 'v_initial': 104, 'h_initial': 100, + 'mach_final': 1.0} + solfiles, simfiles = [], [] + for i, weights in enumerate(weights_to_test): + super_prob = MultiMinTime(heights=heights, weights=weights, + optWing=True, modelinfo=modelinfo) + super_prob.addCompoundObj() + super_prob.addDriver(driver='scipy') + super_prob.setup() + super_prob.setICs() + solfiles.append(f'weightsSol_{i}.db') + simfiles.append(f'weightsSim_{i}.db') + dm.run_problem(super_prob, simulate=True, + solution_record_file=solfiles[-1], + simulation_record_file=simfiles[-1]) + + fig = plt.figure() + colores = [['r', 'b'], ['g', 'm']] + for i, (solfile, simfile, colors) in enumerate(zip(solfiles, simfiles, colores)): + make_min_time_climb_plot( + solfile=solfile, + simfile=[simfile, simfile.replace(".db", "_1.db")], + solprefix='group', omitpromote='traj', show=False, fig=fig, + extratitle=", ".join([str(w) for w in weights_to_test[i]]), + colors=colors) + + plt.show() + + def comparison(): + """Runs min time to climb problem for 2 heights individually, as well as with the + multi mission approach. Creates 2 figures showing the differences between the 2.""" heights = [10e3, 15e3] weights = [1, 1] optimize_wing = True @@ -130,5 +167,7 @@ def comparison(): if __name__ == '__main__': if "comparison" in sys.argv: comparison() + elif "weights" in sys.argv: + weightCompare() else: multiExample() diff --git a/min_time_climb_models/plot_helper.py b/min_time_climb_models/plot_helper.py index 695991d0f..e8acc460e 100644 --- a/min_time_climb_models/plot_helper.py +++ b/min_time_climb_models/plot_helper.py @@ -4,7 +4,7 @@ def make_min_time_climb_plot( solfile='dymos_solution.db', simfile='dymos_simulation.db', solprefix='', - omitpromote=None, show=True, fig=None, extratitle=''): + omitpromote=None, show=True, fig=None, extratitle='', colors=['r', 'b', 'g', 'm']): singleprob, multiprob, multitraj = True, False, False if isinstance(solfile, list) and isinstance(simfile, list): @@ -23,6 +23,8 @@ def make_min_time_climb_plot( if singleprob: solfile, simfile = [solfile], [simfile] + if fig is None: + fig = plt.figure() plotvars = [('r', 'h'), ('time', 'h'), ('time', 'v'), @@ -38,18 +40,18 @@ def make_min_time_climb_plot( ('s', 'deg')] numplots = len(plotvars) - axes = [None]*numplots + axes = fig.axes + if len(axes) == 0: + axes = [None]*len(plotvars) tsprefix = 'traj.phase0.timeseries.' sols = [CaseReader(file).get_case('final') for file in solfile] sims = [CaseReader(file).get_case('final') for file in simfile] - colors = ['r', 'b', 'g', 'm'] + legend = [] areas = [] heights = [None]*len(simfile) - if fig is None: - fig = plt.figure() for i, (solf, simf) in enumerate(zip(sols, sims)): for j, ((xvar, yvar), (xunit, yunit)) in enumerate(zip(plotvars, plotunits)): if axes[j] is None: diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index c7bc8daf3..b9f58b812 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -68,12 +68,12 @@ def add_design_variables(self): def add_driver(self): self.driver = om.pyOptSparseDriver() - self.driver.options['optimizer'] = 'IPOPT' + self.driver.options['optimizer'] = 'SLSQP' self.driver.declare_coloring() # self.model.linear_solver = om.DirectSolver() def add_objective(self): - weights = self.weights + weights = [float(weight/sum(self.weights)) for weight in self.weights] fuel_burned_vars = [f"fuel_{i}" for i in range(self.num_missions)] weighted_str = "+".join([f"{fuel}*{weight}" for fuel, weight in zip(fuel_burned_vars, weights)]) @@ -87,7 +87,7 @@ def add_objective(self): # connecting each subcomponent's fuel burn to super problem's unique fuel variables self.model.connect( self.group_prefix+f"_{i}.mission:summary:fuel_burned", f"fuel_{i}") - self.model.add_objective('compound') + self.model.add_objective('compound', scaler=1.) def setup_wrapper(self): """Wrapper for om.Problem setup with warning ignoring and setting options""" From 6cb7800848e4db1817e58fb4c2f2af2d0239f544 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Mon, 5 Aug 2024 15:26:33 -0400 Subject: [PATCH 028/113] easier phase infos --- easy_phase_info_inter.py | 83 +++++++++++++++++++ easy_phase_info_max.py | 83 +++++++++++++++++++ .../multi_min_time_to_climb.py | 4 +- multi_aviary_copymodel.py | 31 ++++--- 4 files changed, 187 insertions(+), 14 deletions(-) create mode 100644 easy_phase_info_inter.py create mode 100644 easy_phase_info_max.py diff --git a/easy_phase_info_inter.py b/easy_phase_info_inter.py new file mode 100644 index 000000000..6589101a8 --- /dev/null +++ b/easy_phase_info_inter.py @@ -0,0 +1,83 @@ +phase_info = { + "pre_mission": {"include_takeoff": False, "optimize_mass": True}, + "climb_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.3, "unitless"), + "final_mach": (0.7, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.72), "unitless"), + "initial_altitude": (0.0, "ft"), + "final_altitude": (24500.0, "ft"), + "altitude_bounds": ((0.0, 25000.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": True, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((0.0, 0.0), "min"), + "duration_bounds": ((35.0, 105.0), "min"), + }, + "initial_guesses": {"time": ([0.0, 70.0], "min")}, + }, + "climb_2": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.7, "unitless"), + "final_mach": (0.7, "unitless"), + "mach_bounds": ((0.6799999999999999, 0.72), "unitless"), + "initial_altitude": (24500.0, "ft"), + "final_altitude": (25000.0, "ft"), + "altitude_bounds": ((24000.0, 25500.0), "ft"), + "throttle_enforcement": "boundary_constraint", + "fix_initial": False, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((35.0, 105.0), "min"), + "duration_bounds": ((245.0, 735.0), "min"), + }, + "initial_guesses": {"time": ([70.0, 490.0], "min")}, + }, + "descent_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.7, "unitless"), + "final_mach": (0.3, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.72), "unitless"), + "initial_altitude": (25000.0, "ft"), + "final_altitude": (0.0, "ft"), + "altitude_bounds": ((0.0, 25500.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": False, + "constrain_final": True, + "fix_duration": False, + "initial_bounds": ((280.0, 840.0), "min"), + "duration_bounds": ((15.0, 45.0), "min"), + }, + "initial_guesses": {"time": ([560.0, 30.0], "min")}, + }, + "post_mission": { + "include_landing": False, + "constrain_range": True, + "target_range": (4367.14, "nmi"), + }, +} diff --git a/easy_phase_info_max.py b/easy_phase_info_max.py new file mode 100644 index 000000000..1f7df7f8e --- /dev/null +++ b/easy_phase_info_max.py @@ -0,0 +1,83 @@ +phase_info = { + "pre_mission": {"include_takeoff": False, "optimize_mass": True}, + "climb_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.3, "unitless"), + "final_mach": (0.7, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.72), "unitless"), + "initial_altitude": (0.0, "ft"), + "final_altitude": (24500.0, "ft"), + "altitude_bounds": ((0.0, 25000.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": True, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((0.0, 0.0), "min"), + "duration_bounds": ((35.0, 105.0), "min"), + }, + "initial_guesses": {"time": ([0.0, 70.0], "min")}, + }, + "climb_2": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.7, "unitless"), + "final_mach": (0.7, "unitless"), + "mach_bounds": ((0.6799999999999999, 0.72), "unitless"), + "initial_altitude": (24500.0, "ft"), + "final_altitude": (25000.0, "ft"), + "altitude_bounds": ((24000.0, 25500.0), "ft"), + "throttle_enforcement": "boundary_constraint", + "fix_initial": False, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((35.0, 105.0), "min"), + "duration_bounds": ((95.0, 285.0), "min"), + }, + "initial_guesses": {"time": ([70.0, 190.0], "min")}, + }, + "descent_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.7, "unitless"), + "final_mach": (0.3, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.72), "unitless"), + "initial_altitude": (25000.0, "ft"), + "final_altitude": (0.0, "ft"), + "altitude_bounds": ((0.0, 25500.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": False, + "constrain_final": True, + "fix_duration": False, + "initial_bounds": ((130.0, 390.0), "min"), + "duration_bounds": ((10.0, 30.0), "min"), + }, + "initial_guesses": {"time": ([260.0, 20.0], "min")}, + }, + "post_mission": { + "include_landing": False, + "constrain_range": True, + "target_range": (1977.99, "nmi"), + }, +} diff --git a/min_time_climb_models/multi_min_time_to_climb.py b/min_time_climb_models/multi_min_time_to_climb.py index bb6431f67..99b467850 100644 --- a/min_time_climb_models/multi_min_time_to_climb.py +++ b/min_time_climb_models/multi_min_time_to_climb.py @@ -61,8 +61,8 @@ def setICs(self): def multiExample(): """Example of multi mission min time to climb problem.""" makeN2 = True if "n2" in sys.argv else False - super_prob = MultiMinTime(heights=[6e3, 18e3], weights=[1, 1], - optWing=True, modelinfo={'m_initial': 20e3}) + super_prob = MultiMinTime(heights=[10e3, 15e3], weights=[1, 1], + optWing=True, modelinfo={'m_initial': 23e3}) super_prob.addCompoundObj() super_prob.addDriver() super_prob.setup() diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index b9f58b812..4ba8cd5c3 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -11,18 +11,11 @@ import openmdao.api as om import dymos as dm import numpy as np -from aviary.variable_info.enums import ProblemType, AnalysisScheme from c5_models.c5_ferry_phase_info import phase_info as c5_ferry_phase_info from c5_models.c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info from c5_models.c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info -from aviary.variable_info.variable_meta_data import _MetaData as MetaData -from aviary.variable_info.variables import Mission, Dynamic -from aviary.interface.methods_for_level2 import wrapped_convert_units -from aviary.variable_info.enums import EquationsOfMotion - -TWO_DEGREES_OF_FREEDOM = EquationsOfMotion.TWO_DEGREES_OF_FREEDOM -HEIGHT_ENERGY = EquationsOfMotion.HEIGHT_ENERGY -SOLVED_2DOF = EquationsOfMotion.SOLVED_2DOF +from easy_phase_info_inter import phase_info as easy_inter +from easy_phase_info_max import phase_info as easy_max # "comp?.a can be used to reference multiple comp1.a comp2.a etc" @@ -67,10 +60,23 @@ def add_design_variables(self): self.model.add_design_var('mission:design:gross_mass', lower=10., upper=900e3) def add_driver(self): + # pyoptsparse SLSQP errors out w pos directional derivative line search (obj scaler = 1) and + # inequality constraints incompatible (obj scaler = -1) - fuel burn obj + # pyoptsparse IPOPT keeps iterating (seen upto 1000+ iters) in the IPOPT.out file but no result + # scipy SLSQP reaches iter limit and fails optimization self.driver = om.pyOptSparseDriver() self.driver.options['optimizer'] = 'SLSQP' - self.driver.declare_coloring() + # self.driver.options['maxiter'] = 1e3 + # self.driver.declare_coloring() # self.model.linear_solver = om.DirectSolver() + """scipy SLSQP results + Iteration limit reached (Exit mode 9) + Current function value: -43.71865402878029 + Iterations: 200 + Function evaluations: 1018 + Gradient evaluations: 200 + Optimization FAILED. + Iteration limit reached""" def add_objective(self): weights = [float(weight/sum(self.weights)) for weight in self.weights] @@ -87,7 +93,7 @@ def add_objective(self): # connecting each subcomponent's fuel burn to super problem's unique fuel variables self.model.connect( self.group_prefix+f"_{i}.mission:summary:fuel_burned", f"fuel_{i}") - self.model.add_objective('compound', scaler=1.) + self.model.add_objective('compound', scaler=-1.) def setup_wrapper(self): """Wrapper for om.Problem setup with warning ignoring and setting options""" @@ -114,7 +120,8 @@ def run(self): if __name__ == '__main__': makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False planes = ['c5_models/c5_maxpayload.csv', 'c5_models/c5_intermediate.csv'] - phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] + # phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] + phase_infos = [easy_max, easy_inter] weights = [1, 1] super_prob = MultiMissionProblem(planes, phase_infos, weights) super_prob.add_driver() From 63a69c9c6f34de452f1f08b264d703138b7cbbf9 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Tue, 6 Aug 2024 09:04:10 -0400 Subject: [PATCH 029/113] added simple single aviary runfile --- multi_aviary_copymodel.py | 202 +++++++++++++++++++++++++++++++++++++- test_single_aviary.py | 22 +++++ 2 files changed, 222 insertions(+), 2 deletions(-) create mode 100644 test_single_aviary.py diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 4ba8cd5c3..ead41f68e 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -93,7 +93,7 @@ def add_objective(self): # connecting each subcomponent's fuel burn to super problem's unique fuel variables self.model.connect( self.group_prefix+f"_{i}.mission:summary:fuel_burned", f"fuel_{i}") - self.model.add_objective('compound', scaler=-1.) + self.model.add_objective('compound', scaler=1.) def setup_wrapper(self): """Wrapper for om.Problem setup with warning ignoring and setting options""" @@ -114,7 +114,9 @@ def run(self): # self.run_model() # self.check_totals(method='fd', compact_print=True) self.model.set_solver_print(0) - dm.run_problem(self, make_plots=True) + + self.run_driver() + # dm.run_problem(self, make_plots=True) if __name__ == '__main__': @@ -137,6 +139,7 @@ def run(self): f"_{i}.aircraft:design:landing_to_takeoff_mass_ratio")) print(super_prob.get_val(super_prob.group_prefix + f"_{i}.mission:summary:range")) + # super_prob.final_setup() if makeN2: from createN2 import createN2 createN2(__file__, super_prob) @@ -455,3 +458,198 @@ def run(self): Cruise at M0.77 at 33k ft Max rate of climb: 2100 ft/min """ + + +""" +input disconnected error: +WARNING: The following inputs are not connected: + group_0.aircraft:air_conditioning:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.AC.aircraft:air_conditioning:mass_scaler) + group_0.aircraft:anti_icing:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.anti_icing.aircraft:anti_icing:mass_scaler) + group_0.aircraft:apu:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.apu.aircraft:apu:mass_scaler) + group_0.aircraft:avionics:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.avionics.aircraft:avionics:mass_scaler) + group_0.aircraft:canard:area (group_0.pre_mission.core_subsystems.core_geometry.canard.aircraft:canard:area) + group_0.aircraft:canard:area (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:canard:area) + group_0.aircraft:canard:area (group_0.pre_mission.core_subsystems.core_mass.canard.aircraft:canard:area) + group_0.aircraft:canard:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:canard:aspect_ratio) + group_0.aircraft:canard:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.canard.aircraft:canard:mass_scaler) + group_0.aircraft:canard:taper_ratio (group_0.pre_mission.core_subsystems.core_mass.canard.aircraft:canard:taper_ratio) + group_0.aircraft:canard:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.canard.aircraft:canard:thickness_to_chord) + group_0.aircraft:canard:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:canard:thickness_to_chord) + group_0.aircraft:canard:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.canard.aircraft:canard:wetted_area_scaler) + group_0.aircraft:crew_and_payload:cargo_container_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.cargo_containers.aircraft:crew_and_payload:cargo_container_mass_scaler) + group_0.aircraft:crew_and_payload:cargo_mass (group_0.pre_mission.core_subsystems.core_mass.cargo_containers.aircraft:crew_and_payload:cargo_mass) + group_0.aircraft:crew_and_payload:cargo_mass (group_0.pre_mission.core_subsystems.core_mass.total_mass.zero_fuel_mass.aircraft:crew_and_payload:cargo_mass) + group_0.aircraft:crew_and_payload:flight_crew_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.flight_crew.aircraft:crew_and_payload:flight_crew_mass_scaler) + group_0.aircraft:crew_and_payload:misc_cargo (group_0.pre_mission.core_subsystems.core_mass.cargo.aircraft:crew_and_payload:misc_cargo) + group_0.aircraft:crew_and_payload:non_flight_crew_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.nonflight_crew.aircraft:crew_and_payload:non_flight_crew_mass_scaler) + group_0.aircraft:crew_and_payload:passenger_service_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.pass_service.aircraft:crew_and_payload:passenger_service_mass_scaler) + group_0.aircraft:crew_and_payload:wing_cargo (group_0.pre_mission.core_subsystems.core_mass.cargo.aircraft:crew_and_payload:wing_cargo) + group_0.aircraft:design:base_area (group_0.traj.param_comp.parameters:aircraft:design:base_area) + group_0.aircraft:design:empty_mass_margin_scaler (group_0.pre_mission.core_subsystems.core_mass.total_mass.empty_mass_margin.aircraft:design:empty_mass_margin_scaler) + group_0.aircraft:design:external_subsystems_mass (group_0.pre_mission.core_subsystems.core_mass.total_mass.system_equip_mass.aircraft:design:external_subsystems_mass) + group_0.aircraft:design:lift_dependent_drag_coeff_factor (group_0.traj.param_comp.parameters:aircraft:design:lift_dependent_drag_coeff_factor) + group_0.aircraft:design:reserve_fuel_additional (group_0.post_mission.reserve_fuel.reserve_fuel_additional) + group_0.aircraft:design:subsonic_drag_coeff_factor (group_0.traj.param_comp.parameters:aircraft:design:subsonic_drag_coeff_factor) + group_0.aircraft:design:supersonic_drag_coeff_factor (group_0.traj.param_comp.parameters:aircraft:design:supersonic_drag_coeff_factor) + group_0.aircraft:design:zero_lift_drag_coeff_factor (group_0.traj.param_comp.parameters:aircraft:design:zero_lift_drag_coeff_factor) + group_0.aircraft:electrical:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.electrical.aircraft:electrical:mass_scaler) + group_0.aircraft:engine:mass (group_0.pre_mission.core_subsystems.core_mass.wing_group.engine_pod_mass.aircraft:engine:mass) + group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_propulsion.CF6.aircraft:engine:scaled_sls_thrust) + group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_propulsion.propulsion_sum.aircraft:engine:scaled_sls_thrust) + group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_subsystems.core_mass.engine_mass.aircraft:engine:scaled_sls_thrust) + group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_subsystems.core_mass.nacelle.aircraft:engine:scaled_sls_thrust) + group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_subsystems.core_mass.thrust_rev.aircraft:engine:scaled_sls_thrust) + group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_subsystems.core_mass.wing_group.engine_pod_mass.aircraft:engine:scaled_sls_thrust) + group_0.aircraft:engine:thrust_reversers_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.thrust_rev.aircraft:engine:thrust_reversers_mass_scaler) + group_0.aircraft:engine:wing_locations (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:engine:wing_locations) + group_0.aircraft:engine:wing_locations (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:engine:wing_locations) + group_0.aircraft:fins:area (group_0.pre_mission.core_subsystems.core_mass.fin.aircraft:fins:area) + group_0.aircraft:fins:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.fin.aircraft:fins:mass_scaler) + group_0.aircraft:fins:taper_ratio (group_0.pre_mission.core_subsystems.core_mass.fin.aircraft:fins:taper_ratio) + group_0.aircraft:fuel:auxiliary_fuel_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.total_fuel_capacity.aircraft:fuel:auxiliary_fuel_capacity) + group_0.aircraft:fuel:capacity_factor (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:capacity_factor) + group_0.aircraft:fuel:density_ratio (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:density_ratio) + group_0.aircraft:fuel:density_ratio (group_0.pre_mission.core_subsystems.core_mass.unusable_fuel.aircraft:fuel:density_ratio) + group_0.aircraft:fuel:fuel_margin (group_0.post_mission.fuel_calc.fuel_margin) + group_0.aircraft:fuel:fuel_system_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.fuel_system.aircraft:fuel:fuel_system_mass_scaler) + group_0.aircraft:fuel:fuselage_fuel_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.auxiliary_fuel_capacity.aircraft:fuel:fuselage_fuel_capacity) + group_0.aircraft:fuel:fuselage_fuel_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.total_fuel_capacity.aircraft:fuel:fuselage_fuel_capacity) + group_0.aircraft:fuel:total_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.auxiliary_fuel_capacity.aircraft:fuel:total_capacity) + group_0.aircraft:fuel:total_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.fuselage_fuel_capacity.aircraft:fuel:total_capacity) + group_0.aircraft:fuel:total_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_system.aircraft:fuel:total_capacity) + group_0.aircraft:fuel:total_capacity (group_0.pre_mission.core_subsystems.core_mass.unusable_fuel.aircraft:fuel:total_capacity) + group_0.aircraft:fuel:unusable_fuel_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.unusable_fuel.aircraft:fuel:unusable_fuel_mass_scaler) + group_0.aircraft:fuel:wing_ref_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:wing_ref_capacity) + group_0.aircraft:fuel:wing_ref_capacity_area (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:wing_ref_capacity_area) + group_0.aircraft:fuel:wing_ref_capacity_term_A (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:wing_ref_capacity_term_A) + group_0.aircraft:fuel:wing_ref_capacity_term_B (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:wing_ref_capacity_term_B) + group_0.aircraft:furnishings:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.furnishings.aircraft:furnishings:mass_scaler) + group_0.aircraft:fuselage:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:fuselage:laminar_flow_lower) + group_0.aircraft:fuselage:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:fuselage:laminar_flow_upper) + group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:fuselage:length) + group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:fuselage:length) + group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_geometry.fuselage_prelim.aircraft:fuselage:length) + group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_mass.electrical.aircraft:fuselage:length) + group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_mass.fuselage.aircraft:fuselage:length) + group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:fuselage:length) + group_0.aircraft:fuselage:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.fuselage.aircraft:fuselage:mass_scaler) + group_0.aircraft:fuselage:max_height (group_0.pre_mission.core_subsystems.core_geometry.fuselage_prelim.aircraft:fuselage:max_height) + group_0.aircraft:fuselage:max_height (group_0.pre_mission.core_subsystems.core_mass.AC.aircraft:fuselage:max_height) + group_0.aircraft:fuselage:max_height (group_0.pre_mission.core_subsystems.core_mass.furnishings.aircraft:fuselage:max_height) + group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_geometry.fuselage_prelim.aircraft:fuselage:max_width) + group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:fuselage:max_width) + group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_mass.anti_icing.aircraft:fuselage:max_width) + group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_mass.electrical.aircraft:fuselage:max_width) + group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_mass.furnishings.aircraft:fuselage:max_width) + group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:fuselage:max_width) + group_0.aircraft:fuselage:passenger_compartment_length (group_0.pre_mission.core_subsystems.core_mass.furnishings.aircraft:fuselage:passenger_compartment_length) + group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.AC.aircraft:fuselage:planform_area) + group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.apu.aircraft:fuselage:planform_area) + group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.avionics.aircraft:fuselage:planform_area) + group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.hydraulics.aircraft:fuselage:planform_area) + group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.instruments.aircraft:fuselage:planform_area) + group_0.aircraft:fuselage:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:fuselage:wetted_area_scaler) + group_0.aircraft:horizontal_tail:area (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:horizontal_tail:area) + group_0.aircraft:horizontal_tail:area (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:horizontal_tail:area) + group_0.aircraft:horizontal_tail:area (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:horizontal_tail:area) + group_0.aircraft:horizontal_tail:area (group_0.pre_mission.core_subsystems.core_mass.htail.aircraft:horizontal_tail:area) + group_0.aircraft:horizontal_tail:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:horizontal_tail:aspect_ratio) + group_0.aircraft:horizontal_tail:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:horizontal_tail:aspect_ratio) + group_0.aircraft:horizontal_tail:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:horizontal_tail:laminar_flow_lower) + group_0.aircraft:horizontal_tail:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:horizontal_tail:laminar_flow_upper) + group_0.aircraft:horizontal_tail:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.htail.aircraft:horizontal_tail:mass_scaler) + group_0.aircraft:horizontal_tail:taper_ratio (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:horizontal_tail:taper_ratio) + group_0.aircraft:horizontal_tail:taper_ratio (group_0.pre_mission.core_subsystems.core_mass.htail.aircraft:horizontal_tail:taper_ratio) + group_0.aircraft:horizontal_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:horizontal_tail:thickness_to_chord) + group_0.aircraft:horizontal_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:horizontal_tail:thickness_to_chord) + group_0.aircraft:horizontal_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:horizontal_tail:thickness_to_chord) + group_0.aircraft:horizontal_tail:vertical_tail_fraction (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:horizontal_tail:vertical_tail_fraction) + group_0.aircraft:horizontal_tail:vertical_tail_fraction (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:horizontal_tail:vertical_tail_fraction) + group_0.aircraft:horizontal_tail:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:horizontal_tail:wetted_area_scaler) + group_0.aircraft:hydraulics:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.hydraulics.aircraft:hydraulics:mass_scaler) + group_0.aircraft:hydraulics:system_pressure (group_0.pre_mission.core_subsystems.core_mass.hydraulics.aircraft:hydraulics:system_pressure) + group_0.aircraft:instruments:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.instruments.aircraft:instruments:mass_scaler) + group_0.aircraft:landing_gear:main_gear_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.landing_group.landing_gear.aircraft:landing_gear:main_gear_mass_scaler) + group_0.aircraft:landing_gear:nose_gear_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.landing_group.landing_gear.aircraft:landing_gear:nose_gear_mass_scaler) + group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:nacelle:avg_diameter) + group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_geometry.nacelles.aircraft:nacelle:avg_diameter) + group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_mass.anti_icing.aircraft:nacelle:avg_diameter) + group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:nacelle:avg_diameter) + group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_mass.nacelle.aircraft:nacelle:avg_diameter) + group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_mass.starter.aircraft:nacelle:avg_diameter) + group_0.aircraft:nacelle:avg_length (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:nacelle:avg_length) + group_0.aircraft:nacelle:avg_length (group_0.pre_mission.core_subsystems.core_geometry.nacelles.aircraft:nacelle:avg_length) + group_0.aircraft:nacelle:avg_length (group_0.pre_mission.core_subsystems.core_mass.nacelle.aircraft:nacelle:avg_length) + group_0.aircraft:nacelle:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:nacelle:laminar_flow_lower) + group_0.aircraft:nacelle:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:nacelle:laminar_flow_upper) + group_0.aircraft:nacelle:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.nacelle.aircraft:nacelle:mass_scaler) + group_0.aircraft:nacelle:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.nacelles.aircraft:nacelle:wetted_area_scaler) + group_0.aircraft:paint:mass_per_unit_area (group_0.pre_mission.core_subsystems.core_mass.paint.aircraft:paint:mass_per_unit_area) + group_0.aircraft:propulsion:engine_oil_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.engine_oil.aircraft:propulsion:engine_oil_mass_scaler) + group_0.aircraft:propulsion:misc_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.misc_engine.aircraft:propulsion:misc_mass_scaler) + group_0.aircraft:vertical_tail:area (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:vertical_tail:area) + group_0.aircraft:vertical_tail:area (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:vertical_tail:area) + group_0.aircraft:vertical_tail:area (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:vertical_tail:area) + group_0.aircraft:vertical_tail:area (group_0.pre_mission.core_subsystems.core_mass.vert_tail.aircraft:vertical_tail:area) + group_0.aircraft:vertical_tail:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:vertical_tail:aspect_ratio) + group_0.aircraft:vertical_tail:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:vertical_tail:aspect_ratio) + group_0.aircraft:vertical_tail:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:vertical_tail:laminar_flow_lower) + group_0.aircraft:vertical_tail:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:vertical_tail:laminar_flow_upper) + group_0.aircraft:vertical_tail:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.vert_tail.aircraft:vertical_tail:mass_scaler) + group_0.aircraft:vertical_tail:taper_ratio (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:vertical_tail:taper_ratio) + group_0.aircraft:vertical_tail:taper_ratio (group_0.pre_mission.core_subsystems.core_mass.vert_tail.aircraft:vertical_tail:taper_ratio) + group_0.aircraft:vertical_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:vertical_tail:thickness_to_chord) + group_0.aircraft:vertical_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:vertical_tail:thickness_to_chord) + group_0.aircraft:vertical_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:vertical_tail:thickness_to_chord) + group_0.aircraft:vertical_tail:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:vertical_tail:wetted_area_scaler) + group_0.aircraft:wing:aeroelastic_tailoring_factor (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:aeroelastic_tailoring_factor) + group_0.aircraft:wing:aeroelastic_tailoring_factor (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:aeroelastic_tailoring_factor) + group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:wing:area) + group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:wing:area) + group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:wing:area) + group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.wing.aircraft:wing:area) + group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.wing_prelim.aircraft:wing:area) + group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:wing:area) + group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.hydraulics.aircraft:wing:area) + group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.surf_ctrl.aircraft:wing:area) + group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.unusable_fuel.aircraft:wing:area) + group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_misc.aircraft:wing:area) + group_0.aircraft:wing:area (group_0.traj.param_comp.parameters:aircraft:wing:area) + group_0.aircraft:wing:aspect_ratio (group_0.pre_mission.core_subsystems.core_aerodynamics.design.aircraft:wing:aspect_ratio) + group_0.aircraft:wing:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:wing:aspect_ratio) + group_0.aircraft:wing:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:wing:aspect_ratio) + group_0.aircraft:wing:aspect_ratio (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:aspect_ratio) + group_0.aircraft:wing:aspect_ratio (group_0.traj.param_comp.parameters:aircraft:wing:aspect_ratio) + group_0.aircraft:wing:aspect_ratio_reference (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:aspect_ratio_reference) + group_0.aircraft:wing:bending_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:bending_mass_scaler) + group_0.aircraft:wing:bwb_aft_body_mass (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_total.aircraft:wing:bwb_aft_body_mass) + group_0.aircraft:wing:chord_per_semispan (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:chord_per_semispan) + group_0.aircraft:wing:composite_fraction (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:composite_fraction) + group_0.aircraft:wing:composite_fraction (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_misc.aircraft:wing:composite_fraction) + group_0.aircraft:wing:composite_fraction (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_shear_control.aircraft:wing:composite_fraction) + group_0.aircraft:wing:control_surface_area (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_shear_control.aircraft:wing:control_surface_area) + group_0.aircraft:wing:control_surface_area_ratio (group_0.pre_mission.core_subsystems.core_mass.surf_ctrl.aircraft:wing:control_surface_area_ratio) + group_0.aircraft:wing:dihedral (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:wing:dihedral) + group_0.aircraft:wing:glove_and_bat (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:wing:glove_and_bat) + group_0.aircraft:wing:glove_and_bat (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:wing:glove_and_bat) + group_0.aircraft:wing:glove_and_bat (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:wing:glove_and_bat) + group_0.aircraft:wing:glove_and_bat (group_0.pre_mission.core_subsystems.core_geometry.wing_prelim.aircraft:wing:glove_and_bat) + group_0.aircraft:wing:incidence (group_0.traj.param_comp.parameters:aircraft:wing:incidence) + group_0.aircraft:wing:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:wing:laminar_flow_lower) + group_0.aircraft:wing:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:wing:laminar_flow_upper) + group_0.aircraft:wing:load_fraction (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:load_fraction) + group_0.aircraft:wing:load_path_sweep_dist (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:load_path_sweep_dist) + group_0.aircraft:wing:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_total.aircraft:wing:mass_scaler) + group_0.aircraft:wing:max_camber_at_70_semispan (group_0.pre_mission.core_subsystems.core_aerodynamics.design.aircraft:wing:max_camber_at_70_semispan) + group_0.aircraft:wing:max_camber_at_70_semispan (group_0.traj.param_comp.parameters:aircraft:wing:max_camber_at_70_semispan) + group_0.aircraft:wing:misc_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:misc_mass_scaler) + group_0.aircraft:wing:misc_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_misc.aircraft:wing:misc_mass_scaler) + group_0.aircraft:wing:shear_control_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:shear_control_mass_scaler) + group_0.aircraft:wing:shear_control_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_shear_control.aircraft:wing:shear_control_mass_scaler) + group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:wing:span) + group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_geometry.wing_prelim.aircraft:wing:span) + group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_mass.anti_icing.aircraft:wing:span) + group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:wing:span) + group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:wing:span) + group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:span) +""" diff --git a/test_single_aviary.py b/test_single_aviary.py new file mode 100644 index 000000000..a06ffd6a1 --- /dev/null +++ b/test_single_aviary.py @@ -0,0 +1,22 @@ +import aviary.api as av +from easy_phase_info_max import phase_info + + +prob = av.AviaryProblem() +prob.load_inputs("c5_models/c5_maxpayload.csv", phase_info) +prob.check_and_preprocess_inputs() +prob.add_pre_mission_systems() +prob.add_phases() +prob.add_post_mission_systems() +prob.link_phases() +prob.add_design_variables() + +# Load optimization problem formulation +# Detail which variables the optimizer can control +prob.add_objective() + +prob.setup() + +prob.set_initial_guesses() +# prob.final_setup() +prob.run_aviary_problem() From 19fd974a735ce761eb73f71087e628dbbfef2a35 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Tue, 6 Aug 2024 09:55:46 -0400 Subject: [PATCH 030/113] updated objective to use Aviary's fuel obj --- multi_aviary_copymodel.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index ead41f68e..f06b1ec75 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -16,6 +16,7 @@ from c5_models.c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info from easy_phase_info_inter import phase_info as easy_inter from easy_phase_info_max import phase_info as easy_max +from aviary.variable_info.variables import Mission, Aircraft # "comp?.a can be used to reference multiple comp1.a comp2.a etc" @@ -92,8 +93,8 @@ def add_objective(self): for i in range(self.num_missions): # connecting each subcomponent's fuel burn to super problem's unique fuel variables self.model.connect( - self.group_prefix+f"_{i}.mission:summary:fuel_burned", f"fuel_{i}") - self.model.add_objective('compound', scaler=1.) + self.group_prefix+f"_{i}.{Mission.Objectives.FUEL}", f"fuel_{i}") + self.model.add_objective('compound', ref=1e4) def setup_wrapper(self): """Wrapper for om.Problem setup with warning ignoring and setting options""" @@ -115,8 +116,8 @@ def run(self): # self.check_totals(method='fd', compact_print=True) self.model.set_solver_print(0) - self.run_driver() - # dm.run_problem(self, make_plots=True) + # self.run_driver() + dm.run_problem(self, make_plots=True) if __name__ == '__main__': @@ -145,6 +146,12 @@ def run(self): createN2(__file__, super_prob) super_prob.run() + print("\n\n=========================\nEmpty masses:") + print(super_prob.get_val(f'group_0.{Aircraft.Design.EMPTY_MASS}')) + print(super_prob.get_val(f'group_1.{Aircraft.Design.EMPTY_MASS}')) + print("Fuel burned") + print(super_prob.get_val(f'group_0.{Mission.Summary.FUEL_BURNED}')) + print(super_prob.get_val(f'group_1.{Mission.Summary.FUEL_BURNED}')) # def initvals(self): # """attempting to copy over aviary code for setting initial values and changing references""" # for i, prob in enumerate(self.probs): From b1d227e050a7cf9d366a644d2489b0fd8c680063 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Tue, 6 Aug 2024 10:11:00 -0400 Subject: [PATCH 031/113] comparable outputs for multi mission and single missions --- multi_aviary_copymodel.py | 561 +++++++++++++++++++------------------- test_single_aviary.py | 57 ++-- 2 files changed, 327 insertions(+), 291 deletions(-) diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index f06b1ec75..40ea1ad61 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -146,284 +146,295 @@ def run(self): createN2(__file__, super_prob) super_prob.run() - print("\n\n=========================\nEmpty masses:") - print(super_prob.get_val(f'group_0.{Aircraft.Design.EMPTY_MASS}')) - print(super_prob.get_val(f'group_1.{Aircraft.Design.EMPTY_MASS}')) - print("Fuel burned") - print(super_prob.get_val(f'group_0.{Mission.Summary.FUEL_BURNED}')) - print(super_prob.get_val(f'group_1.{Mission.Summary.FUEL_BURNED}')) - # def initvals(self): - # """attempting to copy over aviary code for setting initial values and changing references""" - # for i, prob in enumerate(self.probs): - # setvalprob.set_val(parent_prefix+self.group_prefix + - # f'_{i}.aircraft:design:landing_to_takeoff_mass_ratio', 0.5) - # # Grab the trajectory object from the model - # traj = prob.model.traj - - # # Determine which phases to loop over, fetching them from the trajectory - # phase_items = traj._phases.items() - - # # Loop over each phase and set initial guesses for the state and control variables - # for idx, (phase_name, phase) in enumerate(phase_items): - # # If not, fetch the initial guesses specific to the phase - # # check if guesses exist for this phase - # if "initial_guesses" in prob.phase_info[phase_name]: - # guesses = prob.phase_info[phase_name]['initial_guesses'] - # else: - # guesses = {} - - # # ||||||||||||| _add_subsystem_guesses - # # Get all subsystems associated with the phase - # all_subsystems = prob._get_all_subsystems( - # prob.phase_info[phase_name]['external_subsystems']) - - # # Loop over each subsystem - # for subsystem in all_subsystems: - # # Fetch the initial guesses for the subsystem - # initial_guesses = subsystem.get_initial_guesses() - - # # Loop over each guess - # for key, val in initial_guesses.items(): - # # Identify the type of the guess (state or control) - # type = val.pop('type') - # if 'state' in type: - # path_string = 'states' - # elif 'control' in type: - # path_string = 'controls' - - # # Process the guess variable (handles array interpolation) - # val['val'] = prob._process_guess_var(val['val'], key, phase) - - # # Set the initial guess in the problem - # setvalprob.set_val(parent_prefix+ - # self.group_prefix + - # f'_{i}.traj.{phase_name}.{path_string}:{key}', **val) - - # # Set initial guesses for states and controls for each phase - - # # |||||||||||||||||||||| _add_guesses - # # If using the GASP model, set initial guesses for the rotation mass and flight duration - # if prob.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): - # control_keys = ["mach", "altitude"] - # state_keys = ["mass", Dynamic.Mission.DISTANCE] - # prob_keys = ["tau_gear", "tau_flaps"] - - # # for the simple mission method, use the provided initial and final mach and altitude values from phase_info - # if prob.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): - # initial_altitude = wrapped_convert_units( - # prob.phase_info[phase_name]['user_options'] - # ['initial_altitude'], - # 'ft') - # final_altitude = wrapped_convert_units( - # prob.phase_info[phase_name]['user_options']['final_altitude'], 'ft') - # initial_mach = prob.phase_info[phase_name]['user_options'][ - # 'initial_mach'] - # final_mach = prob.phase_info[phase_name]['user_options'][ - # 'final_mach'] - - # guesses["mach"] = ([initial_mach[0], final_mach[0]], "unitless") - # guesses["altitude"] = ([initial_altitude, final_altitude], 'ft') - - # if prob.mission_method is HEIGHT_ENERGY: - # # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds - # if 'time' not in guesses: - # initial_bounds = wrapped_convert_units( - # prob.phase_info[phase_name]['user_options']['initial_bounds'], 's') - # duration_bounds = wrapped_convert_units( - # prob.phase_info[phase_name]['user_options']['duration_bounds'], 's') - # guesses["time"] = ([np.mean(initial_bounds[0]), np.mean( - # duration_bounds[0])], 's') - - # # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds - # if 'time' not in guesses: - # initial_bounds = prob.phase_info[phase_name]['user_options'][ - # 'initial_bounds'] - # duration_bounds = prob.phase_info[phase_name]['user_options'][ - # 'duration_bounds'] - # # Add a check for the initial and duration bounds, raise an error if they are not consistent - # if initial_bounds[1] != duration_bounds[1]: - # raise ValueError( - # f"Initial and duration bounds for {phase_name} are not consistent.") - # guesses["time"] = ([np.mean(initial_bounds[0]), np.mean( - # duration_bounds[0])], initial_bounds[1]) - - # for guess_key, guess_data in guesses.items(): - # val, units = guess_data - - # # Set initial guess for time variables - # if 'time' == guess_key and prob.mission_method is not SOLVED_2DOF: - # setvalprob.set_val(parent_prefix+ - # self.group_prefix + f'_{i}.traj.{phase_name}.t_initial', - # val[0], - # units=units) - # setvalprob.set_val(parent_prefix+ - # self.group_prefix + f'_{i}.traj.{phase_name}.t_duration', - # val[1], - # units=units) - - # else: - # # Set initial guess for control variables - # if guess_key in control_keys: - # try: - # setvalprob.set_val(parent_prefix+self.group_prefix + - # f'_{i}.traj.{phase_name}.controls:{guess_key}', - # prob._process_guess_var( - # val, guess_key, phase), - # units=units) - # except KeyError: - # try: - # setvalprob.set_val(parent_prefix+ - # self.group_prefix + - # f'_{i}.traj.{phase_name}.polynomial_controls:{guess_key}', - # prob._process_guess_var(val, guess_key, phase), - # units=units) - # except KeyError: - # setvalprob.set_val(parent_prefix+ - # self.group_prefix + - # f'_{i}.traj.{phase_name}.bspline_controls:{guess_key}', - # prob._process_guess_var(val, guess_key, phase), - # units=units) - - # if guess_key in control_keys: - # pass - # # Set initial guess for state variables - # elif guess_key in state_keys: - # setvalprob.set_val(parent_prefix+self.group_prefix + - # f'_{i}.traj.{phase_name}.states:{guess_key}', - # prob._process_guess_var( - # val, guess_key, phase), - # units=units) - # elif guess_key in prob_keys: - # setvalprob.set_val(parent_prefix+ - # self.group_prefix+f'_{i}.'+guess_key, val, units=units) - # elif ":" in guess_key: - # setvalprob.set_val(parent_prefix+ - # self.group_prefix + f'_{i}.traj.{phase_name}.{guess_key}', - # prob._process_guess_var(val, guess_key, phase), - # units=units) - # else: - # # raise error if the guess key is not recognized - # raise ValueError( - # f"Initial guess key {guess_key} in {phase_name} is not recognized.") - - # # We need some special logic for these following variables because GASP computes - # # initial guesses using some knowledge of the mission duration and other variables - # # that are only available after calling `create_vehicle`. Thus these initial guess - # # values are not included in the `phase_info` object. - - # base_phase = phase_name - # if 'mass' not in guesses: - # mass_guess = prob.aviary_inputs.get_val( - # Mission.Design.GROSS_MASS, units='lbm') - # # Set the mass guess as the initial value for the mass state variable - # setvalprob.set_val(parent_prefix+self.group_prefix+f'_{i}.traj.{phase_name}.states:mass', - # mass_guess, units='lbm') - - # # if 'time' not in guesses: - # # # Determine initial time and duration guesses depending on the phase name - # # if 'desc1' == base_phase: - # # t_initial = flight_duration*.9 - # # t_duration = flight_duration*.04 - # # elif 'desc2' in base_phase: - # # t_initial = flight_duration*.94 - # # t_duration = 5000 - # # # Set the time guesses as the initial values for the time-related trajectory variables - # # setvalprob.set_val(parent_prefix+f"traj.{phase_name}.t_initial", - # # t_initial, units='s') - # # setvalprob.set_val(parent_prefix+f"traj.{phase_name}.t_duration", - # # t_duration, units='s') + outputs = {Mission.Summary.FUEL_BURNED: [], + Aircraft.Design.EMPTY_MASS: []} + + print("\n\n=========================\n") + for key in outputs.keys(): + val1 = super_prob.get_val(f'group_0.{key}')[0] + val2 = super_prob.get_val(f'group_1.{key}')[0] + print(f"Variable: {key}") + print(f"Values: {val1}, {val2}") + +""" +Variable: mission:summary:fuel_burned +Values: 13730.910584707046, 15740.545749454643 +Variable: aircraft:design:empty_mass +Values: 336859.7179064408, 337047.85745526763 +""" + +# def initvals(self): +# """attempting to copy over aviary code for setting initial values and changing references""" +# for i, prob in enumerate(self.probs): +# setvalprob.set_val(parent_prefix+self.group_prefix + +# f'_{i}.aircraft:design:landing_to_takeoff_mass_ratio', 0.5) +# # Grab the trajectory object from the model +# traj = prob.model.traj + +# # Determine which phases to loop over, fetching them from the trajectory +# phase_items = traj._phases.items() + +# # Loop over each phase and set initial guesses for the state and control variables +# for idx, (phase_name, phase) in enumerate(phase_items): +# # If not, fetch the initial guesses specific to the phase +# # check if guesses exist for this phase +# if "initial_guesses" in prob.phase_info[phase_name]: +# guesses = prob.phase_info[phase_name]['initial_guesses'] +# else: +# guesses = {} + +# # ||||||||||||| _add_subsystem_guesses +# # Get all subsystems associated with the phase +# all_subsystems = prob._get_all_subsystems( +# prob.phase_info[phase_name]['external_subsystems']) + +# # Loop over each subsystem +# for subsystem in all_subsystems: +# # Fetch the initial guesses for the subsystem +# initial_guesses = subsystem.get_initial_guesses() + +# # Loop over each guess +# for key, val in initial_guesses.items(): +# # Identify the type of the guess (state or control) +# type = val.pop('type') +# if 'state' in type: +# path_string = 'states' +# elif 'control' in type: +# path_string = 'controls' + +# # Process the guess variable (handles array interpolation) +# val['val'] = prob._process_guess_var(val['val'], key, phase) + +# # Set the initial guess in the problem +# setvalprob.set_val(parent_prefix+ +# self.group_prefix + +# f'_{i}.traj.{phase_name}.{path_string}:{key}', **val) + +# # Set initial guesses for states and controls for each phase + +# # |||||||||||||||||||||| _add_guesses +# # If using the GASP model, set initial guesses for the rotation mass and flight duration +# if prob.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): +# control_keys = ["mach", "altitude"] +# state_keys = ["mass", Dynamic.Mission.DISTANCE] +# prob_keys = ["tau_gear", "tau_flaps"] + +# # for the simple mission method, use the provided initial and final mach and altitude values from phase_info +# if prob.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): +# initial_altitude = wrapped_convert_units( +# prob.phase_info[phase_name]['user_options'] +# ['initial_altitude'], +# 'ft') +# final_altitude = wrapped_convert_units( +# prob.phase_info[phase_name]['user_options']['final_altitude'], 'ft') +# initial_mach = prob.phase_info[phase_name]['user_options'][ +# 'initial_mach'] +# final_mach = prob.phase_info[phase_name]['user_options'][ +# 'final_mach'] + +# guesses["mach"] = ([initial_mach[0], final_mach[0]], "unitless") +# guesses["altitude"] = ([initial_altitude, final_altitude], 'ft') + +# if prob.mission_method is HEIGHT_ENERGY: +# # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds +# if 'time' not in guesses: +# initial_bounds = wrapped_convert_units( +# prob.phase_info[phase_name]['user_options']['initial_bounds'], 's') +# duration_bounds = wrapped_convert_units( +# prob.phase_info[phase_name]['user_options']['duration_bounds'], 's') +# guesses["time"] = ([np.mean(initial_bounds[0]), np.mean( +# duration_bounds[0])], 's') + +# # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds +# if 'time' not in guesses: +# initial_bounds = prob.phase_info[phase_name]['user_options'][ +# 'initial_bounds'] +# duration_bounds = prob.phase_info[phase_name]['user_options'][ +# 'duration_bounds'] +# # Add a check for the initial and duration bounds, raise an error if they are not consistent +# if initial_bounds[1] != duration_bounds[1]: +# raise ValueError( +# f"Initial and duration bounds for {phase_name} are not consistent.") +# guesses["time"] = ([np.mean(initial_bounds[0]), np.mean( +# duration_bounds[0])], initial_bounds[1]) + +# for guess_key, guess_data in guesses.items(): +# val, units = guess_data + +# # Set initial guess for time variables +# if 'time' == guess_key and prob.mission_method is not SOLVED_2DOF: +# setvalprob.set_val(parent_prefix+ +# self.group_prefix + f'_{i}.traj.{phase_name}.t_initial', +# val[0], +# units=units) +# setvalprob.set_val(parent_prefix+ +# self.group_prefix + f'_{i}.traj.{phase_name}.t_duration', +# val[1], +# units=units) + +# else: +# # Set initial guess for control variables +# if guess_key in control_keys: +# try: +# setvalprob.set_val(parent_prefix+self.group_prefix + +# f'_{i}.traj.{phase_name}.controls:{guess_key}', +# prob._process_guess_var( +# val, guess_key, phase), +# units=units) +# except KeyError: +# try: +# setvalprob.set_val(parent_prefix+ +# self.group_prefix + +# f'_{i}.traj.{phase_name}.polynomial_controls:{guess_key}', +# prob._process_guess_var(val, guess_key, phase), +# units=units) +# except KeyError: +# setvalprob.set_val(parent_prefix+ +# self.group_prefix + +# f'_{i}.traj.{phase_name}.bspline_controls:{guess_key}', +# prob._process_guess_var(val, guess_key, phase), +# units=units) + +# if guess_key in control_keys: +# pass +# # Set initial guess for state variables +# elif guess_key in state_keys: +# setvalprob.set_val(parent_prefix+self.group_prefix + +# f'_{i}.traj.{phase_name}.states:{guess_key}', +# prob._process_guess_var( +# val, guess_key, phase), +# units=units) +# elif guess_key in prob_keys: +# setvalprob.set_val(parent_prefix+ +# self.group_prefix+f'_{i}.'+guess_key, val, units=units) +# elif ":" in guess_key: +# setvalprob.set_val(parent_prefix+ +# self.group_prefix + f'_{i}.traj.{phase_name}.{guess_key}', +# prob._process_guess_var(val, guess_key, phase), +# units=units) +# else: +# # raise error if the guess key is not recognized +# raise ValueError( +# f"Initial guess key {guess_key} in {phase_name} is not recognized.") + +# # We need some special logic for these following variables because GASP computes +# # initial guesses using some knowledge of the mission duration and other variables +# # that are only available after calling `create_vehicle`. Thus these initial guess +# # values are not included in the `phase_info` object. + +# base_phase = phase_name +# if 'mass' not in guesses: +# mass_guess = prob.aviary_inputs.get_val( +# Mission.Design.GROSS_MASS, units='lbm') +# # Set the mass guess as the initial value for the mass state variable +# setvalprob.set_val(parent_prefix+self.group_prefix+f'_{i}.traj.{phase_name}.states:mass', +# mass_guess, units='lbm') + +# # if 'time' not in guesses: +# # # Determine initial time and duration guesses depending on the phase name +# # if 'desc1' == base_phase: +# # t_initial = flight_duration*.9 +# # t_duration = flight_duration*.04 +# # elif 'desc2' in base_phase: +# # t_initial = flight_duration*.94 +# # t_duration = 5000 +# # # Set the time guesses as the initial values for the time-related trajectory variables +# # setvalprob.set_val(parent_prefix+f"traj.{phase_name}.t_initial", +# # t_initial, units='s') +# # setvalprob.set_val(parent_prefix+f"traj.{phase_name}.t_duration", +# # t_duration, units='s') # ========================================================================= old code - # super_prob = om.Problem() - # num_missions = len(weights) - # probs = [] - # prefix = "problem_" - - # makeN2 = False - # if len(sys.argv) > 1: - # if "n2" in sys.argv: - # makeN2 = True - - # # define individual aviary problems - # for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): - # prob = av.AviaryProblem() - # prob.load_inputs(plane, phase_info) - # prob.check_and_preprocess_inputs() - # prob.add_pre_mission_systems() - # traj = prob.add_phases() # save dymos traj to add to super problem as a subsystem - # prob.add_post_mission_systems() - # prob.link_phases() # this is half working / connect statements from outside of traj to inside are failing - # prob.problem_type = ProblemType.ALTERNATE # adds summary gross mass as design var - # prob.add_design_variables() - # probs.append(prob) - - # group = om.Group() # this group will contain all the promoted aviary vars - # group.add_subsystem("pre", prob.pre_mission) - # group.add_subsystem("traj", traj) - # group.add_subsystem("post", prob.post_mission) - - # # setting defaults for these variables to suppress errors - # longlst = [ - # 'mission:summary:gross_mass', 'aircraft:wing:sweep', - # 'aircraft:wing:thickness_to_chord', 'aircraft:wing:area', - # 'aircraft:wing:taper_ratio', 'mission:design:gross_mass'] - # for var in longlst: - # group.set_input_defaults( - # var, val=MetaData[var]['default_value'], - # units=MetaData[var]['units']) - - # # add group and promote design gross mass (common input amongst multiple missions) - # # in this way it represents the MTOW - # super_prob.model.add_subsystem(prefix+f'{i}', group, promotes=[ - # 'mission:design:gross_mass']) - - # # add design gross mass as a design var - # super_prob.model.add_design_var( - # 'mission:design:gross_mass', lower=100e3, upper=1000e3) - - # for i in range(num_missions): - # # connecting each subcomponent's fuel burn to super problem's unique fuel variables - # super_prob.model.connect( - # prefix+f"{i}.mission:summary:fuel_burned", f"fuel_{i}") - - # # create constraint to force each mission's summary gross mass to not - # # exceed the common mission design gross mass (aka MTOW) - # super_prob.model.add_subsystem(f'MTOW_constraint{i}', om.ExecComp( - # 'mtow_resid = design_gross_mass - summary_gross_mass'), - # promotes=[('summary_gross_mass', prefix+f'{i}.mission:summary:gross_mass'), - # ('design_gross_mass', 'mission:design:gross_mass')]) - - # super_prob.model.add_constraint(f'MTOW_constraint{i}.mtow_resid', lower=0.) - - # # creating variable strings that will represent fuel burn from each mission - # fuel_burned_vars = [f"fuel_{i}" for i in range(num_missions)] - # weighted_str = "+".join([f"{fuel}*{weight}" - # for fuel, weight in zip(fuel_burned_vars, weights)]) - # # weighted_str looks like: fuel_0 * weight[0] + fuel_1 * weight[1] - - # # adding compound execComp to super problem - # super_prob.model.add_subsystem('compound_fuel_burn_objective', om.ExecComp( - # "compound = "+weighted_str), promotes=["compound", *fuel_burned_vars]) - - # super_prob.driver = om.ScipyOptimizeDriver() - # super_prob.driver.options['optimizer'] = 'SLSQP' - # super_prob.model.add_objective('compound') # output from execcomp goes here - - # with warnings.catch_warnings(): - # warnings.simplefilter("ignore", om.OpenMDAOWarning) - # warnings.simplefilter("ignore", om.PromotionWarning) - # super_prob.setup() - - # if makeN2: - # om.n2(super_prob, outfile="multi_mission_importTraj_N2.html") # create N2 diagram - - # # cannot use this b/c initial guesses (i.e. setval func) has to be called on super prob level - # # for prob in probs: - # # # prob.setup() - # # prob.set_initial_guesses() - - # # dm.run_problem(super_prob) +# super_prob = om.Problem() +# num_missions = len(weights) +# probs = [] +# prefix = "problem_" + +# makeN2 = False +# if len(sys.argv) > 1: +# if "n2" in sys.argv: +# makeN2 = True + +# # define individual aviary problems +# for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): +# prob = av.AviaryProblem() +# prob.load_inputs(plane, phase_info) +# prob.check_and_preprocess_inputs() +# prob.add_pre_mission_systems() +# traj = prob.add_phases() # save dymos traj to add to super problem as a subsystem +# prob.add_post_mission_systems() +# prob.link_phases() # this is half working / connect statements from outside of traj to inside are failing +# prob.problem_type = ProblemType.ALTERNATE # adds summary gross mass as design var +# prob.add_design_variables() +# probs.append(prob) + +# group = om.Group() # this group will contain all the promoted aviary vars +# group.add_subsystem("pre", prob.pre_mission) +# group.add_subsystem("traj", traj) +# group.add_subsystem("post", prob.post_mission) + +# # setting defaults for these variables to suppress errors +# longlst = [ +# 'mission:summary:gross_mass', 'aircraft:wing:sweep', +# 'aircraft:wing:thickness_to_chord', 'aircraft:wing:area', +# 'aircraft:wing:taper_ratio', 'mission:design:gross_mass'] +# for var in longlst: +# group.set_input_defaults( +# var, val=MetaData[var]['default_value'], +# units=MetaData[var]['units']) + +# # add group and promote design gross mass (common input amongst multiple missions) +# # in this way it represents the MTOW +# super_prob.model.add_subsystem(prefix+f'{i}', group, promotes=[ +# 'mission:design:gross_mass']) + +# # add design gross mass as a design var +# super_prob.model.add_design_var( +# 'mission:design:gross_mass', lower=100e3, upper=1000e3) + +# for i in range(num_missions): +# # connecting each subcomponent's fuel burn to super problem's unique fuel variables +# super_prob.model.connect( +# prefix+f"{i}.mission:summary:fuel_burned", f"fuel_{i}") + +# # create constraint to force each mission's summary gross mass to not +# # exceed the common mission design gross mass (aka MTOW) +# super_prob.model.add_subsystem(f'MTOW_constraint{i}', om.ExecComp( +# 'mtow_resid = design_gross_mass - summary_gross_mass'), +# promotes=[('summary_gross_mass', prefix+f'{i}.mission:summary:gross_mass'), +# ('design_gross_mass', 'mission:design:gross_mass')]) + +# super_prob.model.add_constraint(f'MTOW_constraint{i}.mtow_resid', lower=0.) + +# # creating variable strings that will represent fuel burn from each mission +# fuel_burned_vars = [f"fuel_{i}" for i in range(num_missions)] +# weighted_str = "+".join([f"{fuel}*{weight}" +# for fuel, weight in zip(fuel_burned_vars, weights)]) +# # weighted_str looks like: fuel_0 * weight[0] + fuel_1 * weight[1] + +# # adding compound execComp to super problem +# super_prob.model.add_subsystem('compound_fuel_burn_objective', om.ExecComp( +# "compound = "+weighted_str), promotes=["compound", *fuel_burned_vars]) + +# super_prob.driver = om.ScipyOptimizeDriver() +# super_prob.driver.options['optimizer'] = 'SLSQP' +# super_prob.model.add_objective('compound') # output from execcomp goes here + +# with warnings.catch_warnings(): +# warnings.simplefilter("ignore", om.OpenMDAOWarning) +# warnings.simplefilter("ignore", om.PromotionWarning) +# super_prob.setup() + +# if makeN2: +# om.n2(super_prob, outfile="multi_mission_importTraj_N2.html") # create N2 diagram + +# # cannot use this b/c initial guesses (i.e. setval func) has to be called on super prob level +# # for prob in probs: +# # # prob.setup() +# # prob.set_initial_guesses() + +# # dm.run_problem(super_prob) """ diff --git a/test_single_aviary.py b/test_single_aviary.py index a06ffd6a1..82406d682 100644 --- a/test_single_aviary.py +++ b/test_single_aviary.py @@ -1,22 +1,47 @@ import aviary.api as av -from easy_phase_info_max import phase_info +from easy_phase_info_max import phase_info as max_phase_info +from easy_phase_info_inter import phase_info as inter_phase_info +from aviary.variable_info.variables import Mission, Aircraft -prob = av.AviaryProblem() -prob.load_inputs("c5_models/c5_maxpayload.csv", phase_info) -prob.check_and_preprocess_inputs() -prob.add_pre_mission_systems() -prob.add_phases() -prob.add_post_mission_systems() -prob.link_phases() -prob.add_design_variables() +outputs = {Mission.Summary.FUEL_BURNED: [], + Aircraft.Design.EMPTY_MASS: []} +for plane, phase_info in zip( + ['c5_maxpayload', 'c5_intermediate'], + [max_phase_info, inter_phase_info]): -# Load optimization problem formulation -# Detail which variables the optimizer can control -prob.add_objective() + prob = av.AviaryProblem() + prob.load_inputs(f"c5_models/{plane}.csv", phase_info) + prob.check_and_preprocess_inputs() + prob.add_pre_mission_systems() + prob.add_phases() + prob.add_post_mission_systems() + prob.link_phases() + prob.add_driver('SLSQP') + prob.add_design_variables() -prob.setup() + # Load optimization problem formulation + # Detail which variables the optimizer can control + prob.add_objective() -prob.set_initial_guesses() -# prob.final_setup() -prob.run_aviary_problem() + prob.setup() + + prob.set_initial_guesses() + # prob.final_setup() + prob.run_aviary_problem() + + for key in outputs.keys(): + outputs[key].append(prob.get_val(key)[0]) + +print("\n\n=============================\n") +for key, item in outputs.items(): + print(f"Variable: {key}") + print(f"Values: {item}") + +""" +Current output: +Variable: mission:summary:fuel_burned +Values: [140116.12301917037, 276762.7974282048] +Variable: aircraft:design:empty_mass +Values: [302105.1606792437, 315604.5402712884] +""" From 40aeca130f6b4b5ddb739a1b87c6c5626a4ab428 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Tue, 6 Aug 2024 10:38:47 -0400 Subject: [PATCH 032/113] 0/1 unknown results but need to save --- aviary/mission/flight_phase_builder.py | 4 +- multi_aviary_copymodel.py | 526 +------------------------ 2 files changed, 15 insertions(+), 515 deletions(-) diff --git a/aviary/mission/flight_phase_builder.py b/aviary/mission/flight_phase_builder.py index 17027fbeb..b7f4e3b9e 100644 --- a/aviary/mission/flight_phase_builder.py +++ b/aviary/mission/flight_phase_builder.py @@ -121,7 +121,7 @@ def build_phase(self, aviary_options: AviaryValues = None, phase_type=EquationsO phase.add_state( Dynamic.Mission.MASS, fix_initial=fix_initial_mass, fix_final=False, - lower=0.0, ref=1e4, defect_ref=1e6, units='kg', + lower=0.0, ref=1e4, defect_ref=1e4, units='kg', rate_source=rate_source, targets=Dynamic.Mission.MASS, input_initial=input_initial_mass, @@ -133,7 +133,7 @@ def build_phase(self, aviary_options: AviaryValues = None, phase_type=EquationsO fix_initial, Dynamic.Mission.DISTANCE, True) phase.add_state( Dynamic.Mission.DISTANCE, fix_initial=fix_initial_distance, fix_final=False, - lower=0.0, ref=1e6, defect_ref=1e8, units='m', + lower=0.0, ref=1e6, defect_ref=1e6, units='m', rate_source=Dynamic.Mission.DISTANCE_RATE, input_initial=input_initial_distance, solve_segments='forward' if solve_for_distance else None, diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index f06b1ec75..656bd9703 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -17,6 +17,7 @@ from easy_phase_info_inter import phase_info as easy_inter from easy_phase_info_max import phase_info as easy_max from aviary.variable_info.variables import Mission, Aircraft +from aviary.variable_info.enums import ProblemType # "comp?.a can be used to reference multiple comp1.a comp2.a etc" @@ -50,6 +51,7 @@ def __init__(self, planes, phase_infos, weights): prob.add_phases() prob.add_post_mission_systems() prob.link_phases() + prob.problem_type = ProblemType.ALTERNATE prob.add_design_variables() # should not work at super prob level self.probs.append(prob) @@ -61,12 +63,18 @@ def add_design_variables(self): self.model.add_design_var('mission:design:gross_mass', lower=10., upper=900e3) def add_driver(self): - # pyoptsparse SLSQP errors out w pos directional derivative line search (obj scaler = 1) and - # inequality constraints incompatible (obj scaler = -1) - fuel burn obj - # pyoptsparse IPOPT keeps iterating (seen upto 1000+ iters) in the IPOPT.out file but no result - # scipy SLSQP reaches iter limit and fails optimization self.driver = om.pyOptSparseDriver() - self.driver.options['optimizer'] = 'SLSQP' + + self.driver.options["optimizer"] = "SNOPT" + # driver.declare_coloring(True) # do we need this anymore of we're specifying the below? + # maybe we're getting matrixes that are too sparse, decrease tolerance to avoid missing corellatiton + # set coloring at this value. 1e-45 didn't seem to make much difference + self.driver.declare_coloring(tol=1e-25, orders=None) + self.driver.opt_settings["Major iterations limit"] = 60 + self.driver.opt_settings["Major optimality tolerance"] = 5e-4 + self.driver.opt_settings["Major feasibility tolerance"] = 4e-5 + self.driver.opt_settings["iSumm"] = 6 + self.driver.opt_settings['Verify level'] = -1 # self.driver.options['maxiter'] = 1e3 # self.driver.declare_coloring() # self.model.linear_solver = om.DirectSolver() @@ -152,511 +160,3 @@ def run(self): print("Fuel burned") print(super_prob.get_val(f'group_0.{Mission.Summary.FUEL_BURNED}')) print(super_prob.get_val(f'group_1.{Mission.Summary.FUEL_BURNED}')) - # def initvals(self): - # """attempting to copy over aviary code for setting initial values and changing references""" - # for i, prob in enumerate(self.probs): - # setvalprob.set_val(parent_prefix+self.group_prefix + - # f'_{i}.aircraft:design:landing_to_takeoff_mass_ratio', 0.5) - # # Grab the trajectory object from the model - # traj = prob.model.traj - - # # Determine which phases to loop over, fetching them from the trajectory - # phase_items = traj._phases.items() - - # # Loop over each phase and set initial guesses for the state and control variables - # for idx, (phase_name, phase) in enumerate(phase_items): - # # If not, fetch the initial guesses specific to the phase - # # check if guesses exist for this phase - # if "initial_guesses" in prob.phase_info[phase_name]: - # guesses = prob.phase_info[phase_name]['initial_guesses'] - # else: - # guesses = {} - - # # ||||||||||||| _add_subsystem_guesses - # # Get all subsystems associated with the phase - # all_subsystems = prob._get_all_subsystems( - # prob.phase_info[phase_name]['external_subsystems']) - - # # Loop over each subsystem - # for subsystem in all_subsystems: - # # Fetch the initial guesses for the subsystem - # initial_guesses = subsystem.get_initial_guesses() - - # # Loop over each guess - # for key, val in initial_guesses.items(): - # # Identify the type of the guess (state or control) - # type = val.pop('type') - # if 'state' in type: - # path_string = 'states' - # elif 'control' in type: - # path_string = 'controls' - - # # Process the guess variable (handles array interpolation) - # val['val'] = prob._process_guess_var(val['val'], key, phase) - - # # Set the initial guess in the problem - # setvalprob.set_val(parent_prefix+ - # self.group_prefix + - # f'_{i}.traj.{phase_name}.{path_string}:{key}', **val) - - # # Set initial guesses for states and controls for each phase - - # # |||||||||||||||||||||| _add_guesses - # # If using the GASP model, set initial guesses for the rotation mass and flight duration - # if prob.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): - # control_keys = ["mach", "altitude"] - # state_keys = ["mass", Dynamic.Mission.DISTANCE] - # prob_keys = ["tau_gear", "tau_flaps"] - - # # for the simple mission method, use the provided initial and final mach and altitude values from phase_info - # if prob.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): - # initial_altitude = wrapped_convert_units( - # prob.phase_info[phase_name]['user_options'] - # ['initial_altitude'], - # 'ft') - # final_altitude = wrapped_convert_units( - # prob.phase_info[phase_name]['user_options']['final_altitude'], 'ft') - # initial_mach = prob.phase_info[phase_name]['user_options'][ - # 'initial_mach'] - # final_mach = prob.phase_info[phase_name]['user_options'][ - # 'final_mach'] - - # guesses["mach"] = ([initial_mach[0], final_mach[0]], "unitless") - # guesses["altitude"] = ([initial_altitude, final_altitude], 'ft') - - # if prob.mission_method is HEIGHT_ENERGY: - # # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds - # if 'time' not in guesses: - # initial_bounds = wrapped_convert_units( - # prob.phase_info[phase_name]['user_options']['initial_bounds'], 's') - # duration_bounds = wrapped_convert_units( - # prob.phase_info[phase_name]['user_options']['duration_bounds'], 's') - # guesses["time"] = ([np.mean(initial_bounds[0]), np.mean( - # duration_bounds[0])], 's') - - # # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds - # if 'time' not in guesses: - # initial_bounds = prob.phase_info[phase_name]['user_options'][ - # 'initial_bounds'] - # duration_bounds = prob.phase_info[phase_name]['user_options'][ - # 'duration_bounds'] - # # Add a check for the initial and duration bounds, raise an error if they are not consistent - # if initial_bounds[1] != duration_bounds[1]: - # raise ValueError( - # f"Initial and duration bounds for {phase_name} are not consistent.") - # guesses["time"] = ([np.mean(initial_bounds[0]), np.mean( - # duration_bounds[0])], initial_bounds[1]) - - # for guess_key, guess_data in guesses.items(): - # val, units = guess_data - - # # Set initial guess for time variables - # if 'time' == guess_key and prob.mission_method is not SOLVED_2DOF: - # setvalprob.set_val(parent_prefix+ - # self.group_prefix + f'_{i}.traj.{phase_name}.t_initial', - # val[0], - # units=units) - # setvalprob.set_val(parent_prefix+ - # self.group_prefix + f'_{i}.traj.{phase_name}.t_duration', - # val[1], - # units=units) - - # else: - # # Set initial guess for control variables - # if guess_key in control_keys: - # try: - # setvalprob.set_val(parent_prefix+self.group_prefix + - # f'_{i}.traj.{phase_name}.controls:{guess_key}', - # prob._process_guess_var( - # val, guess_key, phase), - # units=units) - # except KeyError: - # try: - # setvalprob.set_val(parent_prefix+ - # self.group_prefix + - # f'_{i}.traj.{phase_name}.polynomial_controls:{guess_key}', - # prob._process_guess_var(val, guess_key, phase), - # units=units) - # except KeyError: - # setvalprob.set_val(parent_prefix+ - # self.group_prefix + - # f'_{i}.traj.{phase_name}.bspline_controls:{guess_key}', - # prob._process_guess_var(val, guess_key, phase), - # units=units) - - # if guess_key in control_keys: - # pass - # # Set initial guess for state variables - # elif guess_key in state_keys: - # setvalprob.set_val(parent_prefix+self.group_prefix + - # f'_{i}.traj.{phase_name}.states:{guess_key}', - # prob._process_guess_var( - # val, guess_key, phase), - # units=units) - # elif guess_key in prob_keys: - # setvalprob.set_val(parent_prefix+ - # self.group_prefix+f'_{i}.'+guess_key, val, units=units) - # elif ":" in guess_key: - # setvalprob.set_val(parent_prefix+ - # self.group_prefix + f'_{i}.traj.{phase_name}.{guess_key}', - # prob._process_guess_var(val, guess_key, phase), - # units=units) - # else: - # # raise error if the guess key is not recognized - # raise ValueError( - # f"Initial guess key {guess_key} in {phase_name} is not recognized.") - - # # We need some special logic for these following variables because GASP computes - # # initial guesses using some knowledge of the mission duration and other variables - # # that are only available after calling `create_vehicle`. Thus these initial guess - # # values are not included in the `phase_info` object. - - # base_phase = phase_name - # if 'mass' not in guesses: - # mass_guess = prob.aviary_inputs.get_val( - # Mission.Design.GROSS_MASS, units='lbm') - # # Set the mass guess as the initial value for the mass state variable - # setvalprob.set_val(parent_prefix+self.group_prefix+f'_{i}.traj.{phase_name}.states:mass', - # mass_guess, units='lbm') - - # # if 'time' not in guesses: - # # # Determine initial time and duration guesses depending on the phase name - # # if 'desc1' == base_phase: - # # t_initial = flight_duration*.9 - # # t_duration = flight_duration*.04 - # # elif 'desc2' in base_phase: - # # t_initial = flight_duration*.94 - # # t_duration = 5000 - # # # Set the time guesses as the initial values for the time-related trajectory variables - # # setvalprob.set_val(parent_prefix+f"traj.{phase_name}.t_initial", - # # t_initial, units='s') - # # setvalprob.set_val(parent_prefix+f"traj.{phase_name}.t_duration", - # # t_duration, units='s') - - -# ========================================================================= old code - # super_prob = om.Problem() - # num_missions = len(weights) - # probs = [] - # prefix = "problem_" - - # makeN2 = False - # if len(sys.argv) > 1: - # if "n2" in sys.argv: - # makeN2 = True - - # # define individual aviary problems - # for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): - # prob = av.AviaryProblem() - # prob.load_inputs(plane, phase_info) - # prob.check_and_preprocess_inputs() - # prob.add_pre_mission_systems() - # traj = prob.add_phases() # save dymos traj to add to super problem as a subsystem - # prob.add_post_mission_systems() - # prob.link_phases() # this is half working / connect statements from outside of traj to inside are failing - # prob.problem_type = ProblemType.ALTERNATE # adds summary gross mass as design var - # prob.add_design_variables() - # probs.append(prob) - - # group = om.Group() # this group will contain all the promoted aviary vars - # group.add_subsystem("pre", prob.pre_mission) - # group.add_subsystem("traj", traj) - # group.add_subsystem("post", prob.post_mission) - - # # setting defaults for these variables to suppress errors - # longlst = [ - # 'mission:summary:gross_mass', 'aircraft:wing:sweep', - # 'aircraft:wing:thickness_to_chord', 'aircraft:wing:area', - # 'aircraft:wing:taper_ratio', 'mission:design:gross_mass'] - # for var in longlst: - # group.set_input_defaults( - # var, val=MetaData[var]['default_value'], - # units=MetaData[var]['units']) - - # # add group and promote design gross mass (common input amongst multiple missions) - # # in this way it represents the MTOW - # super_prob.model.add_subsystem(prefix+f'{i}', group, promotes=[ - # 'mission:design:gross_mass']) - - # # add design gross mass as a design var - # super_prob.model.add_design_var( - # 'mission:design:gross_mass', lower=100e3, upper=1000e3) - - # for i in range(num_missions): - # # connecting each subcomponent's fuel burn to super problem's unique fuel variables - # super_prob.model.connect( - # prefix+f"{i}.mission:summary:fuel_burned", f"fuel_{i}") - - # # create constraint to force each mission's summary gross mass to not - # # exceed the common mission design gross mass (aka MTOW) - # super_prob.model.add_subsystem(f'MTOW_constraint{i}', om.ExecComp( - # 'mtow_resid = design_gross_mass - summary_gross_mass'), - # promotes=[('summary_gross_mass', prefix+f'{i}.mission:summary:gross_mass'), - # ('design_gross_mass', 'mission:design:gross_mass')]) - - # super_prob.model.add_constraint(f'MTOW_constraint{i}.mtow_resid', lower=0.) - - # # creating variable strings that will represent fuel burn from each mission - # fuel_burned_vars = [f"fuel_{i}" for i in range(num_missions)] - # weighted_str = "+".join([f"{fuel}*{weight}" - # for fuel, weight in zip(fuel_burned_vars, weights)]) - # # weighted_str looks like: fuel_0 * weight[0] + fuel_1 * weight[1] - - # # adding compound execComp to super problem - # super_prob.model.add_subsystem('compound_fuel_burn_objective', om.ExecComp( - # "compound = "+weighted_str), promotes=["compound", *fuel_burned_vars]) - - # super_prob.driver = om.ScipyOptimizeDriver() - # super_prob.driver.options['optimizer'] = 'SLSQP' - # super_prob.model.add_objective('compound') # output from execcomp goes here - - # with warnings.catch_warnings(): - # warnings.simplefilter("ignore", om.OpenMDAOWarning) - # warnings.simplefilter("ignore", om.PromotionWarning) - # super_prob.setup() - - # if makeN2: - # om.n2(super_prob, outfile="multi_mission_importTraj_N2.html") # create N2 diagram - - # # cannot use this b/c initial guesses (i.e. setval func) has to be called on super prob level - # # for prob in probs: - # # # prob.setup() - # # prob.set_initial_guesses() - - # # dm.run_problem(super_prob) - - -""" -Ferry mission phase info: -Times (min): 0, 50, 812, 843 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 7001 nmi -Notes: 32k in 30 mins too fast for aviary, climb to low alt then slow rise through cruise - -Intermediate mission phase info: -Times (min): 0, 50, 560, 590 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 4839 nmi - -Max Payload mission phase info: -Times (min): 0, 50, 260, 290 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 2272 nmi - -Hard to find multiple payload/range values for FwFm (737), so use C-5 instead -Based on: - https://en.wikipedia.org/wiki/Lockheed_C-5_Galaxy#Specifications_(C-5M), - https://www.af.mil/About-Us/Fact-Sheets/Display/Article/1529718/c-5-abc-galaxy-and-c-5m-super-galaxy/ - -MTOW: 840,000 lb -Max Payload: 281,000 lb -Max Fuel: 341,446 lb -Empty Weight: 380,000 lb -> leaves 460,000 lb for fuel+payload (max fuel + max payload = 622,446 lb) - -Payload/range: - 281,000 lb payload -> 2,150 nmi range (AF.mil) [max payload case] - 120,000 lb payload -> 4,800 nmi range (AF.mil) [intermediate case] - 0 lb payload -> 7,000 nmi range (AF.mil) [ferry case] - -Flight characteristics: - Cruise at M0.77 at 33k ft - Max rate of climb: 2100 ft/min -""" - - -""" -input disconnected error: -WARNING: The following inputs are not connected: - group_0.aircraft:air_conditioning:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.AC.aircraft:air_conditioning:mass_scaler) - group_0.aircraft:anti_icing:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.anti_icing.aircraft:anti_icing:mass_scaler) - group_0.aircraft:apu:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.apu.aircraft:apu:mass_scaler) - group_0.aircraft:avionics:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.avionics.aircraft:avionics:mass_scaler) - group_0.aircraft:canard:area (group_0.pre_mission.core_subsystems.core_geometry.canard.aircraft:canard:area) - group_0.aircraft:canard:area (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:canard:area) - group_0.aircraft:canard:area (group_0.pre_mission.core_subsystems.core_mass.canard.aircraft:canard:area) - group_0.aircraft:canard:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:canard:aspect_ratio) - group_0.aircraft:canard:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.canard.aircraft:canard:mass_scaler) - group_0.aircraft:canard:taper_ratio (group_0.pre_mission.core_subsystems.core_mass.canard.aircraft:canard:taper_ratio) - group_0.aircraft:canard:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.canard.aircraft:canard:thickness_to_chord) - group_0.aircraft:canard:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:canard:thickness_to_chord) - group_0.aircraft:canard:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.canard.aircraft:canard:wetted_area_scaler) - group_0.aircraft:crew_and_payload:cargo_container_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.cargo_containers.aircraft:crew_and_payload:cargo_container_mass_scaler) - group_0.aircraft:crew_and_payload:cargo_mass (group_0.pre_mission.core_subsystems.core_mass.cargo_containers.aircraft:crew_and_payload:cargo_mass) - group_0.aircraft:crew_and_payload:cargo_mass (group_0.pre_mission.core_subsystems.core_mass.total_mass.zero_fuel_mass.aircraft:crew_and_payload:cargo_mass) - group_0.aircraft:crew_and_payload:flight_crew_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.flight_crew.aircraft:crew_and_payload:flight_crew_mass_scaler) - group_0.aircraft:crew_and_payload:misc_cargo (group_0.pre_mission.core_subsystems.core_mass.cargo.aircraft:crew_and_payload:misc_cargo) - group_0.aircraft:crew_and_payload:non_flight_crew_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.nonflight_crew.aircraft:crew_and_payload:non_flight_crew_mass_scaler) - group_0.aircraft:crew_and_payload:passenger_service_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.pass_service.aircraft:crew_and_payload:passenger_service_mass_scaler) - group_0.aircraft:crew_and_payload:wing_cargo (group_0.pre_mission.core_subsystems.core_mass.cargo.aircraft:crew_and_payload:wing_cargo) - group_0.aircraft:design:base_area (group_0.traj.param_comp.parameters:aircraft:design:base_area) - group_0.aircraft:design:empty_mass_margin_scaler (group_0.pre_mission.core_subsystems.core_mass.total_mass.empty_mass_margin.aircraft:design:empty_mass_margin_scaler) - group_0.aircraft:design:external_subsystems_mass (group_0.pre_mission.core_subsystems.core_mass.total_mass.system_equip_mass.aircraft:design:external_subsystems_mass) - group_0.aircraft:design:lift_dependent_drag_coeff_factor (group_0.traj.param_comp.parameters:aircraft:design:lift_dependent_drag_coeff_factor) - group_0.aircraft:design:reserve_fuel_additional (group_0.post_mission.reserve_fuel.reserve_fuel_additional) - group_0.aircraft:design:subsonic_drag_coeff_factor (group_0.traj.param_comp.parameters:aircraft:design:subsonic_drag_coeff_factor) - group_0.aircraft:design:supersonic_drag_coeff_factor (group_0.traj.param_comp.parameters:aircraft:design:supersonic_drag_coeff_factor) - group_0.aircraft:design:zero_lift_drag_coeff_factor (group_0.traj.param_comp.parameters:aircraft:design:zero_lift_drag_coeff_factor) - group_0.aircraft:electrical:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.electrical.aircraft:electrical:mass_scaler) - group_0.aircraft:engine:mass (group_0.pre_mission.core_subsystems.core_mass.wing_group.engine_pod_mass.aircraft:engine:mass) - group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_propulsion.CF6.aircraft:engine:scaled_sls_thrust) - group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_propulsion.propulsion_sum.aircraft:engine:scaled_sls_thrust) - group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_subsystems.core_mass.engine_mass.aircraft:engine:scaled_sls_thrust) - group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_subsystems.core_mass.nacelle.aircraft:engine:scaled_sls_thrust) - group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_subsystems.core_mass.thrust_rev.aircraft:engine:scaled_sls_thrust) - group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_subsystems.core_mass.wing_group.engine_pod_mass.aircraft:engine:scaled_sls_thrust) - group_0.aircraft:engine:thrust_reversers_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.thrust_rev.aircraft:engine:thrust_reversers_mass_scaler) - group_0.aircraft:engine:wing_locations (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:engine:wing_locations) - group_0.aircraft:engine:wing_locations (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:engine:wing_locations) - group_0.aircraft:fins:area (group_0.pre_mission.core_subsystems.core_mass.fin.aircraft:fins:area) - group_0.aircraft:fins:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.fin.aircraft:fins:mass_scaler) - group_0.aircraft:fins:taper_ratio (group_0.pre_mission.core_subsystems.core_mass.fin.aircraft:fins:taper_ratio) - group_0.aircraft:fuel:auxiliary_fuel_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.total_fuel_capacity.aircraft:fuel:auxiliary_fuel_capacity) - group_0.aircraft:fuel:capacity_factor (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:capacity_factor) - group_0.aircraft:fuel:density_ratio (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:density_ratio) - group_0.aircraft:fuel:density_ratio (group_0.pre_mission.core_subsystems.core_mass.unusable_fuel.aircraft:fuel:density_ratio) - group_0.aircraft:fuel:fuel_margin (group_0.post_mission.fuel_calc.fuel_margin) - group_0.aircraft:fuel:fuel_system_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.fuel_system.aircraft:fuel:fuel_system_mass_scaler) - group_0.aircraft:fuel:fuselage_fuel_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.auxiliary_fuel_capacity.aircraft:fuel:fuselage_fuel_capacity) - group_0.aircraft:fuel:fuselage_fuel_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.total_fuel_capacity.aircraft:fuel:fuselage_fuel_capacity) - group_0.aircraft:fuel:total_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.auxiliary_fuel_capacity.aircraft:fuel:total_capacity) - group_0.aircraft:fuel:total_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.fuselage_fuel_capacity.aircraft:fuel:total_capacity) - group_0.aircraft:fuel:total_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_system.aircraft:fuel:total_capacity) - group_0.aircraft:fuel:total_capacity (group_0.pre_mission.core_subsystems.core_mass.unusable_fuel.aircraft:fuel:total_capacity) - group_0.aircraft:fuel:unusable_fuel_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.unusable_fuel.aircraft:fuel:unusable_fuel_mass_scaler) - group_0.aircraft:fuel:wing_ref_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:wing_ref_capacity) - group_0.aircraft:fuel:wing_ref_capacity_area (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:wing_ref_capacity_area) - group_0.aircraft:fuel:wing_ref_capacity_term_A (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:wing_ref_capacity_term_A) - group_0.aircraft:fuel:wing_ref_capacity_term_B (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:wing_ref_capacity_term_B) - group_0.aircraft:furnishings:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.furnishings.aircraft:furnishings:mass_scaler) - group_0.aircraft:fuselage:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:fuselage:laminar_flow_lower) - group_0.aircraft:fuselage:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:fuselage:laminar_flow_upper) - group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:fuselage:length) - group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:fuselage:length) - group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_geometry.fuselage_prelim.aircraft:fuselage:length) - group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_mass.electrical.aircraft:fuselage:length) - group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_mass.fuselage.aircraft:fuselage:length) - group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:fuselage:length) - group_0.aircraft:fuselage:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.fuselage.aircraft:fuselage:mass_scaler) - group_0.aircraft:fuselage:max_height (group_0.pre_mission.core_subsystems.core_geometry.fuselage_prelim.aircraft:fuselage:max_height) - group_0.aircraft:fuselage:max_height (group_0.pre_mission.core_subsystems.core_mass.AC.aircraft:fuselage:max_height) - group_0.aircraft:fuselage:max_height (group_0.pre_mission.core_subsystems.core_mass.furnishings.aircraft:fuselage:max_height) - group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_geometry.fuselage_prelim.aircraft:fuselage:max_width) - group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:fuselage:max_width) - group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_mass.anti_icing.aircraft:fuselage:max_width) - group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_mass.electrical.aircraft:fuselage:max_width) - group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_mass.furnishings.aircraft:fuselage:max_width) - group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:fuselage:max_width) - group_0.aircraft:fuselage:passenger_compartment_length (group_0.pre_mission.core_subsystems.core_mass.furnishings.aircraft:fuselage:passenger_compartment_length) - group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.AC.aircraft:fuselage:planform_area) - group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.apu.aircraft:fuselage:planform_area) - group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.avionics.aircraft:fuselage:planform_area) - group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.hydraulics.aircraft:fuselage:planform_area) - group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.instruments.aircraft:fuselage:planform_area) - group_0.aircraft:fuselage:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:fuselage:wetted_area_scaler) - group_0.aircraft:horizontal_tail:area (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:horizontal_tail:area) - group_0.aircraft:horizontal_tail:area (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:horizontal_tail:area) - group_0.aircraft:horizontal_tail:area (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:horizontal_tail:area) - group_0.aircraft:horizontal_tail:area (group_0.pre_mission.core_subsystems.core_mass.htail.aircraft:horizontal_tail:area) - group_0.aircraft:horizontal_tail:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:horizontal_tail:aspect_ratio) - group_0.aircraft:horizontal_tail:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:horizontal_tail:aspect_ratio) - group_0.aircraft:horizontal_tail:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:horizontal_tail:laminar_flow_lower) - group_0.aircraft:horizontal_tail:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:horizontal_tail:laminar_flow_upper) - group_0.aircraft:horizontal_tail:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.htail.aircraft:horizontal_tail:mass_scaler) - group_0.aircraft:horizontal_tail:taper_ratio (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:horizontal_tail:taper_ratio) - group_0.aircraft:horizontal_tail:taper_ratio (group_0.pre_mission.core_subsystems.core_mass.htail.aircraft:horizontal_tail:taper_ratio) - group_0.aircraft:horizontal_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:horizontal_tail:thickness_to_chord) - group_0.aircraft:horizontal_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:horizontal_tail:thickness_to_chord) - group_0.aircraft:horizontal_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:horizontal_tail:thickness_to_chord) - group_0.aircraft:horizontal_tail:vertical_tail_fraction (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:horizontal_tail:vertical_tail_fraction) - group_0.aircraft:horizontal_tail:vertical_tail_fraction (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:horizontal_tail:vertical_tail_fraction) - group_0.aircraft:horizontal_tail:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:horizontal_tail:wetted_area_scaler) - group_0.aircraft:hydraulics:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.hydraulics.aircraft:hydraulics:mass_scaler) - group_0.aircraft:hydraulics:system_pressure (group_0.pre_mission.core_subsystems.core_mass.hydraulics.aircraft:hydraulics:system_pressure) - group_0.aircraft:instruments:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.instruments.aircraft:instruments:mass_scaler) - group_0.aircraft:landing_gear:main_gear_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.landing_group.landing_gear.aircraft:landing_gear:main_gear_mass_scaler) - group_0.aircraft:landing_gear:nose_gear_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.landing_group.landing_gear.aircraft:landing_gear:nose_gear_mass_scaler) - group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:nacelle:avg_diameter) - group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_geometry.nacelles.aircraft:nacelle:avg_diameter) - group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_mass.anti_icing.aircraft:nacelle:avg_diameter) - group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:nacelle:avg_diameter) - group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_mass.nacelle.aircraft:nacelle:avg_diameter) - group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_mass.starter.aircraft:nacelle:avg_diameter) - group_0.aircraft:nacelle:avg_length (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:nacelle:avg_length) - group_0.aircraft:nacelle:avg_length (group_0.pre_mission.core_subsystems.core_geometry.nacelles.aircraft:nacelle:avg_length) - group_0.aircraft:nacelle:avg_length (group_0.pre_mission.core_subsystems.core_mass.nacelle.aircraft:nacelle:avg_length) - group_0.aircraft:nacelle:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:nacelle:laminar_flow_lower) - group_0.aircraft:nacelle:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:nacelle:laminar_flow_upper) - group_0.aircraft:nacelle:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.nacelle.aircraft:nacelle:mass_scaler) - group_0.aircraft:nacelle:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.nacelles.aircraft:nacelle:wetted_area_scaler) - group_0.aircraft:paint:mass_per_unit_area (group_0.pre_mission.core_subsystems.core_mass.paint.aircraft:paint:mass_per_unit_area) - group_0.aircraft:propulsion:engine_oil_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.engine_oil.aircraft:propulsion:engine_oil_mass_scaler) - group_0.aircraft:propulsion:misc_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.misc_engine.aircraft:propulsion:misc_mass_scaler) - group_0.aircraft:vertical_tail:area (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:vertical_tail:area) - group_0.aircraft:vertical_tail:area (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:vertical_tail:area) - group_0.aircraft:vertical_tail:area (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:vertical_tail:area) - group_0.aircraft:vertical_tail:area (group_0.pre_mission.core_subsystems.core_mass.vert_tail.aircraft:vertical_tail:area) - group_0.aircraft:vertical_tail:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:vertical_tail:aspect_ratio) - group_0.aircraft:vertical_tail:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:vertical_tail:aspect_ratio) - group_0.aircraft:vertical_tail:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:vertical_tail:laminar_flow_lower) - group_0.aircraft:vertical_tail:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:vertical_tail:laminar_flow_upper) - group_0.aircraft:vertical_tail:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.vert_tail.aircraft:vertical_tail:mass_scaler) - group_0.aircraft:vertical_tail:taper_ratio (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:vertical_tail:taper_ratio) - group_0.aircraft:vertical_tail:taper_ratio (group_0.pre_mission.core_subsystems.core_mass.vert_tail.aircraft:vertical_tail:taper_ratio) - group_0.aircraft:vertical_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:vertical_tail:thickness_to_chord) - group_0.aircraft:vertical_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:vertical_tail:thickness_to_chord) - group_0.aircraft:vertical_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:vertical_tail:thickness_to_chord) - group_0.aircraft:vertical_tail:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:vertical_tail:wetted_area_scaler) - group_0.aircraft:wing:aeroelastic_tailoring_factor (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:aeroelastic_tailoring_factor) - group_0.aircraft:wing:aeroelastic_tailoring_factor (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:aeroelastic_tailoring_factor) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.wing.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.wing_prelim.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.hydraulics.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.surf_ctrl.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.unusable_fuel.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_misc.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.traj.param_comp.parameters:aircraft:wing:area) - group_0.aircraft:wing:aspect_ratio (group_0.pre_mission.core_subsystems.core_aerodynamics.design.aircraft:wing:aspect_ratio) - group_0.aircraft:wing:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:wing:aspect_ratio) - group_0.aircraft:wing:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:wing:aspect_ratio) - group_0.aircraft:wing:aspect_ratio (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:aspect_ratio) - group_0.aircraft:wing:aspect_ratio (group_0.traj.param_comp.parameters:aircraft:wing:aspect_ratio) - group_0.aircraft:wing:aspect_ratio_reference (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:aspect_ratio_reference) - group_0.aircraft:wing:bending_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:bending_mass_scaler) - group_0.aircraft:wing:bwb_aft_body_mass (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_total.aircraft:wing:bwb_aft_body_mass) - group_0.aircraft:wing:chord_per_semispan (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:chord_per_semispan) - group_0.aircraft:wing:composite_fraction (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:composite_fraction) - group_0.aircraft:wing:composite_fraction (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_misc.aircraft:wing:composite_fraction) - group_0.aircraft:wing:composite_fraction (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_shear_control.aircraft:wing:composite_fraction) - group_0.aircraft:wing:control_surface_area (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_shear_control.aircraft:wing:control_surface_area) - group_0.aircraft:wing:control_surface_area_ratio (group_0.pre_mission.core_subsystems.core_mass.surf_ctrl.aircraft:wing:control_surface_area_ratio) - group_0.aircraft:wing:dihedral (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:wing:dihedral) - group_0.aircraft:wing:glove_and_bat (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:wing:glove_and_bat) - group_0.aircraft:wing:glove_and_bat (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:wing:glove_and_bat) - group_0.aircraft:wing:glove_and_bat (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:wing:glove_and_bat) - group_0.aircraft:wing:glove_and_bat (group_0.pre_mission.core_subsystems.core_geometry.wing_prelim.aircraft:wing:glove_and_bat) - group_0.aircraft:wing:incidence (group_0.traj.param_comp.parameters:aircraft:wing:incidence) - group_0.aircraft:wing:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:wing:laminar_flow_lower) - group_0.aircraft:wing:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:wing:laminar_flow_upper) - group_0.aircraft:wing:load_fraction (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:load_fraction) - group_0.aircraft:wing:load_path_sweep_dist (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:load_path_sweep_dist) - group_0.aircraft:wing:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_total.aircraft:wing:mass_scaler) - group_0.aircraft:wing:max_camber_at_70_semispan (group_0.pre_mission.core_subsystems.core_aerodynamics.design.aircraft:wing:max_camber_at_70_semispan) - group_0.aircraft:wing:max_camber_at_70_semispan (group_0.traj.param_comp.parameters:aircraft:wing:max_camber_at_70_semispan) - group_0.aircraft:wing:misc_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:misc_mass_scaler) - group_0.aircraft:wing:misc_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_misc.aircraft:wing:misc_mass_scaler) - group_0.aircraft:wing:shear_control_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:shear_control_mass_scaler) - group_0.aircraft:wing:shear_control_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_shear_control.aircraft:wing:shear_control_mass_scaler) - group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:wing:span) - group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_geometry.wing_prelim.aircraft:wing:span) - group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_mass.anti_icing.aircraft:wing:span) - group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:wing:span) - group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:wing:span) - group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:span) -""" From d5d92b19d8144cceece4f497e1fe825ed1ee833f Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Tue, 6 Aug 2024 10:39:28 -0400 Subject: [PATCH 033/113] updated to use problem type alternate for gtow constraints --- multi_aviary_copymodel.py | 4 +++- test_single_aviary.py | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 40ea1ad61..67cb3cbce 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -17,6 +17,7 @@ from easy_phase_info_inter import phase_info as easy_inter from easy_phase_info_max import phase_info as easy_max from aviary.variable_info.variables import Mission, Aircraft +from aviary.variable_info.enums import ProblemType # "comp?.a can be used to reference multiple comp1.a comp2.a etc" @@ -50,12 +51,13 @@ def __init__(self, planes, phase_infos, weights): prob.add_phases() prob.add_post_mission_systems() prob.link_phases() + prob.problem_type = ProblemType.ALTERNATE prob.add_design_variables() # should not work at super prob level self.probs.append(prob) self.model.add_subsystem( self.group_prefix + f'_{i}', prob.model, - promotes=['mission:design:gross_mass']) + promotes=[Mission.Design.GROSS_MASS]) def add_design_variables(self): self.model.add_design_var('mission:design:gross_mass', lower=10., upper=900e3) diff --git a/test_single_aviary.py b/test_single_aviary.py index 82406d682..10acfeeac 100644 --- a/test_single_aviary.py +++ b/test_single_aviary.py @@ -1,6 +1,8 @@ import aviary.api as av from easy_phase_info_max import phase_info as max_phase_info from easy_phase_info_inter import phase_info as inter_phase_info +# from c5_models.c5_maxpayload_phase_info import phase_info as max_phase_info +# from c5_models.c5_intermediate_phase_info import phase_info as inter_phase_info from aviary.variable_info.variables import Mission, Aircraft From 468f39b6677518b0bf96d8c8aeadd724c34bfce8 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Tue, 6 Aug 2024 10:53:47 -0400 Subject: [PATCH 034/113] remove scaling from flight_phase_builder b/c not needed --- aviary/mission/flight_phase_builder.py | 4 ++-- multi_aviary_copymodel.py | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/aviary/mission/flight_phase_builder.py b/aviary/mission/flight_phase_builder.py index b7f4e3b9e..17027fbeb 100644 --- a/aviary/mission/flight_phase_builder.py +++ b/aviary/mission/flight_phase_builder.py @@ -121,7 +121,7 @@ def build_phase(self, aviary_options: AviaryValues = None, phase_type=EquationsO phase.add_state( Dynamic.Mission.MASS, fix_initial=fix_initial_mass, fix_final=False, - lower=0.0, ref=1e4, defect_ref=1e4, units='kg', + lower=0.0, ref=1e4, defect_ref=1e6, units='kg', rate_source=rate_source, targets=Dynamic.Mission.MASS, input_initial=input_initial_mass, @@ -133,7 +133,7 @@ def build_phase(self, aviary_options: AviaryValues = None, phase_type=EquationsO fix_initial, Dynamic.Mission.DISTANCE, True) phase.add_state( Dynamic.Mission.DISTANCE, fix_initial=fix_initial_distance, fix_final=False, - lower=0.0, ref=1e6, defect_ref=1e6, units='m', + lower=0.0, ref=1e6, defect_ref=1e8, units='m', rate_source=Dynamic.Mission.DISTANCE_RATE, input_initial=input_initial_distance, solve_segments='forward' if solve_for_distance else None, diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 656bd9703..63b147663 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -71,8 +71,8 @@ def add_driver(self): # set coloring at this value. 1e-45 didn't seem to make much difference self.driver.declare_coloring(tol=1e-25, orders=None) self.driver.opt_settings["Major iterations limit"] = 60 - self.driver.opt_settings["Major optimality tolerance"] = 5e-4 - self.driver.opt_settings["Major feasibility tolerance"] = 4e-5 + self.driver.opt_settings["Major optimality tolerance"] = 1e-6 + self.driver.opt_settings["Major feasibility tolerance"] = 1e-6 self.driver.opt_settings["iSumm"] = 6 self.driver.opt_settings['Verify level'] = -1 # self.driver.options['maxiter'] = 1e3 @@ -102,7 +102,7 @@ def add_objective(self): # connecting each subcomponent's fuel burn to super problem's unique fuel variables self.model.connect( self.group_prefix+f"_{i}.{Mission.Objectives.FUEL}", f"fuel_{i}") - self.model.add_objective('compound', ref=1e4) + self.model.add_objective('compound', ref=1) def setup_wrapper(self): """Wrapper for om.Problem setup with warning ignoring and setting options""" @@ -160,3 +160,6 @@ def run(self): print("Fuel burned") print(super_prob.get_val(f'group_0.{Mission.Summary.FUEL_BURNED}')) print(super_prob.get_val(f'group_1.{Mission.Summary.FUEL_BURNED}')) + print("Summary Gross Mass") + print(super_prob.get_val(f'group_0.{Mission.Summary.GROSS_MASS}')) + print(super_prob.get_val(f'group_1.{Mission.Summary.GROSS_MASS}')) From ec63557f80790d26cf1df32a0ddff5902035557f Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Tue, 6 Aug 2024 14:07:47 -0400 Subject: [PATCH 035/113] modification to mission.summary.range and mission.design.range to make sure both aircraft for each mission are designed the same. Previously avionics and landing gear were calculated based on different ranges which caused different masses of 184lb. Current mass from new results is exatly the same. Methods for level2 has residual errors based on removing mission.summary.range and replacing with actual_range. --- aviary/interface/methods_for_level2.py | 12 ++++++------ aviary/variable_info/variable_meta_data.py | 3 ++- multi_aviary_copymodel.py | 21 +++++++++++++-------- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index 3f859fcdd..0a056f1ad 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -367,14 +367,14 @@ def load_inputs( ['actual_takeoff_mass'], units='lbm') if 'target_range' in self.post_mission_info: - aviary_inputs.set_val(Mission.Design.RANGE, wrapped_convert_units( + aviary_inputs.set_val(Mission.Summary.RANGE, wrapped_convert_units( phase_info['post_mission']['target_range'], 'NM'), units='NM') self.require_range_residual = True else: self.require_range_residual = False self.target_range = aviary_inputs.get_val( - Mission.Design.RANGE, units='NM') + Mission.Summary.RANGE, units='NM') return aviary_inputs @@ -1446,7 +1446,7 @@ def link_phases(self): connected=true_unless_mpi) self.model.connect(f'traj.{self.regular_phases[-1]}.timeseries.distance', - Mission.Summary.RANGE, + 'actual_range', src_indices=[-1], flat_src_indices=True) elif self.mission_method is SOLVED_2DOF: @@ -2472,7 +2472,7 @@ def _add_objectives(self): "val": self.target_range, "units": "NM"}, ), promotes_inputs=[ - ("actual_range", Mission.Summary.RANGE), + "actual_range", ("ascent_duration", Mission.Takeoff.ASCENT_DURATION), ], promotes_outputs=[("reg_objective", Mission.Objectives.RANGE)], @@ -2487,8 +2487,8 @@ def _add_objectives(self): range_resid={"val": 30, "units": "NM"}, ), promotes_inputs=[ - ("actual_range", Mission.Summary.RANGE), - ("target_range", Mission.Design.RANGE), + "actual_range", + ("target_range", Mission.Summary.RANGE), ], promotes_outputs=[ ("range_resid", Mission.Constraints.RANGE_RESIDUAL)], diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index 3459f1f37..e17f17509 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -3880,7 +3880,8 @@ "LEAPS1": 'aircraft.inputs.L0_overrides.landing_gear_main_weight' }, units='unitless', - desc='mass scaler of the main landing gear structure' + desc='mass scaler of the main landing gear structure', + default_value=1.0, ) add_meta_data( diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 63b147663..6e3c45dbd 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -57,7 +57,7 @@ def __init__(self, planes, phase_infos, weights): self.model.add_subsystem( self.group_prefix + f'_{i}', prob.model, - promotes=['mission:design:gross_mass']) + promotes=['mission:design:gross_mass', 'mission:design:range']) def add_design_variables(self): self.model.add_design_var('mission:design:gross_mass', lower=10., upper=900e3) @@ -127,6 +127,14 @@ def run(self): # self.run_driver() dm.run_problem(self, make_plots=True) + def get_design_range(self, phase_infos): + design_range = 0 + for phase_info in phase_infos: + get_range = phase_info['post_mission']['target_range'][0] # TBD add units + if get_range > design_range: + design_range = get_range + return design_range + if __name__ == '__main__': makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False @@ -138,16 +146,12 @@ def run(self): super_prob.add_driver() super_prob.add_design_variables() super_prob.add_objective() + super_prob.model.set_input_defaults('mission:design:range', val=4000) super_prob.setup_wrapper() + super_prob.set_val('mission:design:range', super_prob.get_design_range(phase_infos)) for i, prob in enumerate(super_prob.probs): - super_prob.set_val( - super_prob.group_prefix + - f"_{i}.aircraft:design:landing_to_takeoff_mass_ratio", 0.5) prob.set_initial_guesses(super_prob, super_prob.group_prefix+f"_{i}.") - print(super_prob.get_val(super_prob.group_prefix + - f"_{i}.aircraft:design:landing_to_takeoff_mass_ratio")) - print(super_prob.get_val(super_prob.group_prefix + - f"_{i}.mission:summary:range")) + # super_prob.final_setup() if makeN2: from createN2 import createN2 @@ -163,3 +167,4 @@ def run(self): print("Summary Gross Mass") print(super_prob.get_val(f'group_0.{Mission.Summary.GROSS_MASS}')) print(super_prob.get_val(f'group_1.{Mission.Summary.GROSS_MASS}')) + # super_prob.model.group_1.list_vars(units=True, print_arrays=True) From a2226426045852e9245d3b4c8046054478dc2f89 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Tue, 6 Aug 2024 14:14:26 -0400 Subject: [PATCH 036/113] merge --- aviary/interface/methods_for_level2.py | 12 +- multi_aviary_copymodel.py | 558 ++----------------------- 2 files changed, 48 insertions(+), 522 deletions(-) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index 3f859fcdd..03c3622d4 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -367,14 +367,14 @@ def load_inputs( ['actual_takeoff_mass'], units='lbm') if 'target_range' in self.post_mission_info: - aviary_inputs.set_val(Mission.Design.RANGE, wrapped_convert_units( + aviary_inputs.set_val(Mission.Summary.RANGE, wrapped_convert_units( phase_info['post_mission']['target_range'], 'NM'), units='NM') self.require_range_residual = True else: self.require_range_residual = False self.target_range = aviary_inputs.get_val( - Mission.Design.RANGE, units='NM') + Mission.Summary.RANGE, units='NM') return aviary_inputs @@ -1446,7 +1446,7 @@ def link_phases(self): connected=true_unless_mpi) self.model.connect(f'traj.{self.regular_phases[-1]}.timeseries.distance', - Mission.Summary.RANGE, + "actual_range", src_indices=[-1], flat_src_indices=True) elif self.mission_method is SOLVED_2DOF: @@ -2472,7 +2472,7 @@ def _add_objectives(self): "val": self.target_range, "units": "NM"}, ), promotes_inputs=[ - ("actual_range", Mission.Summary.RANGE), + "actual_range", ("ascent_duration", Mission.Takeoff.ASCENT_DURATION), ], promotes_outputs=[("reg_objective", Mission.Objectives.RANGE)], @@ -2487,8 +2487,8 @@ def _add_objectives(self): range_resid={"val": 30, "units": "NM"}, ), promotes_inputs=[ - ("actual_range", Mission.Summary.RANGE), - ("target_range", Mission.Design.RANGE), + "actual_range", + ("target_range", Mission.Summary.RANGE), ], promotes_outputs=[ ("range_resid", Mission.Constraints.RANGE_RESIDUAL)], diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 67cb3cbce..bbc794908 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -11,6 +11,7 @@ import openmdao.api as om import dymos as dm import numpy as np +import matplotlib.pyplot as plt from c5_models.c5_ferry_phase_info import phase_info as c5_ferry_phase_info from c5_models.c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info from c5_models.c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info @@ -18,6 +19,8 @@ from easy_phase_info_max import phase_info as easy_max from aviary.variable_info.variables import Mission, Aircraft from aviary.variable_info.enums import ProblemType +from openmdao.api import CaseReader + # "comp?.a can be used to reference multiple comp1.a comp2.a etc" @@ -57,7 +60,7 @@ def __init__(self, planes, phase_infos, weights): self.model.add_subsystem( self.group_prefix + f'_{i}', prob.model, - promotes=[Mission.Design.GROSS_MASS]) + promotes=[Mission.Design.GROSS_MASS, Mission.Design.RANGE]) def add_design_variables(self): self.model.add_design_var('mission:design:gross_mass', lower=10., upper=900e3) @@ -96,7 +99,7 @@ def add_objective(self): # connecting each subcomponent's fuel burn to super problem's unique fuel variables self.model.connect( self.group_prefix+f"_{i}.{Mission.Objectives.FUEL}", f"fuel_{i}") - self.model.add_objective('compound', ref=1e4) + self.model.add_objective('compound', ref=1) def setup_wrapper(self): """Wrapper for om.Problem setup with warning ignoring and setting options""" @@ -119,7 +122,7 @@ def run(self): self.model.set_solver_print(0) # self.run_driver() - dm.run_problem(self, make_plots=True) + dm.run_problem(self, solution_record_file='res.db') if __name__ == '__main__': @@ -127,6 +130,7 @@ def run(self): planes = ['c5_models/c5_maxpayload.csv', 'c5_models/c5_intermediate.csv'] # phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] phase_infos = [easy_max, easy_inter] + phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] weights = [1, 1] super_prob = MultiMissionProblem(planes, phase_infos, weights) super_prob.add_driver() @@ -149,14 +153,45 @@ def run(self): super_prob.run() outputs = {Mission.Summary.FUEL_BURNED: [], - Aircraft.Design.EMPTY_MASS: []} + Aircraft.Design.EMPTY_MASS: [], + Mission.Summary.GROSS_MASS: []} print("\n\n=========================\n") for key in outputs.keys(): - val1 = super_prob.get_val(f'group_0.{key}')[0] - val2 = super_prob.get_val(f'group_1.{key}')[0] + val1 = super_prob.get_val(f'group_0.{key}', units='lbm')[0] + val2 = super_prob.get_val(f'group_1.{key}', units='lbm')[0] print(f"Variable: {key}") - print(f"Values: {val1}, {val2}") + print(f"Values: {val1}, {val2} (lbm)") + + comps = ['vertical_tail', 'horizontal_tail', 'wing', 'fuselage'] + print("\nmass comparisons") + for comp in comps: + v1 = super_prob.get_val(f'group_0.aircraft:{comp}:mass') + v2 = super_prob.get_val(f'group_1.aircraft:{comp}:mass') + print(f'{comp}: {v1} vs. {v2}') + + sol = CaseReader('res.db').get_case('final') + # super_prob.model.list_vars() + # for i in range(2): + var = 'throttle' + t = np.concatenate([sol.get_val('group_0.traj.climb_1.t'), + sol.get_val('group_0.traj.climb_2.t'), + sol.get_val('group_0.traj.descent_1.t')]) + alt = np.concatenate([sol.get_val(f'group_0.traj.climb_1.timeseries.{var}'), + sol.get_val(f'group_0.traj.climb_2.timeseries.{var}'), + sol.get_val(f'group_0.traj.descent_1.timeseries.{var}')]) + t2 = np.concatenate([sol.get_val('group_1.traj.climb_1.t'), + sol.get_val('group_1.traj.climb_2.t'), + sol.get_val('group_1.traj.descent_1.t')]) + alt2 = np.concatenate([sol.get_val(f'group_1.traj.climb_1.timeseries.{var}'), + sol.get_val(f'group_1.traj.climb_2.timeseries.{var}'), + sol.get_val(f'group_1.traj.descent_1.timeseries.{var}')]) + plt.plot(t, alt, 'r*') + plt.plot(t2, alt2, 'b*') + plt.title(f"Time vs {var}") + plt.legend(['group_0', 'group_1']) + plt.grid() + plt.show() """ Variable: mission:summary:fuel_burned @@ -164,512 +199,3 @@ def run(self): Variable: aircraft:design:empty_mass Values: 336859.7179064408, 337047.85745526763 """ - -# def initvals(self): -# """attempting to copy over aviary code for setting initial values and changing references""" -# for i, prob in enumerate(self.probs): -# setvalprob.set_val(parent_prefix+self.group_prefix + -# f'_{i}.aircraft:design:landing_to_takeoff_mass_ratio', 0.5) -# # Grab the trajectory object from the model -# traj = prob.model.traj - -# # Determine which phases to loop over, fetching them from the trajectory -# phase_items = traj._phases.items() - -# # Loop over each phase and set initial guesses for the state and control variables -# for idx, (phase_name, phase) in enumerate(phase_items): -# # If not, fetch the initial guesses specific to the phase -# # check if guesses exist for this phase -# if "initial_guesses" in prob.phase_info[phase_name]: -# guesses = prob.phase_info[phase_name]['initial_guesses'] -# else: -# guesses = {} - -# # ||||||||||||| _add_subsystem_guesses -# # Get all subsystems associated with the phase -# all_subsystems = prob._get_all_subsystems( -# prob.phase_info[phase_name]['external_subsystems']) - -# # Loop over each subsystem -# for subsystem in all_subsystems: -# # Fetch the initial guesses for the subsystem -# initial_guesses = subsystem.get_initial_guesses() - -# # Loop over each guess -# for key, val in initial_guesses.items(): -# # Identify the type of the guess (state or control) -# type = val.pop('type') -# if 'state' in type: -# path_string = 'states' -# elif 'control' in type: -# path_string = 'controls' - -# # Process the guess variable (handles array interpolation) -# val['val'] = prob._process_guess_var(val['val'], key, phase) - -# # Set the initial guess in the problem -# setvalprob.set_val(parent_prefix+ -# self.group_prefix + -# f'_{i}.traj.{phase_name}.{path_string}:{key}', **val) - -# # Set initial guesses for states and controls for each phase - -# # |||||||||||||||||||||| _add_guesses -# # If using the GASP model, set initial guesses for the rotation mass and flight duration -# if prob.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): -# control_keys = ["mach", "altitude"] -# state_keys = ["mass", Dynamic.Mission.DISTANCE] -# prob_keys = ["tau_gear", "tau_flaps"] - -# # for the simple mission method, use the provided initial and final mach and altitude values from phase_info -# if prob.mission_method in (HEIGHT_ENERGY, SOLVED_2DOF): -# initial_altitude = wrapped_convert_units( -# prob.phase_info[phase_name]['user_options'] -# ['initial_altitude'], -# 'ft') -# final_altitude = wrapped_convert_units( -# prob.phase_info[phase_name]['user_options']['final_altitude'], 'ft') -# initial_mach = prob.phase_info[phase_name]['user_options'][ -# 'initial_mach'] -# final_mach = prob.phase_info[phase_name]['user_options'][ -# 'final_mach'] - -# guesses["mach"] = ([initial_mach[0], final_mach[0]], "unitless") -# guesses["altitude"] = ([initial_altitude, final_altitude], 'ft') - -# if prob.mission_method is HEIGHT_ENERGY: -# # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds -# if 'time' not in guesses: -# initial_bounds = wrapped_convert_units( -# prob.phase_info[phase_name]['user_options']['initial_bounds'], 's') -# duration_bounds = wrapped_convert_units( -# prob.phase_info[phase_name]['user_options']['duration_bounds'], 's') -# guesses["time"] = ([np.mean(initial_bounds[0]), np.mean( -# duration_bounds[0])], 's') - -# # if time not in initial guesses, set it to the average of the initial_bounds and the duration_bounds -# if 'time' not in guesses: -# initial_bounds = prob.phase_info[phase_name]['user_options'][ -# 'initial_bounds'] -# duration_bounds = prob.phase_info[phase_name]['user_options'][ -# 'duration_bounds'] -# # Add a check for the initial and duration bounds, raise an error if they are not consistent -# if initial_bounds[1] != duration_bounds[1]: -# raise ValueError( -# f"Initial and duration bounds for {phase_name} are not consistent.") -# guesses["time"] = ([np.mean(initial_bounds[0]), np.mean( -# duration_bounds[0])], initial_bounds[1]) - -# for guess_key, guess_data in guesses.items(): -# val, units = guess_data - -# # Set initial guess for time variables -# if 'time' == guess_key and prob.mission_method is not SOLVED_2DOF: -# setvalprob.set_val(parent_prefix+ -# self.group_prefix + f'_{i}.traj.{phase_name}.t_initial', -# val[0], -# units=units) -# setvalprob.set_val(parent_prefix+ -# self.group_prefix + f'_{i}.traj.{phase_name}.t_duration', -# val[1], -# units=units) - -# else: -# # Set initial guess for control variables -# if guess_key in control_keys: -# try: -# setvalprob.set_val(parent_prefix+self.group_prefix + -# f'_{i}.traj.{phase_name}.controls:{guess_key}', -# prob._process_guess_var( -# val, guess_key, phase), -# units=units) -# except KeyError: -# try: -# setvalprob.set_val(parent_prefix+ -# self.group_prefix + -# f'_{i}.traj.{phase_name}.polynomial_controls:{guess_key}', -# prob._process_guess_var(val, guess_key, phase), -# units=units) -# except KeyError: -# setvalprob.set_val(parent_prefix+ -# self.group_prefix + -# f'_{i}.traj.{phase_name}.bspline_controls:{guess_key}', -# prob._process_guess_var(val, guess_key, phase), -# units=units) - -# if guess_key in control_keys: -# pass -# # Set initial guess for state variables -# elif guess_key in state_keys: -# setvalprob.set_val(parent_prefix+self.group_prefix + -# f'_{i}.traj.{phase_name}.states:{guess_key}', -# prob._process_guess_var( -# val, guess_key, phase), -# units=units) -# elif guess_key in prob_keys: -# setvalprob.set_val(parent_prefix+ -# self.group_prefix+f'_{i}.'+guess_key, val, units=units) -# elif ":" in guess_key: -# setvalprob.set_val(parent_prefix+ -# self.group_prefix + f'_{i}.traj.{phase_name}.{guess_key}', -# prob._process_guess_var(val, guess_key, phase), -# units=units) -# else: -# # raise error if the guess key is not recognized -# raise ValueError( -# f"Initial guess key {guess_key} in {phase_name} is not recognized.") - -# # We need some special logic for these following variables because GASP computes -# # initial guesses using some knowledge of the mission duration and other variables -# # that are only available after calling `create_vehicle`. Thus these initial guess -# # values are not included in the `phase_info` object. - -# base_phase = phase_name -# if 'mass' not in guesses: -# mass_guess = prob.aviary_inputs.get_val( -# Mission.Design.GROSS_MASS, units='lbm') -# # Set the mass guess as the initial value for the mass state variable -# setvalprob.set_val(parent_prefix+self.group_prefix+f'_{i}.traj.{phase_name}.states:mass', -# mass_guess, units='lbm') - -# # if 'time' not in guesses: -# # # Determine initial time and duration guesses depending on the phase name -# # if 'desc1' == base_phase: -# # t_initial = flight_duration*.9 -# # t_duration = flight_duration*.04 -# # elif 'desc2' in base_phase: -# # t_initial = flight_duration*.94 -# # t_duration = 5000 -# # # Set the time guesses as the initial values for the time-related trajectory variables -# # setvalprob.set_val(parent_prefix+f"traj.{phase_name}.t_initial", -# # t_initial, units='s') -# # setvalprob.set_val(parent_prefix+f"traj.{phase_name}.t_duration", -# # t_duration, units='s') - - -# ========================================================================= old code -# super_prob = om.Problem() -# num_missions = len(weights) -# probs = [] -# prefix = "problem_" - -# makeN2 = False -# if len(sys.argv) > 1: -# if "n2" in sys.argv: -# makeN2 = True - -# # define individual aviary problems -# for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): -# prob = av.AviaryProblem() -# prob.load_inputs(plane, phase_info) -# prob.check_and_preprocess_inputs() -# prob.add_pre_mission_systems() -# traj = prob.add_phases() # save dymos traj to add to super problem as a subsystem -# prob.add_post_mission_systems() -# prob.link_phases() # this is half working / connect statements from outside of traj to inside are failing -# prob.problem_type = ProblemType.ALTERNATE # adds summary gross mass as design var -# prob.add_design_variables() -# probs.append(prob) - -# group = om.Group() # this group will contain all the promoted aviary vars -# group.add_subsystem("pre", prob.pre_mission) -# group.add_subsystem("traj", traj) -# group.add_subsystem("post", prob.post_mission) - -# # setting defaults for these variables to suppress errors -# longlst = [ -# 'mission:summary:gross_mass', 'aircraft:wing:sweep', -# 'aircraft:wing:thickness_to_chord', 'aircraft:wing:area', -# 'aircraft:wing:taper_ratio', 'mission:design:gross_mass'] -# for var in longlst: -# group.set_input_defaults( -# var, val=MetaData[var]['default_value'], -# units=MetaData[var]['units']) - -# # add group and promote design gross mass (common input amongst multiple missions) -# # in this way it represents the MTOW -# super_prob.model.add_subsystem(prefix+f'{i}', group, promotes=[ -# 'mission:design:gross_mass']) - -# # add design gross mass as a design var -# super_prob.model.add_design_var( -# 'mission:design:gross_mass', lower=100e3, upper=1000e3) - -# for i in range(num_missions): -# # connecting each subcomponent's fuel burn to super problem's unique fuel variables -# super_prob.model.connect( -# prefix+f"{i}.mission:summary:fuel_burned", f"fuel_{i}") - -# # create constraint to force each mission's summary gross mass to not -# # exceed the common mission design gross mass (aka MTOW) -# super_prob.model.add_subsystem(f'MTOW_constraint{i}', om.ExecComp( -# 'mtow_resid = design_gross_mass - summary_gross_mass'), -# promotes=[('summary_gross_mass', prefix+f'{i}.mission:summary:gross_mass'), -# ('design_gross_mass', 'mission:design:gross_mass')]) - -# super_prob.model.add_constraint(f'MTOW_constraint{i}.mtow_resid', lower=0.) - -# # creating variable strings that will represent fuel burn from each mission -# fuel_burned_vars = [f"fuel_{i}" for i in range(num_missions)] -# weighted_str = "+".join([f"{fuel}*{weight}" -# for fuel, weight in zip(fuel_burned_vars, weights)]) -# # weighted_str looks like: fuel_0 * weight[0] + fuel_1 * weight[1] - -# # adding compound execComp to super problem -# super_prob.model.add_subsystem('compound_fuel_burn_objective', om.ExecComp( -# "compound = "+weighted_str), promotes=["compound", *fuel_burned_vars]) - -# super_prob.driver = om.ScipyOptimizeDriver() -# super_prob.driver.options['optimizer'] = 'SLSQP' -# super_prob.model.add_objective('compound') # output from execcomp goes here - -# with warnings.catch_warnings(): -# warnings.simplefilter("ignore", om.OpenMDAOWarning) -# warnings.simplefilter("ignore", om.PromotionWarning) -# super_prob.setup() - -# if makeN2: -# om.n2(super_prob, outfile="multi_mission_importTraj_N2.html") # create N2 diagram - -# # cannot use this b/c initial guesses (i.e. setval func) has to be called on super prob level -# # for prob in probs: -# # # prob.setup() -# # prob.set_initial_guesses() - -# # dm.run_problem(super_prob) - - -""" -Ferry mission phase info: -Times (min): 0, 50, 812, 843 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 7001 nmi -Notes: 32k in 30 mins too fast for aviary, climb to low alt then slow rise through cruise - -Intermediate mission phase info: -Times (min): 0, 50, 560, 590 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 4839 nmi - -Max Payload mission phase info: -Times (min): 0, 50, 260, 290 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 2272 nmi - -Hard to find multiple payload/range values for FwFm (737), so use C-5 instead -Based on: - https://en.wikipedia.org/wiki/Lockheed_C-5_Galaxy#Specifications_(C-5M), - https://www.af.mil/About-Us/Fact-Sheets/Display/Article/1529718/c-5-abc-galaxy-and-c-5m-super-galaxy/ - -MTOW: 840,000 lb -Max Payload: 281,000 lb -Max Fuel: 341,446 lb -Empty Weight: 380,000 lb -> leaves 460,000 lb for fuel+payload (max fuel + max payload = 622,446 lb) - -Payload/range: - 281,000 lb payload -> 2,150 nmi range (AF.mil) [max payload case] - 120,000 lb payload -> 4,800 nmi range (AF.mil) [intermediate case] - 0 lb payload -> 7,000 nmi range (AF.mil) [ferry case] - -Flight characteristics: - Cruise at M0.77 at 33k ft - Max rate of climb: 2100 ft/min -""" - - -""" -input disconnected error: -WARNING: The following inputs are not connected: - group_0.aircraft:air_conditioning:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.AC.aircraft:air_conditioning:mass_scaler) - group_0.aircraft:anti_icing:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.anti_icing.aircraft:anti_icing:mass_scaler) - group_0.aircraft:apu:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.apu.aircraft:apu:mass_scaler) - group_0.aircraft:avionics:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.avionics.aircraft:avionics:mass_scaler) - group_0.aircraft:canard:area (group_0.pre_mission.core_subsystems.core_geometry.canard.aircraft:canard:area) - group_0.aircraft:canard:area (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:canard:area) - group_0.aircraft:canard:area (group_0.pre_mission.core_subsystems.core_mass.canard.aircraft:canard:area) - group_0.aircraft:canard:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:canard:aspect_ratio) - group_0.aircraft:canard:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.canard.aircraft:canard:mass_scaler) - group_0.aircraft:canard:taper_ratio (group_0.pre_mission.core_subsystems.core_mass.canard.aircraft:canard:taper_ratio) - group_0.aircraft:canard:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.canard.aircraft:canard:thickness_to_chord) - group_0.aircraft:canard:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:canard:thickness_to_chord) - group_0.aircraft:canard:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.canard.aircraft:canard:wetted_area_scaler) - group_0.aircraft:crew_and_payload:cargo_container_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.cargo_containers.aircraft:crew_and_payload:cargo_container_mass_scaler) - group_0.aircraft:crew_and_payload:cargo_mass (group_0.pre_mission.core_subsystems.core_mass.cargo_containers.aircraft:crew_and_payload:cargo_mass) - group_0.aircraft:crew_and_payload:cargo_mass (group_0.pre_mission.core_subsystems.core_mass.total_mass.zero_fuel_mass.aircraft:crew_and_payload:cargo_mass) - group_0.aircraft:crew_and_payload:flight_crew_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.flight_crew.aircraft:crew_and_payload:flight_crew_mass_scaler) - group_0.aircraft:crew_and_payload:misc_cargo (group_0.pre_mission.core_subsystems.core_mass.cargo.aircraft:crew_and_payload:misc_cargo) - group_0.aircraft:crew_and_payload:non_flight_crew_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.nonflight_crew.aircraft:crew_and_payload:non_flight_crew_mass_scaler) - group_0.aircraft:crew_and_payload:passenger_service_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.pass_service.aircraft:crew_and_payload:passenger_service_mass_scaler) - group_0.aircraft:crew_and_payload:wing_cargo (group_0.pre_mission.core_subsystems.core_mass.cargo.aircraft:crew_and_payload:wing_cargo) - group_0.aircraft:design:base_area (group_0.traj.param_comp.parameters:aircraft:design:base_area) - group_0.aircraft:design:empty_mass_margin_scaler (group_0.pre_mission.core_subsystems.core_mass.total_mass.empty_mass_margin.aircraft:design:empty_mass_margin_scaler) - group_0.aircraft:design:external_subsystems_mass (group_0.pre_mission.core_subsystems.core_mass.total_mass.system_equip_mass.aircraft:design:external_subsystems_mass) - group_0.aircraft:design:lift_dependent_drag_coeff_factor (group_0.traj.param_comp.parameters:aircraft:design:lift_dependent_drag_coeff_factor) - group_0.aircraft:design:reserve_fuel_additional (group_0.post_mission.reserve_fuel.reserve_fuel_additional) - group_0.aircraft:design:subsonic_drag_coeff_factor (group_0.traj.param_comp.parameters:aircraft:design:subsonic_drag_coeff_factor) - group_0.aircraft:design:supersonic_drag_coeff_factor (group_0.traj.param_comp.parameters:aircraft:design:supersonic_drag_coeff_factor) - group_0.aircraft:design:zero_lift_drag_coeff_factor (group_0.traj.param_comp.parameters:aircraft:design:zero_lift_drag_coeff_factor) - group_0.aircraft:electrical:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.electrical.aircraft:electrical:mass_scaler) - group_0.aircraft:engine:mass (group_0.pre_mission.core_subsystems.core_mass.wing_group.engine_pod_mass.aircraft:engine:mass) - group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_propulsion.CF6.aircraft:engine:scaled_sls_thrust) - group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_propulsion.propulsion_sum.aircraft:engine:scaled_sls_thrust) - group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_subsystems.core_mass.engine_mass.aircraft:engine:scaled_sls_thrust) - group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_subsystems.core_mass.nacelle.aircraft:engine:scaled_sls_thrust) - group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_subsystems.core_mass.thrust_rev.aircraft:engine:scaled_sls_thrust) - group_0.aircraft:engine:scaled_sls_thrust (group_0.pre_mission.core_subsystems.core_mass.wing_group.engine_pod_mass.aircraft:engine:scaled_sls_thrust) - group_0.aircraft:engine:thrust_reversers_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.thrust_rev.aircraft:engine:thrust_reversers_mass_scaler) - group_0.aircraft:engine:wing_locations (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:engine:wing_locations) - group_0.aircraft:engine:wing_locations (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:engine:wing_locations) - group_0.aircraft:fins:area (group_0.pre_mission.core_subsystems.core_mass.fin.aircraft:fins:area) - group_0.aircraft:fins:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.fin.aircraft:fins:mass_scaler) - group_0.aircraft:fins:taper_ratio (group_0.pre_mission.core_subsystems.core_mass.fin.aircraft:fins:taper_ratio) - group_0.aircraft:fuel:auxiliary_fuel_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.total_fuel_capacity.aircraft:fuel:auxiliary_fuel_capacity) - group_0.aircraft:fuel:capacity_factor (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:capacity_factor) - group_0.aircraft:fuel:density_ratio (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:density_ratio) - group_0.aircraft:fuel:density_ratio (group_0.pre_mission.core_subsystems.core_mass.unusable_fuel.aircraft:fuel:density_ratio) - group_0.aircraft:fuel:fuel_margin (group_0.post_mission.fuel_calc.fuel_margin) - group_0.aircraft:fuel:fuel_system_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.fuel_system.aircraft:fuel:fuel_system_mass_scaler) - group_0.aircraft:fuel:fuselage_fuel_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.auxiliary_fuel_capacity.aircraft:fuel:fuselage_fuel_capacity) - group_0.aircraft:fuel:fuselage_fuel_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.total_fuel_capacity.aircraft:fuel:fuselage_fuel_capacity) - group_0.aircraft:fuel:total_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.auxiliary_fuel_capacity.aircraft:fuel:total_capacity) - group_0.aircraft:fuel:total_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.fuselage_fuel_capacity.aircraft:fuel:total_capacity) - group_0.aircraft:fuel:total_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_system.aircraft:fuel:total_capacity) - group_0.aircraft:fuel:total_capacity (group_0.pre_mission.core_subsystems.core_mass.unusable_fuel.aircraft:fuel:total_capacity) - group_0.aircraft:fuel:unusable_fuel_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.unusable_fuel.aircraft:fuel:unusable_fuel_mass_scaler) - group_0.aircraft:fuel:wing_ref_capacity (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:wing_ref_capacity) - group_0.aircraft:fuel:wing_ref_capacity_area (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:wing_ref_capacity_area) - group_0.aircraft:fuel:wing_ref_capacity_term_A (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:wing_ref_capacity_term_A) - group_0.aircraft:fuel:wing_ref_capacity_term_B (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:fuel:wing_ref_capacity_term_B) - group_0.aircraft:furnishings:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.furnishings.aircraft:furnishings:mass_scaler) - group_0.aircraft:fuselage:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:fuselage:laminar_flow_lower) - group_0.aircraft:fuselage:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:fuselage:laminar_flow_upper) - group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:fuselage:length) - group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:fuselage:length) - group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_geometry.fuselage_prelim.aircraft:fuselage:length) - group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_mass.electrical.aircraft:fuselage:length) - group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_mass.fuselage.aircraft:fuselage:length) - group_0.aircraft:fuselage:length (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:fuselage:length) - group_0.aircraft:fuselage:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.fuselage.aircraft:fuselage:mass_scaler) - group_0.aircraft:fuselage:max_height (group_0.pre_mission.core_subsystems.core_geometry.fuselage_prelim.aircraft:fuselage:max_height) - group_0.aircraft:fuselage:max_height (group_0.pre_mission.core_subsystems.core_mass.AC.aircraft:fuselage:max_height) - group_0.aircraft:fuselage:max_height (group_0.pre_mission.core_subsystems.core_mass.furnishings.aircraft:fuselage:max_height) - group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_geometry.fuselage_prelim.aircraft:fuselage:max_width) - group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:fuselage:max_width) - group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_mass.anti_icing.aircraft:fuselage:max_width) - group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_mass.electrical.aircraft:fuselage:max_width) - group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_mass.furnishings.aircraft:fuselage:max_width) - group_0.aircraft:fuselage:max_width (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:fuselage:max_width) - group_0.aircraft:fuselage:passenger_compartment_length (group_0.pre_mission.core_subsystems.core_mass.furnishings.aircraft:fuselage:passenger_compartment_length) - group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.AC.aircraft:fuselage:planform_area) - group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.apu.aircraft:fuselage:planform_area) - group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.avionics.aircraft:fuselage:planform_area) - group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.hydraulics.aircraft:fuselage:planform_area) - group_0.aircraft:fuselage:planform_area (group_0.pre_mission.core_subsystems.core_mass.instruments.aircraft:fuselage:planform_area) - group_0.aircraft:fuselage:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:fuselage:wetted_area_scaler) - group_0.aircraft:horizontal_tail:area (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:horizontal_tail:area) - group_0.aircraft:horizontal_tail:area (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:horizontal_tail:area) - group_0.aircraft:horizontal_tail:area (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:horizontal_tail:area) - group_0.aircraft:horizontal_tail:area (group_0.pre_mission.core_subsystems.core_mass.htail.aircraft:horizontal_tail:area) - group_0.aircraft:horizontal_tail:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:horizontal_tail:aspect_ratio) - group_0.aircraft:horizontal_tail:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:horizontal_tail:aspect_ratio) - group_0.aircraft:horizontal_tail:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:horizontal_tail:laminar_flow_lower) - group_0.aircraft:horizontal_tail:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:horizontal_tail:laminar_flow_upper) - group_0.aircraft:horizontal_tail:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.htail.aircraft:horizontal_tail:mass_scaler) - group_0.aircraft:horizontal_tail:taper_ratio (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:horizontal_tail:taper_ratio) - group_0.aircraft:horizontal_tail:taper_ratio (group_0.pre_mission.core_subsystems.core_mass.htail.aircraft:horizontal_tail:taper_ratio) - group_0.aircraft:horizontal_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:horizontal_tail:thickness_to_chord) - group_0.aircraft:horizontal_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:horizontal_tail:thickness_to_chord) - group_0.aircraft:horizontal_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:horizontal_tail:thickness_to_chord) - group_0.aircraft:horizontal_tail:vertical_tail_fraction (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:horizontal_tail:vertical_tail_fraction) - group_0.aircraft:horizontal_tail:vertical_tail_fraction (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:horizontal_tail:vertical_tail_fraction) - group_0.aircraft:horizontal_tail:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:horizontal_tail:wetted_area_scaler) - group_0.aircraft:hydraulics:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.hydraulics.aircraft:hydraulics:mass_scaler) - group_0.aircraft:hydraulics:system_pressure (group_0.pre_mission.core_subsystems.core_mass.hydraulics.aircraft:hydraulics:system_pressure) - group_0.aircraft:instruments:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.instruments.aircraft:instruments:mass_scaler) - group_0.aircraft:landing_gear:main_gear_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.landing_group.landing_gear.aircraft:landing_gear:main_gear_mass_scaler) - group_0.aircraft:landing_gear:nose_gear_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.landing_group.landing_gear.aircraft:landing_gear:nose_gear_mass_scaler) - group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:nacelle:avg_diameter) - group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_geometry.nacelles.aircraft:nacelle:avg_diameter) - group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_mass.anti_icing.aircraft:nacelle:avg_diameter) - group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:nacelle:avg_diameter) - group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_mass.nacelle.aircraft:nacelle:avg_diameter) - group_0.aircraft:nacelle:avg_diameter (group_0.pre_mission.core_subsystems.core_mass.starter.aircraft:nacelle:avg_diameter) - group_0.aircraft:nacelle:avg_length (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:nacelle:avg_length) - group_0.aircraft:nacelle:avg_length (group_0.pre_mission.core_subsystems.core_geometry.nacelles.aircraft:nacelle:avg_length) - group_0.aircraft:nacelle:avg_length (group_0.pre_mission.core_subsystems.core_mass.nacelle.aircraft:nacelle:avg_length) - group_0.aircraft:nacelle:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:nacelle:laminar_flow_lower) - group_0.aircraft:nacelle:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:nacelle:laminar_flow_upper) - group_0.aircraft:nacelle:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.nacelle.aircraft:nacelle:mass_scaler) - group_0.aircraft:nacelle:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.nacelles.aircraft:nacelle:wetted_area_scaler) - group_0.aircraft:paint:mass_per_unit_area (group_0.pre_mission.core_subsystems.core_mass.paint.aircraft:paint:mass_per_unit_area) - group_0.aircraft:propulsion:engine_oil_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.engine_oil.aircraft:propulsion:engine_oil_mass_scaler) - group_0.aircraft:propulsion:misc_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.misc_engine.aircraft:propulsion:misc_mass_scaler) - group_0.aircraft:vertical_tail:area (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:vertical_tail:area) - group_0.aircraft:vertical_tail:area (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:vertical_tail:area) - group_0.aircraft:vertical_tail:area (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:vertical_tail:area) - group_0.aircraft:vertical_tail:area (group_0.pre_mission.core_subsystems.core_mass.vert_tail.aircraft:vertical_tail:area) - group_0.aircraft:vertical_tail:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:vertical_tail:aspect_ratio) - group_0.aircraft:vertical_tail:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:vertical_tail:aspect_ratio) - group_0.aircraft:vertical_tail:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:vertical_tail:laminar_flow_lower) - group_0.aircraft:vertical_tail:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:vertical_tail:laminar_flow_upper) - group_0.aircraft:vertical_tail:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.vert_tail.aircraft:vertical_tail:mass_scaler) - group_0.aircraft:vertical_tail:taper_ratio (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:vertical_tail:taper_ratio) - group_0.aircraft:vertical_tail:taper_ratio (group_0.pre_mission.core_subsystems.core_mass.vert_tail.aircraft:vertical_tail:taper_ratio) - group_0.aircraft:vertical_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:vertical_tail:thickness_to_chord) - group_0.aircraft:vertical_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:vertical_tail:thickness_to_chord) - group_0.aircraft:vertical_tail:thickness_to_chord (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:vertical_tail:thickness_to_chord) - group_0.aircraft:vertical_tail:wetted_area_scaler (group_0.pre_mission.core_subsystems.core_geometry.tail.aircraft:vertical_tail:wetted_area_scaler) - group_0.aircraft:wing:aeroelastic_tailoring_factor (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:aeroelastic_tailoring_factor) - group_0.aircraft:wing:aeroelastic_tailoring_factor (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:aeroelastic_tailoring_factor) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.wing.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_geometry.wing_prelim.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.hydraulics.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.surf_ctrl.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.unusable_fuel.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_misc.aircraft:wing:area) - group_0.aircraft:wing:area (group_0.traj.param_comp.parameters:aircraft:wing:area) - group_0.aircraft:wing:aspect_ratio (group_0.pre_mission.core_subsystems.core_aerodynamics.design.aircraft:wing:aspect_ratio) - group_0.aircraft:wing:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:wing:aspect_ratio) - group_0.aircraft:wing:aspect_ratio (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:wing:aspect_ratio) - group_0.aircraft:wing:aspect_ratio (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:aspect_ratio) - group_0.aircraft:wing:aspect_ratio (group_0.traj.param_comp.parameters:aircraft:wing:aspect_ratio) - group_0.aircraft:wing:aspect_ratio_reference (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:aspect_ratio_reference) - group_0.aircraft:wing:bending_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:bending_mass_scaler) - group_0.aircraft:wing:bwb_aft_body_mass (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_total.aircraft:wing:bwb_aft_body_mass) - group_0.aircraft:wing:chord_per_semispan (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:chord_per_semispan) - group_0.aircraft:wing:composite_fraction (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:composite_fraction) - group_0.aircraft:wing:composite_fraction (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_misc.aircraft:wing:composite_fraction) - group_0.aircraft:wing:composite_fraction (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_shear_control.aircraft:wing:composite_fraction) - group_0.aircraft:wing:control_surface_area (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_shear_control.aircraft:wing:control_surface_area) - group_0.aircraft:wing:control_surface_area_ratio (group_0.pre_mission.core_subsystems.core_mass.surf_ctrl.aircraft:wing:control_surface_area_ratio) - group_0.aircraft:wing:dihedral (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:wing:dihedral) - group_0.aircraft:wing:glove_and_bat (group_0.pre_mission.core_subsystems.core_geometry.characteristic_lengths.aircraft:wing:glove_and_bat) - group_0.aircraft:wing:glove_and_bat (group_0.pre_mission.core_subsystems.core_geometry.fuselage.aircraft:wing:glove_and_bat) - group_0.aircraft:wing:glove_and_bat (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:wing:glove_and_bat) - group_0.aircraft:wing:glove_and_bat (group_0.pre_mission.core_subsystems.core_geometry.wing_prelim.aircraft:wing:glove_and_bat) - group_0.aircraft:wing:incidence (group_0.traj.param_comp.parameters:aircraft:wing:incidence) - group_0.aircraft:wing:laminar_flow_lower (group_0.traj.param_comp.parameters:aircraft:wing:laminar_flow_lower) - group_0.aircraft:wing:laminar_flow_upper (group_0.traj.param_comp.parameters:aircraft:wing:laminar_flow_upper) - group_0.aircraft:wing:load_fraction (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:load_fraction) - group_0.aircraft:wing:load_path_sweep_dist (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending_factor.aircraft:wing:load_path_sweep_dist) - group_0.aircraft:wing:mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_total.aircraft:wing:mass_scaler) - group_0.aircraft:wing:max_camber_at_70_semispan (group_0.pre_mission.core_subsystems.core_aerodynamics.design.aircraft:wing:max_camber_at_70_semispan) - group_0.aircraft:wing:max_camber_at_70_semispan (group_0.traj.param_comp.parameters:aircraft:wing:max_camber_at_70_semispan) - group_0.aircraft:wing:misc_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:misc_mass_scaler) - group_0.aircraft:wing:misc_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_misc.aircraft:wing:misc_mass_scaler) - group_0.aircraft:wing:shear_control_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:shear_control_mass_scaler) - group_0.aircraft:wing:shear_control_mass_scaler (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_shear_control.aircraft:wing:shear_control_mass_scaler) - group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_geometry.prelim.aircraft:wing:span) - group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_geometry.wing_prelim.aircraft:wing:span) - group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_mass.anti_icing.aircraft:wing:span) - group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_mass.fuel_capacity_group.wing_fuel_capacity.aircraft:wing:span) - group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_mass.landing_group.main_landing_gear_length.aircraft:wing:span) - group_0.aircraft:wing:span (group_0.pre_mission.core_subsystems.core_mass.wing_group.wing_bending.aircraft:wing:span) -""" From e52792274adbf4a828eb11f8b06ccbea83df6181 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Tue, 6 Aug 2024 14:17:25 -0400 Subject: [PATCH 037/113] tried to apply fix for actual_range connection for 2DOF collocation --- aviary/interface/methods_for_level2.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index 0a056f1ad..afb81ecf3 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -1568,14 +1568,14 @@ def link_phases(self): Mission.Landing.TOUCHDOWN_MASS, src_indices=[-1]) connect_map = { - f"traj.{self.regular_phases[-1]}.timeseries.distance": Mission.Summary.RANGE, + f"traj.{self.regular_phases[-1]}.timeseries.distance": 'actual_range', } else: connect_map = { "taxi.mass": "traj.mass_initial", Mission.Takeoff.ROTATION_VELOCITY: "traj.SGMGroundroll_velocity_trigger", - "traj.distance_final": Mission.Summary.RANGE, + "traj.distance_final": 'actual_range', "traj.mass_final": Mission.Landing.TOUCHDOWN_MASS, } From 8ffc2fce6d82a99dc07e16ac5a8bceec10039e92 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Tue, 6 Aug 2024 14:27:26 -0400 Subject: [PATCH 038/113] successful optimization --- multi_aviary_copymodel.py | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 5e0568e5a..96dfb1595 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -68,16 +68,10 @@ def add_design_variables(self): def add_driver(self): self.driver = om.pyOptSparseDriver() - self.driver.options["optimizer"] = "SNOPT" + self.driver.options["optimizer"] = "SLSQP" # driver.declare_coloring(True) # do we need this anymore of we're specifying the below? # maybe we're getting matrixes that are too sparse, decrease tolerance to avoid missing corellatiton # set coloring at this value. 1e-45 didn't seem to make much difference - self.driver.declare_coloring(tol=1e-25, orders=None) - self.driver.opt_settings["Major iterations limit"] = 60 - self.driver.opt_settings["Major optimality tolerance"] = 1e-6 - self.driver.opt_settings["Major feasibility tolerance"] = 1e-6 - self.driver.opt_settings["iSumm"] = 6 - self.driver.opt_settings['Verify level'] = -1 # self.driver.options['maxiter'] = 1e3 # self.driver.declare_coloring() # self.model.linear_solver = om.DirectSolver() @@ -105,8 +99,7 @@ def add_objective(self): # connecting each subcomponent's fuel burn to super problem's unique fuel variables self.model.connect( self.group_prefix+f"_{i}.{Mission.Objectives.FUEL}", f"fuel_{i}") - self.model.add_objective('compound', ref=1) - self.model.add_objective('compound', ref=1) + self.model.add_objective('compound') def setup_wrapper(self): """Wrapper for om.Problem setup with warning ignoring and setting options""" @@ -174,13 +167,6 @@ def get_design_range(self, phase_infos): print(f"Variable: {key}") print(f"Values: {val1}, {val2} (lbm)") - comps = ['vertical_tail', 'horizontal_tail', 'wing', 'fuselage'] - print("\nmass comparisons") - for comp in comps: - v1 = super_prob.get_val(f'group_0.aircraft:{comp}:mass') - v2 = super_prob.get_val(f'group_1.aircraft:{comp}:mass') - print(f'{comp}: {v1} vs. {v2}') - sol = CaseReader('res.db').get_case('final') # super_prob.model.list_vars() # for i in range(2): From 369d4783803f3e7de9b3a9a7849bf58dc2ee58ad Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 7 Aug 2024 09:19:22 -0400 Subject: [PATCH 039/113] added plotting for multi mission --- multi_aviary_copymodel.py | 199 ++++++++++++++++++++++---------------- test_single_aviary.py | 12 +-- 2 files changed, 119 insertions(+), 92 deletions(-) diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 96dfb1595..146eadafa 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -1,28 +1,24 @@ """ -Goal: use single aircraft description but optimize it for multiple missions simultaneously, -i.e. all missions are on the range-payload line instead of having excess performance -Aircraft csv: defines plane, but also defines payload (passengers, cargo) which can vary with mission - These will have to be specified in some alternate way such as a list correspond to mission # -Phase info: defines a particular mission, will have multiple phase infos +authors: Jatin Soni, Eliot Aretskin +Multi Mission Optimization Example using Aviary """ +from os.path import join import sys import warnings -import aviary.api as av -import openmdao.api as om import dymos as dm import numpy as np import matplotlib.pyplot as plt -from c5_models.c5_ferry_phase_info import phase_info as c5_ferry_phase_info -from c5_models.c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info -from c5_models.c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info -from easy_phase_info_inter import phase_info as easy_inter -from easy_phase_info_max import phase_info as easy_max -from aviary.variable_info.variables import Mission, Aircraft + +import aviary.api as av from aviary.variable_info.enums import ProblemType -from openmdao.api import CaseReader +from aviary.variable_info.variables import Mission, Aircraft +import openmdao.api as om +from openmdao.api import CaseReader -# "comp?.a can be used to reference multiple comp1.a comp2.a etc" +from c5_models.c5_ferry_phase_info import phase_info as c5_ferry_phase_info +from c5_models.c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info +from c5_models.c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info class MultiMissionProblem(om.Problem): @@ -42,9 +38,12 @@ def __init__(self, planes, phase_infos, weights): elif len(weights) > self.num_missions: raise Exception("Length of weights cannot exceed length of planes!") self.weights = weights + self.phase_infos = phase_infos self.group_prefix = 'group' self.probs = [] + self.fuel_vars = [] + self.phases = {} # define individual aviary problems for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): prob = av.AviaryProblem() @@ -54,51 +53,47 @@ def __init__(self, planes, phase_infos, weights): prob.add_phases() prob.add_post_mission_systems() prob.link_phases() + + # alternate prevents use of equality constraint b/w design and summary gross mass prob.problem_type = ProblemType.ALTERNATE - prob.add_design_variables() # should not work at super prob level + prob.add_design_variables() self.probs.append(prob) - + # phase names for each traj (can be used later to make plots/print outputs) + self.phases[f"{self.group_prefix}_{i}"] = list(prob.traj._phases.keys()) + + # design range and gross mass are promoted, these are Max Range/Max Takeoff Mass + # and must be the same for each aviary problem. Subsystems within aviary are sized + # using these - empty mass is same across all aviary problems. + # the fuel objective is also promoted since that's used in the compound objective + promoted_name = f"{self.group_prefix}_{i}_fuelobj" + self.fuel_vars.append(promoted_name) self.model.add_subsystem( self.group_prefix + f'_{i}', prob.model, - promotes=[Mission.Design.GROSS_MASS, Mission.Design.RANGE]) + promotes=[Mission.Design.GROSS_MASS, + Mission.Design.RANGE, + (Mission.Objectives.FUEL, promoted_name)]) def add_design_variables(self): self.model.add_design_var('mission:design:gross_mass', lower=10., upper=900e3) def add_driver(self): self.driver = om.pyOptSparseDriver() - self.driver.options["optimizer"] = "SLSQP" - # driver.declare_coloring(True) # do we need this anymore of we're specifying the below? - # maybe we're getting matrixes that are too sparse, decrease tolerance to avoid missing corellatiton - # set coloring at this value. 1e-45 didn't seem to make much difference - # self.driver.options['maxiter'] = 1e3 - # self.driver.declare_coloring() + self.driver.declare_coloring() + # linear solver causes nan entry error for landing to takeoff mass ratio param # self.model.linear_solver = om.DirectSolver() - """scipy SLSQP results - Iteration limit reached (Exit mode 9) - Current function value: -43.71865402878029 - Iterations: 200 - Function evaluations: 1018 - Gradient evaluations: 200 - Optimization FAILED. - Iteration limit reached""" def add_objective(self): + # weights are normalized - e.g. for given weights 3:1, the normalized + # weights are 0.75:0.25 weights = [float(weight/sum(self.weights)) for weight in self.weights] - fuel_burned_vars = [f"fuel_{i}" for i in range(self.num_missions)] - weighted_str = "+".join([f"{fuel}*{weight}" - for fuel, weight in zip(fuel_burned_vars, weights)]) + weighted_str = "+".join([f"{fuelobj}*{weight}" + for fuelobj, weight in zip(self.fuel_vars, weights)]) # weighted_str looks like: fuel_0 * weight[0] + fuel_1 * weight[1] # adding compound execComp to super problem self.model.add_subsystem('compound_fuel_burn_objective', om.ExecComp( - "compound = "+weighted_str), promotes=["compound", *fuel_burned_vars]) - - for i in range(self.num_missions): - # connecting each subcomponent's fuel burn to super problem's unique fuel variables - self.model.connect( - self.group_prefix+f"_{i}.{Mission.Objectives.FUEL}", f"fuel_{i}") + "compound = "+weighted_str), promotes=["compound"]) self.model.add_objective('compound') def setup_wrapper(self): @@ -117,82 +112,114 @@ def setup_wrapper(self): self.setup(check='all') def run(self): - # self.run_model() - # self.check_totals(method='fd', compact_print=True) self.model.set_solver_print(0) + dm.run_problem(self, make_plots=True) - # self.run_driver() - dm.run_problem(self, make_plots=True, solution_record_file='res.db') - - def get_design_range(self, phase_infos): + def get_design_range(self): + """Finds the longest mission and sets its range as the design range for all + Aviary problems. Used within Aviary for sizing subsystems.""" design_range = 0 - for phase_info in phase_infos: + for phase_info in self.phase_infos: get_range = phase_info['post_mission']['target_range'][0] # TBD add units if get_range > design_range: design_range = get_range return design_range -if __name__ == '__main__': - makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False - planes = ['c5_models/c5_maxpayload.csv', 'c5_models/c5_intermediate.csv'] - # phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] - phase_infos = [easy_max, easy_inter] +def C5_example(): + plane_dir = 'c5_models' + planes = ['c5_maxpayload.csv', 'c5_intermediate.csv'] + planes = [join(plane_dir, plane) for plane in planes] phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] weights = [1, 1] + super_prob = MultiMissionProblem(planes, phase_infos, weights) super_prob.add_driver() super_prob.add_design_variables() super_prob.add_objective() - super_prob.model.set_input_defaults('mission:design:range', val=4000) + # set input default to prevent error, value doesn't matter since set val is used later + super_prob.model.set_input_defaults(Mission.Design.RANGE, val=1.) super_prob.setup_wrapper() - super_prob.set_val('mission:design:range', super_prob.get_design_range(phase_infos)) + super_prob.set_val(Mission.Design.RANGE, super_prob.get_design_range()) + for i, prob in enumerate(super_prob.probs): prob.set_initial_guesses(super_prob, super_prob.group_prefix+f"_{i}.") - # super_prob.final_setup() if makeN2: from createN2 import createN2 createN2(__file__, super_prob) + super_prob.run() + return super_prob + + +def createTimeseriesPlots(super_prob, plotvars): + for plotidx, (var, unit) in enumerate(plotvars): + plt.subplot(int(np.ceil(len(plotvars)/2)), 2, plotidx+1) + for i in range(super_prob.num_missions): + time = np.array([]) + yvar = np.array([]) + for phase in super_prob.phases[f"{super_prob.group_prefix}_{i}"]: + rawt = super_prob.get_val( + f"{super_prob.group_prefix}_{i}.traj.{phase}.timeseries.time") + rawy = super_prob.get_val( + f"{super_prob.group_prefix}_{i}.traj.{phase}.timeseries.{var}", + units=unit) + time = np.hstack([time, np.ndarray.flatten(rawt)]) + yvar = np.hstack([yvar, np.ndarray.flatten(rawy)]) + plt.plot(time, yvar, 'o') + plt.xlabel("Time (s)") + plt.ylabel(f"{var.title()} ({unit})") + plt.grid() + plt.figlegend([f"Plane {i}" for i in range(super_prob.num_missions)]) + plt.show() + + +if __name__ == '__main__': + makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False - outputs = {Mission.Summary.FUEL_BURNED: [], - Aircraft.Design.EMPTY_MASS: [], + super_prob = C5_example() + plotvars = [('altitude', 'ft'), + ('mass', 'lbm'), + ('drag', 'lbf'), + ('distance', 'nmi'), + ('throttle', 'unitless')] + createTimeseriesPlots(super_prob, plotvars) + + outputs = {Aircraft.Design.EMPTY_MASS: [], + Mission.Summary.FUEL_BURNED: [], Mission.Summary.GROSS_MASS: []} print("\n\n=========================\n") for key in outputs.keys(): - val1 = super_prob.get_val(f'group_0.{key}', units='lbm')[0] - val2 = super_prob.get_val(f'group_1.{key}', units='lbm')[0] print(f"Variable: {key}") - print(f"Values: {val1}, {val2} (lbm)") - - sol = CaseReader('res.db').get_case('final') - # super_prob.model.list_vars() - # for i in range(2): - var = 'throttle' - t = np.concatenate([sol.get_val('group_0.traj.climb_1.t'), - sol.get_val('group_0.traj.climb_2.t'), - sol.get_val('group_0.traj.descent_1.t')]) - alt = np.concatenate([sol.get_val(f'group_0.traj.climb_1.timeseries.{var}'), - sol.get_val(f'group_0.traj.climb_2.timeseries.{var}'), - sol.get_val(f'group_0.traj.descent_1.timeseries.{var}')]) - t2 = np.concatenate([sol.get_val('group_1.traj.climb_1.t'), - sol.get_val('group_1.traj.climb_2.t'), - sol.get_val('group_1.traj.descent_1.t')]) - alt2 = np.concatenate([sol.get_val(f'group_1.traj.climb_1.timeseries.{var}'), - sol.get_val(f'group_1.traj.climb_2.timeseries.{var}'), - sol.get_val(f'group_1.traj.descent_1.timeseries.{var}')]) - plt.plot(t, alt, 'r*') - plt.plot(t2, alt2, 'b*') - plt.title(f"Time vs {var}") - plt.legend(['group_0', 'group_1']) - plt.grid() - plt.show() + for i in range(super_prob.num_missions): + val = super_prob.get_val(f'group_{i}.{key}', units='lbm')[0] + print(f"\tPlane {i}: {val} (lbm)") + """ +1:1 +Variable: mission:summary:fuel_burned +Values: 164988.61664962117, 306345.04737967893 (lbm) +Variable: aircraft:design:empty_mass +Values: 378204.91862045845, 378204.91862045845 (lbm) +Variable: mission:summary:gross_mass +Values: 598462.8871182877, 710244.3178483456 (lbm) + +1.5:1 +Variable: mission:summary:fuel_burned +Values: 164988.61476287164, 306345.04738991836 (lbm) +Variable: aircraft:design:empty_mass +Values: 378204.91862045845, 378204.91862045845 (lbm) +Variable: mission:summary:gross_mass +Values: 598462.8852315382, 710244.3178585849 (lbm) + +2:1 Variable: mission:summary:fuel_burned -Values: 13730.910584707046, 15740.545749454643 +Values: 164988.61651039496, 306345.04738988867 (lbm) Variable: aircraft:design:empty_mass -Values: 336859.7179064408, 337047.85745526763 +Values: 378204.91862045845, 378204.91862045845 (lbm) +Variable: mission:summary:gross_mass +Values: 598462.8869790616, 710244.3178585552 (lbm) """ diff --git a/test_single_aviary.py b/test_single_aviary.py index 10acfeeac..e130dc092 100644 --- a/test_single_aviary.py +++ b/test_single_aviary.py @@ -1,8 +1,8 @@ import aviary.api as av -from easy_phase_info_max import phase_info as max_phase_info -from easy_phase_info_inter import phase_info as inter_phase_info -# from c5_models.c5_maxpayload_phase_info import phase_info as max_phase_info -# from c5_models.c5_intermediate_phase_info import phase_info as inter_phase_info +# from easy_phase_info_max import phase_info as max_phase_info +# from easy_phase_info_inter import phase_info as inter_phase_info +from c5_models.c5_maxpayload_phase_info import phase_info as max_phase_info +from c5_models.c5_intermediate_phase_info import phase_info as inter_phase_info from aviary.variable_info.variables import Mission, Aircraft @@ -43,7 +43,7 @@ """ Current output: Variable: mission:summary:fuel_burned -Values: [140116.12301917037, 276762.7974282048] +Values: [164988.61692553537, 306345.04738212295] Variable: aircraft:design:empty_mass -Values: [302105.1606792437, 315604.5402712884] +Values: [339001.4003946201, 355540.377187145] """ From 3c094f9d67cd52d7ab4ecb78d0d513ce649cff04 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 7 Aug 2024 10:14:17 -0400 Subject: [PATCH 040/113] updated plot functions to be a multi mission method --- multi_aviary_copymodel.py | 130 ++++++++++++++++++++++++-------------- 1 file changed, 84 insertions(+), 46 deletions(-) diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 146eadafa..37aa5bbe2 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -2,20 +2,18 @@ authors: Jatin Soni, Eliot Aretskin Multi Mission Optimization Example using Aviary """ -from os.path import join import sys import warnings import dymos as dm import numpy as np +from os.path import join import matplotlib.pyplot as plt +import openmdao.api as om import aviary.api as av from aviary.variable_info.enums import ProblemType from aviary.variable_info.variables import Mission, Aircraft -import openmdao.api as om -from openmdao.api import CaseReader - from c5_models.c5_ferry_phase_info import phase_info as c5_ferry_phase_info from c5_models.c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info from c5_models.c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info @@ -125,13 +123,78 @@ def get_design_range(self): design_range = get_range return design_range + def create_timeseries_plots(self, plotvars=[], show=True): + """Creates timeseries plots for any variables within timeseries. Specify variables + and units by setting plotvars = [('altitude','ft')]. Any number of vars can be added.""" + plt.figure() + for plotidx, (var, unit) in enumerate(plotvars): + plt.subplot(int(np.ceil(len(plotvars)/2)), 2, plotidx+1) + for i in range(self.num_missions): + time = np.array([]) + yvar = np.array([]) + # this loop concatenates data from all phases + for phase in self.phases[f"{self.group_prefix}_{i}"]: + rawt = self.get_val( + f"{self.group_prefix}_{i}.traj.{phase}.timeseries.time", + units='s') + rawy = self.get_val( + f"{self.group_prefix}_{i}.traj.{phase}.timeseries.{var}", + units=unit) + time = np.hstack([time, np.ndarray.flatten(rawt)]) + yvar = np.hstack([yvar, np.ndarray.flatten(rawy)]) + plt.plot(time, yvar, 'o') + plt.xlabel("Time (s)") + plt.ylabel(f"{var.title()} ({unit})") + plt.grid() + plt.figlegend([f"Plane {i}" for i in range(self.num_missions)]) + if show: + plt.show() + + def create_payload_range_plot(self, show=True): + """Creates payload range diagram for the super problem. Appends a point for max payload + and 0 range. """ + payloads = [] + ranges = [] + for i in range(self.num_missions): + ref = f"{self.group_prefix}_{i}" + payloads.append( + self.get_val( + f"{ref}.{Aircraft.CrewPayload.CARGO_MASS}", units='lbm')) + lastphase = self.phases[ref][-1] + ranges.append( + self.get_val( + f"{ref}.traj.{lastphase}.timeseries.distance", + units='nmi', indices=-1)[0]) + payloads, ranges = zip(*sorted(zip(payloads, ranges))) + payloads, ranges = list(payloads), list(ranges) + payloads.append(payloads[-1]) + ranges.append(0) + plt.figure() + plt.plot(ranges, payloads) + plt.xlabel("Range (nmi)") + plt.ylabel("Payload (lbm)") + plt.grid() + if show: + plt.show() + + def print_vars(self, vars=[]): + """Specify vars with name and unit in a tuple, e.g. vars = [ (Mission.Summary.FUEL_BURNED, 'lbm') ]""" + + print("\n\n=========================\n") + for var, unit in vars: + print(f"Variable: {var}") + for i in range(self.num_missions): + val = self.get_val(f'group_{i}.{var}', units=unit)[0] + print(f"\tPlane {i}: {val} ({unit})") + -def C5_example(): +def C5_example(makeN2=False): plane_dir = 'c5_models' - planes = ['c5_maxpayload.csv', 'c5_intermediate.csv'] + planes = ['c5_maxpayload.csv', 'c5_intermediate.csv', 'c5_ferry.csv'] planes = [join(plane_dir, plane) for plane in planes] - phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] - weights = [1, 1] + phase_infos = [c5_maxpayload_phase_info, + c5_intermediate_phase_info, c5_ferry_phase_info] + weights = [1, 1, 1] super_prob = MultiMissionProblem(planes, phase_infos, weights) super_prob.add_driver() @@ -150,53 +213,28 @@ def C5_example(): createN2(__file__, super_prob) super_prob.run() - return super_prob - - -def createTimeseriesPlots(super_prob, plotvars): - for plotidx, (var, unit) in enumerate(plotvars): - plt.subplot(int(np.ceil(len(plotvars)/2)), 2, plotidx+1) - for i in range(super_prob.num_missions): - time = np.array([]) - yvar = np.array([]) - for phase in super_prob.phases[f"{super_prob.group_prefix}_{i}"]: - rawt = super_prob.get_val( - f"{super_prob.group_prefix}_{i}.traj.{phase}.timeseries.time") - rawy = super_prob.get_val( - f"{super_prob.group_prefix}_{i}.traj.{phase}.timeseries.{var}", - units=unit) - time = np.hstack([time, np.ndarray.flatten(rawt)]) - yvar = np.hstack([yvar, np.ndarray.flatten(rawy)]) - plt.plot(time, yvar, 'o') - plt.xlabel("Time (s)") - plt.ylabel(f"{var.title()} ({unit})") - plt.grid() - plt.figlegend([f"Plane {i}" for i in range(super_prob.num_missions)]) - plt.show() - - -if __name__ == '__main__': - makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False + printoutputs = [(Aircraft.Design.EMPTY_MASS, 'lbm'), + (Mission.Summary.FUEL_BURNED, 'lbm'), + (Mission.Summary.GROSS_MASS, 'lbm')] + super_prob.print_vars(vars=printoutputs) - super_prob = C5_example() plotvars = [('altitude', 'ft'), ('mass', 'lbm'), ('drag', 'lbf'), ('distance', 'nmi'), ('throttle', 'unitless')] - createTimeseriesPlots(super_prob, plotvars) + super_prob.create_timeseries_plots(plotvars=plotvars, show=False) - outputs = {Aircraft.Design.EMPTY_MASS: [], - Mission.Summary.FUEL_BURNED: [], - Mission.Summary.GROSS_MASS: []} + super_prob.create_payload_range_plot(show=False) + plt.show() + + return super_prob - print("\n\n=========================\n") - for key in outputs.keys(): - print(f"Variable: {key}") - for i in range(super_prob.num_missions): - val = super_prob.get_val(f'group_{i}.{key}', units='lbm')[0] - print(f"\tPlane {i}: {val} (lbm)") +if __name__ == '__main__': + makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False + + super_prob = C5_example(makeN2=makeN2) """ 1:1 From 7be24760c9ffad7c39e281b6de5ca9f6095b7642 Mon Sep 17 00:00:00 2001 From: Jatin Soni Date: Wed, 7 Aug 2024 15:38:27 -0400 Subject: [PATCH 041/113] updated output printing, added easy option to optimize all altitudes/machs --- multi_aviary_copymodel.py | 143 ++++++++++++++++++++++++++++++++------ 1 file changed, 121 insertions(+), 22 deletions(-) diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 37aa5bbe2..dc687aab0 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -67,12 +67,18 @@ def __init__(self, planes, phase_infos, weights): self.fuel_vars.append(promoted_name) self.model.add_subsystem( self.group_prefix + f'_{i}', prob.model, - promotes=[Mission.Design.GROSS_MASS, - Mission.Design.RANGE, - (Mission.Objectives.FUEL, promoted_name)]) + promotes_inputs=[Mission.Design.GROSS_MASS, + Mission.Design.RANGE, + Aircraft.Wing.SPAN, + Aircraft.Wing.AREA], + promotes_outputs=[(Mission.Objectives.FUEL, promoted_name)]) def add_design_variables(self): - self.model.add_design_var('mission:design:gross_mass', lower=10., upper=900e3) + self.model.add_design_var(Mission.Design.GROSS_MASS, + lower=10., upper=900e3, units='lbm') + self.model.add_design_var(Aircraft.Wing.SPAN, lower=100., upper=500., units='ft') + self.model.add_design_var(Aircraft.Wing.AREA, lower=10., + upper=1e6, units='ft**2') def add_driver(self): self.driver = om.pyOptSparseDriver() @@ -142,7 +148,7 @@ def create_timeseries_plots(self, plotvars=[], show=True): units=unit) time = np.hstack([time, np.ndarray.flatten(rawt)]) yvar = np.hstack([yvar, np.ndarray.flatten(rawy)]) - plt.plot(time, yvar, 'o') + plt.plot(time, yvar, linewidth=self.num_missions-i) plt.xlabel("Time (s)") plt.ylabel(f"{var.title()} ({unit})") plt.grid() @@ -181,11 +187,19 @@ def print_vars(self, vars=[]): """Specify vars with name and unit in a tuple, e.g. vars = [ (Mission.Summary.FUEL_BURNED, 'lbm') ]""" print("\n\n=========================\n") + print(f"{'':40}", end=': ') + for i in range(self.num_missions): + name = f"Mission {i}" + print(f"{name:^30}", end='| ') + print() for var, unit in vars: - print(f"Variable: {var}") + varname = f"Variable: {var.replace(':','.').upper()}" + print(f"{varname:40}", end=": ") for i in range(self.num_missions): val = self.get_val(f'group_{i}.{var}', units=unit)[0] - print(f"\tPlane {i}: {val} ({unit})") + printstatement = f"{val} ({unit})" + print(f"{printstatement:^30}", end="| ") + print() def C5_example(makeN2=False): @@ -194,6 +208,13 @@ def C5_example(makeN2=False): planes = [join(plane_dir, plane) for plane in planes] phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info, c5_ferry_phase_info] + optalt, optmach = False, False + for phaseinfo in phase_infos: + for key in phaseinfo.keys(): + if "user_options" in phaseinfo[key].keys(): + phaseinfo[key]["user_options"]["optimize_mach"] = optmach + phaseinfo[key]["user_options"]["optimize_altitude"] = optalt + weights = [1, 1, 1] super_prob = MultiMissionProblem(planes, phase_infos, weights) @@ -215,14 +236,17 @@ def C5_example(makeN2=False): super_prob.run() printoutputs = [(Aircraft.Design.EMPTY_MASS, 'lbm'), (Mission.Summary.FUEL_BURNED, 'lbm'), - (Mission.Summary.GROSS_MASS, 'lbm')] + (Mission.Summary.GROSS_MASS, 'lbm'), + (Aircraft.Wing.SPAN, 'ft'), + (Aircraft.Wing.AREA, 'ft**2')] super_prob.print_vars(vars=printoutputs) plotvars = [('altitude', 'ft'), ('mass', 'lbm'), ('drag', 'lbf'), ('distance', 'nmi'), - ('throttle', 'unitless')] + ('throttle', 'unitless'), + ('mach', 'unitless')] super_prob.create_timeseries_plots(plotvars=plotvars, show=False) super_prob.create_payload_range_plot(show=False) @@ -237,27 +261,102 @@ def C5_example(makeN2=False): super_prob = C5_example(makeN2=makeN2) """ -1:1 -Variable: mission:summary:fuel_burned -Values: 164988.61664962117, 306345.04737967893 (lbm) +1:1:1 and 5:1:1 and 1:1:5 and 1:5:1 Variable: aircraft:design:empty_mass -Values: 378204.91862045845, 378204.91862045845 (lbm) + Plane 0: 377110.8519657982 (lbm), Plane 1: 377110.8519657982 (lbm), Plane 2: 377110.8519657982 (lbm), +Variable: mission:summary:fuel_burned + Plane 0: 167530.46091225138 (lbm), Plane 1: 308428.65141334233 (lbm), Plane 2: 412689.6603555365 (lbm), Variable: mission:summary:gross_mass -Values: 598462.8871182877, 710244.3178483456 (lbm) + Plane 0: 599904.1437916472 (lbm), Plane 1: 711227.3342927382 (lbm), Plane 2: 793323.6057604996 (lbm), +Variable: aircraft:wing:span + Plane 0: 235.7734017415966 (ft), Plane 1: 235.7734017415966 (ft), Plane 2: 235.7734017415966 (ft), +Variable: aircraft:wing:area + Plane 0: 6106.843788863166 (ft**2), Plane 1: 6106.843788863166 (ft**2), Plane 2: 6106.843788863166 (ft**2), + +1:1:5 -1.5:1 +""" + +""" +inter payload: 100k +Variable: aircraft:design:empty_mass + Plane 0: 374179.5394606042 (lbm) + Plane 1: 374179.5394606042 (lbm) + Plane 2: 374179.5394606042 (lbm) Variable: mission:summary:fuel_burned -Values: 164988.61476287164, 306345.04738991836 (lbm) + Plane 0: 165739.44323952997 (lbm) + Plane 1: 306588.0148270305 (lbm) + Plane 2: 411012.49583405076 (lbm) +Variable: mission:summary:gross_mass + Plane 0: 595188.3345483424 (lbm) + Plane 1: 702786.9061358428 (lbm) + Plane 2: 788721.6496684301 (lbm) + +inter payload: 140k Variable: aircraft:design:empty_mass -Values: 378204.91862045845, 378204.91862045845 (lbm) + Plane 0: 374179.53946059936 (lbm) + Plane 1: 374179.53946059936 (lbm) + Plane 2: 374179.53946059936 (lbm) +Variable: mission:summary:fuel_burned + Plane 0: 165739.44340813044 (lbm) + Plane 1: 306588.0148359792 (lbm) + Plane 2: 411012.4960230509 (lbm) Variable: mission:summary:gross_mass -Values: 598462.8852315382, 710244.3178585849 (lbm) + Plane 0: 595188.3347169379 (lbm) + Plane 1: 710136.9061447867 (lbm) + Plane 2: 788721.6498574257 (lbm) -2:1 +140k inter, 301k max +Variable: aircraft:design:empty_mass + Plane 0: 374179.5394605969 (lbm) + Plane 1: 374179.5394605969 (lbm) + Plane 2: 374179.5394605969 (lbm) Variable: mission:summary:fuel_burned -Values: 164988.61651039496, 306345.04738988867 (lbm) + Plane 0: 165739.44397328247 (lbm) + Plane 1: 306588.01484213956 (lbm) + Plane 2: 411012.4961383113 (lbm) +Variable: mission:summary:gross_mass + Plane 0: 598863.3352823037 (lbm) + Plane 1: 710136.9061509445 (lbm) + Plane 2: 788721.6499726834 (lbm) + +140k inter, 301k max, 10k ferry Variable: aircraft:design:empty_mass -Values: 378204.91862045845, 378204.91862045845 (lbm) + Plane 0: 374179.5394605957 (lbm) + Plane 1: 374179.5394605957 (lbm) + Plane 2: 374179.5394605957 (lbm) +Variable: mission:summary:fuel_burned + Plane 0: 165739.4440247023 (lbm) + Plane 1: 306588.01484336343 (lbm) + Plane 2: 411012.49619538186 (lbm) Variable: mission:summary:gross_mass -Values: 598462.8869790616, 710244.3178585552 (lbm) + Plane 0: 598863.3353337225 (lbm) + Plane 1: 710136.9061521672 (lbm) + Plane 2: 790586.3875041857 (lbm) +""" + +""" +optimize mach only: optimize both mach and alt: optimize neither mach or altitude +Variable: aircraft:design:empty_mass Variable: aircraft:design:empty_mass Variable: aircraft:design:empty_mass + Plane 0: 326047.42156711605 (lbm) Plane 0: 390475.71469928196 (lbm) Plane 0: 371320.23571631836 (lbm) + Plane 1: 326047.42156711605 (lbm) Plane 1: 390475.71469928196 (lbm) Plane 1: 371320.23571631836 (lbm) + Plane 2: 326047.42156711605 (lbm) Plane 2: 390475.71469928196 (lbm) Plane 2: 371320.23571631836 (lbm) +Variable: mission:summary:fuel_burned Variable: mission:summary:fuel_burned Variable: mission:summary:fuel_burned + Plane 0: 175717.28062873823 (lbm) Plane 0: 178314.99288207013 (lbm) Plane 0: 167946.2102766974 (lbm) + Plane 1: 306419.71885746776 (lbm) Plane 1: 325789.9474922766 (lbm) Plane 1: 309094.299337939 (lbm) + Plane 2: 394791.91474366543 (lbm) Plane 2: 429716.0286375711 (lbm) Plane 2: 413746.64501453174 (lbm) +Variable: mission:summary:gross_mass Variable: mission:summary:gross_mass Variable: mission:summary:gross_mass + Plane 0: 557034.0540440837 (lbm) Plane 0: 624060.059429561 (lbm) Plane 0: 594535.797841224 (lbm) + Plane 1: 658161.4922728132 (lbm) Plane 1: 741960.0140397676 (lbm) Plane 1: 706108.8869024655 (lbm) + Plane 2: 724368.9506845778 (lbm) Plane 2: 823721.3577106291 (lbm) Plane 2: 788596.4951046254 (lbm) +Variable: aircraft:wing:span Variable: aircraft:wing:span Variable: aircraft:wing:span + Plane 0: 54.707828078624665 (ft) Plane 0: 287.14946969690783 (ft) Plane 0: 211.8281919608065 (ft) + Plane 1: 54.707828078624665 (ft) Plane 1: 287.14946969690783 (ft) Plane 1: 211.8281919608065 (ft) + Plane 2: 54.707828078624665 (ft) Plane 2: 287.14946969690783 (ft) Plane 2: 211.8281919608065 (ft) +Variable: aircraft:wing:aspect_ratio Variable: aircraft:wing:aspect_ratio Variable: aircraft:wing:aspect_ratio + Plane 0: 6.263196240285538 (unitless) Plane 0: 6.931291416800268 (unitless) Plane 0: 7.576574965501183 (unitless) + Plane 1: 6.263196240285538 (unitless) Plane 1: 6.931291416800268 (unitless) Plane 1: 7.576574965501183 (unitless) + Plane 2: 6.263196240285538 (unitless) Plane 2: 6.931291416800268 (unitless) Plane 2: 7.576574965501183 (unitless) + + """ From 320e0a6fc4f1fb374c2665c13fc3a59bbd9a962b Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 8 Aug 2024 10:02:48 -0400 Subject: [PATCH 042/113] renamed a file, added a comment --- test_single_aviary.py => c5_runfile_single_aviary.py | 0 multi_aviary_copymodel.py | 2 ++ 2 files changed, 2 insertions(+) rename test_single_aviary.py => c5_runfile_single_aviary.py (100%) diff --git a/test_single_aviary.py b/c5_runfile_single_aviary.py similarity index 100% rename from test_single_aviary.py rename to c5_runfile_single_aviary.py diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 6e3c45dbd..5ca9b0137 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -128,6 +128,8 @@ def run(self): dm.run_problem(self, make_plots=True) def get_design_range(self, phase_infos): + # Take the largest range from all the phase_infos and sets that as design_range + # this affects how large the avionics mass and landing gear mass design_range = 0 for phase_info in phase_infos: get_range = phase_info['post_mission']['target_range'][0] # TBD add units From d85b692c9e4e434685a90e19afac70fb00236c61 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Mon, 12 Aug 2024 11:35:18 -0400 Subject: [PATCH 043/113] added min and max range to get_design_range --- multi_aviary_copymodel.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index d6f75d0d5..47db49e54 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -121,17 +121,23 @@ def run(self): def get_design_range(self): """Finds the longest mission and sets its range as the design range for all - Aviary problems. Used within Aviary for sizing subsystems (avionics and landing gear).""" - design_range = 0 + Aviary problems. Used within Aviary for sizing subsystems (avionics and AC). + Landing gear decreases in size as range increases, + so that should be sized of minimum range mission!""" + design_range = [] for phase_info in self.phase_infos: - get_range = phase_info['post_mission']['target_range'][0] # TBD add units - if get_range > design_range: - design_range = get_range - return design_range + design_range.append(phase_info['post_mission'] + ['target_range'][0]) # TBD add units + design_range_min = np.min(design_range) + design_range_max = np.max(design_range) + return design_range_max, # design_range_min def create_timeseries_plots(self, plotvars=[], show=True): - """Creates timeseries plots for any variables within timeseries. Specify variables - and units by setting plotvars = [('altitude','ft')]. Any number of vars can be added.""" + """ + Temporary create plots manually because graphing won't work for dual-trajectories. + Creates timeseries plots for any variables within timeseries. Specify variables + and units by setting plotvars = [('altitude','ft')]. Any number of vars can be added. + """ plt.figure() for plotidx, (var, unit) in enumerate(plotvars): plt.subplot(int(np.ceil(len(plotvars)/2)), 2, plotidx+1) From 1f73bb1f21821bfd247d7e08e930f813c4592caf Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Mon, 12 Aug 2024 11:36:22 -0400 Subject: [PATCH 044/113] added some comments. Opt running fine --- multi_aviary_copymodel.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/multi_aviary_copymodel.py b/multi_aviary_copymodel.py index 47db49e54..7e6d4b7c4 100644 --- a/multi_aviary_copymodel.py +++ b/multi_aviary_copymodel.py @@ -94,10 +94,12 @@ def add_objective(self): weighted_str = "+".join([f"{fuelobj}*{weight}" for fuelobj, weight in zip(self.fuel_vars, weights)]) # weighted_str looks like: fuel_0 * weight[0] + fuel_1 * weight[1] + # note that the fuel objective itself is the base aviary fuel objective + # which is also a function of climb time becuse climb is not very sensitive to fuel # adding compound execComp to super problem self.model.add_subsystem('compound_fuel_burn_objective', om.ExecComp( - "compound = "+weighted_str), promotes=["compound"]) + "compound = "+weighted_str, has_diag_partials=True), promotes=["compound"]) self.model.add_objective('compound') def setup_wrapper(self): From 2a508f6337863bb4992c6b8941fc397af574283a Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Fri, 16 Aug 2024 12:06:05 -0400 Subject: [PATCH 045/113] moved c5 example files --- .../multi_missions/c5_models/c5_ferry.csv | 167 ++++++++++++++++++ .../c5_models/c5_ferry_phase_info.py | 83 +++++++++ .../c5_models/c5_intermediate.csv | 167 ++++++++++++++++++ .../c5_models/c5_intermediate_phase_info.py | 83 +++++++++ .../c5_models/c5_maxpayload.csv | 167 ++++++++++++++++++ .../c5_models/c5_maxpayload_phase_info.py | 83 +++++++++ .../run_multimission_example.py | 6 +- 7 files changed, 755 insertions(+), 1 deletion(-) create mode 100644 aviary/examples/multi_missions/c5_models/c5_ferry.csv create mode 100644 aviary/examples/multi_missions/c5_models/c5_ferry_phase_info.py create mode 100644 aviary/examples/multi_missions/c5_models/c5_intermediate.csv create mode 100644 aviary/examples/multi_missions/c5_models/c5_intermediate_phase_info.py create mode 100644 aviary/examples/multi_missions/c5_models/c5_maxpayload.csv create mode 100644 aviary/examples/multi_missions/c5_models/c5_maxpayload_phase_info.py rename multi_aviary_copymodel.py => aviary/examples/multi_missions/run_multimission_example.py (98%) diff --git a/aviary/examples/multi_missions/c5_models/c5_ferry.csv b/aviary/examples/multi_missions/c5_models/c5_ferry.csv new file mode 100644 index 000000000..6540463d5 --- /dev/null +++ b/aviary/examples/multi_missions/c5_models/c5_ferry.csv @@ -0,0 +1,167 @@ +# author: Chris Psenica +#aircraft:air_conditioning:mass_scaler,1.0,unitless +#aircraft:anti_icing:mass_scaler,1.0,unitless +#aircraft:apu:mass_scaler,1.0,unitless +#aircraft:avionics:mass_scaler,1.0,unitless +#aircraft:canard:area,0.0,ft**2 +#aircraft:canard:aspect_ratio,0.0,unitless +#aircraft:canard:thickness_to_chord,0.0,unitless +aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm +#aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless +#aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:mass_per_passenger,180.0,lbm + +aircraft:crew_and_payload:cargo_mass,0,lbm +#aircraft:crew_and_payload:num_passengers,82,unitless + +#aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:num_flight_crew,7,unitless +#aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless +#aircraft:crew_and_payload:wing_cargo,0.0,lbm +#aircraft:design:base_area,0.0,ft**2 +#aircraft:design:empty_mass_margin_scaler,1.0,unitless +#aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless +#aircraft:design:touchdown_mass,498554,lbm +aircraft:design:reserve_fuel_additional,0,lbm +#aircraft:design:subsonic_drag_coeff_factor,1.0,unitless +#aircraft:design:supersonic_drag_coeff_factor,1.0,unitless +aircraft:design:use_alt_mass,False,unitless +#aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless +#aircraft:electrical:mass_scaler,1.0,unitless + +aircraft:engine:data_file,models/engines/CF6.deck,unitless + +aircraft:engine:additional_mass_fraction,0.,unitless +aircraft:engine:constant_fuel_consumption,0.,lbm/h + +aircraft:engine:flight_idle_thrust_fraction,0.0,unitless +aircraft:engine:flight_idle_max_fraction,1.0,unitless +aircraft:engine:flight_idle_min_fraction,0.08,unitless +#aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless +#aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless +aircraft:engine:generate_flight_idle,False,unitless +aircraft:engine:geopotential_alt,False,unitless +aircraft:engine:ignore_negative_thrust,False,unitless +aircraft:engine:interpolation_method,slinear,unitless +aircraft:engine:mass_scaler,1.0,unitless +aircraft:engine:mass,8176,lbm +aircraft:engine:reference_mass,8176,lbm +aircraft:engine:reference_sls_thrust,51250.,lbf +aircraft:engine:scale_mass,True,unitless +aircraft:engine:scale_performance,True,unitless +aircraft:engine:scaled_sls_thrust,51250,lbf +#aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless +#aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless +#aircraft:engine:thrust_reversers_mass_scaler,1.0,unitless +aircraft:engine:num_fuselage_engines,0,unitless +aircraft:engine:num_engines,4,unitless +aircraft:engine:num_wing_engines,4,unitless +aircraft:engine:wing_locations,[0.3561541339,0.555929667],unitless +#aircraft:fins:area,0.0,ft**2 +#aircraft:fins:mass_scaler,1.0,unitless +#aircraft:fins:mass,0.0,lbm +#aircraft:fins:num_fins,0,unitless +#aircraft:fins:taper_ratio,10.0,unitless +aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm +#aircraft:fuel:density_ratio,1.0,unitless +#aircraft:fuel:fuel_system_mass_scaler,1.0,unitless +aircraft:fuel:fuselage_fuel_capacity,0.0,lbm +aircraft:fuel:num_tanks,12,unitless +aircraft:fuel:total_capacity,341446,lbm +#aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless +#aircraft:furnishings:mass_scaler,1.0,unitless +aircraft:fuselage:length,230.58,ft +#aircraft:fuselage:mass_scaler,1.0,unitless +aircraft:fuselage:max_height,26.83,ft +aircraft:fuselage:max_width,23.9,ft +aircraft:fuselage:military_cargo_floor,True,unitless +aircraft:fuselage:num_fuselages,1,unitless +aircraft:fuselage:passenger_compartment_length,143.75,ft +aircraft:fuselage:planform_area,4462.78,ft**2 +#aircraft:fuselage:wetted_area_scaler,1.0,unitless +aircraft:horizontal_tail:area,965.8,ft**2 +aircraft:horizontal_tail:aspect_ratio,4.2,unitless +#aircraft:horizontal_tail:mass_scaler,1.0,unitless +aircraft:horizontal_tail:taper_ratio,0.43,unitless +aircraft:horizontal_tail:thickness_to_chord,0.16,unitless +aircraft:horizontal_tail:vertical_tail_fraction,1.0,unitless +#aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless +#aircraft:hydraulics:mass_scaler,1.0,unitless +#aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 +#aircraft:instruments:mass_scaler,1.0,unitless +#aircraft:landing_gear:carrier_based,False,unitless +#aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless +#aircraft:landing_gear:main_gear_oleo_length,45,inch +#aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless +#aircraft:landing_gear:nose_gear_oleo_length,45,inch +aircraft:nacelle:avg_diameter,9.15,ft +aircraft:nacelle:avg_length,20.56,ft +#aircraft:nacelle:mass_scaler,1.0,unitless +#aircraft:nacelle:wetted_area_scaler,1.0,unitless +#aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 +#aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless +#aircraft:propulsion:misc_mass_scaler,1.0,unitless +aircraft:vertical_tail:area,537.9,ft**2 +aircraft:vertical_tail:aspect_ratio,0.958,unitless +#aircraft:vertical_tail:mass_scaler,1.0,unitless +aircraft:vertical_tail:num_tails,1,unitless +aircraft:vertical_tail:taper_ratio,0.846,unitless +aircraft:vertical_tail:thickness_to_chord,0.157,unitless +#aircraft:vertical_tail:wetted_area_scaler,1.0,unitless +aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless +aircraft:wing:airfoil_technology,1.0,unitless +aircraft:wing:area,6200,ft**2 +aircraft:wing:aspect_ratio,7.75,unitless +#aircraft:wing:bending_mass_scaler,1.0,unitless +#aircraft:wing:composite_fraction,0.1,unitless +aircraft:wing:control_surface_area,2323.7,ft**2 +aircraft:wing:control_surface_area_ratio,0.37479,unitless +aircraft:wing:load_distribution_control,2.0,unitless +aircraft:wing:load_fraction,1.0,unitless +#aircraft:wing:mass_scaler,1.0,unitless +aircraft:wing:max_camber_at_70_semispan,0.0,unitless +#aircraft:wing:misc_mass_scaler,1.0,unitless +#aircraft:wing:shear_control_mass_scaler,1.0,unitless +aircraft:wing:span_efficiency_reduction,False,unitless +aircraft:wing:span,222.75,ft +#aircraft:wing:strut_bracing_factor,0.0,unitless +#aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless +aircraft:wing:sweep,20.0,deg +aircraft:wing:taper_ratio,0.419,unitless +aircraft:wing:thickness_to_chord,0.1284,unitless +aircraft:wing:ultimate_load_factor,3.75,unitless +aircraft:wing:var_sweep_mass_penalty,0.0,unitless +#aircraft:wing:wetted_area_scaler,1.0,unitless +aircraft:wing:num_integration_stations,50,unitless +aircraft:wing:thickness_to_chord_dist,0.1239,0.108,0.013,unitless +aircraft:wing:load_path_sweep_dist,0.0,0.0,deg +aircraft:wing:input_station_dist,0.0,0.3298,0.884,unitless +aircraft:wing:chord_per_semispan,0.362,0.2667,0.0456,unitless +aircraft:wing:glove_and_bat,0.0,ft**2 +aircraft:wing:detailed_wing,False,unitless + + +mission:constraints:max_mach,0.77,unitless +mission:design:cruise_altitude,34000,ft +mission:design:gross_mass,840000,lbm +mission:design:range,7000.0,NM +mission:design:thrust_takeoff_per_eng,51250,lbf +mission:landing:lift_coefficient_max,3.0,unitless +mission:design:mach,0.77,unitless +#mission:summary:fuel_flow_scaler,1.0,unitless +mission:takeoff:fuel_simple,6.32,lbm +mission:takeoff:lift_coefficient_max,3.62,unitless +mission:takeoff:lift_over_drag,19.5,unitless +settings:equations_of_motion,height_energy +settings:mass_method,FLOPS + + +### missions definition +# mission_name: payload +# times: 0, 50, 280, 300 +# altitudes: 0, 30000, 30000, 0 +# machs: 0.30, 0.77, 0.77, 0.30 +# optimize_altitudes: F,F,F +# optimize_machs: F,F,F +# takeoff: F +# landing: F diff --git a/aviary/examples/multi_missions/c5_models/c5_ferry_phase_info.py b/aviary/examples/multi_missions/c5_models/c5_ferry_phase_info.py new file mode 100644 index 000000000..6a472ed2f --- /dev/null +++ b/aviary/examples/multi_missions/c5_models/c5_ferry_phase_info.py @@ -0,0 +1,83 @@ +phase_info = { + "pre_mission": {"include_takeoff": False, "optimize_mass": True}, + "climb_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.3, "unitless"), + "final_mach": (0.77, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (0.0, "ft"), + "final_altitude": (29500.0, "ft"), + "altitude_bounds": ((0.0, 30000.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": True, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((0.0, 0.0), "min"), + "duration_bounds": ((25.0, 75.0), "min"), + }, + "initial_guesses": {"time": ([0.0, 50.0], "min")}, + }, + "climb_2": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.77, "unitless"), + "final_mach": (0.77, "unitless"), + "mach_bounds": ((0.75, 0.79), "unitless"), + "initial_altitude": (29500.0, "ft"), + "final_altitude": (32000.0, "ft"), + "altitude_bounds": ((29000.0, 32500.0), "ft"), + "throttle_enforcement": "boundary_constraint", + "fix_initial": False, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((25.0, 75.0), "min"), + "duration_bounds": ((381.0, 1143.0), "min"), + }, + "initial_guesses": {"time": ([50.0, 762.0], "min")}, + }, + "descent_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.77, "unitless"), + "final_mach": (0.3, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (32000.0, "ft"), + "final_altitude": (0.0, "ft"), + "altitude_bounds": ((0.0, 32500.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": False, + "constrain_final": True, + "fix_duration": False, + "initial_bounds": ((406.0, 1218.0), "min"), + "duration_bounds": ((15.5, 46.5), "min"), + }, + "initial_guesses": {"time": ([812.0, 31.0], "min")}, + }, + "post_mission": { + "include_landing": False, + "constrain_range": True, + "target_range": (7001.59, "nmi"), + }, +} diff --git a/aviary/examples/multi_missions/c5_models/c5_intermediate.csv b/aviary/examples/multi_missions/c5_models/c5_intermediate.csv new file mode 100644 index 000000000..bb4565239 --- /dev/null +++ b/aviary/examples/multi_missions/c5_models/c5_intermediate.csv @@ -0,0 +1,167 @@ +# author: Chris Psenica +#aircraft:air_conditioning:mass_scaler,1.0,unitless +#aircraft:anti_icing:mass_scaler,1.0,unitless +#aircraft:apu:mass_scaler,1.0,unitless +#aircraft:avionics:mass_scaler,1.0,unitless +#aircraft:canard:area,0.0,ft**2 +#aircraft:canard:aspect_ratio,0.0,unitless +#aircraft:canard:thickness_to_chord,0.0,unitless +aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm +#aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless +#aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:mass_per_passenger,180.0,lbm + +aircraft:crew_and_payload:cargo_mass,120000.0,lbm +#aircraft:crew_and_payload:num_passengers,82,unitless + +#aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:num_flight_crew,7,unitless +#aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless +#aircraft:crew_and_payload:wing_cargo,0.0,lbm +#aircraft:design:base_area,0.0,ft**2 +#aircraft:design:empty_mass_margin_scaler,1.0,unitless +#aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless +#aircraft:design:touchdown_mass,498554,lbm +aircraft:design:reserve_fuel_additional,0,lbm +#aircraft:design:subsonic_drag_coeff_factor,1.0,unitless +#aircraft:design:supersonic_drag_coeff_factor,1.0,unitless +aircraft:design:use_alt_mass,False,unitless +#aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless +#aircraft:electrical:mass_scaler,1.0,unitless + +aircraft:engine:data_file,models/engines/CF6.deck,unitless + +aircraft:engine:additional_mass_fraction,0.,unitless +aircraft:engine:constant_fuel_consumption,0.,lbm/h + +aircraft:engine:flight_idle_thrust_fraction,0.0,unitless +aircraft:engine:flight_idle_max_fraction,1.0,unitless +aircraft:engine:flight_idle_min_fraction,0.08,unitless +#aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless +#aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless +aircraft:engine:generate_flight_idle,False,unitless +aircraft:engine:geopotential_alt,False,unitless +aircraft:engine:ignore_negative_thrust,False,unitless +aircraft:engine:interpolation_method,slinear,unitless +aircraft:engine:mass_scaler,1.0,unitless +aircraft:engine:mass,8176,lbm +aircraft:engine:reference_mass,8176,lbm +aircraft:engine:reference_sls_thrust,51250.,lbf +aircraft:engine:scale_mass,True,unitless +aircraft:engine:scale_performance,True,unitless +aircraft:engine:scaled_sls_thrust,51250,lbf +#aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless +#aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless +#aircraft:engine:thrust_reversers_mass_scaler,1.0,unitless +aircraft:engine:num_fuselage_engines,0,unitless +aircraft:engine:num_engines,4,unitless +aircraft:engine:num_wing_engines,4,unitless +aircraft:engine:wing_locations,[0.3561541339,0.555929667],unitless +#aircraft:fins:area,0.0,ft**2 +#aircraft:fins:mass_scaler,1.0,unitless +#aircraft:fins:mass,0.0,lbm +#aircraft:fins:num_fins,0,unitless +#aircraft:fins:taper_ratio,10.0,unitless +aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm +#aircraft:fuel:density_ratio,1.0,unitless +#aircraft:fuel:fuel_system_mass_scaler,1.0,unitless +aircraft:fuel:fuselage_fuel_capacity,0.0,lbm +aircraft:fuel:num_tanks,12,unitless +aircraft:fuel:total_capacity,341446,lbm +#aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless +#aircraft:furnishings:mass_scaler,1.0,unitless +aircraft:fuselage:length,230.58,ft +#aircraft:fuselage:mass_scaler,1.0,unitless +aircraft:fuselage:max_height,26.83,ft +aircraft:fuselage:max_width,23.9,ft +aircraft:fuselage:military_cargo_floor,True,unitless +aircraft:fuselage:num_fuselages,1,unitless +aircraft:fuselage:passenger_compartment_length,143.75,ft +aircraft:fuselage:planform_area,4462.78,ft**2 +#aircraft:fuselage:wetted_area_scaler,1.0,unitless +aircraft:horizontal_tail:area,965.8,ft**2 +aircraft:horizontal_tail:aspect_ratio,4.2,unitless +#aircraft:horizontal_tail:mass_scaler,1.0,unitless +aircraft:horizontal_tail:taper_ratio,0.43,unitless +aircraft:horizontal_tail:thickness_to_chord,0.16,unitless +aircraft:horizontal_tail:vertical_tail_fraction,1.0,unitless +#aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless +#aircraft:hydraulics:mass_scaler,1.0,unitless +#aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 +#aircraft:instruments:mass_scaler,1.0,unitless +#aircraft:landing_gear:carrier_based,False,unitless +#aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless +#aircraft:landing_gear:main_gear_oleo_length,45,inch +#aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless +#aircraft:landing_gear:nose_gear_oleo_length,45,inch +aircraft:nacelle:avg_diameter,9.15,ft +aircraft:nacelle:avg_length,20.56,ft +#aircraft:nacelle:mass_scaler,1.0,unitless +#aircraft:nacelle:wetted_area_scaler,1.0,unitless +#aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 +#aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless +#aircraft:propulsion:misc_mass_scaler,1.0,unitless +aircraft:vertical_tail:area,537.9,ft**2 +aircraft:vertical_tail:aspect_ratio,0.958,unitless +#aircraft:vertical_tail:mass_scaler,1.0,unitless +aircraft:vertical_tail:num_tails,1,unitless +aircraft:vertical_tail:taper_ratio,0.846,unitless +aircraft:vertical_tail:thickness_to_chord,0.157,unitless +#aircraft:vertical_tail:wetted_area_scaler,1.0,unitless +aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless +aircraft:wing:airfoil_technology,1.0,unitless +aircraft:wing:area,6200,ft**2 +aircraft:wing:aspect_ratio,7.75,unitless +#aircraft:wing:bending_mass_scaler,1.0,unitless +#aircraft:wing:composite_fraction,0.1,unitless +aircraft:wing:control_surface_area,2323.7,ft**2 +aircraft:wing:control_surface_area_ratio,0.37479,unitless +aircraft:wing:load_distribution_control,2.0,unitless +aircraft:wing:load_fraction,1.0,unitless +#aircraft:wing:mass_scaler,1.0,unitless +aircraft:wing:max_camber_at_70_semispan,0.0,unitless +#aircraft:wing:misc_mass_scaler,1.0,unitless +#aircraft:wing:shear_control_mass_scaler,1.0,unitless +aircraft:wing:span_efficiency_reduction,False,unitless +aircraft:wing:span,222.75,ft +#aircraft:wing:strut_bracing_factor,0.0,unitless +#aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless +aircraft:wing:sweep,20.0,deg +aircraft:wing:taper_ratio,0.419,unitless +aircraft:wing:thickness_to_chord,0.1284,unitless +aircraft:wing:ultimate_load_factor,3.75,unitless +aircraft:wing:var_sweep_mass_penalty,0.0,unitless +#aircraft:wing:wetted_area_scaler,1.0,unitless +aircraft:wing:num_integration_stations,50,unitless +aircraft:wing:thickness_to_chord_dist,0.1239,0.108,0.013,unitless +aircraft:wing:load_path_sweep_dist,0.0,0.0,deg +aircraft:wing:input_station_dist,0.0,0.3298,0.884,unitless +aircraft:wing:chord_per_semispan,0.362,0.2667,0.0456,unitless +aircraft:wing:glove_and_bat,0.0,ft**2 +aircraft:wing:detailed_wing,False,unitless + + +mission:constraints:max_mach,0.77,unitless +mission:design:cruise_altitude,34000,ft +mission:design:gross_mass,840000,lbm +mission:design:range,4800.0,NM +mission:design:thrust_takeoff_per_eng,51250,lbf +mission:landing:lift_coefficient_max,3.0,unitless +mission:design:mach,0.77,unitless +#mission:summary:fuel_flow_scaler,1.0,unitless +mission:takeoff:fuel_simple,6.32,lbm +mission:takeoff:lift_coefficient_max,3.62,unitless +mission:takeoff:lift_over_drag,19.5,unitless +settings:equations_of_motion,height_energy +settings:mass_method,FLOPS + + +### missions definition +# mission_name: payload +# times: 0, 50, 280, 300 +# altitudes: 0, 30000, 30000, 0 +# machs: 0.30, 0.77, 0.77, 0.30 +# optimize_altitudes: F,F,F +# optimize_machs: F,F,F +# takeoff: F +# landing: F diff --git a/aviary/examples/multi_missions/c5_models/c5_intermediate_phase_info.py b/aviary/examples/multi_missions/c5_models/c5_intermediate_phase_info.py new file mode 100644 index 000000000..88f121ca1 --- /dev/null +++ b/aviary/examples/multi_missions/c5_models/c5_intermediate_phase_info.py @@ -0,0 +1,83 @@ +phase_info = { + "pre_mission": {"include_takeoff": False, "optimize_mass": True}, + "climb_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.3, "unitless"), + "final_mach": (0.73, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (0.0, "ft"), + "final_altitude": (29500.0, "ft"), + "altitude_bounds": ((0.0, 30000.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": True, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((0.0, 0.0), "min"), + "duration_bounds": ((25.0, 75.0), "min"), + }, + "initial_guesses": {"time": ([0.0, 50.0], "min")}, + }, + "climb_2": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.73, "unitless"), + "final_mach": (0.73, "unitless"), + "mach_bounds": ((0.72, 0.74), "unitless"), + "initial_altitude": (29500.0, "ft"), + "final_altitude": (32000.0, "ft"), + "altitude_bounds": ((29000.0, 32500.0), "ft"), + "throttle_enforcement": "boundary_constraint", + "fix_initial": False, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((25.0, 75.0), "min"), + "duration_bounds": ((255.0, 765.0), "min"), + }, + "initial_guesses": {"time": ([50.0, 510.0], "min")}, + }, + "descent_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.73, "unitless"), + "final_mach": (0.3, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (32000.0, "ft"), + "final_altitude": (0.0, "ft"), + "altitude_bounds": ((0.0, 32500.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": False, + "constrain_final": True, + "fix_duration": False, + "initial_bounds": ((280.0, 840.0), "min"), + "duration_bounds": ((15.0, 45.0), "min"), + }, + "initial_guesses": {"time": ([560.0, 30.0], "min")}, + }, + "post_mission": { + "include_landing": False, + "constrain_range": True, + "target_range": (4839.41, "nmi"), + }, +} diff --git a/aviary/examples/multi_missions/c5_models/c5_maxpayload.csv b/aviary/examples/multi_missions/c5_models/c5_maxpayload.csv new file mode 100644 index 000000000..07a6fb381 --- /dev/null +++ b/aviary/examples/multi_missions/c5_models/c5_maxpayload.csv @@ -0,0 +1,167 @@ +# author: Chris Psenica +#aircraft:air_conditioning:mass_scaler,1.0,unitless +#aircraft:anti_icing:mass_scaler,1.0,unitless +#aircraft:apu:mass_scaler,1.0,unitless +#aircraft:avionics:mass_scaler,1.0,unitless +#aircraft:canard:area,0.0,ft**2 +#aircraft:canard:aspect_ratio,0.0,unitless +#aircraft:canard:thickness_to_chord,0.0,unitless +aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm +#aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless +#aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:mass_per_passenger,180.0,lbm + +aircraft:crew_and_payload:cargo_mass,281000.0,lbm +#aircraft:crew_and_payload:num_passengers,82,unitless + +#aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:num_flight_crew,7,unitless +#aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless +#aircraft:crew_and_payload:wing_cargo,0.0,lbm +#aircraft:design:base_area,0.0,ft**2 +#aircraft:design:empty_mass_margin_scaler,1.0,unitless +#aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless +#aircraft:design:touchdown_mass,498554,lbm +aircraft:design:reserve_fuel_additional,0,lbm +#aircraft:design:subsonic_drag_coeff_factor,1.0,unitless +#aircraft:design:supersonic_drag_coeff_factor,1.0,unitless +aircraft:design:use_alt_mass,False,unitless +#aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless +#aircraft:electrical:mass_scaler,1.0,unitless + +aircraft:engine:data_file,models/engines/CF6.deck,unitless + +aircraft:engine:additional_mass_fraction,0.,unitless +aircraft:engine:constant_fuel_consumption,0.,lbm/h + +aircraft:engine:flight_idle_thrust_fraction,0.0,unitless +aircraft:engine:flight_idle_max_fraction,1.0,unitless +aircraft:engine:flight_idle_min_fraction,0.08,unitless +#aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless +#aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless +aircraft:engine:generate_flight_idle,False,unitless +aircraft:engine:geopotential_alt,False,unitless +aircraft:engine:ignore_negative_thrust,False,unitless +aircraft:engine:interpolation_method,slinear,unitless +aircraft:engine:mass_scaler,1.0,unitless +aircraft:engine:mass,8176,lbm +aircraft:engine:reference_mass,8176,lbm +aircraft:engine:reference_sls_thrust,51250.,lbf +aircraft:engine:scale_mass,True,unitless +aircraft:engine:scale_performance,True,unitless +aircraft:engine:scaled_sls_thrust,51250,lbf +#aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless +#aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless +#aircraft:engine:thrust_reversers_mass_scaler,1.0,unitless +aircraft:engine:num_fuselage_engines,0,unitless +aircraft:engine:num_engines,4,unitless +aircraft:engine:num_wing_engines,4,unitless +aircraft:engine:wing_locations,[0.3561541339,0.555929667],unitless +#aircraft:fins:area,0.0,ft**2 +#aircraft:fins:mass_scaler,1.0,unitless +#aircraft:fins:mass,0.0,lbm +#aircraft:fins:num_fins,0,unitless +#aircraft:fins:taper_ratio,10.0,unitless +aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm +#aircraft:fuel:density_ratio,1.0,unitless +#aircraft:fuel:fuel_system_mass_scaler,1.0,unitless +aircraft:fuel:fuselage_fuel_capacity,0.0,lbm +aircraft:fuel:num_tanks,12,unitless +aircraft:fuel:total_capacity,341446,lbm +#aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless +#aircraft:furnishings:mass_scaler,1.0,unitless +aircraft:fuselage:length,230.58,ft +#aircraft:fuselage:mass_scaler,1.0,unitless +aircraft:fuselage:max_height,26.83,ft +aircraft:fuselage:max_width,23.9,ft +aircraft:fuselage:military_cargo_floor,True,unitless +aircraft:fuselage:num_fuselages,1,unitless +aircraft:fuselage:passenger_compartment_length,143.75,ft +aircraft:fuselage:planform_area,4462.78,ft**2 +#aircraft:fuselage:wetted_area_scaler,1.0,unitless +aircraft:horizontal_tail:area,965.8,ft**2 +aircraft:horizontal_tail:aspect_ratio,4.2,unitless +#aircraft:horizontal_tail:mass_scaler,1.0,unitless +aircraft:horizontal_tail:taper_ratio,0.43,unitless +aircraft:horizontal_tail:thickness_to_chord,0.16,unitless +aircraft:horizontal_tail:vertical_tail_fraction,1.0,unitless +#aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless +#aircraft:hydraulics:mass_scaler,1.0,unitless +#aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 +#aircraft:instruments:mass_scaler,1.0,unitless +#aircraft:landing_gear:carrier_based,False,unitless +#aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless +#aircraft:landing_gear:main_gear_oleo_length,45,inch +#aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless +#aircraft:landing_gear:nose_gear_oleo_length,45,inch +aircraft:nacelle:avg_diameter,9.15,ft +aircraft:nacelle:avg_length,20.56,ft +#aircraft:nacelle:mass_scaler,1.0,unitless +#aircraft:nacelle:wetted_area_scaler,1.0,unitless +#aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 +#aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless +#aircraft:propulsion:misc_mass_scaler,1.0,unitless +aircraft:vertical_tail:area,537.9,ft**2 +aircraft:vertical_tail:aspect_ratio,0.958,unitless +#aircraft:vertical_tail:mass_scaler,1.0,unitless +aircraft:vertical_tail:num_tails,1,unitless +aircraft:vertical_tail:taper_ratio,0.846,unitless +aircraft:vertical_tail:thickness_to_chord,0.157,unitless +#aircraft:vertical_tail:wetted_area_scaler,1.0,unitless +aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless +aircraft:wing:airfoil_technology,1.0,unitless +aircraft:wing:area,6200,ft**2 +aircraft:wing:aspect_ratio,7.75,unitless +#aircraft:wing:bending_mass_scaler,1.0,unitless +#aircraft:wing:composite_fraction,0.1,unitless +aircraft:wing:control_surface_area,2323.7,ft**2 +aircraft:wing:control_surface_area_ratio,0.37479,unitless +aircraft:wing:load_distribution_control,2.0,unitless +aircraft:wing:load_fraction,1.0,unitless +#aircraft:wing:mass_scaler,1.0,unitless +aircraft:wing:max_camber_at_70_semispan,0.0,unitless +#aircraft:wing:misc_mass_scaler,1.0,unitless +#aircraft:wing:shear_control_mass_scaler,1.0,unitless +aircraft:wing:span_efficiency_reduction,False,unitless +aircraft:wing:span,222.75,ft +#aircraft:wing:strut_bracing_factor,0.0,unitless +#aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless +aircraft:wing:sweep,20.0,deg +aircraft:wing:taper_ratio,0.419,unitless +aircraft:wing:thickness_to_chord,0.1284,unitless +aircraft:wing:ultimate_load_factor,3.75,unitless +aircraft:wing:var_sweep_mass_penalty,0.0,unitless +#aircraft:wing:wetted_area_scaler,1.0,unitless +aircraft:wing:num_integration_stations,50,unitless +aircraft:wing:thickness_to_chord_dist,0.1239,0.108,0.013,unitless +aircraft:wing:load_path_sweep_dist,0.0,0.0,deg +aircraft:wing:input_station_dist,0.0,0.3298,0.884,unitless +aircraft:wing:chord_per_semispan,0.362,0.2667,0.0456,unitless +aircraft:wing:glove_and_bat,0.0,ft**2 +aircraft:wing:detailed_wing,False,unitless + + +mission:constraints:max_mach,0.77,unitless +mission:design:cruise_altitude,34000,ft +mission:design:gross_mass,840000,lbm +mission:design:range,2150.0,NM +mission:design:thrust_takeoff_per_eng,51250,lbf +mission:landing:lift_coefficient_max,3.0,unitless +mission:design:mach,0.77,unitless +#mission:summary:fuel_flow_scaler,1.0,unitless +mission:takeoff:fuel_simple,6.32,lbm +mission:takeoff:lift_coefficient_max,3.62,unitless +mission:takeoff:lift_over_drag,19.5,unitless +settings:equations_of_motion,height_energy +settings:mass_method,FLOPS + + +### missions definition +# mission_name: payload +# times: 0, 50, 280, 300 +# altitudes: 0, 30000, 30000, 0 +# machs: 0.30, 0.77, 0.77, 0.30 +# optimize_altitudes: F,F,F +# optimize_machs: F,F,F +# takeoff: F +# landing: F diff --git a/aviary/examples/multi_missions/c5_models/c5_maxpayload_phase_info.py b/aviary/examples/multi_missions/c5_models/c5_maxpayload_phase_info.py new file mode 100644 index 000000000..a52acec96 --- /dev/null +++ b/aviary/examples/multi_missions/c5_models/c5_maxpayload_phase_info.py @@ -0,0 +1,83 @@ +phase_info = { + "pre_mission": {"include_takeoff": False, "optimize_mass": True}, + "climb_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.3, "unitless"), + "final_mach": (0.77, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (0.0, "ft"), + "final_altitude": (29500.0, "ft"), + "altitude_bounds": ((0.0, 30000.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": True, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((0.0, 0.0), "min"), + "duration_bounds": ((25.0, 75.0), "min"), + }, + "initial_guesses": {"time": ([0.0, 50.0], "min")}, + }, + "climb_2": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.77, "unitless"), + "final_mach": (0.77, "unitless"), + "mach_bounds": ((0.75, 0.79), "unitless"), + "initial_altitude": (29500.0, "ft"), + "final_altitude": (32000.0, "ft"), + "altitude_bounds": ((29000.0, 32500.0), "ft"), + "throttle_enforcement": "boundary_constraint", + "fix_initial": False, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((25.0, 75.0), "min"), + "duration_bounds": ((105.0, 315.0), "min"), + }, + "initial_guesses": {"time": ([50.0, 210.0], "min")}, + }, + "descent_1": { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "use_polynomial_control": True, + "num_segments": 3, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.77, "unitless"), + "final_mach": (0.3, "unitless"), + "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), + "initial_altitude": (32000.0, "ft"), + "final_altitude": (0.0, "ft"), + "altitude_bounds": ((0.0, 32500.0), "ft"), + "throttle_enforcement": "path_constraint", + "fix_initial": False, + "constrain_final": True, + "fix_duration": False, + "initial_bounds": ((130.0, 390.0), "min"), + "duration_bounds": ((15.0, 45.0), "min"), + }, + "initial_guesses": {"time": ([260.0, 30.0], "min")}, + }, + "post_mission": { + "include_landing": False, + "constrain_range": True, + "target_range": (2272.47, "nmi"), + }, +} diff --git a/multi_aviary_copymodel.py b/aviary/examples/multi_missions/run_multimission_example.py similarity index 98% rename from multi_aviary_copymodel.py rename to aviary/examples/multi_missions/run_multimission_example.py index 7e6d4b7c4..87d4d6864 100644 --- a/multi_aviary_copymodel.py +++ b/aviary/examples/multi_missions/run_multimission_example.py @@ -246,7 +246,11 @@ def C5_example(makeN2=False): (Mission.Summary.FUEL_BURNED, 'lbm'), (Mission.Summary.GROSS_MASS, 'lbm'), (Aircraft.Wing.SPAN, 'ft'), - (Aircraft.Wing.AREA, 'ft**2')] + (Aircraft.Wing.AREA, 'ft**2'), + (Aircraft.LandingGear.MAIN_GEAR_MASS, 'lbm'), + (Aircraft.LandingGear.NOSE_GEAR_MASS, 'lbm'), + (Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 'unitless'), + (Mission.Summary.CRUISE_MACH, 'unitless')] super_prob.print_vars(vars=printoutputs) plotvars = [('altitude', 'ft'), From 8a299a6f04560e9e5574d5978cf7072b280e53ee Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Mon, 26 Aug 2024 17:13:52 -0400 Subject: [PATCH 046/113] working example where user must specify TOUCHDOWN_MASS or LANDING_TO_TAKEOFF_MASS_RATIO and Mission.Design.RANGE must be set to be the same for all problems --- .../multi_missions/c5_models/c5_ferry.csv | 1 + .../run_multimission_example.py | 37 +++++++++++++++---- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/aviary/examples/multi_missions/c5_models/c5_ferry.csv b/aviary/examples/multi_missions/c5_models/c5_ferry.csv index 6540463d5..336372d19 100644 --- a/aviary/examples/multi_missions/c5_models/c5_ferry.csv +++ b/aviary/examples/multi_missions/c5_models/c5_ferry.csv @@ -20,6 +20,7 @@ aircraft:crew_and_payload:num_flight_crew,7,unitless #aircraft:crew_and_payload:wing_cargo,0.0,lbm #aircraft:design:base_area,0.0,ft**2 #aircraft:design:empty_mass_margin_scaler,1.0,unitless +aircraft:design:landing_to_takeoff_mass_ration,0.91, unitless #aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless #aircraft:design:touchdown_mass,498554,lbm aircraft:design:reserve_fuel_additional,0,lbm diff --git a/aviary/examples/multi_missions/run_multimission_example.py b/aviary/examples/multi_missions/run_multimission_example.py index 87d4d6864..1857eff8c 100644 --- a/aviary/examples/multi_missions/run_multimission_example.py +++ b/aviary/examples/multi_missions/run_multimission_example.py @@ -19,6 +19,10 @@ from c5_models.c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info +# Usage: +# For the landing gear mass (MAIN_GEAR_MASS & NOSE_GEAR_MASS) to be designed consistently +# between missions, the Aircraft.Design.TOUCHDOWN_MASS must be set to the same value for all missions. + class MultiMissionProblem(om.Problem): def __init__(self, planes, phase_infos, weights): super().__init__() @@ -102,9 +106,17 @@ def add_objective(self): "compound = "+weighted_str, has_diag_partials=True), promotes=["compound"]) self.model.add_objective('compound') - def setup_wrapper(self): + def setup_wrapper(self,LANDING_TO_TAKEOFF_MASS_RATIO=[None,'unitless'], TOUCHDOWN_MASS=[None,'lbm']): """Wrapper for om.Problem setup with warning ignoring and setting options""" for prob in self.probs: + if LANDING_TO_TAKEOFF_MASS_RATIO[0] is not None: + prob.aviary_inputs.set_val(Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, LANDING_TO_TAKEOFF_MASS_RATIO[0], units=LANDING_TO_TAKEOFF_MASS_RATIO[1]) + elif TOUCHDOWN_MASS[0] is not None: + prob.aviary_inputs.set_val(Aircraft.Design.TOUCHDOWN_MASS, TOUCHDOWN_MASS[0], units=TOUCHDOWN_MASS[1]) + else: + print('User must specify LANDING_TO_TAKEOFF_MASS_RATIO or TOUCHDOWN_MASS in MultiMissionProblem.setup_wrapper().') + exit() + prob.model.options['aviary_options'] = prob.aviary_inputs prob.model.options['aviary_metadata'] = prob.meta_data prob.model.options['phase_info'] = prob.phase_info @@ -123,16 +135,14 @@ def run(self): def get_design_range(self): """Finds the longest mission and sets its range as the design range for all - Aviary problems. Used within Aviary for sizing subsystems (avionics and AC). - Landing gear decreases in size as range increases, - so that should be sized of minimum range mission!""" + Aviary problems. Used within Aviary for sizing subsystems (avionics and AC).""" design_range = [] for phase_info in self.phase_infos: design_range.append(phase_info['post_mission'] ['target_range'][0]) # TBD add units design_range_min = np.min(design_range) design_range_max = np.max(design_range) - return design_range_max, # design_range_min + return design_range_max, design_range_min # design_range_min def create_timeseries_plots(self, plotvars=[], show=True): """ @@ -231,18 +241,28 @@ def C5_example(makeN2=False): super_prob.add_objective() # set input default to prevent error, value doesn't matter since set val is used later super_prob.model.set_input_defaults(Mission.Design.RANGE, val=1.) - super_prob.setup_wrapper() - super_prob.set_val(Mission.Design.RANGE, super_prob.get_design_range()) + # Setqup aviary problem and user must specify LANDING_TO_TAKEOFF_MASS_RATIO or TOUCHDOWN_MASS + super_prob.setup_wrapper(LANDING_TO_TAKEOFF_MASS_RATIO = [0.91,'unitless']) + #super_prob.setup_wrapper(TOUCHDOWN_MASS = [700000,'lbm']) + + # All the design ranges must be the same to make sure Air Conditioning and Avionics are designed the same for all missions, + super_prob.set_val(Mission.Design.RANGE, super_prob.get_design_range()[0]) for i, prob in enumerate(super_prob.probs): prob.set_initial_guesses(super_prob, super_prob.group_prefix+f"_{i}.") + + + # this does not work: + # super_prob.set_val("group_0."+Aircraft.Design.TOUCHDOWN_MASS, 498554, units='lbm') + if makeN2: from createN2 import createN2 createN2(__file__, super_prob) super_prob.run() printoutputs = [(Aircraft.Design.EMPTY_MASS, 'lbm'), + (Mission.Design.GROSS_MASS, 'lbm'), (Mission.Summary.FUEL_BURNED, 'lbm'), (Mission.Summary.GROSS_MASS, 'lbm'), (Aircraft.Wing.SPAN, 'ft'), @@ -250,7 +270,8 @@ def C5_example(makeN2=False): (Aircraft.LandingGear.MAIN_GEAR_MASS, 'lbm'), (Aircraft.LandingGear.NOSE_GEAR_MASS, 'lbm'), (Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 'unitless'), - (Mission.Summary.CRUISE_MACH, 'unitless')] + (Mission.Summary.CRUISE_MACH, 'unitless'), + (Aircraft.Design.TOUCHDOWN_MASS, 'lbm')] super_prob.print_vars(vars=printoutputs) plotvars = [('altitude', 'ft'), From d8d28d226849856bfab5a0bd6306f677dc6a97e8 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Wed, 4 Sep 2024 13:58:29 -0400 Subject: [PATCH 047/113] small changes to takeoff_to_landing mass ratios input handling --- .../multi_missions/run_multimission_example.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example.py b/aviary/examples/multi_missions/run_multimission_example.py index 1857eff8c..fc311b8aa 100644 --- a/aviary/examples/multi_missions/run_multimission_example.py +++ b/aviary/examples/multi_missions/run_multimission_example.py @@ -110,9 +110,9 @@ def setup_wrapper(self,LANDING_TO_TAKEOFF_MASS_RATIO=[None,'unitless'], TOUCHDOW """Wrapper for om.Problem setup with warning ignoring and setting options""" for prob in self.probs: if LANDING_TO_TAKEOFF_MASS_RATIO[0] is not None: - prob.aviary_inputs.set_val(Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, LANDING_TO_TAKEOFF_MASS_RATIO[0], units=LANDING_TO_TAKEOFF_MASS_RATIO[1]) - elif TOUCHDOWN_MASS[0] is not None: prob.aviary_inputs.set_val(Aircraft.Design.TOUCHDOWN_MASS, TOUCHDOWN_MASS[0], units=TOUCHDOWN_MASS[1]) + elif TOUCHDOWN_MASS[0] is not None: + prob.aviary_inputs.set_val(Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, LANDING_TO_TAKEOFF_MASS_RATIO[0], units=LANDING_TO_TAKEOFF_MASS_RATIO[1]) else: print('User must specify LANDING_TO_TAKEOFF_MASS_RATIO or TOUCHDOWN_MASS in MultiMissionProblem.setup_wrapper().') exit() @@ -233,7 +233,7 @@ def C5_example(makeN2=False): phaseinfo[key]["user_options"]["optimize_mach"] = optmach phaseinfo[key]["user_options"]["optimize_altitude"] = optalt - weights = [1, 1, 1] + weights = [1, 1, 1] super_prob = MultiMissionProblem(planes, phase_infos, weights) super_prob.add_driver() @@ -251,11 +251,6 @@ def C5_example(makeN2=False): for i, prob in enumerate(super_prob.probs): prob.set_initial_guesses(super_prob, super_prob.group_prefix+f"_{i}.") - - - # this does not work: - # super_prob.set_val("group_0."+Aircraft.Design.TOUCHDOWN_MASS, 498554, units='lbm') - if makeN2: from createN2 import createN2 createN2(__file__, super_prob) From 47de110e460d13e83839ed770928bfd07baad428 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 5 Sep 2024 12:17:02 -0400 Subject: [PATCH 048/113] created FwFm multi mission, added design vars for crew passengers, neithe model converging because of wing_detailed.py and skin_friction.py issues --- .../multi_missions/c5_models/c5_ferry.csv | 2 +- .../test_aircraft/aircraft_for_bench_FwFm.csv | 4 ++ .../mass/flops_based/furnishings.py | 28 ++++----- .../mass/flops_based/wing_detailed.py | 4 ++ aviary/variable_info/variable_meta_data.py | 62 ++++++++++++++++++- aviary/variable_info/variables.py | 5 ++ 6 files changed, 89 insertions(+), 16 deletions(-) diff --git a/aviary/examples/multi_missions/c5_models/c5_ferry.csv b/aviary/examples/multi_missions/c5_models/c5_ferry.csv index 336372d19..61893fe28 100644 --- a/aviary/examples/multi_missions/c5_models/c5_ferry.csv +++ b/aviary/examples/multi_missions/c5_models/c5_ferry.csv @@ -20,7 +20,7 @@ aircraft:crew_and_payload:num_flight_crew,7,unitless #aircraft:crew_and_payload:wing_cargo,0.0,lbm #aircraft:design:base_area,0.0,ft**2 #aircraft:design:empty_mass_margin_scaler,1.0,unitless -aircraft:design:landing_to_takeoff_mass_ration,0.91, unitless +aircraft:design:landing_to_takeoff_mass_ratio,0.91, unitless #aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless #aircraft:design:touchdown_mass,498554,lbm aircraft:design:reserve_fuel_additional,0,lbm diff --git a/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv b/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv index c2fa1d8a1..f4840cdd1 100644 --- a/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv +++ b/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv @@ -17,6 +17,10 @@ aircraft:crew_and_payload:num_flight_attendants,3,unitless aircraft:crew_and_payload:num_flight_crew,2,unitless aircraft:crew_and_payload:num_galley_crew,0,unitless aircraft:crew_and_payload:num_passengers,169,unitless +aircraft:crew_and_payload:design:num_passengers,169,unitless +aircraft:crew_and_payload:design:num_tourist_class,158,unitless +aircraft:crew_and_payload:design:num_business_class,0,unitless +aircraft:crew_and_payload:design:num_first_class,11,unitless aircraft:crew_and_payload:num_tourist_class,158,unitless aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless aircraft:crew_and_payload:wing_cargo,0.0,lbm diff --git a/aviary/subsystems/mass/flops_based/furnishings.py b/aviary/subsystems/mass/flops_based/furnishings.py index 62fd9f7bf..6146caffa 100644 --- a/aviary/subsystems/mass/flops_based/furnishings.py +++ b/aviary/subsystems/mass/flops_based/furnishings.py @@ -38,13 +38,13 @@ def compute( aviary_options: AviaryValues = self.options['aviary_options'] flight_crew_count = aviary_options.get_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW) - first_class_count = aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS) + first_class_count = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) business_class_count = aviary_options.get_val( - Aircraft.CrewPayload.NUM_BUSINESS_CLASS) + Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) tourist_class_count = aviary_options.get_val( - Aircraft.CrewPayload.NUM_TOURIST_CLASS) + Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS) fuse_count = aviary_options.get_val(Aircraft.Fuselage.NUM_FUSELAGES) @@ -67,13 +67,13 @@ def compute_partials(self, inputs, J): aviary_options: AviaryValues = self.options['aviary_options'] flight_crew_count = aviary_options.get_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW) - first_class_count = aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS) + first_class_count = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) business_class_count = aviary_options.get_val( - Aircraft.CrewPayload.NUM_BUSINESS_CLASS) + Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) tourist_class_count = aviary_options.get_val( - Aircraft.CrewPayload.NUM_TOURIST_CLASS) + Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS) fuse_count = aviary_options.get_val(Aircraft.Fuselage.NUM_FUSELAGES) @@ -135,13 +135,13 @@ def compute( aviary_options: AviaryValues = self.options['aviary_options'] flight_crew_count = aviary_options.get_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW) - first_class_count = aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS) + first_class_count = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) business_class_count = aviary_options.get_val( - Aircraft.CrewPayload.NUM_BUSINESS_CLASS) + Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) tourist_class_count = aviary_options.get_val( - Aircraft.CrewPayload.NUM_TOURIST_CLASS) + Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS) scaler = inputs[Aircraft.Furnishings.MASS_SCALER] fuse_max_width = inputs[Aircraft.Fuselage.MAX_WIDTH] @@ -173,13 +173,13 @@ def compute_partials(self, inputs, J): aviary_options: AviaryValues = self.options['aviary_options'] flight_crew_count = aviary_options.get_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW) - first_class_count = aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS) + first_class_count = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) business_class_count = aviary_options.get_val( - Aircraft.CrewPayload.NUM_BUSINESS_CLASS) + Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) tourist_class_count = aviary_options.get_val( - Aircraft.CrewPayload.NUM_TOURIST_CLASS) + Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS) scaler = inputs[Aircraft.Furnishings.MASS_SCALER] @@ -275,7 +275,7 @@ def compute( ): aviary_options: AviaryValues = self.options['aviary_options'] pax_count = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') scaler = inputs[Aircraft.Furnishings.MASS_SCALER] outputs[Aircraft.Furnishings.MASS_BASE] = \ @@ -284,7 +284,7 @@ def compute( def compute_partials(self, inputs, J, discrete_inputs=None): aviary_options: AviaryValues = self.options['aviary_options'] pax_count = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') J[ Aircraft.Furnishings.MASS_BASE, diff --git a/aviary/subsystems/mass/flops_based/wing_detailed.py b/aviary/subsystems/mass/flops_based/wing_detailed.py index 81ddc32fd..174e0944c 100644 --- a/aviary/subsystems/mass/flops_based/wing_detailed.py +++ b/aviary/subsystems/mass/flops_based/wing_detailed.py @@ -149,6 +149,7 @@ def compute(self, inputs, outputs): chord_int_stations[1:] * (2*load_intensity[1:] + load_intensity[:-1])) / 6 el = np.sum(del_load) + print('el', el) del_moment = dy**2 * ( chord_int_stations[:-1] * (load_intensity[:-1]+load_intensity[1:]) + @@ -172,6 +173,7 @@ def compute(self, inputs, outputs): bma = total_moment * csw / (chord_int_stations[:-1] * tc_int_stations[:-1]) pm = np.sum((bma[:-1] + bma[1:]) * dy[:-1] * 0.5) + print('pm',pm) # s = np.sum((chord_int_stations[:-1] + chord_int_stations[1:]) * dy * 0.5) @@ -185,6 +187,8 @@ def compute(self, inputs, outputs): bt = btb / (ar**(0.25*fstrt) * (1.0 + (0.5*faert - 0.16*fstrt) * sa**2 + 0.03*caya * (1.0-0.5*faert)*sa)) + print('BT', bt) + outputs[Aircraft.Wing.BENDING_FACTOR] = bt inertia_factor = np.zeros(num_engine_type, dtype=chord.dtype) diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index e17f17509..9273fb0db 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -618,6 +618,67 @@ # |___/ # ====================================================================================== +# TODO: Set initial defaults better +# from aviary.utils.aviary_values import AviaryValues + +add_meta_data( + Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, + meta_data=_MetaData, + historical_name={"GASP": None, + "FLOPS": 'WTIN.NPB', # ['&DEFINE.WTIN.NPB', 'WTS.NPB'], + "LEAPS1": 'aircraft.inputs.L0_crew_and_payload.business_class_count' + }, + units='unitless', + desc='number of business class passengers that the aircraft is designed to accommodate', + types=int, + option=True, + default_value=0, #AviaryValues.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS), +) + +add_meta_data( + Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, + meta_data=_MetaData, + historical_name={"GASP": None, + "FLOPS": 'WTIN.NPF', # ['&DEFINE.WTIN.NPF', 'WTS.NPF'], + "LEAPS1": 'aircraft.inputs.L0_crew_and_payload.first_class_count' + }, + units='unitless', + desc='number of first class passengers that the aircraft is designed to accommodate', + types=int, + option=True, + default_value=0, +) + +# TODO rename to economy? +add_meta_data( + Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, + meta_data=_MetaData, + historical_name={"GASP": None, + "FLOPS": 'WTIN.NPT', # ['&DEFINE.WTIN.NPT', 'WTS.NPT'], + "LEAPS1": 'aircraft.inputs.L0_crew_and_payload.tourist_class_count' + }, + units='unitless', + desc='number of tourist class passengers that the aircraft is designed to accommodate', + types=int, + option=True, + default_value=0, +) + +add_meta_data( + Aircraft.CrewPayload.Design.NUM_PASSENGERS, + meta_data=_MetaData, + historical_name={"GASP": 'INGASP.PAX', + "FLOPS": None, # ['CSTDAT.NSV', '~WEIGHT.NPASS', '~WTSTAT.NPASS'], + "LEAPS1": 'aircraft.outputs.L0_crew_and_payload.passenger_count' + }, + units='unitless', + desc='total number of passengers that the aircraft is designed to accommodate', + option=True, + default_value=0, + types=int, +) + + add_meta_data( Aircraft.CrewPayload.BAGGAGE_MASS, meta_data=_MetaData, @@ -1017,7 +1078,6 @@ # __/ | # |___/ # ========================================= - add_meta_data( Aircraft.Design.BASE_AREA, meta_data=_MetaData, diff --git a/aviary/variable_info/variables.py b/aviary/variable_info/variables.py index d2d31cfc6..61e72a935 100644 --- a/aviary/variable_info/variables.py +++ b/aviary/variable_info/variables.py @@ -129,6 +129,11 @@ class CrewPayload: TOTAL_PAYLOAD_MASS = 'aircraft:crew_and_payload:total_payload_mass' WATER_MASS_PER_OCCUPANT = 'aircraft:crew_and_payload:water_mass_per_occupant' WING_CARGO = 'aircraft:crew_and_payload:wing_cargo' + class Design: + NUM_BUSINESS_CLASS = 'aircraft:crew_and_payload:design:num_business_class' + NUM_FIRST_CLASS = 'aircraft:crew_and_payload:design:num_first_class' + NUM_TOURIST_CLASS = 'aircraft:crew_and_payload:design:num_tourist_class' + NUM_PASSENGERS = 'aircraft:crew_and_payload:design:num_passengers' class Design: # These variables are values that do not fall into a particular aircraft From e0044d21292938c90d02056ab4d14fcbb9125126 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 5 Sep 2024 13:35:52 -0400 Subject: [PATCH 049/113] no longer having nan errors on run_multimission_example.py, but dymos.phase.options error at end probably due to new dymos version --- .../examples/multi_missions/c5_models/c5_ferry.csv | 1 + .../multi_missions/c5_models/c5_intermediate.csv | 1 + .../multi_missions/c5_models/c5_maxpayload.csv | 1 + .../multi_missions/run_multimission_example.py | 14 ++------------ .../test_aircraft/aircraft_for_bench_FwFm.csv | 9 ++++++--- .../subsystems/mass/flops_based/wing_detailed.py | 3 --- aviary/variable_info/variable_meta_data.py | 2 +- 7 files changed, 12 insertions(+), 19 deletions(-) diff --git a/aviary/examples/multi_missions/c5_models/c5_ferry.csv b/aviary/examples/multi_missions/c5_models/c5_ferry.csv index 61893fe28..6f9e54275 100644 --- a/aviary/examples/multi_missions/c5_models/c5_ferry.csv +++ b/aviary/examples/multi_missions/c5_models/c5_ferry.csv @@ -13,6 +13,7 @@ aircraft:crew_and_payload:mass_per_passenger,180.0,lbm aircraft:crew_and_payload:cargo_mass,0,lbm #aircraft:crew_and_payload:num_passengers,82,unitless +#aircraft:crew_and_payload:design:num_passengers,82,unitless #aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:num_flight_crew,7,unitless diff --git a/aviary/examples/multi_missions/c5_models/c5_intermediate.csv b/aviary/examples/multi_missions/c5_models/c5_intermediate.csv index bb4565239..cf7f415be 100644 --- a/aviary/examples/multi_missions/c5_models/c5_intermediate.csv +++ b/aviary/examples/multi_missions/c5_models/c5_intermediate.csv @@ -13,6 +13,7 @@ aircraft:crew_and_payload:mass_per_passenger,180.0,lbm aircraft:crew_and_payload:cargo_mass,120000.0,lbm #aircraft:crew_and_payload:num_passengers,82,unitless +#aircraft:crew_and_payload:design:num_passengers,82,unitless #aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:num_flight_crew,7,unitless diff --git a/aviary/examples/multi_missions/c5_models/c5_maxpayload.csv b/aviary/examples/multi_missions/c5_models/c5_maxpayload.csv index 07a6fb381..f1f67b76d 100644 --- a/aviary/examples/multi_missions/c5_models/c5_maxpayload.csv +++ b/aviary/examples/multi_missions/c5_models/c5_maxpayload.csv @@ -13,6 +13,7 @@ aircraft:crew_and_payload:mass_per_passenger,180.0,lbm aircraft:crew_and_payload:cargo_mass,281000.0,lbm #aircraft:crew_and_payload:num_passengers,82,unitless +#aircraft:crew_and_payload:design:num_passengers,82,unitless #aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:num_flight_crew,7,unitless diff --git a/aviary/examples/multi_missions/run_multimission_example.py b/aviary/examples/multi_missions/run_multimission_example.py index fc311b8aa..a289e63a4 100644 --- a/aviary/examples/multi_missions/run_multimission_example.py +++ b/aviary/examples/multi_missions/run_multimission_example.py @@ -106,17 +106,9 @@ def add_objective(self): "compound = "+weighted_str, has_diag_partials=True), promotes=["compound"]) self.model.add_objective('compound') - def setup_wrapper(self,LANDING_TO_TAKEOFF_MASS_RATIO=[None,'unitless'], TOUCHDOWN_MASS=[None,'lbm']): + def setup_wrapper(self): """Wrapper for om.Problem setup with warning ignoring and setting options""" for prob in self.probs: - if LANDING_TO_TAKEOFF_MASS_RATIO[0] is not None: - prob.aviary_inputs.set_val(Aircraft.Design.TOUCHDOWN_MASS, TOUCHDOWN_MASS[0], units=TOUCHDOWN_MASS[1]) - elif TOUCHDOWN_MASS[0] is not None: - prob.aviary_inputs.set_val(Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, LANDING_TO_TAKEOFF_MASS_RATIO[0], units=LANDING_TO_TAKEOFF_MASS_RATIO[1]) - else: - print('User must specify LANDING_TO_TAKEOFF_MASS_RATIO or TOUCHDOWN_MASS in MultiMissionProblem.setup_wrapper().') - exit() - prob.model.options['aviary_options'] = prob.aviary_inputs prob.model.options['aviary_metadata'] = prob.meta_data prob.model.options['phase_info'] = prob.phase_info @@ -241,9 +233,7 @@ def C5_example(makeN2=False): super_prob.add_objective() # set input default to prevent error, value doesn't matter since set val is used later super_prob.model.set_input_defaults(Mission.Design.RANGE, val=1.) - # Setqup aviary problem and user must specify LANDING_TO_TAKEOFF_MASS_RATIO or TOUCHDOWN_MASS - super_prob.setup_wrapper(LANDING_TO_TAKEOFF_MASS_RATIO = [0.91,'unitless']) - #super_prob.setup_wrapper(TOUCHDOWN_MASS = [700000,'lbm']) + super_prob.setup_wrapper() # All the design ranges must be the same to make sure Air Conditioning and Avionics are designed the same for all missions, super_prob.set_val(Mission.Design.RANGE, super_prob.get_design_range()[0]) diff --git a/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv b/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv index f4840cdd1..55ee2cac3 100644 --- a/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv +++ b/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv @@ -11,17 +11,20 @@ aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:mass_per_passenger,180.0,lbm aircraft:crew_and_payload:misc_cargo,0.0,lbm aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:num_business_class,0,unitless -aircraft:crew_and_payload:num_first_class,11,unitless + aircraft:crew_and_payload:num_flight_attendants,3,unitless aircraft:crew_and_payload:num_flight_crew,2,unitless aircraft:crew_and_payload:num_galley_crew,0,unitless -aircraft:crew_and_payload:num_passengers,169,unitless + aircraft:crew_and_payload:design:num_passengers,169,unitless aircraft:crew_and_payload:design:num_tourist_class,158,unitless aircraft:crew_and_payload:design:num_business_class,0,unitless aircraft:crew_and_payload:design:num_first_class,11,unitless +aircraft:crew_and_payload:num_passengers,169,unitless aircraft:crew_and_payload:num_tourist_class,158,unitless +aircraft:crew_and_payload:num_business_class,0,unitless +aircraft:crew_and_payload:num_first_class,11,unitless + aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless aircraft:crew_and_payload:wing_cargo,0.0,lbm aircraft:design:base_area,0.0,ft**2 diff --git a/aviary/subsystems/mass/flops_based/wing_detailed.py b/aviary/subsystems/mass/flops_based/wing_detailed.py index 174e0944c..906e33b23 100644 --- a/aviary/subsystems/mass/flops_based/wing_detailed.py +++ b/aviary/subsystems/mass/flops_based/wing_detailed.py @@ -149,7 +149,6 @@ def compute(self, inputs, outputs): chord_int_stations[1:] * (2*load_intensity[1:] + load_intensity[:-1])) / 6 el = np.sum(del_load) - print('el', el) del_moment = dy**2 * ( chord_int_stations[:-1] * (load_intensity[:-1]+load_intensity[1:]) + @@ -173,7 +172,6 @@ def compute(self, inputs, outputs): bma = total_moment * csw / (chord_int_stations[:-1] * tc_int_stations[:-1]) pm = np.sum((bma[:-1] + bma[1:]) * dy[:-1] * 0.5) - print('pm',pm) # s = np.sum((chord_int_stations[:-1] + chord_int_stations[1:]) * dy * 0.5) @@ -187,7 +185,6 @@ def compute(self, inputs, outputs): bt = btb / (ar**(0.25*fstrt) * (1.0 + (0.5*faert - 0.16*fstrt) * sa**2 + 0.03*caya * (1.0-0.5*faert)*sa)) - print('BT', bt) outputs[Aircraft.Wing.BENDING_FACTOR] = bt diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index 9273fb0db..f4d7b8126 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -1332,7 +1332,7 @@ }, units='unitless', desc='ratio of maximum landing mass to maximum takeoff mass', - default_value=None, + default_value=0.9, ) add_meta_data( From d8bfcab4fc80141f4270e94e2ae379f3be473b14 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 5 Sep 2024 13:38:06 -0400 Subject: [PATCH 050/113] FwFm example running, but dymos error at end --- .../run_multimission_example_FwFm.py | 284 ++++++++++++++++++ .../aircraft_for_bench_FwFm_deadhead.csv | 162 ++++++++++ 2 files changed, 446 insertions(+) create mode 100644 aviary/examples/multi_missions/run_multimission_example_FwFm.py create mode 100644 aviary/models/test_aircraft/aircraft_for_bench_FwFm_deadhead.csv diff --git a/aviary/examples/multi_missions/run_multimission_example_FwFm.py b/aviary/examples/multi_missions/run_multimission_example_FwFm.py new file mode 100644 index 000000000..5ed809d6e --- /dev/null +++ b/aviary/examples/multi_missions/run_multimission_example_FwFm.py @@ -0,0 +1,284 @@ +""" +authors: Jatin Soni, Eliot Aretskin +Multi Mission Optimization Example using Aviary + +For the deadhead mission: +aircraft:crew_and_payload:num_passengers,0,unitless +aircraft:crew_and_payload:num_tourist_class,0,unitless +aircraft:crew_and_payload:num_first_class,0,unitless + +""" +from aviary.api import SubsystemBuilderBase +from aviary.subsystems.mass.flops_based.furnishings import TransportFurnishingsGroupMass +import sys +import warnings +import dymos as dm +import numpy as np +from os.path import join +import matplotlib.pyplot as plt + +import openmdao.api as om +import aviary.api as av +from aviary.variable_info.enums import ProblemType +from aviary.variable_info.variables import Mission, Aircraft + +from aviary.examples.example_phase_info import phase_info + +# fly the same mission twice with two different passenger loads +phase_info_primary = phase_info +phase_info_deadhead = phase_info + + +class MultiMissionProblem(om.Problem): + def __init__(self, planes, phase_infos, weights): + super().__init__() + self.num_missions = len(planes) + # phase infos and planes length must match - this maybe unnecessary if + # different planes (payloads) fly same mission (say pax vs cargo) + # or if same payload flies 2 different missions (altitude/mach differences) + if self.num_missions != len(phase_infos): + raise Exception("Length of planes and phase_infos must be the same!") + + # if fewer weights than planes are provided, assign equal weights for all planes + if len(weights) < self.num_missions: + weights = [1]*self.num_missions + # if more weights than planes, raise exception + elif len(weights) > self.num_missions: + raise Exception("Length of weights cannot exceed length of planes!") + self.weights = weights + self.phase_infos = phase_infos + + self.group_prefix = 'group' + self.probs = [] + self.fuel_vars = [] + self.phases = {} + # define individual aviary problems + for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): + prob = av.AviaryProblem() + prob.load_inputs(plane, phase_info) + prob.check_and_preprocess_inputs() + prob.add_pre_mission_systems() + prob.add_phases() + prob.add_post_mission_systems() + prob.link_phases() + + # alternate prevents use of equality constraint b/w design and summary gross mass + prob.problem_type = ProblemType.ALTERNATE + prob.add_design_variables() + self.probs.append(prob) + # phase names for each traj (can be used later to make plots/print outputs) + self.phases[f"{self.group_prefix}_{i}"] = list(prob.traj._phases.keys()) + + # design range and gross mass are promoted, these are Max Range/Max Takeoff Mass + # and must be the same for each aviary problem. Subsystems within aviary are sized + # using these - empty mass is same across all aviary problems. + # the fuel objective is also promoted since that's used in the compound objective + promoted_name = f"{self.group_prefix}_{i}_fuelobj" + self.fuel_vars.append(promoted_name) + self.model.add_subsystem( + self.group_prefix + f'_{i}', prob.model, + promotes_inputs=[Mission.Design.GROSS_MASS, + Mission.Design.RANGE, + Aircraft.Wing.SPAN, + Aircraft.Wing.AREA], + promotes_outputs=[(Mission.Objectives.FUEL, promoted_name)]) + + def add_design_variables(self): + self.model.add_design_var(Mission.Design.GROSS_MASS, + lower=10., upper=900e3, units='lbm') + self.model.add_design_var(Aircraft.Wing.SPAN, lower=100., upper=500., units='ft') + self.model.add_design_var(Aircraft.Wing.AREA, lower=10., + upper=1e6, units='ft**2') + + def add_driver(self): + self.driver = om.pyOptSparseDriver() + self.driver.options["optimizer"] = "SLSQP" + self.driver.declare_coloring() + # linear solver causes nan entry error for landing to takeoff mass ratio param + # self.model.linear_solver = om.DirectSolver() + + def add_objective(self): + # weights are normalized - e.g. for given weights 3:1, the normalized + # weights are 0.75:0.25 + weights = [float(weight/sum(self.weights)) for weight in self.weights] + weighted_str = "+".join([f"{fuelobj}*{weight}" + for fuelobj, weight in zip(self.fuel_vars, weights)]) + # weighted_str looks like: fuel_0 * weight[0] + fuel_1 * weight[1] + # note that the fuel objective itself is the base aviary fuel objective + # which is also a function of climb time becuse climb is not very sensitive to fuel + + # adding compound execComp to super problem + self.model.add_subsystem('compound_fuel_burn_objective', om.ExecComp( + "compound = "+weighted_str, has_diag_partials=True), promotes=["compound"]) + self.model.add_objective('compound') + + def setup_wrapper(self): + """Wrapper for om.Problem setup with warning ignoring and setting options""" + for prob in self.probs: + prob.model.options['aviary_options'] = prob.aviary_inputs + prob.model.options['aviary_metadata'] = prob.meta_data + prob.model.options['phase_info'] = prob.phase_info + + # Aviary's problem setup wrapper uses these ignored warnings to suppress + # some warnings related to variable promotion. Replicating that here with + # setup for the super problem + with warnings.catch_warnings(): + warnings.simplefilter("ignore", om.OpenMDAOWarning) + warnings.simplefilter("ignore", om.PromotionWarning) + self.setup(check='all') + + def run(self): + self.model.set_solver_print(0) + dm.run_problem(self, make_plots=True) + + def get_design_range(self): + """Finds the longest mission and sets its range as the design range for all + Aviary problems. Used within Aviary for sizing subsystems (avionics and AC).""" + design_range = [] + for phase_info in self.phase_infos: + design_range.append(phase_info['post_mission'] + ['target_range'][0]) # TBD add units + design_range_min = np.min(design_range) + design_range_max = np.max(design_range) + return design_range_max, design_range_min # design_range_min + + def create_timeseries_plots(self, plotvars=[], show=True): + """ + Temporary create plots manually because graphing won't work for dual-trajectories. + Creates timeseries plots for any variables within timeseries. Specify variables + and units by setting plotvars = [('altitude','ft')]. Any number of vars can be added. + """ + plt.figure() + for plotidx, (var, unit) in enumerate(plotvars): + plt.subplot(int(np.ceil(len(plotvars)/2)), 2, plotidx+1) + for i in range(self.num_missions): + time = np.array([]) + yvar = np.array([]) + # this loop concatenates data from all phases + for phase in self.phases[f"{self.group_prefix}_{i}"]: + rawt = self.get_val( + f"{self.group_prefix}_{i}.traj.{phase}.timeseries.time", + units='s') + rawy = self.get_val( + f"{self.group_prefix}_{i}.traj.{phase}.timeseries.{var}", + units=unit) + time = np.hstack([time, np.ndarray.flatten(rawt)]) + yvar = np.hstack([yvar, np.ndarray.flatten(rawy)]) + plt.plot(time, yvar, linewidth=self.num_missions-i) + plt.xlabel("Time (s)") + plt.ylabel(f"{var.title()} ({unit})") + plt.grid() + plt.figlegend([f"Plane {i}" for i in range(self.num_missions)]) + if show: + plt.show() + + def create_payload_range_plot(self, show=True): + """Creates payload range diagram for the super problem. Appends a point for max payload + and 0 range. """ + payloads = [] + ranges = [] + for i in range(self.num_missions): + ref = f"{self.group_prefix}_{i}" + payloads.append( + self.get_val( + f"{ref}.{Aircraft.CrewPayload.CARGO_MASS}", units='lbm')) + lastphase = self.phases[ref][-1] + ranges.append( + self.get_val( + f"{ref}.traj.{lastphase}.timeseries.distance", + units='nmi', indices=-1)[0]) + payloads, ranges = zip(*sorted(zip(payloads, ranges))) + payloads, ranges = list(payloads), list(ranges) + payloads.append(payloads[-1]) + ranges.append(0) + plt.figure() + plt.plot(ranges, payloads) + plt.xlabel("Range (nmi)") + plt.ylabel("Payload (lbm)") + plt.grid() + if show: + plt.show() + + def print_vars(self, vars=[]): + """Specify vars with name and unit in a tuple, e.g. vars = [ (Mission.Summary.FUEL_BURNED, 'lbm') ]""" + + print("\n\n=========================\n") + print(f"{'':40}", end=': ') + for i in range(self.num_missions): + name = f"Mission {i}" + print(f"{name:^30}", end='| ') + print() + for var, unit in vars: + varname = f"Variable: {var.replace(':','.').upper()}" + print(f"{varname:40}", end=": ") + for i in range(self.num_missions): + val = self.get_val(f'group_{i}.{var}', units=unit)[0] + printstatement = f"{val} ({unit})" + print(f"{printstatement:^30}", end="| ") + print() + + +def FwFm_example(makeN2=False): + plane_dir = 'models/test_aircraft/' + planes = ['aircraft_for_bench_FwFm.csv', 'aircraft_for_bench_FwFm_deadhead.csv'] + planes = [join(plane_dir, plane) for plane in planes] + phase_infos = [phase_info_primary, + phase_info_deadhead] + optalt, optmach = False, False + for phaseinfo in phase_infos: + for key in phaseinfo.keys(): + if "user_options" in phaseinfo[key].keys(): + phaseinfo[key]["user_options"]["optimize_mach"] = optmach + phaseinfo[key]["user_options"]["optimize_altitude"] = optalt + + # how much each mission should be valued by the optimizer, larger numbers = more significance + weights = [1, 1] + + super_prob = MultiMissionProblem(planes, phase_infos, weights) + super_prob.add_driver() + super_prob.add_design_variables() + super_prob.add_objective() + # set input default to prevent error, value doesn't matter since set val is used later + super_prob.model.set_input_defaults(Mission.Design.RANGE, val=1.) + super_prob.setup_wrapper() + super_prob.set_val(Mission.Design.RANGE, super_prob.get_design_range()[0]) + + for i, prob in enumerate(super_prob.probs): + prob.set_initial_guesses(super_prob, super_prob.group_prefix+f"_{i}.") + + if makeN2: + from createN2 import createN2 + createN2(__file__, super_prob) + + super_prob.run() + printoutputs = [(Aircraft.Design.EMPTY_MASS, 'lbm'), + (Mission.Summary.FUEL_BURNED, 'lbm'), + (Mission.Summary.GROSS_MASS, 'lbm'), + (Aircraft.Wing.SPAN, 'ft'), + (Aircraft.Wing.AREA, 'ft**2'), + (Aircraft.LandingGear.MAIN_GEAR_MASS, 'lbm'), + (Aircraft.LandingGear.NOSE_GEAR_MASS, 'lbm'), + (Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 'unitless'), + (Mission.Summary.CRUISE_MACH, 'unitless'), + (Aircraft.CrewPayload.NUM_PASSENGERS, 'unitless'), + (Aircraft.CrewPayload.Design.NUM_PASSENGERS, 'unitless')] + super_prob.print_vars(vars=printoutputs) + + plotvars = [('altitude', 'ft'), + ('mass', 'lbm'), + ('drag', 'lbf'), + ('distance', 'nmi'), + ('throttle', 'unitless'), + ('mach', 'unitless')] + super_prob.create_timeseries_plots(plotvars=plotvars, show=False) + + super_prob.create_payload_range_plot(show=False) + plt.show() + + return super_prob + + +if __name__ == '__main__': + makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False + + super_prob = FwFm_example(makeN2=makeN2) diff --git a/aviary/models/test_aircraft/aircraft_for_bench_FwFm_deadhead.csv b/aviary/models/test_aircraft/aircraft_for_bench_FwFm_deadhead.csv new file mode 100644 index 000000000..1e61f864a --- /dev/null +++ b/aviary/models/test_aircraft/aircraft_for_bench_FwFm_deadhead.csv @@ -0,0 +1,162 @@ +aircraft:air_conditioning:mass_scaler,1.0,unitless +aircraft:anti_icing:mass_scaler,1.0,unitless +aircraft:apu:mass_scaler,1.1,unitless +aircraft:avionics:mass_scaler,1.2,unitless +aircraft:canard:area,0.0,ft**2 +aircraft:canard:aspect_ratio,0.0,unitless +aircraft:canard:thickness_to_chord,0.0,unitless +aircraft:crew_and_payload:baggage_mass_per_passenger,45.0,lbm +aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless +aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:mass_per_passenger,180.0,lbm +aircraft:crew_and_payload:misc_cargo,0.0,lbm +aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:num_flight_attendants,3,unitless +aircraft:crew_and_payload:num_flight_crew,2,unitless +aircraft:crew_and_payload:num_galley_crew,0,unitless + +aircraft:crew_and_payload:design:num_passengers,169,unitless +aircraft:crew_and_payload:design:num_tourist_class,158,unitless +aircraft:crew_and_payload:design:num_business_class,0,unitless +aircraft:crew_and_payload:design:num_first_class,11,unitless +aircraft:crew_and_payload:num_passengers,0,unitless +aircraft:crew_and_payload:num_tourist_class,0,unitless +aircraft:crew_and_payload:num_business_class,0,unitless +aircraft:crew_and_payload:num_first_class,0,unitless + +aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless +aircraft:crew_and_payload:wing_cargo,0.0,lbm +aircraft:design:base_area,0.0,ft**2 +aircraft:design:empty_mass_margin_scaler,0.0,unitless +aircraft:design:lift_dependent_drag_coeff_factor,0.909839381134961,unitless +aircraft:design:touchdown_mass,152800.0,lbm +aircraft:design:reserve_fuel_additional,3000.,lbm +aircraft:design:subsonic_drag_coeff_factor,1.0,unitless +aircraft:design:supersonic_drag_coeff_factor,1.0,unitless +aircraft:design:use_alt_mass,False,unitless +aircraft:design:zero_lift_drag_coeff_factor,0.930890028006548,unitless +aircraft:electrical:mass_scaler,1.25,unitless +aircraft:engine:additional_mass_fraction,0.,unitless +aircraft:engine:constant_fuel_consumption,0.,lbm/h +aircraft:engine:data_file,models/engines/turbofan_28k.deck,unitless +aircraft:engine:flight_idle_thrust_fraction,0.0,unitless +aircraft:engine:flight_idle_max_fraction,1.0,unitless +aircraft:engine:flight_idle_min_fraction,0.08,unitless +aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless +aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless +aircraft:engine:generate_flight_idle,True,unitless +aircraft:engine:geopotential_alt,False,unitless +aircraft:engine:ignore_negative_thrust,False,unitless +aircraft:engine:interpolation_method,slinear,unitless +aircraft:engine:mass_scaler,1.15,unitless +aircraft:engine:mass,7400,lbm +aircraft:engine:num_engines,2,unitless +aircraft:engine:num_fuselage_engines,0,unitless +aircraft:engine:num_wing_engines,2,unitless +aircraft:engine:reference_mass,7400,lbm +aircraft:engine:reference_sls_thrust,28928.1,lbf +aircraft:engine:scale_mass,True,unitless +aircraft:engine:scale_performance,True,unitless +aircraft:engine:scaled_sls_thrust,28928.1,lbf +aircraft:engine:subsonic_fuel_flow_scaler,1.,unitless +aircraft:engine:supersonic_fuel_flow_scaler,1.,unitless +aircraft:engine:thrust_reversers_mass_scaler,0.0,unitless +aircraft:engine:wing_locations,[0.26869218],unitless +aircraft:fins:area,0.0,ft**2 +aircraft:fins:mass_scaler,1.0,unitless +aircraft:fins:mass,0.0,lbm +aircraft:fins:num_fins,0,unitless +aircraft:fins:taper_ratio,10.0,unitless +aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm +aircraft:fuel:density_ratio,1.0,unitless +aircraft:fuel:fuel_system_mass_scaler,1.0,unitless +aircraft:fuel:fuselage_fuel_capacity,0.0,lbm +aircraft:fuel:num_tanks,7,unitless +aircraft:fuel:total_capacity,45694.0,lbm +aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless +aircraft:furnishings:mass_scaler,1.1,unitless +aircraft:fuselage:length,128.0,ft +aircraft:fuselage:mass_scaler,1.05,unitless +aircraft:fuselage:max_height,13.17,ft +aircraft:fuselage:max_width,12.33,ft +aircraft:fuselage:military_cargo_floor,False,unitless +aircraft:fuselage:num_fuselages,1,unitless +aircraft:fuselage:passenger_compartment_length,85.5,ft +aircraft:fuselage:planform_area,1578.24,ft**2 +aircraft:fuselage:wetted_area_scaler,1.0,unitless +aircraft:fuselage:wetted_area,4158.62,ft**2 +aircraft:horizontal_tail:area,355.0,ft**2 +aircraft:horizontal_tail:aspect_ratio,6.0,unitless +aircraft:horizontal_tail:mass_scaler,1.2,unitless +aircraft:horizontal_tail:taper_ratio,0.22,unitless +aircraft:horizontal_tail:thickness_to_chord,0.125,unitless +aircraft:horizontal_tail:vertical_tail_fraction,0.0,unitless +aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless +aircraft:horizontal_tail:wetted_area,592.65,ft**2 +aircraft:hydraulics:mass_scaler,1.0,unitless +aircraft:hydraulics:system_pressure,3000,psi +aircraft:instruments:mass_scaler,1.25,unitless +aircraft:landing_gear:carrier_based,False,unitless +aircraft:landing_gear:main_gear_mass_scaler,1.1,unitless +aircraft:landing_gear:main_gear_oleo_length,102.0,inch +aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless +aircraft:landing_gear:nose_gear_oleo_length,67.0,inch +aircraft:nacelle:avg_diameter,7.94,ft +aircraft:nacelle:avg_length,12.3,ft +aircraft:nacelle:mass_scaler,1.0,unitless +aircraft:nacelle:wetted_area_scaler,1.0,unitless +aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 +aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless +aircraft:propulsion:misc_mass_scaler,1.0,unitless +aircraft:vertical_tail:area,284.0,ft**2 +aircraft:vertical_tail:aspect_ratio,1.75,unitless +aircraft:vertical_tail:mass_scaler,1.0,unitless +aircraft:vertical_tail:num_tails,1,unitless +aircraft:vertical_tail:taper_ratio,0.33,unitless +aircraft:vertical_tail:thickness_to_chord,0.1195,unitless +aircraft:vertical_tail:wetted_area_scaler,1.0,unitless +aircraft:vertical_tail:wetted_area,581.13,ft**2 +aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless +aircraft:wing:airfoil_technology,1.92669766647637,unitless +aircraft:wing:area,1370.0,ft**2 +aircraft:wing:aspect_ratio,11.22091,unitless +aircraft:wing:bending_mass_scaler,1.0,unitless +aircraft:wing:chord_per_semispan,0.31,0.23,0.084,unitless +aircraft:wing:composite_fraction,0.2,unitless +aircraft:wing:control_surface_area,137,ft**2 +aircraft:wing:control_surface_area_ratio,0.1,unitless +aircraft:wing:glove_and_bat,134.0,ft**2 +aircraft:wing:input_station_dist,0.,0.2759,0.9367,unitless +aircraft:wing:load_distribution_control,2.0,unitless +aircraft:wing:load_fraction,1.0,unitless +aircraft:wing:load_path_sweep_dist,0.,22.,deg +aircraft:wing:mass_scaler,1.23,unitless +aircraft:wing:max_camber_at_70_semispan,0.0,unitless +aircraft:wing:misc_mass_scaler,1.0,unitless +aircraft:wing:num_integration_stations,50,unitless +aircraft:wing:shear_control_mass_scaler,1.0,unitless +aircraft:wing:span_efficiency_reduction,False,unitless +aircraft:wing:span,117.83,ft +aircraft:wing:strut_bracing_factor,0.0,unitless +aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless +aircraft:wing:sweep,25.0,deg +aircraft:wing:taper_ratio,0.278,unitless +aircraft:wing:thickness_to_chord_dist,0.145,0.115,0.104,unitless +aircraft:wing:thickness_to_chord,0.13,unitless +aircraft:wing:ultimate_load_factor,3.75,unitless +aircraft:wing:var_sweep_mass_penalty,0.0,unitless +aircraft:wing:wetted_area_scaler,1.0,unitless +aircraft:wing:wetted_area,2396.56,ft**2 +mission:constraints:max_mach,0.785,unitless +mission:design:cruise_altitude,35000,ft +mission:design:gross_mass,175400.0,lbm +mission:design:range,3500,NM +mission:design:thrust_takeoff_per_eng,28928.1,lbf +mission:landing:lift_coefficient_max,2.0,unitless +mission:summary:cruise_mach,0.785,unitless +mission:summary:fuel_flow_scaler,1.0,unitless +mission:takeoff:fuel_simple,577,lbm +mission:takeoff:lift_coefficient_max,3.0,unitless +mission:takeoff:lift_over_drag,17.354,unitless +settings:equations_of_motion,height_energy +settings:mass_method,FLOPS \ No newline at end of file From b6c99c1ee90fe3df456229c9446808dae4e54a2f Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 5 Sep 2024 13:45:57 -0400 Subject: [PATCH 051/113] removed comments --- .../run_multimission_example.py | 101 ------------------ 1 file changed, 101 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example.py b/aviary/examples/multi_missions/run_multimission_example.py index a289e63a4..d7e851f09 100644 --- a/aviary/examples/multi_missions/run_multimission_example.py +++ b/aviary/examples/multi_missions/run_multimission_example.py @@ -277,104 +277,3 @@ def C5_example(makeN2=False): makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False super_prob = C5_example(makeN2=makeN2) - -""" -1:1:1 and 5:1:1 and 1:1:5 and 1:5:1 -Variable: aircraft:design:empty_mass - Plane 0: 377110.8519657982 (lbm), Plane 1: 377110.8519657982 (lbm), Plane 2: 377110.8519657982 (lbm), -Variable: mission:summary:fuel_burned - Plane 0: 167530.46091225138 (lbm), Plane 1: 308428.65141334233 (lbm), Plane 2: 412689.6603555365 (lbm), -Variable: mission:summary:gross_mass - Plane 0: 599904.1437916472 (lbm), Plane 1: 711227.3342927382 (lbm), Plane 2: 793323.6057604996 (lbm), -Variable: aircraft:wing:span - Plane 0: 235.7734017415966 (ft), Plane 1: 235.7734017415966 (ft), Plane 2: 235.7734017415966 (ft), -Variable: aircraft:wing:area - Plane 0: 6106.843788863166 (ft**2), Plane 1: 6106.843788863166 (ft**2), Plane 2: 6106.843788863166 (ft**2), - -1:1:5 - -""" - -""" -inter payload: 100k -Variable: aircraft:design:empty_mass - Plane 0: 374179.5394606042 (lbm) - Plane 1: 374179.5394606042 (lbm) - Plane 2: 374179.5394606042 (lbm) -Variable: mission:summary:fuel_burned - Plane 0: 165739.44323952997 (lbm) - Plane 1: 306588.0148270305 (lbm) - Plane 2: 411012.49583405076 (lbm) -Variable: mission:summary:gross_mass - Plane 0: 595188.3345483424 (lbm) - Plane 1: 702786.9061358428 (lbm) - Plane 2: 788721.6496684301 (lbm) - -inter payload: 140k -Variable: aircraft:design:empty_mass - Plane 0: 374179.53946059936 (lbm) - Plane 1: 374179.53946059936 (lbm) - Plane 2: 374179.53946059936 (lbm) -Variable: mission:summary:fuel_burned - Plane 0: 165739.44340813044 (lbm) - Plane 1: 306588.0148359792 (lbm) - Plane 2: 411012.4960230509 (lbm) -Variable: mission:summary:gross_mass - Plane 0: 595188.3347169379 (lbm) - Plane 1: 710136.9061447867 (lbm) - Plane 2: 788721.6498574257 (lbm) - -140k inter, 301k max -Variable: aircraft:design:empty_mass - Plane 0: 374179.5394605969 (lbm) - Plane 1: 374179.5394605969 (lbm) - Plane 2: 374179.5394605969 (lbm) -Variable: mission:summary:fuel_burned - Plane 0: 165739.44397328247 (lbm) - Plane 1: 306588.01484213956 (lbm) - Plane 2: 411012.4961383113 (lbm) -Variable: mission:summary:gross_mass - Plane 0: 598863.3352823037 (lbm) - Plane 1: 710136.9061509445 (lbm) - Plane 2: 788721.6499726834 (lbm) - -140k inter, 301k max, 10k ferry -Variable: aircraft:design:empty_mass - Plane 0: 374179.5394605957 (lbm) - Plane 1: 374179.5394605957 (lbm) - Plane 2: 374179.5394605957 (lbm) -Variable: mission:summary:fuel_burned - Plane 0: 165739.4440247023 (lbm) - Plane 1: 306588.01484336343 (lbm) - Plane 2: 411012.49619538186 (lbm) -Variable: mission:summary:gross_mass - Plane 0: 598863.3353337225 (lbm) - Plane 1: 710136.9061521672 (lbm) - Plane 2: 790586.3875041857 (lbm) -""" - -""" -optimize mach only: optimize both mach and alt: optimize neither mach or altitude -Variable: aircraft:design:empty_mass Variable: aircraft:design:empty_mass Variable: aircraft:design:empty_mass - Plane 0: 326047.42156711605 (lbm) Plane 0: 390475.71469928196 (lbm) Plane 0: 371320.23571631836 (lbm) - Plane 1: 326047.42156711605 (lbm) Plane 1: 390475.71469928196 (lbm) Plane 1: 371320.23571631836 (lbm) - Plane 2: 326047.42156711605 (lbm) Plane 2: 390475.71469928196 (lbm) Plane 2: 371320.23571631836 (lbm) -Variable: mission:summary:fuel_burned Variable: mission:summary:fuel_burned Variable: mission:summary:fuel_burned - Plane 0: 175717.28062873823 (lbm) Plane 0: 178314.99288207013 (lbm) Plane 0: 167946.2102766974 (lbm) - Plane 1: 306419.71885746776 (lbm) Plane 1: 325789.9474922766 (lbm) Plane 1: 309094.299337939 (lbm) - Plane 2: 394791.91474366543 (lbm) Plane 2: 429716.0286375711 (lbm) Plane 2: 413746.64501453174 (lbm) -Variable: mission:summary:gross_mass Variable: mission:summary:gross_mass Variable: mission:summary:gross_mass - Plane 0: 557034.0540440837 (lbm) Plane 0: 624060.059429561 (lbm) Plane 0: 594535.797841224 (lbm) - Plane 1: 658161.4922728132 (lbm) Plane 1: 741960.0140397676 (lbm) Plane 1: 706108.8869024655 (lbm) - Plane 2: 724368.9506845778 (lbm) Plane 2: 823721.3577106291 (lbm) Plane 2: 788596.4951046254 (lbm) -Variable: aircraft:wing:span Variable: aircraft:wing:span Variable: aircraft:wing:span - Plane 0: 54.707828078624665 (ft) Plane 0: 287.14946969690783 (ft) Plane 0: 211.8281919608065 (ft) - Plane 1: 54.707828078624665 (ft) Plane 1: 287.14946969690783 (ft) Plane 1: 211.8281919608065 (ft) - Plane 2: 54.707828078624665 (ft) Plane 2: 287.14946969690783 (ft) Plane 2: 211.8281919608065 (ft) -Variable: aircraft:wing:aspect_ratio Variable: aircraft:wing:aspect_ratio Variable: aircraft:wing:aspect_ratio - Plane 0: 6.263196240285538 (unitless) Plane 0: 6.931291416800268 (unitless) Plane 0: 7.576574965501183 (unitless) - Plane 1: 6.263196240285538 (unitless) Plane 1: 6.931291416800268 (unitless) Plane 1: 7.576574965501183 (unitless) - Plane 2: 6.263196240285538 (unitless) Plane 2: 6.931291416800268 (unitless) Plane 2: 7.576574965501183 (unitless) - - -""" From 70b6c4b8cc5b979819d73ba7cc70ddd0a82518c4 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 5 Sep 2024 15:18:57 -0400 Subject: [PATCH 052/113] disabled make plots --- .../multi_missions/run_multimission_example_FwFm.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example_FwFm.py b/aviary/examples/multi_missions/run_multimission_example_FwFm.py index 5ed809d6e..eb3c2e141 100644 --- a/aviary/examples/multi_missions/run_multimission_example_FwFm.py +++ b/aviary/examples/multi_missions/run_multimission_example_FwFm.py @@ -129,7 +129,7 @@ def setup_wrapper(self): def run(self): self.model.set_solver_print(0) - dm.run_problem(self, make_plots=True) + dm.run_problem(self, make_plots=False) def get_design_range(self): """Finds the longest mission and sets its range as the design range for all @@ -251,7 +251,9 @@ def FwFm_example(makeN2=False): createN2(__file__, super_prob) super_prob.run() - printoutputs = [(Aircraft.Design.EMPTY_MASS, 'lbm'), + printoutputs = [ + (Mission.Design.GROSS_MASS, 'lbm'), + (Aircraft.Design.EMPTY_MASS, 'lbm'), (Mission.Summary.FUEL_BURNED, 'lbm'), (Mission.Summary.GROSS_MASS, 'lbm'), (Aircraft.Wing.SPAN, 'ft'), @@ -260,8 +262,7 @@ def FwFm_example(makeN2=False): (Aircraft.LandingGear.NOSE_GEAR_MASS, 'lbm'), (Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 'unitless'), (Mission.Summary.CRUISE_MACH, 'unitless'), - (Aircraft.CrewPayload.NUM_PASSENGERS, 'unitless'), - (Aircraft.CrewPayload.Design.NUM_PASSENGERS, 'unitless')] + (Aircraft.Furnishings.MASS, 'lbm'),] super_prob.print_vars(vars=printoutputs) plotvars = [('altitude', 'ft'), From 721d42780edfd8aa09b008e83a336ec52674619c Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 5 Sep 2024 15:31:54 -0400 Subject: [PATCH 053/113] added list_vars() to show all outputs from final case --- .../examples/multi_missions/run_multimission_example_FwFm.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/aviary/examples/multi_missions/run_multimission_example_FwFm.py b/aviary/examples/multi_missions/run_multimission_example_FwFm.py index eb3c2e141..d3b011bcc 100644 --- a/aviary/examples/multi_missions/run_multimission_example_FwFm.py +++ b/aviary/examples/multi_missions/run_multimission_example_FwFm.py @@ -283,3 +283,6 @@ def FwFm_example(makeN2=False): makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False super_prob = FwFm_example(makeN2=makeN2) + + super_prob.model.list_vars(val=True, units=True, print_arrays=True) + # https://openmdao.org/newdocs/versions/latest/features/debugging/listing_variables.html?highlight=list_driver_vars From 3b60925e38662bfffc7d623e330e21223a7c5684 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 5 Sep 2024 16:59:03 -0400 Subject: [PATCH 054/113] major changes to update Aircraft.CrewPayload.Design.NUM_PASSENGERS in supporting subsystems --- .../run_multimission_example_FwFm.py | 7 ++++--- .../geometry/gasp_based/fuselage.py | 2 +- .../mass/flops_based/air_conditioning.py | 8 +++---- aviary/subsystems/mass/flops_based/apu.py | 4 ++-- .../subsystems/mass/flops_based/electrical.py | 8 +++---- .../subsystems/mass/flops_based/engine_oil.py | 4 ++-- .../mass/flops_based/passenger_service.py | 4 ++-- .../gasp_based/equipment_and_useful_load.py | 4 ++-- aviary/utils/preprocessors.py | 21 ++++++++++++------- aviary/utils/process_input_decks.py | 2 +- 10 files changed, 35 insertions(+), 29 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example_FwFm.py b/aviary/examples/multi_missions/run_multimission_example_FwFm.py index d3b011bcc..650aed20c 100644 --- a/aviary/examples/multi_missions/run_multimission_example_FwFm.py +++ b/aviary/examples/multi_missions/run_multimission_example_FwFm.py @@ -262,7 +262,8 @@ def FwFm_example(makeN2=False): (Aircraft.LandingGear.NOSE_GEAR_MASS, 'lbm'), (Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 'unitless'), (Mission.Summary.CRUISE_MACH, 'unitless'), - (Aircraft.Furnishings.MASS, 'lbm'),] + (Aircraft.Furnishings.MASS, 'lbm'), + (Aircraft.CrewPayload.PASSENGER_SERVICE_MASS, 'lbm')] super_prob.print_vars(vars=printoutputs) plotvars = [('altitude', 'ft'), @@ -283,6 +284,6 @@ def FwFm_example(makeN2=False): makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False super_prob = FwFm_example(makeN2=makeN2) - - super_prob.model.list_vars(val=True, units=True, print_arrays=True) + + super_prob.model.group_0.list_vars(val=True, units=True, print_arrays=False) # https://openmdao.org/newdocs/versions/latest/features/debugging/listing_variables.html?highlight=list_driver_vars diff --git a/aviary/subsystems/geometry/gasp_based/fuselage.py b/aviary/subsystems/geometry/gasp_based/fuselage.py index d9d80e0f9..2e33eed7e 100644 --- a/aviary/subsystems/geometry/gasp_based/fuselage.py +++ b/aviary/subsystems/geometry/gasp_based/fuselage.py @@ -57,7 +57,7 @@ def compute(self, inputs, outputs): num_aisle = aviary_options.get_val(Aircraft.Fuselage.NUM_AISLES) aisle_width = aviary_options.get_val(Aircraft.Fuselage.AISLE_WIDTH, units='inch') PAX = self.options['aviary_options'].get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') seat_pitch = aviary_options.get_val(Aircraft.Fuselage.SEAT_PITCH, units='inch') delta_diameter = inputs[Aircraft.Fuselage.DELTA_DIAMETER] diff --git a/aviary/subsystems/mass/flops_based/air_conditioning.py b/aviary/subsystems/mass/flops_based/air_conditioning.py index 98605525e..894ca14dd 100644 --- a/aviary/subsystems/mass/flops_based/air_conditioning.py +++ b/aviary/subsystems/mass/flops_based/air_conditioning.py @@ -37,7 +37,7 @@ def setup_partials(self): def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): aviary_options: AviaryValues = self.options['aviary_options'] pax = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') scaler = inputs[Aircraft.AirConditioning.MASS_SCALER] avionics_wt = inputs[Aircraft.Avionics.MASS] * GRAV_ENGLISH_LBM @@ -52,7 +52,7 @@ def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): def compute_partials(self, inputs, J): aviary_options: AviaryValues = self.options['aviary_options'] pax = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') scaler = inputs[Aircraft.AirConditioning.MASS_SCALER] avionics_wt = inputs[Aircraft.Avionics.MASS] * GRAV_ENGLISH_LBM @@ -101,7 +101,7 @@ def setup_partials(self): def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): aviary_options: AviaryValues = self.options['aviary_options'] num_pax = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') scaler = inputs[Aircraft.AirConditioning.MASS_SCALER] @@ -111,7 +111,7 @@ def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): def compute_partials(self, inputs, J): aviary_options: AviaryValues = self.options['aviary_options'] num_pax = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') J[Aircraft.AirConditioning.MASS, Aircraft.AirConditioning.MASS_SCALER] = \ 26.0 * num_pax / GRAV_ENGLISH_LBM diff --git a/aviary/subsystems/mass/flops_based/apu.py b/aviary/subsystems/mass/flops_based/apu.py index c4858be1f..3a8fec051 100644 --- a/aviary/subsystems/mass/flops_based/apu.py +++ b/aviary/subsystems/mass/flops_based/apu.py @@ -30,7 +30,7 @@ def setup_partials(self): def compute(self, inputs, outputs): aviary_options: AviaryValues = self.options['aviary_options'] pax = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') scaler = inputs[Aircraft.APU.MASS_SCALER] planform = inputs[Aircraft.Fuselage.PLANFORM_AREA] @@ -40,7 +40,7 @@ def compute(self, inputs, outputs): def compute_partials(self, inputs, J): aviary_options: AviaryValues = self.options['aviary_options'] pax = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') scaler = inputs[Aircraft.APU.MASS_SCALER] planform = inputs[Aircraft.Fuselage.PLANFORM_AREA] diff --git a/aviary/subsystems/mass/flops_based/electrical.py b/aviary/subsystems/mass/flops_based/electrical.py index d3b6e13ff..90f050cbc 100644 --- a/aviary/subsystems/mass/flops_based/electrical.py +++ b/aviary/subsystems/mass/flops_based/electrical.py @@ -33,7 +33,7 @@ def compute(self, inputs, outputs): options: AviaryValues = self.options['aviary_options'] nfuse = options.get_val(Aircraft.Fuselage.NUM_FUSELAGES) ncrew = options.get_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW) - npass = options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + npass = options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') length = inputs[Aircraft.Fuselage.LENGTH] width = inputs[Aircraft.Fuselage.MAX_WIDTH] num_eng = options.get_val(Aircraft.Propulsion.TOTAL_NUM_ENGINES) @@ -48,7 +48,7 @@ def compute_partials(self, inputs, J): options: AviaryValues = self.options['aviary_options'] nfuse = options.get_val(Aircraft.Fuselage.NUM_FUSELAGES) ncrew = options.get_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW) - npass = options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + npass = options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') length = inputs[Aircraft.Fuselage.LENGTH] width = inputs[Aircraft.Fuselage.MAX_WIDTH] num_eng = options.get_val(Aircraft.Propulsion.TOTAL_NUM_ENGINES) @@ -93,7 +93,7 @@ def setup_partials(self): def compute(self, inputs, outputs): aviary_options: AviaryValues = self.options['aviary_options'] npass = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') mass_scaler = inputs[Aircraft.Electrical.MASS_SCALER] outputs[Aircraft.Electrical.MASS] = 16.3 * \ @@ -102,7 +102,7 @@ def compute(self, inputs, outputs): def compute_partials(self, inputs, J): aviary_options: AviaryValues = self.options['aviary_options'] npass = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') J[Aircraft.Electrical.MASS, Aircraft.Electrical.MASS_SCALER] = \ 16.3 * npass / GRAV_ENGLISH_LBM diff --git a/aviary/subsystems/mass/flops_based/engine_oil.py b/aviary/subsystems/mass/flops_based/engine_oil.py index 79cfde263..d82cd8e63 100644 --- a/aviary/subsystems/mass/flops_based/engine_oil.py +++ b/aviary/subsystems/mass/flops_based/engine_oil.py @@ -87,7 +87,7 @@ def setup_partials(self): def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): aviary_options: AviaryValues = self.options['aviary_options'] pax = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') scaler = inputs[Aircraft.Propulsion.ENGINE_OIL_MASS_SCALER] @@ -97,7 +97,7 @@ def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): def compute_partials(self, inputs, J): aviary_options: AviaryValues = self.options['aviary_options'] pax = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') J[Aircraft.Propulsion.TOTAL_ENGINE_OIL_MASS, Aircraft.Propulsion.ENGINE_OIL_MASS_SCALER diff --git a/aviary/subsystems/mass/flops_based/passenger_service.py b/aviary/subsystems/mass/flops_based/passenger_service.py index 21c5a5ae2..e379855b3 100644 --- a/aviary/subsystems/mass/flops_based/passenger_service.py +++ b/aviary/subsystems/mass/flops_based/passenger_service.py @@ -132,7 +132,7 @@ def compute( ): aviary_options: AviaryValues = self.options['aviary_options'] passenger_count = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') passenger_service_mass_scaler = \ inputs[Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_SCALER] @@ -146,7 +146,7 @@ def compute( def compute_partials(self, inputs, J, discrete_inputs=None): aviary_options: AviaryValues = self.options['aviary_options'] passenger_count = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') J[ Aircraft.CrewPayload.PASSENGER_SERVICE_MASS, diff --git a/aviary/subsystems/mass/gasp_based/equipment_and_useful_load.py b/aviary/subsystems/mass/gasp_based/equipment_and_useful_load.py index 642bafc27..2749e2cb5 100644 --- a/aviary/subsystems/mass/gasp_based/equipment_and_useful_load.py +++ b/aviary/subsystems/mass/gasp_based/equipment_and_useful_load.py @@ -77,7 +77,7 @@ def setup(self): def compute(self, inputs, outputs): options: AviaryValues = self.options["aviary_options"] - PAX = options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + PAX = options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') smooth = options.get_val( Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, units='unitless') @@ -388,7 +388,7 @@ def compute(self, inputs, outputs): def compute_partials(self, inputs, partials): options = self.options['aviary_options'] - PAX = options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + PAX = options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') smooth = options.get_val( Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, units='unitless') gross_wt_initial = inputs[Mission.Design.GROSS_MASS] * GRAV_ENGLISH_LBM diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 290145c39..fb5dd26ff 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -36,14 +36,19 @@ def preprocess_crewpayload(aviary_options: AviaryValues): """ if Aircraft.CrewPayload.NUM_PASSENGERS not in aviary_options: - passenger_count = 0 - for key in (Aircraft.CrewPayload.NUM_FIRST_CLASS, - Aircraft.CrewPayload.NUM_BUSINESS_CLASS, - Aircraft.CrewPayload.NUM_TOURIST_CLASS): - if key in aviary_options: - passenger_count += aviary_options.get_val(key) - if passenger_count == 0: - passenger_count = 1 + if Aircraft.CrewPayload.Design.NUM_PASSENGERS in aviary_options: + # Set the num_passengers to the designed number of passengers + passenger_count = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) + else: + # sum up the number of passengers + passenger_count = 0 + for key in (Aircraft.CrewPayload.NUM_FIRST_CLASS, + Aircraft.CrewPayload.NUM_BUSINESS_CLASS, + Aircraft.CrewPayload.NUM_TOURIST_CLASS): + if key in aviary_options: + passenger_count += aviary_options.get_val(key) + if passenger_count == 0: + passenger_count = 1 aviary_options.set_val( Aircraft.CrewPayload.NUM_PASSENGERS, passenger_count) diff --git a/aviary/utils/process_input_decks.py b/aviary/utils/process_input_decks.py index 2d9edcc68..a27e34f18 100644 --- a/aviary/utils/process_input_decks.py +++ b/aviary/utils/process_input_decks.py @@ -293,7 +293,7 @@ def initial_guessing(aircraft_values: AviaryValues, initial_guesses, engine_buil Updated aircraft values and initial guesses. """ problem_type = aircraft_values.get_val(Settings.PROBLEM_TYPE) - num_pax = aircraft_values.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) + num_pax = aircraft_values.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) reserve_val = aircraft_values.get_val( Aircraft.Design.RESERVE_FUEL_ADDITIONAL, units='lbm') reserve_frac = aircraft_values.get_val( From 31abe1e990c30a200f9a34962197e3f9dbf8b6a2 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Fri, 6 Sep 2024 10:38:50 -0400 Subject: [PATCH 055/113] added a few more printed outputs at end of mission --- .../run_multimission_example.py | 28 +++++++++++-------- .../run_multimission_example_FwFm.py | 26 +++++++++-------- .../mass/flops_based/passenger_service.py | 12 ++++---- 3 files changed, 36 insertions(+), 30 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example.py b/aviary/examples/multi_missions/run_multimission_example.py index d7e851f09..7942c0ffb 100644 --- a/aviary/examples/multi_missions/run_multimission_example.py +++ b/aviary/examples/multi_missions/run_multimission_example.py @@ -123,7 +123,7 @@ def setup_wrapper(self): def run(self): self.model.set_solver_print(0) - dm.run_problem(self, make_plots=True) + dm.run_problem(self, make_plots=False) def get_design_range(self): """Finds the longest mission and sets its range as the design range for all @@ -246,17 +246,21 @@ def C5_example(makeN2=False): createN2(__file__, super_prob) super_prob.run() - printoutputs = [(Aircraft.Design.EMPTY_MASS, 'lbm'), - (Mission.Design.GROSS_MASS, 'lbm'), - (Mission.Summary.FUEL_BURNED, 'lbm'), - (Mission.Summary.GROSS_MASS, 'lbm'), - (Aircraft.Wing.SPAN, 'ft'), - (Aircraft.Wing.AREA, 'ft**2'), - (Aircraft.LandingGear.MAIN_GEAR_MASS, 'lbm'), - (Aircraft.LandingGear.NOSE_GEAR_MASS, 'lbm'), - (Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 'unitless'), - (Mission.Summary.CRUISE_MACH, 'unitless'), - (Aircraft.Design.TOUCHDOWN_MASS, 'lbm')] + printoutputs = [ + (Mission.Design.GROSS_MASS, 'lbm'), + (Aircraft.Design.EMPTY_MASS, 'lbm'), + (Mission.Summary.GROSS_MASS, 'lbm'), + (Mission.Summary.FUEL_BURNED, 'lbm'), + (Mission.Design.FUEL_MASS, 'lbm'), + (Mission.Summary.TOTAL_FUEL_MASS, 'lbm'), + (Aircraft.Wing.SPAN, 'ft'), + (Aircraft.Wing.AREA, 'ft**2'), + (Aircraft.LandingGear.MAIN_GEAR_MASS, 'lbm'), + (Aircraft.LandingGear.NOSE_GEAR_MASS, 'lbm'), + (Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 'unitless'), + (Mission.Summary.CRUISE_MACH, 'unitless'), + (Aircraft.Furnishings.MASS, 'lbm'), + (Aircraft.CrewPayload.PASSENGER_SERVICE_MASS, 'lbm')] super_prob.print_vars(vars=printoutputs) plotvars = [('altitude', 'ft'), diff --git a/aviary/examples/multi_missions/run_multimission_example_FwFm.py b/aviary/examples/multi_missions/run_multimission_example_FwFm.py index 650aed20c..68ad4515c 100644 --- a/aviary/examples/multi_missions/run_multimission_example_FwFm.py +++ b/aviary/examples/multi_missions/run_multimission_example_FwFm.py @@ -232,7 +232,7 @@ def FwFm_example(makeN2=False): phaseinfo[key]["user_options"]["optimize_altitude"] = optalt # how much each mission should be valued by the optimizer, larger numbers = more significance - weights = [1, 1] + weights = [.9, 0.1] super_prob = MultiMissionProblem(planes, phase_infos, weights) super_prob.add_driver() @@ -254,16 +254,18 @@ def FwFm_example(makeN2=False): printoutputs = [ (Mission.Design.GROSS_MASS, 'lbm'), (Aircraft.Design.EMPTY_MASS, 'lbm'), - (Mission.Summary.FUEL_BURNED, 'lbm'), - (Mission.Summary.GROSS_MASS, 'lbm'), - (Aircraft.Wing.SPAN, 'ft'), - (Aircraft.Wing.AREA, 'ft**2'), - (Aircraft.LandingGear.MAIN_GEAR_MASS, 'lbm'), - (Aircraft.LandingGear.NOSE_GEAR_MASS, 'lbm'), - (Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 'unitless'), - (Mission.Summary.CRUISE_MACH, 'unitless'), - (Aircraft.Furnishings.MASS, 'lbm'), - (Aircraft.CrewPayload.PASSENGER_SERVICE_MASS, 'lbm')] + (Mission.Summary.GROSS_MASS, 'lbm'), + (Mission.Summary.FUEL_BURNED, 'lbm'), + (Mission.Design.FUEL_MASS, 'lbm'), + (Mission.Summary.TOTAL_FUEL_MASS, 'lbm'), + (Aircraft.Wing.SPAN, 'ft'), + (Aircraft.Wing.AREA, 'ft**2'), + (Aircraft.LandingGear.MAIN_GEAR_MASS, 'lbm'), + (Aircraft.LandingGear.NOSE_GEAR_MASS, 'lbm'), + (Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 'unitless'), + (Mission.Summary.CRUISE_MACH, 'unitless'), + (Aircraft.Furnishings.MASS, 'lbm'), + (Aircraft.CrewPayload.PASSENGER_SERVICE_MASS, 'lbm')] super_prob.print_vars(vars=printoutputs) plotvars = [('altitude', 'ft'), @@ -285,5 +287,5 @@ def FwFm_example(makeN2=False): super_prob = FwFm_example(makeN2=makeN2) - super_prob.model.group_0.list_vars(val=True, units=True, print_arrays=False) + # super_prob.model.group_1.list_vars(val=True, units=True, print_arrays=False) # https://openmdao.org/newdocs/versions/latest/features/debugging/listing_variables.html?highlight=list_driver_vars diff --git a/aviary/subsystems/mass/flops_based/passenger_service.py b/aviary/subsystems/mass/flops_based/passenger_service.py index e379855b3..0559c6276 100644 --- a/aviary/subsystems/mass/flops_based/passenger_service.py +++ b/aviary/subsystems/mass/flops_based/passenger_service.py @@ -46,13 +46,13 @@ def setup_partials(self): def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): aviary_options: AviaryValues = self.options['aviary_options'] - first_class_count = aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS) + first_class_count = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) business_class_count = \ - aviary_options.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS) + aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) tourist_class_count = \ - aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS) + aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS) design_range = inputs[Mission.Design.RANGE] max_mach = aviary_options.get_val(Mission.Constraints.MAX_MACH) @@ -72,13 +72,13 @@ def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): def compute_partials(self, inputs, J, discrete_inputs=None): aviary_options: AviaryValues = self.options['aviary_options'] - first_class_count = aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS) + first_class_count = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) business_class_count = \ - aviary_options.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS) + aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) tourist_class_count = \ - aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS) + aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS) design_range = inputs[Mission.Design.RANGE] max_mach = aviary_options.get_val(Mission.Constraints.MAX_MACH) From 7c86741a58c5b03508b9e65f26d7e8074e618720 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Fri, 6 Sep 2024 12:19:47 -0400 Subject: [PATCH 056/113] fixed phase_info assignments --- .../multi_missions/run_multimission_example_FwFm.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example_FwFm.py b/aviary/examples/multi_missions/run_multimission_example_FwFm.py index 68ad4515c..dde79f6a5 100644 --- a/aviary/examples/multi_missions/run_multimission_example_FwFm.py +++ b/aviary/examples/multi_missions/run_multimission_example_FwFm.py @@ -23,11 +23,13 @@ from aviary.variable_info.variables import Mission, Aircraft from aviary.examples.example_phase_info import phase_info +import copy as copy # fly the same mission twice with two different passenger loads -phase_info_primary = phase_info -phase_info_deadhead = phase_info +phase_info_primary = copy.deepcopy(phase_info) +phase_info_deadhead = copy.deepcopy(phase_info) +#phase_info_deadhead['post_mission']['target_range'] = [1500, "nmi"] class MultiMissionProblem(om.Problem): def __init__(self, planes, phase_infos, weights): @@ -232,7 +234,7 @@ def FwFm_example(makeN2=False): phaseinfo[key]["user_options"]["optimize_altitude"] = optalt # how much each mission should be valued by the optimizer, larger numbers = more significance - weights = [.9, 0.1] + weights = [9, 1] super_prob = MultiMissionProblem(planes, phase_infos, weights) super_prob.add_driver() From d79f3d63b65b1c76a5dd47134bcf1b6ebc1857aa Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Wed, 11 Sep 2024 15:19:02 -0400 Subject: [PATCH 057/113] removed c5 and FwFm multi mission examples files, replaced with large_single_aisle example file --- .../run_multimission_example.py | 283 ------------------ ...ultimission_example_large_single_aisle.py} | 48 ++- c5_models/c5.csv | 167 ----------- c5_models/c5_ferry.csv | 167 ----------- c5_models/c5_ferry_phase_info.py | 83 ----- c5_models/c5_intermediate.csv | 167 ----------- c5_models/c5_intermediate_phase_info.py | 83 ----- c5_models/c5_maxpayload.csv | 167 ----------- c5_models/c5_maxpayload_phase_info.py | 83 ----- c5_runfile_single_aviary.py | 49 --- 10 files changed, 32 insertions(+), 1265 deletions(-) delete mode 100644 aviary/examples/multi_missions/run_multimission_example.py rename aviary/examples/multi_missions/{run_multimission_example_FwFm.py => run_multimission_example_large_single_aisle.py} (85%) delete mode 100644 c5_models/c5.csv delete mode 100644 c5_models/c5_ferry.csv delete mode 100644 c5_models/c5_ferry_phase_info.py delete mode 100644 c5_models/c5_intermediate.csv delete mode 100644 c5_models/c5_intermediate_phase_info.py delete mode 100644 c5_models/c5_maxpayload.csv delete mode 100644 c5_models/c5_maxpayload_phase_info.py delete mode 100644 c5_runfile_single_aviary.py diff --git a/aviary/examples/multi_missions/run_multimission_example.py b/aviary/examples/multi_missions/run_multimission_example.py deleted file mode 100644 index 7942c0ffb..000000000 --- a/aviary/examples/multi_missions/run_multimission_example.py +++ /dev/null @@ -1,283 +0,0 @@ -""" -authors: Jatin Soni, Eliot Aretskin -Multi Mission Optimization Example using Aviary -""" -import sys -import warnings -import dymos as dm -import numpy as np -from os.path import join -import matplotlib.pyplot as plt - -import openmdao.api as om -import aviary.api as av -from aviary.variable_info.enums import ProblemType -from aviary.variable_info.variables import Mission, Aircraft - -from c5_models.c5_ferry_phase_info import phase_info as c5_ferry_phase_info -from c5_models.c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info -from c5_models.c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info - - -# Usage: -# For the landing gear mass (MAIN_GEAR_MASS & NOSE_GEAR_MASS) to be designed consistently -# between missions, the Aircraft.Design.TOUCHDOWN_MASS must be set to the same value for all missions. - -class MultiMissionProblem(om.Problem): - def __init__(self, planes, phase_infos, weights): - super().__init__() - self.num_missions = len(planes) - # phase infos and planes length must match - this maybe unnecessary if - # different planes (payloads) fly same mission (say pax vs cargo) - # or if same payload flies 2 different missions (altitude/mach differences) - if self.num_missions != len(phase_infos): - raise Exception("Length of planes and phase_infos must be the same!") - - # if fewer weights than planes are provided, assign equal weights for all planes - if len(weights) < self.num_missions: - weights = [1]*self.num_missions - # if more weights than planes, raise exception - elif len(weights) > self.num_missions: - raise Exception("Length of weights cannot exceed length of planes!") - self.weights = weights - self.phase_infos = phase_infos - - self.group_prefix = 'group' - self.probs = [] - self.fuel_vars = [] - self.phases = {} - # define individual aviary problems - for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): - prob = av.AviaryProblem() - prob.load_inputs(plane, phase_info) - prob.check_and_preprocess_inputs() - prob.add_pre_mission_systems() - prob.add_phases() - prob.add_post_mission_systems() - prob.link_phases() - - # alternate prevents use of equality constraint b/w design and summary gross mass - prob.problem_type = ProblemType.ALTERNATE - prob.add_design_variables() - self.probs.append(prob) - # phase names for each traj (can be used later to make plots/print outputs) - self.phases[f"{self.group_prefix}_{i}"] = list(prob.traj._phases.keys()) - - # design range and gross mass are promoted, these are Max Range/Max Takeoff Mass - # and must be the same for each aviary problem. Subsystems within aviary are sized - # using these - empty mass is same across all aviary problems. - # the fuel objective is also promoted since that's used in the compound objective - promoted_name = f"{self.group_prefix}_{i}_fuelobj" - self.fuel_vars.append(promoted_name) - self.model.add_subsystem( - self.group_prefix + f'_{i}', prob.model, - promotes_inputs=[Mission.Design.GROSS_MASS, - Mission.Design.RANGE, - Aircraft.Wing.SPAN, - Aircraft.Wing.AREA], - promotes_outputs=[(Mission.Objectives.FUEL, promoted_name)]) - - def add_design_variables(self): - self.model.add_design_var(Mission.Design.GROSS_MASS, - lower=10., upper=900e3, units='lbm') - self.model.add_design_var(Aircraft.Wing.SPAN, lower=100., upper=500., units='ft') - self.model.add_design_var(Aircraft.Wing.AREA, lower=10., - upper=1e6, units='ft**2') - - def add_driver(self): - self.driver = om.pyOptSparseDriver() - self.driver.options["optimizer"] = "SLSQP" - self.driver.declare_coloring() - # linear solver causes nan entry error for landing to takeoff mass ratio param - # self.model.linear_solver = om.DirectSolver() - - def add_objective(self): - # weights are normalized - e.g. for given weights 3:1, the normalized - # weights are 0.75:0.25 - weights = [float(weight/sum(self.weights)) for weight in self.weights] - weighted_str = "+".join([f"{fuelobj}*{weight}" - for fuelobj, weight in zip(self.fuel_vars, weights)]) - # weighted_str looks like: fuel_0 * weight[0] + fuel_1 * weight[1] - # note that the fuel objective itself is the base aviary fuel objective - # which is also a function of climb time becuse climb is not very sensitive to fuel - - # adding compound execComp to super problem - self.model.add_subsystem('compound_fuel_burn_objective', om.ExecComp( - "compound = "+weighted_str, has_diag_partials=True), promotes=["compound"]) - self.model.add_objective('compound') - - def setup_wrapper(self): - """Wrapper for om.Problem setup with warning ignoring and setting options""" - for prob in self.probs: - prob.model.options['aviary_options'] = prob.aviary_inputs - prob.model.options['aviary_metadata'] = prob.meta_data - prob.model.options['phase_info'] = prob.phase_info - - # Aviary's problem setup wrapper uses these ignored warnings to suppress - # some warnings related to variable promotion. Replicating that here with - # setup for the super problem - with warnings.catch_warnings(): - warnings.simplefilter("ignore", om.OpenMDAOWarning) - warnings.simplefilter("ignore", om.PromotionWarning) - self.setup(check='all') - - def run(self): - self.model.set_solver_print(0) - dm.run_problem(self, make_plots=False) - - def get_design_range(self): - """Finds the longest mission and sets its range as the design range for all - Aviary problems. Used within Aviary for sizing subsystems (avionics and AC).""" - design_range = [] - for phase_info in self.phase_infos: - design_range.append(phase_info['post_mission'] - ['target_range'][0]) # TBD add units - design_range_min = np.min(design_range) - design_range_max = np.max(design_range) - return design_range_max, design_range_min # design_range_min - - def create_timeseries_plots(self, plotvars=[], show=True): - """ - Temporary create plots manually because graphing won't work for dual-trajectories. - Creates timeseries plots for any variables within timeseries. Specify variables - and units by setting plotvars = [('altitude','ft')]. Any number of vars can be added. - """ - plt.figure() - for plotidx, (var, unit) in enumerate(plotvars): - plt.subplot(int(np.ceil(len(plotvars)/2)), 2, plotidx+1) - for i in range(self.num_missions): - time = np.array([]) - yvar = np.array([]) - # this loop concatenates data from all phases - for phase in self.phases[f"{self.group_prefix}_{i}"]: - rawt = self.get_val( - f"{self.group_prefix}_{i}.traj.{phase}.timeseries.time", - units='s') - rawy = self.get_val( - f"{self.group_prefix}_{i}.traj.{phase}.timeseries.{var}", - units=unit) - time = np.hstack([time, np.ndarray.flatten(rawt)]) - yvar = np.hstack([yvar, np.ndarray.flatten(rawy)]) - plt.plot(time, yvar, linewidth=self.num_missions-i) - plt.xlabel("Time (s)") - plt.ylabel(f"{var.title()} ({unit})") - plt.grid() - plt.figlegend([f"Plane {i}" for i in range(self.num_missions)]) - if show: - plt.show() - - def create_payload_range_plot(self, show=True): - """Creates payload range diagram for the super problem. Appends a point for max payload - and 0 range. """ - payloads = [] - ranges = [] - for i in range(self.num_missions): - ref = f"{self.group_prefix}_{i}" - payloads.append( - self.get_val( - f"{ref}.{Aircraft.CrewPayload.CARGO_MASS}", units='lbm')) - lastphase = self.phases[ref][-1] - ranges.append( - self.get_val( - f"{ref}.traj.{lastphase}.timeseries.distance", - units='nmi', indices=-1)[0]) - payloads, ranges = zip(*sorted(zip(payloads, ranges))) - payloads, ranges = list(payloads), list(ranges) - payloads.append(payloads[-1]) - ranges.append(0) - plt.figure() - plt.plot(ranges, payloads) - plt.xlabel("Range (nmi)") - plt.ylabel("Payload (lbm)") - plt.grid() - if show: - plt.show() - - def print_vars(self, vars=[]): - """Specify vars with name and unit in a tuple, e.g. vars = [ (Mission.Summary.FUEL_BURNED, 'lbm') ]""" - - print("\n\n=========================\n") - print(f"{'':40}", end=': ') - for i in range(self.num_missions): - name = f"Mission {i}" - print(f"{name:^30}", end='| ') - print() - for var, unit in vars: - varname = f"Variable: {var.replace(':','.').upper()}" - print(f"{varname:40}", end=": ") - for i in range(self.num_missions): - val = self.get_val(f'group_{i}.{var}', units=unit)[0] - printstatement = f"{val} ({unit})" - print(f"{printstatement:^30}", end="| ") - print() - - -def C5_example(makeN2=False): - plane_dir = 'c5_models' - planes = ['c5_maxpayload.csv', 'c5_intermediate.csv', 'c5_ferry.csv'] - planes = [join(plane_dir, plane) for plane in planes] - phase_infos = [c5_maxpayload_phase_info, - c5_intermediate_phase_info, c5_ferry_phase_info] - optalt, optmach = False, False - for phaseinfo in phase_infos: - for key in phaseinfo.keys(): - if "user_options" in phaseinfo[key].keys(): - phaseinfo[key]["user_options"]["optimize_mach"] = optmach - phaseinfo[key]["user_options"]["optimize_altitude"] = optalt - - weights = [1, 1, 1] - - super_prob = MultiMissionProblem(planes, phase_infos, weights) - super_prob.add_driver() - super_prob.add_design_variables() - super_prob.add_objective() - # set input default to prevent error, value doesn't matter since set val is used later - super_prob.model.set_input_defaults(Mission.Design.RANGE, val=1.) - super_prob.setup_wrapper() - - # All the design ranges must be the same to make sure Air Conditioning and Avionics are designed the same for all missions, - super_prob.set_val(Mission.Design.RANGE, super_prob.get_design_range()[0]) - - for i, prob in enumerate(super_prob.probs): - prob.set_initial_guesses(super_prob, super_prob.group_prefix+f"_{i}.") - - if makeN2: - from createN2 import createN2 - createN2(__file__, super_prob) - - super_prob.run() - printoutputs = [ - (Mission.Design.GROSS_MASS, 'lbm'), - (Aircraft.Design.EMPTY_MASS, 'lbm'), - (Mission.Summary.GROSS_MASS, 'lbm'), - (Mission.Summary.FUEL_BURNED, 'lbm'), - (Mission.Design.FUEL_MASS, 'lbm'), - (Mission.Summary.TOTAL_FUEL_MASS, 'lbm'), - (Aircraft.Wing.SPAN, 'ft'), - (Aircraft.Wing.AREA, 'ft**2'), - (Aircraft.LandingGear.MAIN_GEAR_MASS, 'lbm'), - (Aircraft.LandingGear.NOSE_GEAR_MASS, 'lbm'), - (Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 'unitless'), - (Mission.Summary.CRUISE_MACH, 'unitless'), - (Aircraft.Furnishings.MASS, 'lbm'), - (Aircraft.CrewPayload.PASSENGER_SERVICE_MASS, 'lbm')] - super_prob.print_vars(vars=printoutputs) - - plotvars = [('altitude', 'ft'), - ('mass', 'lbm'), - ('drag', 'lbf'), - ('distance', 'nmi'), - ('throttle', 'unitless'), - ('mach', 'unitless')] - super_prob.create_timeseries_plots(plotvars=plotvars, show=False) - - super_prob.create_payload_range_plot(show=False) - plt.show() - - return super_prob - - -if __name__ == '__main__': - makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False - - super_prob = C5_example(makeN2=makeN2) diff --git a/aviary/examples/multi_missions/run_multimission_example_FwFm.py b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py similarity index 85% rename from aviary/examples/multi_missions/run_multimission_example_FwFm.py rename to aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py index dde79f6a5..ef49b1c77 100644 --- a/aviary/examples/multi_missions/run_multimission_example_FwFm.py +++ b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py @@ -22,6 +22,7 @@ from aviary.variable_info.enums import ProblemType from aviary.variable_info.variables import Mission, Aircraft + from aviary.examples.example_phase_info import phase_info import copy as copy @@ -29,24 +30,40 @@ phase_info_primary = copy.deepcopy(phase_info) phase_info_deadhead = copy.deepcopy(phase_info) +# get large single aisle values +from aviary.validation_cases.validation_tests import get_flops_inputs +aviary_inputs_primary = get_flops_inputs('LargeSingleAisle2FLOPS') +aviary_inputs_primary.set_val('aircraft:crew_and_payload:design:num_passengers', 162, 'unitless') +aviary_inputs_primary.set_val('aircraft:crew_and_payload:design:num_tourist_class', 150, 'unitless') +aviary_inputs_primary.set_val('aircraft:crew_and_payload:design:num_business_class', 0, 'unitless') +aviary_inputs_primary.set_val('aircraft:crew_and_payload:design:num_first_class', 12, 'unitless') + + +aviary_inputs_deadhead = copy.deepcopy(aviary_inputs_primary) +aviary_inputs_deadhead.set_val('aircraft:crew_and_payload:num_passengers', 0, 'unitless') +aviary_inputs_deadhead.set_val('aircraft:crew_and_payload:num_tourist_class', 0, 'unitless') +aviary_inputs_deadhead.set_val('aircraft:crew_and_payload:num_business_class', 0, 'unitless') +aviary_inputs_deadhead.set_val('aircraft:crew_and_payload:num_first_class', 0, 'unitless') +aviary_inputs_deadhead.set_val(Aircraft.CrewPayload.MISC_CARGO, 0.0, 'lbm') + #phase_info_deadhead['post_mission']['target_range'] = [1500, "nmi"] class MultiMissionProblem(om.Problem): - def __init__(self, planes, phase_infos, weights): + def __init__(self, aviary_values, phase_infos, weights): super().__init__() - self.num_missions = len(planes) - # phase infos and planes length must match - this maybe unnecessary if - # different planes (payloads) fly same mission (say pax vs cargo) + self.num_missions = len(aviary_values) + # phase infos and aviary_values length must match - this maybe unnecessary if + # different aviary_values (payloads) fly same mission (say pax vs cargo) # or if same payload flies 2 different missions (altitude/mach differences) if self.num_missions != len(phase_infos): - raise Exception("Length of planes and phase_infos must be the same!") + raise Exception("Length of aviary_values and phase_infos must be the same!") - # if fewer weights than planes are provided, assign equal weights for all planes + # if fewer weights than aviary_values are provided, assign equal weights for all aviary_values if len(weights) < self.num_missions: weights = [1]*self.num_missions - # if more weights than planes, raise exception + # if more weights than aviary_values, raise exception elif len(weights) > self.num_missions: - raise Exception("Length of weights cannot exceed length of planes!") + raise Exception("Length of weights cannot exceed length of aviary_values!") self.weights = weights self.phase_infos = phase_infos @@ -55,9 +72,9 @@ def __init__(self, planes, phase_infos, weights): self.fuel_vars = [] self.phases = {} # define individual aviary problems - for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): + for i, (aviary_values, phase_info) in enumerate(zip(aviary_values, phase_infos)): prob = av.AviaryProblem() - prob.load_inputs(plane, phase_info) + prob.load_inputs(aviary_values, phase_info) prob.check_and_preprocess_inputs() prob.add_pre_mission_systems() prob.add_phases() @@ -220,10 +237,9 @@ def print_vars(self, vars=[]): print() -def FwFm_example(makeN2=False): - plane_dir = 'models/test_aircraft/' - planes = ['aircraft_for_bench_FwFm.csv', 'aircraft_for_bench_FwFm_deadhead.csv'] - planes = [join(plane_dir, plane) for plane in planes] +def large_single_aisle_example(makeN2=False): + aviary_values=[aviary_inputs_primary, + aviary_inputs_deadhead] phase_infos = [phase_info_primary, phase_info_deadhead] optalt, optmach = False, False @@ -236,7 +252,7 @@ def FwFm_example(makeN2=False): # how much each mission should be valued by the optimizer, larger numbers = more significance weights = [9, 1] - super_prob = MultiMissionProblem(planes, phase_infos, weights) + super_prob = MultiMissionProblem(aviary_values, phase_infos, weights) super_prob.add_driver() super_prob.add_design_variables() super_prob.add_objective() @@ -287,7 +303,7 @@ def FwFm_example(makeN2=False): if __name__ == '__main__': makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False - super_prob = FwFm_example(makeN2=makeN2) + super_prob = large_single_aisle_example(makeN2=makeN2) # super_prob.model.group_1.list_vars(val=True, units=True, print_arrays=False) # https://openmdao.org/newdocs/versions/latest/features/debugging/listing_variables.html?highlight=list_driver_vars diff --git a/c5_models/c5.csv b/c5_models/c5.csv deleted file mode 100644 index 186bb7e4f..000000000 --- a/c5_models/c5.csv +++ /dev/null @@ -1,167 +0,0 @@ -# author: Chris Psenica -#aircraft:air_conditioning:mass_scaler,1.0,unitless -#aircraft:anti_icing:mass_scaler,1.0,unitless -#aircraft:apu:mass_scaler,1.0,unitless -#aircraft:avionics:mass_scaler,1.0,unitless -#aircraft:canard:area,0.0,ft**2 -#aircraft:canard:aspect_ratio,0.0,unitless -#aircraft:canard:thickness_to_chord,0.0,unitless -aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm -#aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless -#aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:mass_per_passenger,180.0,lbm - -aircraft:crew_and_payload:cargo_mass,281000,lbm -#aircraft:crew_and_payload:num_passengers,82,unitless - -#aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:num_flight_crew,7,unitless -#aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless -#aircraft:crew_and_payload:wing_cargo,0.0,lbm -#aircraft:design:base_area,0.0,ft**2 -#aircraft:design:empty_mass_margin_scaler,1.0,unitless -#aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless -#aircraft:design:touchdown_mass,498554,lbm -aircraft:design:reserve_fuel_additional,0,lbm -#aircraft:design:subsonic_drag_coeff_factor,1.0,unitless -#aircraft:design:supersonic_drag_coeff_factor,1.0,unitless -aircraft:design:use_alt_mass,False,unitless -#aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless -#aircraft:electrical:mass_scaler,1.0,unitless - -aircraft:engine:data_file,models/engines/CF6.deck,unitless - -aircraft:engine:additional_mass_fraction,0.,unitless -aircraft:engine:constant_fuel_consumption,0.,lbm/h - -aircraft:engine:flight_idle_thrust_fraction,0.0,unitless -aircraft:engine:flight_idle_max_fraction,1.0,unitless -aircraft:engine:flight_idle_min_fraction,0.08,unitless -#aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless -#aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless -aircraft:engine:generate_flight_idle,False,unitless -aircraft:engine:geopotential_alt,False,unitless -aircraft:engine:ignore_negative_thrust,False,unitless -aircraft:engine:interpolation_method,slinear,unitless -aircraft:engine:mass_scaler,1.0,unitless -aircraft:engine:mass,8176,lbm -aircraft:engine:reference_mass,8176,lbm -aircraft:engine:reference_sls_thrust,51250.,lbf -aircraft:engine:scale_mass,True,unitless -aircraft:engine:scale_performance,True,unitless -aircraft:engine:scaled_sls_thrust,51250,lbf -#aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless -#aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless -#aircraft:engine:thrust_reversers_mass_scaler,1.0,unitless -aircraft:engine:num_fuselage_engines,0,unitless -aircraft:engine:num_engines,4,unitless -aircraft:engine:num_wing_engines,4,unitless -aircraft:engine:wing_locations,[0.3561541339,0.555929667],unitless -#aircraft:fins:area,0.0,ft**2 -#aircraft:fins:mass_scaler,1.0,unitless -#aircraft:fins:mass,0.0,lbm -#aircraft:fins:num_fins,0,unitless -#aircraft:fins:taper_ratio,10.0,unitless -aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm -#aircraft:fuel:density_ratio,1.0,unitless -#aircraft:fuel:fuel_system_mass_scaler,1.0,unitless -aircraft:fuel:fuselage_fuel_capacity,0.0,lbm -aircraft:fuel:num_tanks,12,unitless -aircraft:fuel:total_capacity,341446,lbm -#aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless -#aircraft:furnishings:mass_scaler,1.0,unitless -aircraft:fuselage:length,230.58,ft -#aircraft:fuselage:mass_scaler,1.0,unitless -aircraft:fuselage:max_height,26.83,ft -aircraft:fuselage:max_width,23.9,ft -aircraft:fuselage:military_cargo_floor,True,unitless -aircraft:fuselage:num_fuselages,1,unitless -aircraft:fuselage:passenger_compartment_length,143.75,ft -aircraft:fuselage:planform_area,4462.78,ft**2 -#aircraft:fuselage:wetted_area_scaler,1.0,unitless -aircraft:horizontal_tail:area,965.8,ft**2 -aircraft:horizontal_tail:aspect_ratio,4.2,unitless -#aircraft:horizontal_tail:mass_scaler,1.0,unitless -aircraft:horizontal_tail:taper_ratio,0.43,unitless -aircraft:horizontal_tail:thickness_to_chord,0.16,unitless -aircraft:horizontal_tail:vertical_tail_fraction,1.0,unitless -#aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless -#aircraft:hydraulics:mass_scaler,1.0,unitless -#aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 -#aircraft:instruments:mass_scaler,1.0,unitless -#aircraft:landing_gear:carrier_based,False,unitless -#aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless -#aircraft:landing_gear:main_gear_oleo_length,45,inch -#aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless -#aircraft:landing_gear:nose_gear_oleo_length,45,inch -aircraft:nacelle:avg_diameter,9.15,ft -aircraft:nacelle:avg_length,20.56,ft -#aircraft:nacelle:mass_scaler,1.0,unitless -#aircraft:nacelle:wetted_area_scaler,1.0,unitless -#aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 -#aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless -#aircraft:propulsion:misc_mass_scaler,1.0,unitless -aircraft:vertical_tail:area,537.9,ft**2 -aircraft:vertical_tail:aspect_ratio,0.958,unitless -#aircraft:vertical_tail:mass_scaler,1.0,unitless -aircraft:vertical_tail:num_tails,1,unitless -aircraft:vertical_tail:taper_ratio,0.846,unitless -aircraft:vertical_tail:thickness_to_chord,0.157,unitless -#aircraft:vertical_tail:wetted_area_scaler,1.0,unitless -aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless -aircraft:wing:airfoil_technology,1.0,unitless -aircraft:wing:area,6200,ft**2 -aircraft:wing:aspect_ratio,7.75,unitless -#aircraft:wing:bending_mass_scaler,1.0,unitless -#aircraft:wing:composite_fraction,0.1,unitless -aircraft:wing:control_surface_area,2323.7,ft**2 -aircraft:wing:control_surface_area_ratio,0.37479,unitless -aircraft:wing:load_distribution_control,2.0,unitless -aircraft:wing:load_fraction,1.0,unitless -#aircraft:wing:mass_scaler,1.0,unitless -aircraft:wing:max_camber_at_70_semispan,0.0,unitless -#aircraft:wing:misc_mass_scaler,1.0,unitless -#aircraft:wing:shear_control_mass_scaler,1.0,unitless -aircraft:wing:span_efficiency_reduction,False,unitless -aircraft:wing:span,222.75,ft -#aircraft:wing:strut_bracing_factor,0.0,unitless -#aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless -aircraft:wing:sweep,20.0,deg -aircraft:wing:taper_ratio,0.419,unitless -aircraft:wing:thickness_to_chord,0.1284,unitless -aircraft:wing:ultimate_load_factor,3.75,unitless -aircraft:wing:var_sweep_mass_penalty,0.0,unitless -#aircraft:wing:wetted_area_scaler,1.0,unitless -aircraft:wing:num_integration_stations,50,unitless -aircraft:wing:thickness_to_chord_dist,0.1239,0.108,0.013,unitless -aircraft:wing:load_path_sweep_dist,0.0,0.0,deg -aircraft:wing:input_station_dist,0.0,0.3298,0.884,unitless -aircraft:wing:chord_per_semispan,0.362,0.2667,0.0456,unitless -aircraft:wing:glove_and_bat,0.0,ft**2 -aircraft:wing:detailed_wing,False,unitless - - -mission:constraints:max_mach,0.77,unitless -mission:design:cruise_altitude,34000,ft -mission:design:gross_mass,840000,lbm -mission:design:range,7000,NM -mission:design:thrust_takeoff_per_eng,51250,lbf -mission:landing:lift_coefficient_max,3.0,unitless -mission:design:mach,0.77,unitless -#mission:summary:fuel_flow_scaler,1.0,unitless -mission:takeoff:fuel_simple,6.32,lbm -mission:takeoff:lift_coefficient_max,3.62,unitless -mission:takeoff:lift_over_drag,19.5,unitless -settings:equations_of_motion,height_energy -settings:mass_method,FLOPS - - -### missions definition -# mission_name: payload -# times: 0, 50, 280, 300 -# altitudes: 0, 30000, 30000, 0 -# machs: 0.30, 0.77, 0.77, 0.30 -# optimize_altitudes: F,F,F -# optimize_machs: F,F,F -# takeoff: F -# landing: F diff --git a/c5_models/c5_ferry.csv b/c5_models/c5_ferry.csv deleted file mode 100644 index 6540463d5..000000000 --- a/c5_models/c5_ferry.csv +++ /dev/null @@ -1,167 +0,0 @@ -# author: Chris Psenica -#aircraft:air_conditioning:mass_scaler,1.0,unitless -#aircraft:anti_icing:mass_scaler,1.0,unitless -#aircraft:apu:mass_scaler,1.0,unitless -#aircraft:avionics:mass_scaler,1.0,unitless -#aircraft:canard:area,0.0,ft**2 -#aircraft:canard:aspect_ratio,0.0,unitless -#aircraft:canard:thickness_to_chord,0.0,unitless -aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm -#aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless -#aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:mass_per_passenger,180.0,lbm - -aircraft:crew_and_payload:cargo_mass,0,lbm -#aircraft:crew_and_payload:num_passengers,82,unitless - -#aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:num_flight_crew,7,unitless -#aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless -#aircraft:crew_and_payload:wing_cargo,0.0,lbm -#aircraft:design:base_area,0.0,ft**2 -#aircraft:design:empty_mass_margin_scaler,1.0,unitless -#aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless -#aircraft:design:touchdown_mass,498554,lbm -aircraft:design:reserve_fuel_additional,0,lbm -#aircraft:design:subsonic_drag_coeff_factor,1.0,unitless -#aircraft:design:supersonic_drag_coeff_factor,1.0,unitless -aircraft:design:use_alt_mass,False,unitless -#aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless -#aircraft:electrical:mass_scaler,1.0,unitless - -aircraft:engine:data_file,models/engines/CF6.deck,unitless - -aircraft:engine:additional_mass_fraction,0.,unitless -aircraft:engine:constant_fuel_consumption,0.,lbm/h - -aircraft:engine:flight_idle_thrust_fraction,0.0,unitless -aircraft:engine:flight_idle_max_fraction,1.0,unitless -aircraft:engine:flight_idle_min_fraction,0.08,unitless -#aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless -#aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless -aircraft:engine:generate_flight_idle,False,unitless -aircraft:engine:geopotential_alt,False,unitless -aircraft:engine:ignore_negative_thrust,False,unitless -aircraft:engine:interpolation_method,slinear,unitless -aircraft:engine:mass_scaler,1.0,unitless -aircraft:engine:mass,8176,lbm -aircraft:engine:reference_mass,8176,lbm -aircraft:engine:reference_sls_thrust,51250.,lbf -aircraft:engine:scale_mass,True,unitless -aircraft:engine:scale_performance,True,unitless -aircraft:engine:scaled_sls_thrust,51250,lbf -#aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless -#aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless -#aircraft:engine:thrust_reversers_mass_scaler,1.0,unitless -aircraft:engine:num_fuselage_engines,0,unitless -aircraft:engine:num_engines,4,unitless -aircraft:engine:num_wing_engines,4,unitless -aircraft:engine:wing_locations,[0.3561541339,0.555929667],unitless -#aircraft:fins:area,0.0,ft**2 -#aircraft:fins:mass_scaler,1.0,unitless -#aircraft:fins:mass,0.0,lbm -#aircraft:fins:num_fins,0,unitless -#aircraft:fins:taper_ratio,10.0,unitless -aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm -#aircraft:fuel:density_ratio,1.0,unitless -#aircraft:fuel:fuel_system_mass_scaler,1.0,unitless -aircraft:fuel:fuselage_fuel_capacity,0.0,lbm -aircraft:fuel:num_tanks,12,unitless -aircraft:fuel:total_capacity,341446,lbm -#aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless -#aircraft:furnishings:mass_scaler,1.0,unitless -aircraft:fuselage:length,230.58,ft -#aircraft:fuselage:mass_scaler,1.0,unitless -aircraft:fuselage:max_height,26.83,ft -aircraft:fuselage:max_width,23.9,ft -aircraft:fuselage:military_cargo_floor,True,unitless -aircraft:fuselage:num_fuselages,1,unitless -aircraft:fuselage:passenger_compartment_length,143.75,ft -aircraft:fuselage:planform_area,4462.78,ft**2 -#aircraft:fuselage:wetted_area_scaler,1.0,unitless -aircraft:horizontal_tail:area,965.8,ft**2 -aircraft:horizontal_tail:aspect_ratio,4.2,unitless -#aircraft:horizontal_tail:mass_scaler,1.0,unitless -aircraft:horizontal_tail:taper_ratio,0.43,unitless -aircraft:horizontal_tail:thickness_to_chord,0.16,unitless -aircraft:horizontal_tail:vertical_tail_fraction,1.0,unitless -#aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless -#aircraft:hydraulics:mass_scaler,1.0,unitless -#aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 -#aircraft:instruments:mass_scaler,1.0,unitless -#aircraft:landing_gear:carrier_based,False,unitless -#aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless -#aircraft:landing_gear:main_gear_oleo_length,45,inch -#aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless -#aircraft:landing_gear:nose_gear_oleo_length,45,inch -aircraft:nacelle:avg_diameter,9.15,ft -aircraft:nacelle:avg_length,20.56,ft -#aircraft:nacelle:mass_scaler,1.0,unitless -#aircraft:nacelle:wetted_area_scaler,1.0,unitless -#aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 -#aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless -#aircraft:propulsion:misc_mass_scaler,1.0,unitless -aircraft:vertical_tail:area,537.9,ft**2 -aircraft:vertical_tail:aspect_ratio,0.958,unitless -#aircraft:vertical_tail:mass_scaler,1.0,unitless -aircraft:vertical_tail:num_tails,1,unitless -aircraft:vertical_tail:taper_ratio,0.846,unitless -aircraft:vertical_tail:thickness_to_chord,0.157,unitless -#aircraft:vertical_tail:wetted_area_scaler,1.0,unitless -aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless -aircraft:wing:airfoil_technology,1.0,unitless -aircraft:wing:area,6200,ft**2 -aircraft:wing:aspect_ratio,7.75,unitless -#aircraft:wing:bending_mass_scaler,1.0,unitless -#aircraft:wing:composite_fraction,0.1,unitless -aircraft:wing:control_surface_area,2323.7,ft**2 -aircraft:wing:control_surface_area_ratio,0.37479,unitless -aircraft:wing:load_distribution_control,2.0,unitless -aircraft:wing:load_fraction,1.0,unitless -#aircraft:wing:mass_scaler,1.0,unitless -aircraft:wing:max_camber_at_70_semispan,0.0,unitless -#aircraft:wing:misc_mass_scaler,1.0,unitless -#aircraft:wing:shear_control_mass_scaler,1.0,unitless -aircraft:wing:span_efficiency_reduction,False,unitless -aircraft:wing:span,222.75,ft -#aircraft:wing:strut_bracing_factor,0.0,unitless -#aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless -aircraft:wing:sweep,20.0,deg -aircraft:wing:taper_ratio,0.419,unitless -aircraft:wing:thickness_to_chord,0.1284,unitless -aircraft:wing:ultimate_load_factor,3.75,unitless -aircraft:wing:var_sweep_mass_penalty,0.0,unitless -#aircraft:wing:wetted_area_scaler,1.0,unitless -aircraft:wing:num_integration_stations,50,unitless -aircraft:wing:thickness_to_chord_dist,0.1239,0.108,0.013,unitless -aircraft:wing:load_path_sweep_dist,0.0,0.0,deg -aircraft:wing:input_station_dist,0.0,0.3298,0.884,unitless -aircraft:wing:chord_per_semispan,0.362,0.2667,0.0456,unitless -aircraft:wing:glove_and_bat,0.0,ft**2 -aircraft:wing:detailed_wing,False,unitless - - -mission:constraints:max_mach,0.77,unitless -mission:design:cruise_altitude,34000,ft -mission:design:gross_mass,840000,lbm -mission:design:range,7000.0,NM -mission:design:thrust_takeoff_per_eng,51250,lbf -mission:landing:lift_coefficient_max,3.0,unitless -mission:design:mach,0.77,unitless -#mission:summary:fuel_flow_scaler,1.0,unitless -mission:takeoff:fuel_simple,6.32,lbm -mission:takeoff:lift_coefficient_max,3.62,unitless -mission:takeoff:lift_over_drag,19.5,unitless -settings:equations_of_motion,height_energy -settings:mass_method,FLOPS - - -### missions definition -# mission_name: payload -# times: 0, 50, 280, 300 -# altitudes: 0, 30000, 30000, 0 -# machs: 0.30, 0.77, 0.77, 0.30 -# optimize_altitudes: F,F,F -# optimize_machs: F,F,F -# takeoff: F -# landing: F diff --git a/c5_models/c5_ferry_phase_info.py b/c5_models/c5_ferry_phase_info.py deleted file mode 100644 index 6a472ed2f..000000000 --- a/c5_models/c5_ferry_phase_info.py +++ /dev/null @@ -1,83 +0,0 @@ -phase_info = { - "pre_mission": {"include_takeoff": False, "optimize_mass": True}, - "climb_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.3, "unitless"), - "final_mach": (0.77, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), - "initial_altitude": (0.0, "ft"), - "final_altitude": (29500.0, "ft"), - "altitude_bounds": ((0.0, 30000.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": True, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((0.0, 0.0), "min"), - "duration_bounds": ((25.0, 75.0), "min"), - }, - "initial_guesses": {"time": ([0.0, 50.0], "min")}, - }, - "climb_2": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.77, "unitless"), - "final_mach": (0.77, "unitless"), - "mach_bounds": ((0.75, 0.79), "unitless"), - "initial_altitude": (29500.0, "ft"), - "final_altitude": (32000.0, "ft"), - "altitude_bounds": ((29000.0, 32500.0), "ft"), - "throttle_enforcement": "boundary_constraint", - "fix_initial": False, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((25.0, 75.0), "min"), - "duration_bounds": ((381.0, 1143.0), "min"), - }, - "initial_guesses": {"time": ([50.0, 762.0], "min")}, - }, - "descent_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.77, "unitless"), - "final_mach": (0.3, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), - "initial_altitude": (32000.0, "ft"), - "final_altitude": (0.0, "ft"), - "altitude_bounds": ((0.0, 32500.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": False, - "constrain_final": True, - "fix_duration": False, - "initial_bounds": ((406.0, 1218.0), "min"), - "duration_bounds": ((15.5, 46.5), "min"), - }, - "initial_guesses": {"time": ([812.0, 31.0], "min")}, - }, - "post_mission": { - "include_landing": False, - "constrain_range": True, - "target_range": (7001.59, "nmi"), - }, -} diff --git a/c5_models/c5_intermediate.csv b/c5_models/c5_intermediate.csv deleted file mode 100644 index bb4565239..000000000 --- a/c5_models/c5_intermediate.csv +++ /dev/null @@ -1,167 +0,0 @@ -# author: Chris Psenica -#aircraft:air_conditioning:mass_scaler,1.0,unitless -#aircraft:anti_icing:mass_scaler,1.0,unitless -#aircraft:apu:mass_scaler,1.0,unitless -#aircraft:avionics:mass_scaler,1.0,unitless -#aircraft:canard:area,0.0,ft**2 -#aircraft:canard:aspect_ratio,0.0,unitless -#aircraft:canard:thickness_to_chord,0.0,unitless -aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm -#aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless -#aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:mass_per_passenger,180.0,lbm - -aircraft:crew_and_payload:cargo_mass,120000.0,lbm -#aircraft:crew_and_payload:num_passengers,82,unitless - -#aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:num_flight_crew,7,unitless -#aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless -#aircraft:crew_and_payload:wing_cargo,0.0,lbm -#aircraft:design:base_area,0.0,ft**2 -#aircraft:design:empty_mass_margin_scaler,1.0,unitless -#aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless -#aircraft:design:touchdown_mass,498554,lbm -aircraft:design:reserve_fuel_additional,0,lbm -#aircraft:design:subsonic_drag_coeff_factor,1.0,unitless -#aircraft:design:supersonic_drag_coeff_factor,1.0,unitless -aircraft:design:use_alt_mass,False,unitless -#aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless -#aircraft:electrical:mass_scaler,1.0,unitless - -aircraft:engine:data_file,models/engines/CF6.deck,unitless - -aircraft:engine:additional_mass_fraction,0.,unitless -aircraft:engine:constant_fuel_consumption,0.,lbm/h - -aircraft:engine:flight_idle_thrust_fraction,0.0,unitless -aircraft:engine:flight_idle_max_fraction,1.0,unitless -aircraft:engine:flight_idle_min_fraction,0.08,unitless -#aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless -#aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless -aircraft:engine:generate_flight_idle,False,unitless -aircraft:engine:geopotential_alt,False,unitless -aircraft:engine:ignore_negative_thrust,False,unitless -aircraft:engine:interpolation_method,slinear,unitless -aircraft:engine:mass_scaler,1.0,unitless -aircraft:engine:mass,8176,lbm -aircraft:engine:reference_mass,8176,lbm -aircraft:engine:reference_sls_thrust,51250.,lbf -aircraft:engine:scale_mass,True,unitless -aircraft:engine:scale_performance,True,unitless -aircraft:engine:scaled_sls_thrust,51250,lbf -#aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless -#aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless -#aircraft:engine:thrust_reversers_mass_scaler,1.0,unitless -aircraft:engine:num_fuselage_engines,0,unitless -aircraft:engine:num_engines,4,unitless -aircraft:engine:num_wing_engines,4,unitless -aircraft:engine:wing_locations,[0.3561541339,0.555929667],unitless -#aircraft:fins:area,0.0,ft**2 -#aircraft:fins:mass_scaler,1.0,unitless -#aircraft:fins:mass,0.0,lbm -#aircraft:fins:num_fins,0,unitless -#aircraft:fins:taper_ratio,10.0,unitless -aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm -#aircraft:fuel:density_ratio,1.0,unitless -#aircraft:fuel:fuel_system_mass_scaler,1.0,unitless -aircraft:fuel:fuselage_fuel_capacity,0.0,lbm -aircraft:fuel:num_tanks,12,unitless -aircraft:fuel:total_capacity,341446,lbm -#aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless -#aircraft:furnishings:mass_scaler,1.0,unitless -aircraft:fuselage:length,230.58,ft -#aircraft:fuselage:mass_scaler,1.0,unitless -aircraft:fuselage:max_height,26.83,ft -aircraft:fuselage:max_width,23.9,ft -aircraft:fuselage:military_cargo_floor,True,unitless -aircraft:fuselage:num_fuselages,1,unitless -aircraft:fuselage:passenger_compartment_length,143.75,ft -aircraft:fuselage:planform_area,4462.78,ft**2 -#aircraft:fuselage:wetted_area_scaler,1.0,unitless -aircraft:horizontal_tail:area,965.8,ft**2 -aircraft:horizontal_tail:aspect_ratio,4.2,unitless -#aircraft:horizontal_tail:mass_scaler,1.0,unitless -aircraft:horizontal_tail:taper_ratio,0.43,unitless -aircraft:horizontal_tail:thickness_to_chord,0.16,unitless -aircraft:horizontal_tail:vertical_tail_fraction,1.0,unitless -#aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless -#aircraft:hydraulics:mass_scaler,1.0,unitless -#aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 -#aircraft:instruments:mass_scaler,1.0,unitless -#aircraft:landing_gear:carrier_based,False,unitless -#aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless -#aircraft:landing_gear:main_gear_oleo_length,45,inch -#aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless -#aircraft:landing_gear:nose_gear_oleo_length,45,inch -aircraft:nacelle:avg_diameter,9.15,ft -aircraft:nacelle:avg_length,20.56,ft -#aircraft:nacelle:mass_scaler,1.0,unitless -#aircraft:nacelle:wetted_area_scaler,1.0,unitless -#aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 -#aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless -#aircraft:propulsion:misc_mass_scaler,1.0,unitless -aircraft:vertical_tail:area,537.9,ft**2 -aircraft:vertical_tail:aspect_ratio,0.958,unitless -#aircraft:vertical_tail:mass_scaler,1.0,unitless -aircraft:vertical_tail:num_tails,1,unitless -aircraft:vertical_tail:taper_ratio,0.846,unitless -aircraft:vertical_tail:thickness_to_chord,0.157,unitless -#aircraft:vertical_tail:wetted_area_scaler,1.0,unitless -aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless -aircraft:wing:airfoil_technology,1.0,unitless -aircraft:wing:area,6200,ft**2 -aircraft:wing:aspect_ratio,7.75,unitless -#aircraft:wing:bending_mass_scaler,1.0,unitless -#aircraft:wing:composite_fraction,0.1,unitless -aircraft:wing:control_surface_area,2323.7,ft**2 -aircraft:wing:control_surface_area_ratio,0.37479,unitless -aircraft:wing:load_distribution_control,2.0,unitless -aircraft:wing:load_fraction,1.0,unitless -#aircraft:wing:mass_scaler,1.0,unitless -aircraft:wing:max_camber_at_70_semispan,0.0,unitless -#aircraft:wing:misc_mass_scaler,1.0,unitless -#aircraft:wing:shear_control_mass_scaler,1.0,unitless -aircraft:wing:span_efficiency_reduction,False,unitless -aircraft:wing:span,222.75,ft -#aircraft:wing:strut_bracing_factor,0.0,unitless -#aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless -aircraft:wing:sweep,20.0,deg -aircraft:wing:taper_ratio,0.419,unitless -aircraft:wing:thickness_to_chord,0.1284,unitless -aircraft:wing:ultimate_load_factor,3.75,unitless -aircraft:wing:var_sweep_mass_penalty,0.0,unitless -#aircraft:wing:wetted_area_scaler,1.0,unitless -aircraft:wing:num_integration_stations,50,unitless -aircraft:wing:thickness_to_chord_dist,0.1239,0.108,0.013,unitless -aircraft:wing:load_path_sweep_dist,0.0,0.0,deg -aircraft:wing:input_station_dist,0.0,0.3298,0.884,unitless -aircraft:wing:chord_per_semispan,0.362,0.2667,0.0456,unitless -aircraft:wing:glove_and_bat,0.0,ft**2 -aircraft:wing:detailed_wing,False,unitless - - -mission:constraints:max_mach,0.77,unitless -mission:design:cruise_altitude,34000,ft -mission:design:gross_mass,840000,lbm -mission:design:range,4800.0,NM -mission:design:thrust_takeoff_per_eng,51250,lbf -mission:landing:lift_coefficient_max,3.0,unitless -mission:design:mach,0.77,unitless -#mission:summary:fuel_flow_scaler,1.0,unitless -mission:takeoff:fuel_simple,6.32,lbm -mission:takeoff:lift_coefficient_max,3.62,unitless -mission:takeoff:lift_over_drag,19.5,unitless -settings:equations_of_motion,height_energy -settings:mass_method,FLOPS - - -### missions definition -# mission_name: payload -# times: 0, 50, 280, 300 -# altitudes: 0, 30000, 30000, 0 -# machs: 0.30, 0.77, 0.77, 0.30 -# optimize_altitudes: F,F,F -# optimize_machs: F,F,F -# takeoff: F -# landing: F diff --git a/c5_models/c5_intermediate_phase_info.py b/c5_models/c5_intermediate_phase_info.py deleted file mode 100644 index a8b462673..000000000 --- a/c5_models/c5_intermediate_phase_info.py +++ /dev/null @@ -1,83 +0,0 @@ -phase_info = { - "pre_mission": {"include_takeoff": False, "optimize_mass": True}, - "climb_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.3, "unitless"), - "final_mach": (0.77, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), - "initial_altitude": (0.0, "ft"), - "final_altitude": (29500.0, "ft"), - "altitude_bounds": ((0.0, 30000.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": True, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((0.0, 0.0), "min"), - "duration_bounds": ((25.0, 75.0), "min"), - }, - "initial_guesses": {"time": ([0.0, 50.0], "min")}, - }, - "climb_2": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.77, "unitless"), - "final_mach": (0.77, "unitless"), - "mach_bounds": ((0.75, 0.79), "unitless"), - "initial_altitude": (29500.0, "ft"), - "final_altitude": (32000.0, "ft"), - "altitude_bounds": ((29000.0, 32500.0), "ft"), - "throttle_enforcement": "boundary_constraint", - "fix_initial": False, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((25.0, 75.0), "min"), - "duration_bounds": ((255.0, 765.0), "min"), - }, - "initial_guesses": {"time": ([50.0, 510.0], "min")}, - }, - "descent_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.77, "unitless"), - "final_mach": (0.3, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), - "initial_altitude": (32000.0, "ft"), - "final_altitude": (0.0, "ft"), - "altitude_bounds": ((0.0, 32500.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": False, - "constrain_final": True, - "fix_duration": False, - "initial_bounds": ((280.0, 840.0), "min"), - "duration_bounds": ((15.0, 45.0), "min"), - }, - "initial_guesses": {"time": ([560.0, 30.0], "min")}, - }, - "post_mission": { - "include_landing": False, - "constrain_range": True, - "target_range": (4839.41, "nmi"), - }, -} diff --git a/c5_models/c5_maxpayload.csv b/c5_models/c5_maxpayload.csv deleted file mode 100644 index 07a6fb381..000000000 --- a/c5_models/c5_maxpayload.csv +++ /dev/null @@ -1,167 +0,0 @@ -# author: Chris Psenica -#aircraft:air_conditioning:mass_scaler,1.0,unitless -#aircraft:anti_icing:mass_scaler,1.0,unitless -#aircraft:apu:mass_scaler,1.0,unitless -#aircraft:avionics:mass_scaler,1.0,unitless -#aircraft:canard:area,0.0,ft**2 -#aircraft:canard:aspect_ratio,0.0,unitless -#aircraft:canard:thickness_to_chord,0.0,unitless -aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm -#aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless -#aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:mass_per_passenger,180.0,lbm - -aircraft:crew_and_payload:cargo_mass,281000.0,lbm -#aircraft:crew_and_payload:num_passengers,82,unitless - -#aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:num_flight_crew,7,unitless -#aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless -#aircraft:crew_and_payload:wing_cargo,0.0,lbm -#aircraft:design:base_area,0.0,ft**2 -#aircraft:design:empty_mass_margin_scaler,1.0,unitless -#aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless -#aircraft:design:touchdown_mass,498554,lbm -aircraft:design:reserve_fuel_additional,0,lbm -#aircraft:design:subsonic_drag_coeff_factor,1.0,unitless -#aircraft:design:supersonic_drag_coeff_factor,1.0,unitless -aircraft:design:use_alt_mass,False,unitless -#aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless -#aircraft:electrical:mass_scaler,1.0,unitless - -aircraft:engine:data_file,models/engines/CF6.deck,unitless - -aircraft:engine:additional_mass_fraction,0.,unitless -aircraft:engine:constant_fuel_consumption,0.,lbm/h - -aircraft:engine:flight_idle_thrust_fraction,0.0,unitless -aircraft:engine:flight_idle_max_fraction,1.0,unitless -aircraft:engine:flight_idle_min_fraction,0.08,unitless -#aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless -#aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless -aircraft:engine:generate_flight_idle,False,unitless -aircraft:engine:geopotential_alt,False,unitless -aircraft:engine:ignore_negative_thrust,False,unitless -aircraft:engine:interpolation_method,slinear,unitless -aircraft:engine:mass_scaler,1.0,unitless -aircraft:engine:mass,8176,lbm -aircraft:engine:reference_mass,8176,lbm -aircraft:engine:reference_sls_thrust,51250.,lbf -aircraft:engine:scale_mass,True,unitless -aircraft:engine:scale_performance,True,unitless -aircraft:engine:scaled_sls_thrust,51250,lbf -#aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless -#aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless -#aircraft:engine:thrust_reversers_mass_scaler,1.0,unitless -aircraft:engine:num_fuselage_engines,0,unitless -aircraft:engine:num_engines,4,unitless -aircraft:engine:num_wing_engines,4,unitless -aircraft:engine:wing_locations,[0.3561541339,0.555929667],unitless -#aircraft:fins:area,0.0,ft**2 -#aircraft:fins:mass_scaler,1.0,unitless -#aircraft:fins:mass,0.0,lbm -#aircraft:fins:num_fins,0,unitless -#aircraft:fins:taper_ratio,10.0,unitless -aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm -#aircraft:fuel:density_ratio,1.0,unitless -#aircraft:fuel:fuel_system_mass_scaler,1.0,unitless -aircraft:fuel:fuselage_fuel_capacity,0.0,lbm -aircraft:fuel:num_tanks,12,unitless -aircraft:fuel:total_capacity,341446,lbm -#aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless -#aircraft:furnishings:mass_scaler,1.0,unitless -aircraft:fuselage:length,230.58,ft -#aircraft:fuselage:mass_scaler,1.0,unitless -aircraft:fuselage:max_height,26.83,ft -aircraft:fuselage:max_width,23.9,ft -aircraft:fuselage:military_cargo_floor,True,unitless -aircraft:fuselage:num_fuselages,1,unitless -aircraft:fuselage:passenger_compartment_length,143.75,ft -aircraft:fuselage:planform_area,4462.78,ft**2 -#aircraft:fuselage:wetted_area_scaler,1.0,unitless -aircraft:horizontal_tail:area,965.8,ft**2 -aircraft:horizontal_tail:aspect_ratio,4.2,unitless -#aircraft:horizontal_tail:mass_scaler,1.0,unitless -aircraft:horizontal_tail:taper_ratio,0.43,unitless -aircraft:horizontal_tail:thickness_to_chord,0.16,unitless -aircraft:horizontal_tail:vertical_tail_fraction,1.0,unitless -#aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless -#aircraft:hydraulics:mass_scaler,1.0,unitless -#aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 -#aircraft:instruments:mass_scaler,1.0,unitless -#aircraft:landing_gear:carrier_based,False,unitless -#aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless -#aircraft:landing_gear:main_gear_oleo_length,45,inch -#aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless -#aircraft:landing_gear:nose_gear_oleo_length,45,inch -aircraft:nacelle:avg_diameter,9.15,ft -aircraft:nacelle:avg_length,20.56,ft -#aircraft:nacelle:mass_scaler,1.0,unitless -#aircraft:nacelle:wetted_area_scaler,1.0,unitless -#aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 -#aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless -#aircraft:propulsion:misc_mass_scaler,1.0,unitless -aircraft:vertical_tail:area,537.9,ft**2 -aircraft:vertical_tail:aspect_ratio,0.958,unitless -#aircraft:vertical_tail:mass_scaler,1.0,unitless -aircraft:vertical_tail:num_tails,1,unitless -aircraft:vertical_tail:taper_ratio,0.846,unitless -aircraft:vertical_tail:thickness_to_chord,0.157,unitless -#aircraft:vertical_tail:wetted_area_scaler,1.0,unitless -aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless -aircraft:wing:airfoil_technology,1.0,unitless -aircraft:wing:area,6200,ft**2 -aircraft:wing:aspect_ratio,7.75,unitless -#aircraft:wing:bending_mass_scaler,1.0,unitless -#aircraft:wing:composite_fraction,0.1,unitless -aircraft:wing:control_surface_area,2323.7,ft**2 -aircraft:wing:control_surface_area_ratio,0.37479,unitless -aircraft:wing:load_distribution_control,2.0,unitless -aircraft:wing:load_fraction,1.0,unitless -#aircraft:wing:mass_scaler,1.0,unitless -aircraft:wing:max_camber_at_70_semispan,0.0,unitless -#aircraft:wing:misc_mass_scaler,1.0,unitless -#aircraft:wing:shear_control_mass_scaler,1.0,unitless -aircraft:wing:span_efficiency_reduction,False,unitless -aircraft:wing:span,222.75,ft -#aircraft:wing:strut_bracing_factor,0.0,unitless -#aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless -aircraft:wing:sweep,20.0,deg -aircraft:wing:taper_ratio,0.419,unitless -aircraft:wing:thickness_to_chord,0.1284,unitless -aircraft:wing:ultimate_load_factor,3.75,unitless -aircraft:wing:var_sweep_mass_penalty,0.0,unitless -#aircraft:wing:wetted_area_scaler,1.0,unitless -aircraft:wing:num_integration_stations,50,unitless -aircraft:wing:thickness_to_chord_dist,0.1239,0.108,0.013,unitless -aircraft:wing:load_path_sweep_dist,0.0,0.0,deg -aircraft:wing:input_station_dist,0.0,0.3298,0.884,unitless -aircraft:wing:chord_per_semispan,0.362,0.2667,0.0456,unitless -aircraft:wing:glove_and_bat,0.0,ft**2 -aircraft:wing:detailed_wing,False,unitless - - -mission:constraints:max_mach,0.77,unitless -mission:design:cruise_altitude,34000,ft -mission:design:gross_mass,840000,lbm -mission:design:range,2150.0,NM -mission:design:thrust_takeoff_per_eng,51250,lbf -mission:landing:lift_coefficient_max,3.0,unitless -mission:design:mach,0.77,unitless -#mission:summary:fuel_flow_scaler,1.0,unitless -mission:takeoff:fuel_simple,6.32,lbm -mission:takeoff:lift_coefficient_max,3.62,unitless -mission:takeoff:lift_over_drag,19.5,unitless -settings:equations_of_motion,height_energy -settings:mass_method,FLOPS - - -### missions definition -# mission_name: payload -# times: 0, 50, 280, 300 -# altitudes: 0, 30000, 30000, 0 -# machs: 0.30, 0.77, 0.77, 0.30 -# optimize_altitudes: F,F,F -# optimize_machs: F,F,F -# takeoff: F -# landing: F diff --git a/c5_models/c5_maxpayload_phase_info.py b/c5_models/c5_maxpayload_phase_info.py deleted file mode 100644 index a52acec96..000000000 --- a/c5_models/c5_maxpayload_phase_info.py +++ /dev/null @@ -1,83 +0,0 @@ -phase_info = { - "pre_mission": {"include_takeoff": False, "optimize_mass": True}, - "climb_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.3, "unitless"), - "final_mach": (0.77, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), - "initial_altitude": (0.0, "ft"), - "final_altitude": (29500.0, "ft"), - "altitude_bounds": ((0.0, 30000.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": True, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((0.0, 0.0), "min"), - "duration_bounds": ((25.0, 75.0), "min"), - }, - "initial_guesses": {"time": ([0.0, 50.0], "min")}, - }, - "climb_2": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.77, "unitless"), - "final_mach": (0.77, "unitless"), - "mach_bounds": ((0.75, 0.79), "unitless"), - "initial_altitude": (29500.0, "ft"), - "final_altitude": (32000.0, "ft"), - "altitude_bounds": ((29000.0, 32500.0), "ft"), - "throttle_enforcement": "boundary_constraint", - "fix_initial": False, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((25.0, 75.0), "min"), - "duration_bounds": ((105.0, 315.0), "min"), - }, - "initial_guesses": {"time": ([50.0, 210.0], "min")}, - }, - "descent_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.77, "unitless"), - "final_mach": (0.3, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), - "initial_altitude": (32000.0, "ft"), - "final_altitude": (0.0, "ft"), - "altitude_bounds": ((0.0, 32500.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": False, - "constrain_final": True, - "fix_duration": False, - "initial_bounds": ((130.0, 390.0), "min"), - "duration_bounds": ((15.0, 45.0), "min"), - }, - "initial_guesses": {"time": ([260.0, 30.0], "min")}, - }, - "post_mission": { - "include_landing": False, - "constrain_range": True, - "target_range": (2272.47, "nmi"), - }, -} diff --git a/c5_runfile_single_aviary.py b/c5_runfile_single_aviary.py deleted file mode 100644 index e130dc092..000000000 --- a/c5_runfile_single_aviary.py +++ /dev/null @@ -1,49 +0,0 @@ -import aviary.api as av -# from easy_phase_info_max import phase_info as max_phase_info -# from easy_phase_info_inter import phase_info as inter_phase_info -from c5_models.c5_maxpayload_phase_info import phase_info as max_phase_info -from c5_models.c5_intermediate_phase_info import phase_info as inter_phase_info -from aviary.variable_info.variables import Mission, Aircraft - - -outputs = {Mission.Summary.FUEL_BURNED: [], - Aircraft.Design.EMPTY_MASS: []} -for plane, phase_info in zip( - ['c5_maxpayload', 'c5_intermediate'], - [max_phase_info, inter_phase_info]): - - prob = av.AviaryProblem() - prob.load_inputs(f"c5_models/{plane}.csv", phase_info) - prob.check_and_preprocess_inputs() - prob.add_pre_mission_systems() - prob.add_phases() - prob.add_post_mission_systems() - prob.link_phases() - prob.add_driver('SLSQP') - prob.add_design_variables() - - # Load optimization problem formulation - # Detail which variables the optimizer can control - prob.add_objective() - - prob.setup() - - prob.set_initial_guesses() - # prob.final_setup() - prob.run_aviary_problem() - - for key in outputs.keys(): - outputs[key].append(prob.get_val(key)[0]) - -print("\n\n=============================\n") -for key, item in outputs.items(): - print(f"Variable: {key}") - print(f"Values: {item}") - -""" -Current output: -Variable: mission:summary:fuel_burned -Values: [164988.61692553537, 306345.04738212295] -Variable: aircraft:design:empty_mass -Values: [339001.4003946201, 355540.377187145] -""" From 6ccc97f214e954fcd3be475dead3c80528f7fa6e Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Wed, 11 Sep 2024 15:25:47 -0400 Subject: [PATCH 058/113] removed more c5 folders --- .../multi_missions/c5_models/c5_ferry.csv | 169 ------------------ .../c5_models/c5_ferry_phase_info.py | 83 --------- .../c5_models/c5_intermediate.csv | 168 ----------------- .../c5_models/c5_intermediate_phase_info.py | 83 --------- .../c5_models/c5_maxpayload.csv | 168 ----------------- .../c5_models/c5_maxpayload_phase_info.py | 83 --------- 6 files changed, 754 deletions(-) delete mode 100644 aviary/examples/multi_missions/c5_models/c5_ferry.csv delete mode 100644 aviary/examples/multi_missions/c5_models/c5_ferry_phase_info.py delete mode 100644 aviary/examples/multi_missions/c5_models/c5_intermediate.csv delete mode 100644 aviary/examples/multi_missions/c5_models/c5_intermediate_phase_info.py delete mode 100644 aviary/examples/multi_missions/c5_models/c5_maxpayload.csv delete mode 100644 aviary/examples/multi_missions/c5_models/c5_maxpayload_phase_info.py diff --git a/aviary/examples/multi_missions/c5_models/c5_ferry.csv b/aviary/examples/multi_missions/c5_models/c5_ferry.csv deleted file mode 100644 index 6f9e54275..000000000 --- a/aviary/examples/multi_missions/c5_models/c5_ferry.csv +++ /dev/null @@ -1,169 +0,0 @@ -# author: Chris Psenica -#aircraft:air_conditioning:mass_scaler,1.0,unitless -#aircraft:anti_icing:mass_scaler,1.0,unitless -#aircraft:apu:mass_scaler,1.0,unitless -#aircraft:avionics:mass_scaler,1.0,unitless -#aircraft:canard:area,0.0,ft**2 -#aircraft:canard:aspect_ratio,0.0,unitless -#aircraft:canard:thickness_to_chord,0.0,unitless -aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm -#aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless -#aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:mass_per_passenger,180.0,lbm - -aircraft:crew_and_payload:cargo_mass,0,lbm -#aircraft:crew_and_payload:num_passengers,82,unitless -#aircraft:crew_and_payload:design:num_passengers,82,unitless - -#aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:num_flight_crew,7,unitless -#aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless -#aircraft:crew_and_payload:wing_cargo,0.0,lbm -#aircraft:design:base_area,0.0,ft**2 -#aircraft:design:empty_mass_margin_scaler,1.0,unitless -aircraft:design:landing_to_takeoff_mass_ratio,0.91, unitless -#aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless -#aircraft:design:touchdown_mass,498554,lbm -aircraft:design:reserve_fuel_additional,0,lbm -#aircraft:design:subsonic_drag_coeff_factor,1.0,unitless -#aircraft:design:supersonic_drag_coeff_factor,1.0,unitless -aircraft:design:use_alt_mass,False,unitless -#aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless -#aircraft:electrical:mass_scaler,1.0,unitless - -aircraft:engine:data_file,models/engines/CF6.deck,unitless - -aircraft:engine:additional_mass_fraction,0.,unitless -aircraft:engine:constant_fuel_consumption,0.,lbm/h - -aircraft:engine:flight_idle_thrust_fraction,0.0,unitless -aircraft:engine:flight_idle_max_fraction,1.0,unitless -aircraft:engine:flight_idle_min_fraction,0.08,unitless -#aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless -#aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless -aircraft:engine:generate_flight_idle,False,unitless -aircraft:engine:geopotential_alt,False,unitless -aircraft:engine:ignore_negative_thrust,False,unitless -aircraft:engine:interpolation_method,slinear,unitless -aircraft:engine:mass_scaler,1.0,unitless -aircraft:engine:mass,8176,lbm -aircraft:engine:reference_mass,8176,lbm -aircraft:engine:reference_sls_thrust,51250.,lbf -aircraft:engine:scale_mass,True,unitless -aircraft:engine:scale_performance,True,unitless -aircraft:engine:scaled_sls_thrust,51250,lbf -#aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless -#aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless -#aircraft:engine:thrust_reversers_mass_scaler,1.0,unitless -aircraft:engine:num_fuselage_engines,0,unitless -aircraft:engine:num_engines,4,unitless -aircraft:engine:num_wing_engines,4,unitless -aircraft:engine:wing_locations,[0.3561541339,0.555929667],unitless -#aircraft:fins:area,0.0,ft**2 -#aircraft:fins:mass_scaler,1.0,unitless -#aircraft:fins:mass,0.0,lbm -#aircraft:fins:num_fins,0,unitless -#aircraft:fins:taper_ratio,10.0,unitless -aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm -#aircraft:fuel:density_ratio,1.0,unitless -#aircraft:fuel:fuel_system_mass_scaler,1.0,unitless -aircraft:fuel:fuselage_fuel_capacity,0.0,lbm -aircraft:fuel:num_tanks,12,unitless -aircraft:fuel:total_capacity,341446,lbm -#aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless -#aircraft:furnishings:mass_scaler,1.0,unitless -aircraft:fuselage:length,230.58,ft -#aircraft:fuselage:mass_scaler,1.0,unitless -aircraft:fuselage:max_height,26.83,ft -aircraft:fuselage:max_width,23.9,ft -aircraft:fuselage:military_cargo_floor,True,unitless -aircraft:fuselage:num_fuselages,1,unitless -aircraft:fuselage:passenger_compartment_length,143.75,ft -aircraft:fuselage:planform_area,4462.78,ft**2 -#aircraft:fuselage:wetted_area_scaler,1.0,unitless -aircraft:horizontal_tail:area,965.8,ft**2 -aircraft:horizontal_tail:aspect_ratio,4.2,unitless -#aircraft:horizontal_tail:mass_scaler,1.0,unitless -aircraft:horizontal_tail:taper_ratio,0.43,unitless -aircraft:horizontal_tail:thickness_to_chord,0.16,unitless -aircraft:horizontal_tail:vertical_tail_fraction,1.0,unitless -#aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless -#aircraft:hydraulics:mass_scaler,1.0,unitless -#aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 -#aircraft:instruments:mass_scaler,1.0,unitless -#aircraft:landing_gear:carrier_based,False,unitless -#aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless -#aircraft:landing_gear:main_gear_oleo_length,45,inch -#aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless -#aircraft:landing_gear:nose_gear_oleo_length,45,inch -aircraft:nacelle:avg_diameter,9.15,ft -aircraft:nacelle:avg_length,20.56,ft -#aircraft:nacelle:mass_scaler,1.0,unitless -#aircraft:nacelle:wetted_area_scaler,1.0,unitless -#aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 -#aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless -#aircraft:propulsion:misc_mass_scaler,1.0,unitless -aircraft:vertical_tail:area,537.9,ft**2 -aircraft:vertical_tail:aspect_ratio,0.958,unitless -#aircraft:vertical_tail:mass_scaler,1.0,unitless -aircraft:vertical_tail:num_tails,1,unitless -aircraft:vertical_tail:taper_ratio,0.846,unitless -aircraft:vertical_tail:thickness_to_chord,0.157,unitless -#aircraft:vertical_tail:wetted_area_scaler,1.0,unitless -aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless -aircraft:wing:airfoil_technology,1.0,unitless -aircraft:wing:area,6200,ft**2 -aircraft:wing:aspect_ratio,7.75,unitless -#aircraft:wing:bending_mass_scaler,1.0,unitless -#aircraft:wing:composite_fraction,0.1,unitless -aircraft:wing:control_surface_area,2323.7,ft**2 -aircraft:wing:control_surface_area_ratio,0.37479,unitless -aircraft:wing:load_distribution_control,2.0,unitless -aircraft:wing:load_fraction,1.0,unitless -#aircraft:wing:mass_scaler,1.0,unitless -aircraft:wing:max_camber_at_70_semispan,0.0,unitless -#aircraft:wing:misc_mass_scaler,1.0,unitless -#aircraft:wing:shear_control_mass_scaler,1.0,unitless -aircraft:wing:span_efficiency_reduction,False,unitless -aircraft:wing:span,222.75,ft -#aircraft:wing:strut_bracing_factor,0.0,unitless -#aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless -aircraft:wing:sweep,20.0,deg -aircraft:wing:taper_ratio,0.419,unitless -aircraft:wing:thickness_to_chord,0.1284,unitless -aircraft:wing:ultimate_load_factor,3.75,unitless -aircraft:wing:var_sweep_mass_penalty,0.0,unitless -#aircraft:wing:wetted_area_scaler,1.0,unitless -aircraft:wing:num_integration_stations,50,unitless -aircraft:wing:thickness_to_chord_dist,0.1239,0.108,0.013,unitless -aircraft:wing:load_path_sweep_dist,0.0,0.0,deg -aircraft:wing:input_station_dist,0.0,0.3298,0.884,unitless -aircraft:wing:chord_per_semispan,0.362,0.2667,0.0456,unitless -aircraft:wing:glove_and_bat,0.0,ft**2 -aircraft:wing:detailed_wing,False,unitless - - -mission:constraints:max_mach,0.77,unitless -mission:design:cruise_altitude,34000,ft -mission:design:gross_mass,840000,lbm -mission:design:range,7000.0,NM -mission:design:thrust_takeoff_per_eng,51250,lbf -mission:landing:lift_coefficient_max,3.0,unitless -mission:design:mach,0.77,unitless -#mission:summary:fuel_flow_scaler,1.0,unitless -mission:takeoff:fuel_simple,6.32,lbm -mission:takeoff:lift_coefficient_max,3.62,unitless -mission:takeoff:lift_over_drag,19.5,unitless -settings:equations_of_motion,height_energy -settings:mass_method,FLOPS - - -### missions definition -# mission_name: payload -# times: 0, 50, 280, 300 -# altitudes: 0, 30000, 30000, 0 -# machs: 0.30, 0.77, 0.77, 0.30 -# optimize_altitudes: F,F,F -# optimize_machs: F,F,F -# takeoff: F -# landing: F diff --git a/aviary/examples/multi_missions/c5_models/c5_ferry_phase_info.py b/aviary/examples/multi_missions/c5_models/c5_ferry_phase_info.py deleted file mode 100644 index 6a472ed2f..000000000 --- a/aviary/examples/multi_missions/c5_models/c5_ferry_phase_info.py +++ /dev/null @@ -1,83 +0,0 @@ -phase_info = { - "pre_mission": {"include_takeoff": False, "optimize_mass": True}, - "climb_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.3, "unitless"), - "final_mach": (0.77, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), - "initial_altitude": (0.0, "ft"), - "final_altitude": (29500.0, "ft"), - "altitude_bounds": ((0.0, 30000.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": True, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((0.0, 0.0), "min"), - "duration_bounds": ((25.0, 75.0), "min"), - }, - "initial_guesses": {"time": ([0.0, 50.0], "min")}, - }, - "climb_2": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.77, "unitless"), - "final_mach": (0.77, "unitless"), - "mach_bounds": ((0.75, 0.79), "unitless"), - "initial_altitude": (29500.0, "ft"), - "final_altitude": (32000.0, "ft"), - "altitude_bounds": ((29000.0, 32500.0), "ft"), - "throttle_enforcement": "boundary_constraint", - "fix_initial": False, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((25.0, 75.0), "min"), - "duration_bounds": ((381.0, 1143.0), "min"), - }, - "initial_guesses": {"time": ([50.0, 762.0], "min")}, - }, - "descent_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.77, "unitless"), - "final_mach": (0.3, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), - "initial_altitude": (32000.0, "ft"), - "final_altitude": (0.0, "ft"), - "altitude_bounds": ((0.0, 32500.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": False, - "constrain_final": True, - "fix_duration": False, - "initial_bounds": ((406.0, 1218.0), "min"), - "duration_bounds": ((15.5, 46.5), "min"), - }, - "initial_guesses": {"time": ([812.0, 31.0], "min")}, - }, - "post_mission": { - "include_landing": False, - "constrain_range": True, - "target_range": (7001.59, "nmi"), - }, -} diff --git a/aviary/examples/multi_missions/c5_models/c5_intermediate.csv b/aviary/examples/multi_missions/c5_models/c5_intermediate.csv deleted file mode 100644 index cf7f415be..000000000 --- a/aviary/examples/multi_missions/c5_models/c5_intermediate.csv +++ /dev/null @@ -1,168 +0,0 @@ -# author: Chris Psenica -#aircraft:air_conditioning:mass_scaler,1.0,unitless -#aircraft:anti_icing:mass_scaler,1.0,unitless -#aircraft:apu:mass_scaler,1.0,unitless -#aircraft:avionics:mass_scaler,1.0,unitless -#aircraft:canard:area,0.0,ft**2 -#aircraft:canard:aspect_ratio,0.0,unitless -#aircraft:canard:thickness_to_chord,0.0,unitless -aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm -#aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless -#aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:mass_per_passenger,180.0,lbm - -aircraft:crew_and_payload:cargo_mass,120000.0,lbm -#aircraft:crew_and_payload:num_passengers,82,unitless -#aircraft:crew_and_payload:design:num_passengers,82,unitless - -#aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:num_flight_crew,7,unitless -#aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless -#aircraft:crew_and_payload:wing_cargo,0.0,lbm -#aircraft:design:base_area,0.0,ft**2 -#aircraft:design:empty_mass_margin_scaler,1.0,unitless -#aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless -#aircraft:design:touchdown_mass,498554,lbm -aircraft:design:reserve_fuel_additional,0,lbm -#aircraft:design:subsonic_drag_coeff_factor,1.0,unitless -#aircraft:design:supersonic_drag_coeff_factor,1.0,unitless -aircraft:design:use_alt_mass,False,unitless -#aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless -#aircraft:electrical:mass_scaler,1.0,unitless - -aircraft:engine:data_file,models/engines/CF6.deck,unitless - -aircraft:engine:additional_mass_fraction,0.,unitless -aircraft:engine:constant_fuel_consumption,0.,lbm/h - -aircraft:engine:flight_idle_thrust_fraction,0.0,unitless -aircraft:engine:flight_idle_max_fraction,1.0,unitless -aircraft:engine:flight_idle_min_fraction,0.08,unitless -#aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless -#aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless -aircraft:engine:generate_flight_idle,False,unitless -aircraft:engine:geopotential_alt,False,unitless -aircraft:engine:ignore_negative_thrust,False,unitless -aircraft:engine:interpolation_method,slinear,unitless -aircraft:engine:mass_scaler,1.0,unitless -aircraft:engine:mass,8176,lbm -aircraft:engine:reference_mass,8176,lbm -aircraft:engine:reference_sls_thrust,51250.,lbf -aircraft:engine:scale_mass,True,unitless -aircraft:engine:scale_performance,True,unitless -aircraft:engine:scaled_sls_thrust,51250,lbf -#aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless -#aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless -#aircraft:engine:thrust_reversers_mass_scaler,1.0,unitless -aircraft:engine:num_fuselage_engines,0,unitless -aircraft:engine:num_engines,4,unitless -aircraft:engine:num_wing_engines,4,unitless -aircraft:engine:wing_locations,[0.3561541339,0.555929667],unitless -#aircraft:fins:area,0.0,ft**2 -#aircraft:fins:mass_scaler,1.0,unitless -#aircraft:fins:mass,0.0,lbm -#aircraft:fins:num_fins,0,unitless -#aircraft:fins:taper_ratio,10.0,unitless -aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm -#aircraft:fuel:density_ratio,1.0,unitless -#aircraft:fuel:fuel_system_mass_scaler,1.0,unitless -aircraft:fuel:fuselage_fuel_capacity,0.0,lbm -aircraft:fuel:num_tanks,12,unitless -aircraft:fuel:total_capacity,341446,lbm -#aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless -#aircraft:furnishings:mass_scaler,1.0,unitless -aircraft:fuselage:length,230.58,ft -#aircraft:fuselage:mass_scaler,1.0,unitless -aircraft:fuselage:max_height,26.83,ft -aircraft:fuselage:max_width,23.9,ft -aircraft:fuselage:military_cargo_floor,True,unitless -aircraft:fuselage:num_fuselages,1,unitless -aircraft:fuselage:passenger_compartment_length,143.75,ft -aircraft:fuselage:planform_area,4462.78,ft**2 -#aircraft:fuselage:wetted_area_scaler,1.0,unitless -aircraft:horizontal_tail:area,965.8,ft**2 -aircraft:horizontal_tail:aspect_ratio,4.2,unitless -#aircraft:horizontal_tail:mass_scaler,1.0,unitless -aircraft:horizontal_tail:taper_ratio,0.43,unitless -aircraft:horizontal_tail:thickness_to_chord,0.16,unitless -aircraft:horizontal_tail:vertical_tail_fraction,1.0,unitless -#aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless -#aircraft:hydraulics:mass_scaler,1.0,unitless -#aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 -#aircraft:instruments:mass_scaler,1.0,unitless -#aircraft:landing_gear:carrier_based,False,unitless -#aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless -#aircraft:landing_gear:main_gear_oleo_length,45,inch -#aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless -#aircraft:landing_gear:nose_gear_oleo_length,45,inch -aircraft:nacelle:avg_diameter,9.15,ft -aircraft:nacelle:avg_length,20.56,ft -#aircraft:nacelle:mass_scaler,1.0,unitless -#aircraft:nacelle:wetted_area_scaler,1.0,unitless -#aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 -#aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless -#aircraft:propulsion:misc_mass_scaler,1.0,unitless -aircraft:vertical_tail:area,537.9,ft**2 -aircraft:vertical_tail:aspect_ratio,0.958,unitless -#aircraft:vertical_tail:mass_scaler,1.0,unitless -aircraft:vertical_tail:num_tails,1,unitless -aircraft:vertical_tail:taper_ratio,0.846,unitless -aircraft:vertical_tail:thickness_to_chord,0.157,unitless -#aircraft:vertical_tail:wetted_area_scaler,1.0,unitless -aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless -aircraft:wing:airfoil_technology,1.0,unitless -aircraft:wing:area,6200,ft**2 -aircraft:wing:aspect_ratio,7.75,unitless -#aircraft:wing:bending_mass_scaler,1.0,unitless -#aircraft:wing:composite_fraction,0.1,unitless -aircraft:wing:control_surface_area,2323.7,ft**2 -aircraft:wing:control_surface_area_ratio,0.37479,unitless -aircraft:wing:load_distribution_control,2.0,unitless -aircraft:wing:load_fraction,1.0,unitless -#aircraft:wing:mass_scaler,1.0,unitless -aircraft:wing:max_camber_at_70_semispan,0.0,unitless -#aircraft:wing:misc_mass_scaler,1.0,unitless -#aircraft:wing:shear_control_mass_scaler,1.0,unitless -aircraft:wing:span_efficiency_reduction,False,unitless -aircraft:wing:span,222.75,ft -#aircraft:wing:strut_bracing_factor,0.0,unitless -#aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless -aircraft:wing:sweep,20.0,deg -aircraft:wing:taper_ratio,0.419,unitless -aircraft:wing:thickness_to_chord,0.1284,unitless -aircraft:wing:ultimate_load_factor,3.75,unitless -aircraft:wing:var_sweep_mass_penalty,0.0,unitless -#aircraft:wing:wetted_area_scaler,1.0,unitless -aircraft:wing:num_integration_stations,50,unitless -aircraft:wing:thickness_to_chord_dist,0.1239,0.108,0.013,unitless -aircraft:wing:load_path_sweep_dist,0.0,0.0,deg -aircraft:wing:input_station_dist,0.0,0.3298,0.884,unitless -aircraft:wing:chord_per_semispan,0.362,0.2667,0.0456,unitless -aircraft:wing:glove_and_bat,0.0,ft**2 -aircraft:wing:detailed_wing,False,unitless - - -mission:constraints:max_mach,0.77,unitless -mission:design:cruise_altitude,34000,ft -mission:design:gross_mass,840000,lbm -mission:design:range,4800.0,NM -mission:design:thrust_takeoff_per_eng,51250,lbf -mission:landing:lift_coefficient_max,3.0,unitless -mission:design:mach,0.77,unitless -#mission:summary:fuel_flow_scaler,1.0,unitless -mission:takeoff:fuel_simple,6.32,lbm -mission:takeoff:lift_coefficient_max,3.62,unitless -mission:takeoff:lift_over_drag,19.5,unitless -settings:equations_of_motion,height_energy -settings:mass_method,FLOPS - - -### missions definition -# mission_name: payload -# times: 0, 50, 280, 300 -# altitudes: 0, 30000, 30000, 0 -# machs: 0.30, 0.77, 0.77, 0.30 -# optimize_altitudes: F,F,F -# optimize_machs: F,F,F -# takeoff: F -# landing: F diff --git a/aviary/examples/multi_missions/c5_models/c5_intermediate_phase_info.py b/aviary/examples/multi_missions/c5_models/c5_intermediate_phase_info.py deleted file mode 100644 index 88f121ca1..000000000 --- a/aviary/examples/multi_missions/c5_models/c5_intermediate_phase_info.py +++ /dev/null @@ -1,83 +0,0 @@ -phase_info = { - "pre_mission": {"include_takeoff": False, "optimize_mass": True}, - "climb_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.3, "unitless"), - "final_mach": (0.73, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), - "initial_altitude": (0.0, "ft"), - "final_altitude": (29500.0, "ft"), - "altitude_bounds": ((0.0, 30000.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": True, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((0.0, 0.0), "min"), - "duration_bounds": ((25.0, 75.0), "min"), - }, - "initial_guesses": {"time": ([0.0, 50.0], "min")}, - }, - "climb_2": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.73, "unitless"), - "final_mach": (0.73, "unitless"), - "mach_bounds": ((0.72, 0.74), "unitless"), - "initial_altitude": (29500.0, "ft"), - "final_altitude": (32000.0, "ft"), - "altitude_bounds": ((29000.0, 32500.0), "ft"), - "throttle_enforcement": "boundary_constraint", - "fix_initial": False, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((25.0, 75.0), "min"), - "duration_bounds": ((255.0, 765.0), "min"), - }, - "initial_guesses": {"time": ([50.0, 510.0], "min")}, - }, - "descent_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.73, "unitless"), - "final_mach": (0.3, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), - "initial_altitude": (32000.0, "ft"), - "final_altitude": (0.0, "ft"), - "altitude_bounds": ((0.0, 32500.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": False, - "constrain_final": True, - "fix_duration": False, - "initial_bounds": ((280.0, 840.0), "min"), - "duration_bounds": ((15.0, 45.0), "min"), - }, - "initial_guesses": {"time": ([560.0, 30.0], "min")}, - }, - "post_mission": { - "include_landing": False, - "constrain_range": True, - "target_range": (4839.41, "nmi"), - }, -} diff --git a/aviary/examples/multi_missions/c5_models/c5_maxpayload.csv b/aviary/examples/multi_missions/c5_models/c5_maxpayload.csv deleted file mode 100644 index f1f67b76d..000000000 --- a/aviary/examples/multi_missions/c5_models/c5_maxpayload.csv +++ /dev/null @@ -1,168 +0,0 @@ -# author: Chris Psenica -#aircraft:air_conditioning:mass_scaler,1.0,unitless -#aircraft:anti_icing:mass_scaler,1.0,unitless -#aircraft:apu:mass_scaler,1.0,unitless -#aircraft:avionics:mass_scaler,1.0,unitless -#aircraft:canard:area,0.0,ft**2 -#aircraft:canard:aspect_ratio,0.0,unitless -#aircraft:canard:thickness_to_chord,0.0,unitless -aircraft:crew_and_payload:baggage_mass_per_passenger,0.0,lbm -#aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless -#aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:mass_per_passenger,180.0,lbm - -aircraft:crew_and_payload:cargo_mass,281000.0,lbm -#aircraft:crew_and_payload:num_passengers,82,unitless -#aircraft:crew_and_payload:design:num_passengers,82,unitless - -#aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:num_flight_crew,7,unitless -#aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless -#aircraft:crew_and_payload:wing_cargo,0.0,lbm -#aircraft:design:base_area,0.0,ft**2 -#aircraft:design:empty_mass_margin_scaler,1.0,unitless -#aircraft:design:lift_dependent_drag_coeff_factor,1.0,unitless -#aircraft:design:touchdown_mass,498554,lbm -aircraft:design:reserve_fuel_additional,0,lbm -#aircraft:design:subsonic_drag_coeff_factor,1.0,unitless -#aircraft:design:supersonic_drag_coeff_factor,1.0,unitless -aircraft:design:use_alt_mass,False,unitless -#aircraft:design:zero_lift_drag_coeff_factor,1.0,unitless -#aircraft:electrical:mass_scaler,1.0,unitless - -aircraft:engine:data_file,models/engines/CF6.deck,unitless - -aircraft:engine:additional_mass_fraction,0.,unitless -aircraft:engine:constant_fuel_consumption,0.,lbm/h - -aircraft:engine:flight_idle_thrust_fraction,0.0,unitless -aircraft:engine:flight_idle_max_fraction,1.0,unitless -aircraft:engine:flight_idle_min_fraction,0.08,unitless -#aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless -#aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless -aircraft:engine:generate_flight_idle,False,unitless -aircraft:engine:geopotential_alt,False,unitless -aircraft:engine:ignore_negative_thrust,False,unitless -aircraft:engine:interpolation_method,slinear,unitless -aircraft:engine:mass_scaler,1.0,unitless -aircraft:engine:mass,8176,lbm -aircraft:engine:reference_mass,8176,lbm -aircraft:engine:reference_sls_thrust,51250.,lbf -aircraft:engine:scale_mass,True,unitless -aircraft:engine:scale_performance,True,unitless -aircraft:engine:scaled_sls_thrust,51250,lbf -#aircraft:engine:subsonic_fuel_flow_scaler,1.0,unitless -#aircraft:engine:supersonic_fuel_flow_scaler,1.0,unitless -#aircraft:engine:thrust_reversers_mass_scaler,1.0,unitless -aircraft:engine:num_fuselage_engines,0,unitless -aircraft:engine:num_engines,4,unitless -aircraft:engine:num_wing_engines,4,unitless -aircraft:engine:wing_locations,[0.3561541339,0.555929667],unitless -#aircraft:fins:area,0.0,ft**2 -#aircraft:fins:mass_scaler,1.0,unitless -#aircraft:fins:mass,0.0,lbm -#aircraft:fins:num_fins,0,unitless -#aircraft:fins:taper_ratio,10.0,unitless -aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm -#aircraft:fuel:density_ratio,1.0,unitless -#aircraft:fuel:fuel_system_mass_scaler,1.0,unitless -aircraft:fuel:fuselage_fuel_capacity,0.0,lbm -aircraft:fuel:num_tanks,12,unitless -aircraft:fuel:total_capacity,341446,lbm -#aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless -#aircraft:furnishings:mass_scaler,1.0,unitless -aircraft:fuselage:length,230.58,ft -#aircraft:fuselage:mass_scaler,1.0,unitless -aircraft:fuselage:max_height,26.83,ft -aircraft:fuselage:max_width,23.9,ft -aircraft:fuselage:military_cargo_floor,True,unitless -aircraft:fuselage:num_fuselages,1,unitless -aircraft:fuselage:passenger_compartment_length,143.75,ft -aircraft:fuselage:planform_area,4462.78,ft**2 -#aircraft:fuselage:wetted_area_scaler,1.0,unitless -aircraft:horizontal_tail:area,965.8,ft**2 -aircraft:horizontal_tail:aspect_ratio,4.2,unitless -#aircraft:horizontal_tail:mass_scaler,1.0,unitless -aircraft:horizontal_tail:taper_ratio,0.43,unitless -aircraft:horizontal_tail:thickness_to_chord,0.16,unitless -aircraft:horizontal_tail:vertical_tail_fraction,1.0,unitless -#aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless -#aircraft:hydraulics:mass_scaler,1.0,unitless -#aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 -#aircraft:instruments:mass_scaler,1.0,unitless -#aircraft:landing_gear:carrier_based,False,unitless -#aircraft:landing_gear:main_gear_mass_scaler,1.0,unitless -#aircraft:landing_gear:main_gear_oleo_length,45,inch -#aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless -#aircraft:landing_gear:nose_gear_oleo_length,45,inch -aircraft:nacelle:avg_diameter,9.15,ft -aircraft:nacelle:avg_length,20.56,ft -#aircraft:nacelle:mass_scaler,1.0,unitless -#aircraft:nacelle:wetted_area_scaler,1.0,unitless -#aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 -#aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless -#aircraft:propulsion:misc_mass_scaler,1.0,unitless -aircraft:vertical_tail:area,537.9,ft**2 -aircraft:vertical_tail:aspect_ratio,0.958,unitless -#aircraft:vertical_tail:mass_scaler,1.0,unitless -aircraft:vertical_tail:num_tails,1,unitless -aircraft:vertical_tail:taper_ratio,0.846,unitless -aircraft:vertical_tail:thickness_to_chord,0.157,unitless -#aircraft:vertical_tail:wetted_area_scaler,1.0,unitless -aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless -aircraft:wing:airfoil_technology,1.0,unitless -aircraft:wing:area,6200,ft**2 -aircraft:wing:aspect_ratio,7.75,unitless -#aircraft:wing:bending_mass_scaler,1.0,unitless -#aircraft:wing:composite_fraction,0.1,unitless -aircraft:wing:control_surface_area,2323.7,ft**2 -aircraft:wing:control_surface_area_ratio,0.37479,unitless -aircraft:wing:load_distribution_control,2.0,unitless -aircraft:wing:load_fraction,1.0,unitless -#aircraft:wing:mass_scaler,1.0,unitless -aircraft:wing:max_camber_at_70_semispan,0.0,unitless -#aircraft:wing:misc_mass_scaler,1.0,unitless -#aircraft:wing:shear_control_mass_scaler,1.0,unitless -aircraft:wing:span_efficiency_reduction,False,unitless -aircraft:wing:span,222.75,ft -#aircraft:wing:strut_bracing_factor,0.0,unitless -#aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless -aircraft:wing:sweep,20.0,deg -aircraft:wing:taper_ratio,0.419,unitless -aircraft:wing:thickness_to_chord,0.1284,unitless -aircraft:wing:ultimate_load_factor,3.75,unitless -aircraft:wing:var_sweep_mass_penalty,0.0,unitless -#aircraft:wing:wetted_area_scaler,1.0,unitless -aircraft:wing:num_integration_stations,50,unitless -aircraft:wing:thickness_to_chord_dist,0.1239,0.108,0.013,unitless -aircraft:wing:load_path_sweep_dist,0.0,0.0,deg -aircraft:wing:input_station_dist,0.0,0.3298,0.884,unitless -aircraft:wing:chord_per_semispan,0.362,0.2667,0.0456,unitless -aircraft:wing:glove_and_bat,0.0,ft**2 -aircraft:wing:detailed_wing,False,unitless - - -mission:constraints:max_mach,0.77,unitless -mission:design:cruise_altitude,34000,ft -mission:design:gross_mass,840000,lbm -mission:design:range,2150.0,NM -mission:design:thrust_takeoff_per_eng,51250,lbf -mission:landing:lift_coefficient_max,3.0,unitless -mission:design:mach,0.77,unitless -#mission:summary:fuel_flow_scaler,1.0,unitless -mission:takeoff:fuel_simple,6.32,lbm -mission:takeoff:lift_coefficient_max,3.62,unitless -mission:takeoff:lift_over_drag,19.5,unitless -settings:equations_of_motion,height_energy -settings:mass_method,FLOPS - - -### missions definition -# mission_name: payload -# times: 0, 50, 280, 300 -# altitudes: 0, 30000, 30000, 0 -# machs: 0.30, 0.77, 0.77, 0.30 -# optimize_altitudes: F,F,F -# optimize_machs: F,F,F -# takeoff: F -# landing: F diff --git a/aviary/examples/multi_missions/c5_models/c5_maxpayload_phase_info.py b/aviary/examples/multi_missions/c5_models/c5_maxpayload_phase_info.py deleted file mode 100644 index a52acec96..000000000 --- a/aviary/examples/multi_missions/c5_models/c5_maxpayload_phase_info.py +++ /dev/null @@ -1,83 +0,0 @@ -phase_info = { - "pre_mission": {"include_takeoff": False, "optimize_mass": True}, - "climb_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.3, "unitless"), - "final_mach": (0.77, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), - "initial_altitude": (0.0, "ft"), - "final_altitude": (29500.0, "ft"), - "altitude_bounds": ((0.0, 30000.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": True, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((0.0, 0.0), "min"), - "duration_bounds": ((25.0, 75.0), "min"), - }, - "initial_guesses": {"time": ([0.0, 50.0], "min")}, - }, - "climb_2": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.77, "unitless"), - "final_mach": (0.77, "unitless"), - "mach_bounds": ((0.75, 0.79), "unitless"), - "initial_altitude": (29500.0, "ft"), - "final_altitude": (32000.0, "ft"), - "altitude_bounds": ((29000.0, 32500.0), "ft"), - "throttle_enforcement": "boundary_constraint", - "fix_initial": False, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((25.0, 75.0), "min"), - "duration_bounds": ((105.0, 315.0), "min"), - }, - "initial_guesses": {"time": ([50.0, 210.0], "min")}, - }, - "descent_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.77, "unitless"), - "final_mach": (0.3, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.79), "unitless"), - "initial_altitude": (32000.0, "ft"), - "final_altitude": (0.0, "ft"), - "altitude_bounds": ((0.0, 32500.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": False, - "constrain_final": True, - "fix_duration": False, - "initial_bounds": ((130.0, 390.0), "min"), - "duration_bounds": ((15.0, 45.0), "min"), - }, - "initial_guesses": {"time": ([260.0, 30.0], "min")}, - }, - "post_mission": { - "include_landing": False, - "constrain_range": True, - "target_range": (2272.47, "nmi"), - }, -} From 1cb3a9e2d5ed4256536b71bfccbf4e2cded7d01b Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Wed, 11 Sep 2024 15:28:50 -0400 Subject: [PATCH 059/113] removed FwFm.csv changes --- .../test_aircraft/aircraft_for_bench_FwFm.csv | 11 +- .../aircraft_for_bench_FwFm_deadhead.csv | 162 ------------------ 2 files changed, 2 insertions(+), 171 deletions(-) delete mode 100644 aviary/models/test_aircraft/aircraft_for_bench_FwFm_deadhead.csv diff --git a/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv b/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv index 55ee2cac3..c2fa1d8a1 100644 --- a/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv +++ b/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv @@ -11,20 +11,13 @@ aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:mass_per_passenger,180.0,lbm aircraft:crew_and_payload:misc_cargo,0.0,lbm aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless - +aircraft:crew_and_payload:num_business_class,0,unitless +aircraft:crew_and_payload:num_first_class,11,unitless aircraft:crew_and_payload:num_flight_attendants,3,unitless aircraft:crew_and_payload:num_flight_crew,2,unitless aircraft:crew_and_payload:num_galley_crew,0,unitless - -aircraft:crew_and_payload:design:num_passengers,169,unitless -aircraft:crew_and_payload:design:num_tourist_class,158,unitless -aircraft:crew_and_payload:design:num_business_class,0,unitless -aircraft:crew_and_payload:design:num_first_class,11,unitless aircraft:crew_and_payload:num_passengers,169,unitless aircraft:crew_and_payload:num_tourist_class,158,unitless -aircraft:crew_and_payload:num_business_class,0,unitless -aircraft:crew_and_payload:num_first_class,11,unitless - aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless aircraft:crew_and_payload:wing_cargo,0.0,lbm aircraft:design:base_area,0.0,ft**2 diff --git a/aviary/models/test_aircraft/aircraft_for_bench_FwFm_deadhead.csv b/aviary/models/test_aircraft/aircraft_for_bench_FwFm_deadhead.csv deleted file mode 100644 index 1e61f864a..000000000 --- a/aviary/models/test_aircraft/aircraft_for_bench_FwFm_deadhead.csv +++ /dev/null @@ -1,162 +0,0 @@ -aircraft:air_conditioning:mass_scaler,1.0,unitless -aircraft:anti_icing:mass_scaler,1.0,unitless -aircraft:apu:mass_scaler,1.1,unitless -aircraft:avionics:mass_scaler,1.2,unitless -aircraft:canard:area,0.0,ft**2 -aircraft:canard:aspect_ratio,0.0,unitless -aircraft:canard:thickness_to_chord,0.0,unitless -aircraft:crew_and_payload:baggage_mass_per_passenger,45.0,lbm -aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless -aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:mass_per_passenger,180.0,lbm -aircraft:crew_and_payload:misc_cargo,0.0,lbm -aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:num_flight_attendants,3,unitless -aircraft:crew_and_payload:num_flight_crew,2,unitless -aircraft:crew_and_payload:num_galley_crew,0,unitless - -aircraft:crew_and_payload:design:num_passengers,169,unitless -aircraft:crew_and_payload:design:num_tourist_class,158,unitless -aircraft:crew_and_payload:design:num_business_class,0,unitless -aircraft:crew_and_payload:design:num_first_class,11,unitless -aircraft:crew_and_payload:num_passengers,0,unitless -aircraft:crew_and_payload:num_tourist_class,0,unitless -aircraft:crew_and_payload:num_business_class,0,unitless -aircraft:crew_and_payload:num_first_class,0,unitless - -aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless -aircraft:crew_and_payload:wing_cargo,0.0,lbm -aircraft:design:base_area,0.0,ft**2 -aircraft:design:empty_mass_margin_scaler,0.0,unitless -aircraft:design:lift_dependent_drag_coeff_factor,0.909839381134961,unitless -aircraft:design:touchdown_mass,152800.0,lbm -aircraft:design:reserve_fuel_additional,3000.,lbm -aircraft:design:subsonic_drag_coeff_factor,1.0,unitless -aircraft:design:supersonic_drag_coeff_factor,1.0,unitless -aircraft:design:use_alt_mass,False,unitless -aircraft:design:zero_lift_drag_coeff_factor,0.930890028006548,unitless -aircraft:electrical:mass_scaler,1.25,unitless -aircraft:engine:additional_mass_fraction,0.,unitless -aircraft:engine:constant_fuel_consumption,0.,lbm/h -aircraft:engine:data_file,models/engines/turbofan_28k.deck,unitless -aircraft:engine:flight_idle_thrust_fraction,0.0,unitless -aircraft:engine:flight_idle_max_fraction,1.0,unitless -aircraft:engine:flight_idle_min_fraction,0.08,unitless -aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless -aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless -aircraft:engine:generate_flight_idle,True,unitless -aircraft:engine:geopotential_alt,False,unitless -aircraft:engine:ignore_negative_thrust,False,unitless -aircraft:engine:interpolation_method,slinear,unitless -aircraft:engine:mass_scaler,1.15,unitless -aircraft:engine:mass,7400,lbm -aircraft:engine:num_engines,2,unitless -aircraft:engine:num_fuselage_engines,0,unitless -aircraft:engine:num_wing_engines,2,unitless -aircraft:engine:reference_mass,7400,lbm -aircraft:engine:reference_sls_thrust,28928.1,lbf -aircraft:engine:scale_mass,True,unitless -aircraft:engine:scale_performance,True,unitless -aircraft:engine:scaled_sls_thrust,28928.1,lbf -aircraft:engine:subsonic_fuel_flow_scaler,1.,unitless -aircraft:engine:supersonic_fuel_flow_scaler,1.,unitless -aircraft:engine:thrust_reversers_mass_scaler,0.0,unitless -aircraft:engine:wing_locations,[0.26869218],unitless -aircraft:fins:area,0.0,ft**2 -aircraft:fins:mass_scaler,1.0,unitless -aircraft:fins:mass,0.0,lbm -aircraft:fins:num_fins,0,unitless -aircraft:fins:taper_ratio,10.0,unitless -aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm -aircraft:fuel:density_ratio,1.0,unitless -aircraft:fuel:fuel_system_mass_scaler,1.0,unitless -aircraft:fuel:fuselage_fuel_capacity,0.0,lbm -aircraft:fuel:num_tanks,7,unitless -aircraft:fuel:total_capacity,45694.0,lbm -aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless -aircraft:furnishings:mass_scaler,1.1,unitless -aircraft:fuselage:length,128.0,ft -aircraft:fuselage:mass_scaler,1.05,unitless -aircraft:fuselage:max_height,13.17,ft -aircraft:fuselage:max_width,12.33,ft -aircraft:fuselage:military_cargo_floor,False,unitless -aircraft:fuselage:num_fuselages,1,unitless -aircraft:fuselage:passenger_compartment_length,85.5,ft -aircraft:fuselage:planform_area,1578.24,ft**2 -aircraft:fuselage:wetted_area_scaler,1.0,unitless -aircraft:fuselage:wetted_area,4158.62,ft**2 -aircraft:horizontal_tail:area,355.0,ft**2 -aircraft:horizontal_tail:aspect_ratio,6.0,unitless -aircraft:horizontal_tail:mass_scaler,1.2,unitless -aircraft:horizontal_tail:taper_ratio,0.22,unitless -aircraft:horizontal_tail:thickness_to_chord,0.125,unitless -aircraft:horizontal_tail:vertical_tail_fraction,0.0,unitless -aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless -aircraft:horizontal_tail:wetted_area,592.65,ft**2 -aircraft:hydraulics:mass_scaler,1.0,unitless -aircraft:hydraulics:system_pressure,3000,psi -aircraft:instruments:mass_scaler,1.25,unitless -aircraft:landing_gear:carrier_based,False,unitless -aircraft:landing_gear:main_gear_mass_scaler,1.1,unitless -aircraft:landing_gear:main_gear_oleo_length,102.0,inch -aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless -aircraft:landing_gear:nose_gear_oleo_length,67.0,inch -aircraft:nacelle:avg_diameter,7.94,ft -aircraft:nacelle:avg_length,12.3,ft -aircraft:nacelle:mass_scaler,1.0,unitless -aircraft:nacelle:wetted_area_scaler,1.0,unitless -aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 -aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless -aircraft:propulsion:misc_mass_scaler,1.0,unitless -aircraft:vertical_tail:area,284.0,ft**2 -aircraft:vertical_tail:aspect_ratio,1.75,unitless -aircraft:vertical_tail:mass_scaler,1.0,unitless -aircraft:vertical_tail:num_tails,1,unitless -aircraft:vertical_tail:taper_ratio,0.33,unitless -aircraft:vertical_tail:thickness_to_chord,0.1195,unitless -aircraft:vertical_tail:wetted_area_scaler,1.0,unitless -aircraft:vertical_tail:wetted_area,581.13,ft**2 -aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless -aircraft:wing:airfoil_technology,1.92669766647637,unitless -aircraft:wing:area,1370.0,ft**2 -aircraft:wing:aspect_ratio,11.22091,unitless -aircraft:wing:bending_mass_scaler,1.0,unitless -aircraft:wing:chord_per_semispan,0.31,0.23,0.084,unitless -aircraft:wing:composite_fraction,0.2,unitless -aircraft:wing:control_surface_area,137,ft**2 -aircraft:wing:control_surface_area_ratio,0.1,unitless -aircraft:wing:glove_and_bat,134.0,ft**2 -aircraft:wing:input_station_dist,0.,0.2759,0.9367,unitless -aircraft:wing:load_distribution_control,2.0,unitless -aircraft:wing:load_fraction,1.0,unitless -aircraft:wing:load_path_sweep_dist,0.,22.,deg -aircraft:wing:mass_scaler,1.23,unitless -aircraft:wing:max_camber_at_70_semispan,0.0,unitless -aircraft:wing:misc_mass_scaler,1.0,unitless -aircraft:wing:num_integration_stations,50,unitless -aircraft:wing:shear_control_mass_scaler,1.0,unitless -aircraft:wing:span_efficiency_reduction,False,unitless -aircraft:wing:span,117.83,ft -aircraft:wing:strut_bracing_factor,0.0,unitless -aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless -aircraft:wing:sweep,25.0,deg -aircraft:wing:taper_ratio,0.278,unitless -aircraft:wing:thickness_to_chord_dist,0.145,0.115,0.104,unitless -aircraft:wing:thickness_to_chord,0.13,unitless -aircraft:wing:ultimate_load_factor,3.75,unitless -aircraft:wing:var_sweep_mass_penalty,0.0,unitless -aircraft:wing:wetted_area_scaler,1.0,unitless -aircraft:wing:wetted_area,2396.56,ft**2 -mission:constraints:max_mach,0.785,unitless -mission:design:cruise_altitude,35000,ft -mission:design:gross_mass,175400.0,lbm -mission:design:range,3500,NM -mission:design:thrust_takeoff_per_eng,28928.1,lbf -mission:landing:lift_coefficient_max,2.0,unitless -mission:summary:cruise_mach,0.785,unitless -mission:summary:fuel_flow_scaler,1.0,unitless -mission:takeoff:fuel_simple,577,lbm -mission:takeoff:lift_coefficient_max,3.0,unitless -mission:takeoff:lift_over_drag,17.354,unitless -settings:equations_of_motion,height_energy -settings:mass_method,FLOPS \ No newline at end of file From deab1d6688b0d3a5da5cf4f11bcf8a88f9685695 Mon Sep 17 00:00:00 2001 From: Kaushik Ponnapalli Date: Wed, 11 Sep 2024 14:29:25 -0500 Subject: [PATCH 060/113] Connected mass of first flight phase to gross_mass --- aviary/interface/methods_for_level2.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index 6d5c016e2..fe380397d 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -1102,6 +1102,13 @@ def add_subsystem_timeseries_outputs(phase, phase_name): traj = setup_trajectory_params( self.model, traj, self.aviary_inputs, phases, meta_data=self.meta_data, external_parameters=external_parameters) + if self.mission_method is HEIGHT_ENERGY: + if not self.pre_mission_info['include_takeoff']: + first_flight_phase_name = list(phase_info.keys())[0] + first_flight_phase = traj._phases[first_flight_phase_name] + first_flight_phase.set_state_options(Dynamic.Mission.MASS, + fix_initial=False) + self.traj = traj return traj @@ -1428,6 +1435,21 @@ def link_phases(self): Mission.Summary.RANGE, src_indices=[-1], flat_src_indices=True) + if not self.pre_mission_info['include_takeoff']: + first_flight_phase_name = list(self.phase_info.keys())[0] + eq = self.model.add_subsystem(f'link_{first_flight_phase_name}_mass', + om.EQConstraintComp(), + promotes_inputs=[('rhs:mass', + Mission.Summary.GROSS_MASS)]) + eq.add_eq_output('mass', eq_units='lbm', normalize=False, + ref=10000., add_constraint=True) + self.model.connect( + f'traj.{first_flight_phase_name}.states:mass', + 'link_climb_mass.lhs:mass', + src_indices=[0], + flat_src_indices=True, + ) + elif self.mission_method is SOLVED_2DOF: self.traj.link_phases(phases, [Dynamic.Mission.MASS], connected=True) self.traj.link_phases( From e16273c8002e60b154bd40460fa2c05963c2e832 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Wed, 11 Sep 2024 15:31:37 -0400 Subject: [PATCH 061/113] removed additional unneeded files --- cannonball_models/cannonball.py | 308 ----------- .../multi_cannonball_copymodel.py | 409 --------------- .../multi_cannonball_copyparts.py | 484 ------------------ easy_phase_info_inter.py | 83 --- easy_phase_info_max.py | 83 --- min_time_climb_models/min_time_climb.py | 301 ----------- .../multi_min_time_to_climb.py | 173 ------- min_time_climb_models/plot_helper.py | 98 ---- multi_aviary_submodel.py | 125 ----- single_aviary.py | 129 ----- 10 files changed, 2193 deletions(-) delete mode 100644 cannonball_models/cannonball.py delete mode 100644 cannonball_models/multi_cannonball_copymodel.py delete mode 100644 cannonball_models/multi_cannonball_copyparts.py delete mode 100644 easy_phase_info_inter.py delete mode 100644 easy_phase_info_max.py delete mode 100644 min_time_climb_models/min_time_climb.py delete mode 100644 min_time_climb_models/multi_min_time_to_climb.py delete mode 100644 min_time_climb_models/plot_helper.py delete mode 100644 multi_aviary_submodel.py delete mode 100644 single_aviary.py diff --git a/cannonball_models/cannonball.py b/cannonball_models/cannonball.py deleted file mode 100644 index fc2fe1b9a..000000000 --- a/cannonball_models/cannonball.py +++ /dev/null @@ -1,308 +0,0 @@ -# Cannonball Multi Mission Example -# A single openMDAO problem is populated with Sizing (pre-mission) -# and Trajectory subsystems (any number of missions) -import numpy as np -from scipy.interpolate import interp1d -import matplotlib.pyplot as plt -import openmdao.api as om -import dymos as dm -from dymos.models.atmosphere.atmos_1976 import USatm1976Data - -""" -Currently has linked sizing and motion ODEs, want to add ability to have -multiple trajectories (and associated ODEs) that are linked with the same -sizing class. radii/density etc can be defined as 1xn inputs, with n corresponding -to num of missions. - -Additionally need to incorporate some output into a compound objective that is optimized, -aside from each mission optimizing for max range. Could for example assign $/kg of material. - -Could also add a "fuel" parameter which can then be minimized. -""" - - -class CannonballSizing(om.ExplicitComponent): - def setup(self): - self.add_input(name='radius', val=1.0, units='m') - self.add_input(name='dens', val=7870., units='kg/m**3') - - self.add_output(name='mass', shape=(1,), units='kg') - self.add_output(name='S', shape=(1,), units='m**2') - self.add_output(name='price', shape=(1,), units='USD') - - self.declare_partials(of='mass', wrt='dens') - self.declare_partials(of='mass', wrt='radius') - self.declare_partials(of='S', wrt='radius') - self.declare_partials(of='price', wrt='radius') - self.declare_partials(of='price', wrt='dens') - - def compute(self, inputs, outputs): - radius = inputs['radius'] - dens = inputs['dens'] - outputs['mass'] = (4/3.) * dens * np.pi * radius ** 3 - outputs['S'] = np.pi * radius ** 2 - outputs['price'] = (4/3.) * dens * np.pi * radius ** 3 * 10 # $10 per kg - - def compute_partials(self, inputs, partials): - radius = inputs['radius'] - dens = inputs['dens'] - partials['mass', 'dens'] = (4/3.) * np.pi * radius ** 3 - partials['mass', 'radius'] = 4. * dens * np.pi * radius ** 2 - partials['S', 'radius'] = 2 * np.pi * radius - partials['price', 'dens'] = (4/3.) * np.pi * radius ** 3 * 10 - partials['price', 'radius'] = 4. * dens * np.pi * radius ** 2 * 10 - - -class CannonballODE(om.ExplicitComponent): - def initialize(self): - self.options.declare('num_nodes', types=int) - - def setup(self): - nn = self.options['num_nodes'] - # static params - self.add_input('m', units='kg') - self.add_input('S', units='m**2') - self.add_input('CD', 0.5) - - # time varying inputs - self.add_input('h', units='m', shape=nn) - self.add_input('v', units='m/s', shape=nn) - self.add_input('gam', units='rad', shape=nn) - - # state rates - self.add_output('v_dot', shape=nn, units='m/s**2', - tags=['dymos.state_rate_source:v']) - self.add_output('gam_dot', shape=nn, units='rad/s', - tags=['dymos.state_rate_source:gam']) - self.add_output('h_dot', shape=nn, units='m/s', - tags=['dymos.state_rate_source:h']) - self.add_output('r_dot', shape=nn, units='m/s', - tags=['dymos.state_rate_source:r']) - self.add_output('ke', shape=nn, units='J') - - # Ask OpenMDAO to compute the partial derivatives using complex-step - # with a partial coloring algorithm for improved performance, and use - # a graph coloring algorithm to automatically detect the sparsity pattern. - self.declare_coloring(wrt='*', method='cs') - - alt_data = USatm1976Data.alt * om.unit_conversion('ft', 'm')[0] - rho_data = USatm1976Data.rho * om.unit_conversion('slug/ft**3', 'kg/m**3')[0] - self.rho_interp = interp1d(np.array(alt_data, dtype=complex), - np.array(rho_data, dtype=complex), - kind='linear') - - def compute(self, inputs, outputs): - - gam = inputs['gam'] - v = inputs['v'] - h = inputs['h'] - m = inputs['m'] - S = inputs['S'] - CD = inputs['CD'] - - GRAVITY = 9.80665 # m/s**2 - - # handle complex-step gracefully from the interpolant - if np.iscomplexobj(h): - rho = self.rho_interp(inputs['h']) - else: - rho = self.rho_interp(inputs['h']).real - - q = 0.5*rho*inputs['v']**2 - qS = q * S - D = qS * CD - cgam = np.cos(gam) - sgam = np.sin(gam) - outputs['v_dot'] = - D/m-GRAVITY*sgam - outputs['gam_dot'] = -(GRAVITY/v)*cgam - outputs['h_dot'] = v*sgam - outputs['r_dot'] = v*cgam - outputs['ke'] = 0.5*m*v**2 - - -# ODEs are unique to each traj created -def createTrajectory(ke_max): - traj = dm.Trajectory() - transcription = dm.Radau(num_segments=5, order=3, compressed=True) - ascent = dm.Phase(ode_class=CannonballODE, transcription=transcription) - traj.add_phase('ascent', ascent) - - transcription = dm.GaussLobatto(num_segments=5, order=3, compressed=True) - descent = dm.Phase(ode_class=CannonballODE, transcription=transcription) - traj.add_phase('descent', descent) - - for phase in (ascent, descent): - is_ascent = phase.name == "ascent" - phase.set_time_options(fix_initial=True if is_ascent else False, - duration_bounds=(1, 100), duration_ref=100, units='s') - phase.set_state_options('r', fix_initial=is_ascent, fix_final=False) - phase.set_state_options('h', fix_initial=is_ascent, fix_final=not is_ascent) - phase.set_state_options('gam', fix_initial=False, fix_final=is_ascent) - phase.set_state_options('v', fix_initial=False, fix_final=False) - phase.add_parameter('S', units='m**2', static_target=True, val=0.005) - phase.add_parameter('m', units='kg', static_target=True, val=1.0) - phase.add_parameter('price', units='USD', static_target=True, val=10) - phase.add_parameter('CD', units=None, static_target=True, val=0.5) - - # descent.add_objective('r', loc='final', scaler=-1.0) # negative means to maximize - for param in ('CD', 'm', 'S', 'price'): - traj.add_parameter(param, static_target=True) - - # Link Phases (link time and all state variables) - traj.link_phases(phases=['ascent', 'descent'], vars=['*']) - # have to set muzzle energy here before setup for sim to run properly - ascent.add_boundary_constraint('ke', loc='initial', - upper=ke_max, lower=0, ref=100000) - return traj, ascent, descent - - -p = om.Problem(model=om.Group()) - -p.driver = om.ScipyOptimizeDriver() -p.driver.options['optimizer'] = 'SLSQP' -p.driver.declare_coloring() - -kes = [4e5, 5e5] -# 2:1 ratio (or 1:2) causes results that essentially don't optimize the 1 mission, -# 1.01 works, 1.009 doesn't -# 2:1:1 works?! - may be related some normalization/bounds issue -weights = [1, 1] -num_trajs = len(kes) - -p.model.add_subsystem(f"sizing_comp", CannonballSizing(), - promotes_inputs=['radius', 'dens']) - -p.model.set_input_defaults('dens', val=7.87, units='g/cm**3') -p.model.add_design_var('radius', lower=0.01, upper=0.10, - ref0=0.01, ref=0.10, units='m') - -trajs, ascents, descents = [], [], [] -for i, ke in enumerate(kes): - traj, ascent, descent = createTrajectory(ke) - p.model.add_subsystem(f"traj_{i}", traj) - - # Issue Connections - p.model.connect(f"sizing_comp.mass", f"traj_{i}.parameters:m") - p.model.connect(f"sizing_comp.S", f"traj_{i}.parameters:S") - p.model.connect(f"sizing_comp.price", f"traj_{i}.parameters:price") - trajs.append(traj) - ascents.append(ascent) - descents.append(descent) - -ranges = [f"r{i}" for i in range(num_trajs)] -weighted_sum_str = "+".join([f"{weight}*{r}" for r, weight in zip(ranges, weights)]) -p.model.add_subsystem('compoundComp', om.ExecComp("compound_range="+weighted_sum_str), - promotes=['compound_range', *ranges]) -for i in range(num_trajs): - p.model.connect(f"traj_{i}.descent.states:r", f'r{i}', src_indices=-1) -# p.model.add_subsystem('compoundComp', -# om.ExecComp("compound_range=dot(ranges,weights)", -# weights={'val': weights}, -# ranges={'val': np.ones(num_trajs), 'units': 'm'}), -# promotes=['compound_range', 'ranges', 'weights']) - -# gg = [f'traj_{i}.descent.states:r' for i in range(num_trajs)] -# p.model.connect(gg, 'ranges', src_indices=-1) -# for i in range(num_trajs): -# p.model.connect(f"traj_{i}.descent.states:r", f'ranges[{i}]', src_indices=-1) - -p.model.add_objective('compound_range', scaler=-1) - - -# A linear solver at the top level can improve performance. -p.model.linear_solver = om.DirectSolver() -p.setup() - -p.set_val('radius', 0.05, units='m') -p.set_val('dens', 7.87, units='g/cm**3') - -for i, (ascent, descent) in enumerate(zip(ascents, descents)): - p.set_val(f"traj_{i}.parameters:CD", 0.5) - - p.set_val(f"traj_{i}.ascent.t_initial", 0.0) - p.set_val(f"traj_{i}.ascent.t_duration", 10.0) - # list is initial and final, based on phase info some are fixed others are not - p.set_val(f"traj_{i}.ascent.states:r", ascent.interp('r', [0, 100])) - p.set_val(f'traj_{i}.ascent.states:h', ascent.interp('h', [0, 100])) - p.set_val(f'traj_{i}.ascent.states:v', ascent.interp('v', [200, 150])) - p.set_val(f'traj_{i}.ascent.states:gam', ascent.interp('gam', [25, 0]), units='deg') - - p.set_val(f'traj_{i}.descent.t_initial', 10.0) - p.set_val(f'traj_{i}.descent.t_duration', 10.0) - - p.set_val(f'traj_{i}.descent.states:r', descent.interp('r', [100, 200])) - p.set_val(f'traj_{i}.descent.states:h', descent.interp('h', [100, 0])) - p.set_val(f'traj_{i}.descent.states:v', descent.interp('v', [150, 200])) - p.set_val(f'traj_{i}.descent.states:gam', - descent.interp('gam', [0, -45]), units='deg') - - -dm.run_problem(p, simulate=True) -sol = om.CaseReader('dymos_solution.db').get_case('final') -sim = om.CaseReader('dymos_simulation.db').get_case('final') - - -def plotstuff(): - print("\n\n=================================================") - print( - f"Optimized {num_trajs} trajectories with weights: {', '.join(map(str,weights))}") - rad = p.get_val('radius', units='cm')[0] - mass = p.get_val('sizing_comp.mass', units='kg')[0] - price = p.get_val('sizing_comp.price', units='USD')[0] - area = p.get_val('sizing_comp.S', units='cm**2')[0] - print("\nOptimal Cannonball Description:") - print( - f"\tRadius: {rad:.2f} cm, Mass: {mass:.2f} kg, Price: ${price:.2f}, Area: {area:.2f} sqcm") - - print("\nOptimal Trajectory Descriptions:") - for i, ke in enumerate(kes): - angle = p.get_val(f'traj_{i}.ascent.timeseries.gam', units='deg')[0, 0] - max_range = p.get_val(f'traj_{i}.descent.timeseries.r')[-1, 0] - - print( - f"\tKE: {ke/1e3:.2f} KJ, Launch Angle: {angle:.2f} deg, Max Range: {max_range:.2f} m") - - # fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10, 6)) - # time_imp = {'ascent': p.get_val('traj_0.ascent.timeseries.time'), - # 'descent': p.get_val('traj_0.descent.timeseries.time')} - # time_exp = {'ascent': sim.get_val('traj_0.ascent.timeseries.time'), - # 'descent': sim.get_val('traj_0.descent.timeseries.time')} - # r_imp = {'ascent': p.get_val('traj_0.ascent.timeseries.r'), - # 'descent': p.get_val('traj_0.descent.timeseries.r')} - # r_exp = {'ascent': sim.get_val('traj_0.ascent.timeseries.r'), - # 'descent': sim.get_val('traj_0.descent.timeseries.r')} - # h_imp = {'ascent': p.get_val('traj_0.ascent.timeseries.h'), - # 'descent': p.get_val('traj_0.descent.timeseries.h')} - # h_exp = {'ascent': sim.get_val('traj_0.ascent.timeseries.h'), - # 'descent': sim.get_val('traj_0.descent.timeseries.h')} - - # axes.plot(r_imp['ascent'], h_imp['ascent'], 'bo') - # axes.plot(r_imp['descent'], h_imp['descent'], 'ro') - # axes.plot(r_exp['ascent'], h_exp['ascent'], 'b--') - # axes.plot(r_exp['descent'], h_exp['descent'], 'r--') - - # axes.set_xlabel('range (m)') - # axes.set_ylabel('altitude (m)') - # axes.grid(True) - - # fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(10, 6)) - # states = ['r', 'h', 'v', 'gam'] - # for i, state in enumerate(states): - # x_imp = {'ascent': sol.get_val(f'traj_0.ascent.timeseries.{state}'), - # 'descent': sol.get_val(f'traj_0.descent.timeseries.{state}')} - - # x_exp = {'ascent': sim.get_val(f'traj_0.ascent.timeseries.{state}'), - # 'descent': sim.get_val(f'traj_0.descent.timeseries.{state}')} - - # axes[i].set_ylabel(state) - # axes[i].grid(True) - - # axes[i].plot(time_imp['ascent'], x_imp['ascent'], 'bo') - # axes[i].plot(time_imp['descent'], x_imp['descent'], 'ro') - # axes[i].plot(time_exp['ascent'], x_exp['ascent'], 'b--') - # axes[i].plot(time_exp['descent'], x_exp['descent'], 'r--') - - # plt.show() - - -plotstuff() diff --git a/cannonball_models/multi_cannonball_copymodel.py b/cannonball_models/multi_cannonball_copymodel.py deleted file mode 100644 index 06effc571..000000000 --- a/cannonball_models/multi_cannonball_copymodel.py +++ /dev/null @@ -1,409 +0,0 @@ -# Cannonball Multi Mission Example with Aviary-esque setup -# Each mission is defined as a "CannonballProblem", akin to AviaryProblem -from dymos.models.atmosphere.atmos_1976 import USatm1976Data -from scipy.interpolate import interp1d -import matplotlib.pyplot as plt -import openmdao.api as om -import dymos as dm -import numpy as np -import sys - - -class CannonballProblem(om.Problem): - def __init__(self): - super().__init__() - self.model = CannonballGroup() - self.pre_mission = PreMissionGroup() - self.post_mission = PostMissionGroup() - self.traj = None - self.model.add_subsystem('pre_mission', self.pre_mission, - promotes=['*']) - self.model.add_subsystem('post_mission', self.post_mission) - - def add_trajectory(self, ke_max=1e2): - traj = dm.Trajectory() - transcription = dm.Radau(num_segments=5, order=3, compressed=True) - ascent = dm.Phase(ode_class=CannonballODE, transcription=transcription) - traj.add_phase('ascent', ascent) - - transcription = dm.GaussLobatto(num_segments=5, order=3, compressed=True) - descent = dm.Phase(ode_class=CannonballODE, transcription=transcription) - traj.add_phase('descent', descent) - - for phase in (ascent, descent): - is_ascent = phase.name == "ascent" - phase.set_time_options(fix_initial=True if is_ascent else False, - duration_bounds=(1, 100), duration_ref=100, units='s') - phase.set_state_options('r', fix_initial=is_ascent, fix_final=False) - phase.set_state_options('h', fix_initial=is_ascent, fix_final=not is_ascent) - phase.set_state_options('gam', fix_initial=False, fix_final=is_ascent) - phase.set_state_options('v', fix_initial=False, fix_final=False) - phase.add_parameter('S', units='m**2', static_target=True, val=0.005) - phase.add_parameter('m', units='kg', static_target=True, val=1.0) - phase.add_parameter('price', units='USD', static_target=True, val=10) - phase.add_parameter('CD', units=None, static_target=True, val=0.5) - - # descent.add_objective('r', loc='final', scaler=-1.0) # negative means to maximize - for param in ('CD', 'm', 'S', 'price'): - traj.add_parameter(param, static_target=True) - - # Link Phases (link time and all state variables) - traj.link_phases(phases=['ascent', 'descent'], vars=['*']) - # have to set muzzle energy here before setup for sim to run properly - ascent.add_boundary_constraint('ke', loc='initial', - upper=ke_max, lower=0, ref=100000) - self.traj = traj - self.model.add_subsystem('traj', traj) - self.phases = [ascent, descent] - - def setDefaults(self): - self.model.set_input_defaults('density', val=7.87, units='g/cm**3') - - def addDesVar(self): - self.model.add_design_var('radius', lower=0.01, upper=0.10, - ref0=0.01, ref=0.10, units='m') - - def connectPreTraj(self): - self.model.connect('mass', 'traj.parameters:m') - self.model.connect('S', 'traj.parameters:S') - self.model.connect('price', 'traj.parameters:price') - - def setInitialVals(self, super_problem=None, prefix=""): - ref = self - if super_problem is not None and prefix != "": - ref = super_problem - - ref.set_val(prefix+'radius', 0.05, units='m') - ref.set_val(prefix+'density', 7.87, units='g/cm**3') - - ref.set_val(prefix+"traj.parameters:CD", 0.5) - ref.set_val(prefix+"traj.ascent.t_initial", 0.0) - ref.set_val(prefix+"traj.ascent.t_duration", 10.0) - - # list is initial and final, based on phase info some are fixed others are not - ascent, descent = self.phases - ref.set_val(prefix+"traj.ascent.states:r", ascent.interp('r', [0, 100])) - ref.set_val(prefix+'traj.ascent.states:h', ascent.interp('h', [0, 100])) - ref.set_val(prefix+'traj.ascent.states:v', ascent.interp('v', [200, 150])) - ref.set_val(prefix+'traj.ascent.states:gam', - ascent.interp('gam', [25, 0]), units='deg') - - ref.set_val(prefix+'traj.descent.t_initial', 10.0) - ref.set_val(prefix+'traj.descent.t_duration', 10.0) - ref.set_val(prefix+'traj.descent.states:r', descent.interp('r', [100, 200])) - ref.set_val(prefix+'traj.descent.states:h', descent.interp('h', [100, 0])) - ref.set_val(prefix+'traj.descent.states:v', descent.interp('v', [150, 200])) - ref.set_val(prefix+'traj.descent.states:gam', - descent.interp('gam', [0, -45]), units='deg') - - -class CannonballGroup(om.Group): - def __init__(self): - super().__init__() - - -class PreMissionGroup(om.Group): - def __init__(self): - super().__init__() - self.sizingcomp = CannonballSizing() - self.add_subsystem('sizing_comp', self.sizingcomp, - promotes=['*']) - - -class PostMissionGroup(om.Group): - pass - - -class CannonballODE(om.ExplicitComponent): - def initialize(self): - self.options.declare('num_nodes', types=int) - - def setup(self): - nn = self.options['num_nodes'] - # static params - self.add_input('m', units='kg') - self.add_input('S', units='m**2') - self.add_input('CD', 0.5) - - # time varying inputs - self.add_input('h', units='m', shape=nn) - self.add_input('v', units='m/s', shape=nn) - self.add_input('gam', units='rad', shape=nn) - - # state rates - self.add_output('v_dot', shape=nn, units='m/s**2', - tags=['dymos.state_rate_source:v']) - self.add_output('gam_dot', shape=nn, units='rad/s', - tags=['dymos.state_rate_source:gam']) - self.add_output('h_dot', shape=nn, units='m/s', - tags=['dymos.state_rate_source:h']) - self.add_output('r_dot', shape=nn, units='m/s', - tags=['dymos.state_rate_source:r']) - self.add_output('ke', shape=nn, units='J') - - # Ask OpenMDAO to compute the partial derivatives using complex-step - # with a partial coloring algorithm for improved performance, and use - # a graph coloring algorithm to automatically detect the sparsity pattern. - self.declare_coloring(wrt='*', method='cs') - - alt_data = USatm1976Data.alt * om.unit_conversion('ft', 'm')[0] - rho_data = USatm1976Data.rho * om.unit_conversion('slug/ft**3', 'kg/m**3')[0] - self.rho_interp = interp1d(np.array(alt_data, dtype=complex), - np.array(rho_data, dtype=complex), - kind='linear') - - def compute(self, inputs, outputs): - - gam = inputs['gam'] - v = inputs['v'] - h = inputs['h'] - m = inputs['m'] - S = inputs['S'] - CD = inputs['CD'] - - GRAVITY = 9.80665 # m/s**2 - - # handle complex-step gracefully from the interpolant - if np.iscomplexobj(h): - rho = self.rho_interp(inputs['h']) - else: - rho = self.rho_interp(inputs['h']).real - - q = 0.5*rho*inputs['v']**2 - qS = q * S - D = qS * CD - cgam = np.cos(gam) - sgam = np.sin(gam) - outputs['v_dot'] = - D/m-GRAVITY*sgam - outputs['gam_dot'] = -(GRAVITY/v)*cgam - outputs['h_dot'] = v*sgam - outputs['r_dot'] = v*cgam - outputs['ke'] = 0.5*m*v**2 - - -class CannonballSizing(om.ExplicitComponent): - def setup(self): - self.add_input(name='radius', val=1.0, units='m') - self.add_input(name='density', val=7870., units='kg/m**3') - - self.add_output(name='mass', shape=(1,), units='kg') - self.add_output(name='S', shape=(1,), units='m**2') - self.add_output(name='price', shape=(1,), units='USD') - - self.declare_partials(of='mass', wrt='density') - self.declare_partials(of='mass', wrt='radius') - self.declare_partials(of='S', wrt='radius') - self.declare_partials(of='price', wrt='radius') - self.declare_partials(of='price', wrt='density') - - def compute(self, inputs, outputs): - radius = inputs['radius'] - density = inputs['density'] - outputs['mass'] = (4/3.) * density * np.pi * radius ** 3 - outputs['S'] = np.pi * radius ** 2 - outputs['price'] = (4/3.) * density * np.pi * radius ** 3 * 10 # $10 per kg - - def compute_partials(self, inputs, partials): - radius = inputs['radius'] - density = inputs['density'] - partials['mass', 'density'] = (4/3.) * np.pi * radius ** 3 - partials['mass', 'radius'] = 4. * density * np.pi * radius ** 2 - partials['S', 'radius'] = 2 * np.pi * radius - partials['price', 'density'] = (4/3.) * np.pi * radius ** 3 * 10 - partials['price', 'radius'] = 4. * density * np.pi * radius ** 2 * 10 - - -def runAvCannonball(kes=[4e3], weights=[1], makeN2=False): - # handling of multiple KEs - # if fewer weights present than KEs, use same weight - if len(kes) > len(weights): - weights = [1]*len(kes) - elif len(kes) < len(weights): - raise Exception("Cannot have more weights than cannons!") - num_trajs = len(kes) - - probs = [] - super_prob = om.Problem() - - # create sub problems and add them to super in a group - # group prevents spillage of promoted vars into super - prefix = "group" # prefix for each om.Group - for i, ke in enumerate(kes): - prob = CannonballProblem() - prob.add_trajectory(ke_max=ke) - prob.setDefaults() - prob.addDesVar() # doesn't seem to do anything - prob.connectPreTraj() - - super_prob.model.add_subsystem(prefix+f'_{i}', prob.model, - promotes_inputs=['radius', 'density']) - probs.append(prob) - - # create an execComp with a compound range function to maximize range - # for all cannons with a weighted function - ranges = [f"r{i}" for i in range(num_trajs)] # looks like: [r0, r1, ...] - # weighted_sum_str looks like: 1*r0+1*r1+... - weighted_sum_str = "+".join([f"{weight}*{r}" for r, weight in zip(ranges, weights)]) - super_prob.model.add_subsystem('compoundComp', om.ExecComp( - "compound_range=" + weighted_sum_str), - promotes=['compound_range', *ranges]) - - # controlling radius to affect mass/ballistic coeff - super_prob.model.add_design_var('radius', lower=0.01, upper=0.10, - ref0=0.01, ref=0.10, units='m') - - for i in range(num_trajs): - # connect end of trajectory range to compound range input - super_prob.model.connect( - prefix+f'_{i}.traj.descent.states:r', ranges[i], - src_indices=-1) - - super_prob.model.add_objective('compound_range', scaler=-1) # maximize range - - super_prob.driver = om.ScipyOptimizeDriver() - super_prob.driver.options['optimizer'] = 'SLSQP' - super_prob.driver.declare_coloring() - super_prob.model.linear_solver = om.DirectSolver() - super_prob.setup() - - for i, prob in enumerate(probs): - subprefix = prefix+f"_{i}." - prob.setInitialVals(super_prob, subprefix) - - if makeN2: - sys.path.append('../') - from createN2 import createN2 - createN2(__file__, super_prob) - - dm.run_problem(super_prob) - return super_prob, prefix, num_trajs, kes, weights - - -def printOutput(super_prob, prefix, num_trajs, kes, weights): - # formatted output - print("\n\n=================================================") - print( - f"Optimized {num_trajs} trajectories with weights: {', '.join(map(str,weights))}") - rad = super_prob.get_val('radius', units='cm')[0] - - mass0 = super_prob.get_val(prefix+'_0.mass', units='kg')[0] - price0 = super_prob.get_val(prefix+'_0.price', units='USD')[0] - area0 = super_prob.get_val(prefix+'_0.S', units='cm**2')[0] - - # mass, price, S are outputs from sizing. These should be common amongst all - # trajectories, however since they're outputs they cannot be promoted upto - # super problem without unique names. This loop checks their values with - # value of the first trajectory to ensure they are the same. - if num_trajs > 1: - for i in range(num_trajs-1): - mass = super_prob.get_val(prefix+f'_{i+1}.mass', units='kg')[0] - price = super_prob.get_val(prefix+f'_{i+1}.price', units='USD')[0] - area = super_prob.get_val(prefix+f'_{i+1}.S', units='cm**2')[0] - if mass != mass0 or price != price0 or area != area0: - raise Exception( - "Masses, Prices, and/or Areas are not equivalent between trajectories.") - - print("\nOptimal Cannonball Description:") - print( - f"\tRadius: {rad:.2f} cm, Mass: {mass0:.2f} kg, Price: ${price0:.2f}, Area: {area0:.2f} sqcm") - - print("\nOptimal Trajectory Descriptions:") - ranges = 0 - for i, ke in enumerate(kes): - angle = super_prob.get_val( - prefix+f'_{i}.traj.ascent.timeseries.gam', units='deg')[0, 0] - max_range = super_prob.get_val( - prefix+f'_{i}.traj.descent.timeseries.r')[-1, 0] - - print( - f"\tKE: {ke/1e3:.2f} KJ, Launch Angle: {angle:.2f} deg, Max Range: {max_range:.2f} m") - ranges += weights[i]*max_range - print(f"System range: {ranges}") - - -def plotOutput(super_prob, prefix, num_trajs, kes, weights, show=True): - if show: - _, ax = plt.subplots() - timevals = [] - hvals = [] - rvals = [] - for i in range(num_trajs): - tv = [] - hv = [] - rv = [] - for phase in ('ascent', 'descent'): - tv.append(super_prob.get_val( - prefix+f'_{i}.traj.{phase}.timeseries.time')) - hv.append(super_prob.get_val( - prefix+f'_{i}.traj.{phase}.timeseries.h')) - rv.append(super_prob.get_val( - prefix+f'_{i}.traj.{phase}.timeseries.r')) - - timevals.append(np.vstack(tv)) - hvals.append(np.vstack(hv)) - rvals.append(np.vstack(rv)) - if show: - ax.plot(rvals[-1], hvals[-1]) - - if show: - plt.grid() - plt.legend([f"Weights = {weight}" for weight in weights]) - plt.title(f"Cannonballs With KEs: {kes} J") - plt.show() - return timevals, rvals, hvals - - -def multiTestCase(makeN2=False): - testing_weights = [[2, 1.2], [1.2, 2], [1, 1]] - kes = [1e5, 6e5] - legendlst = [] - rs, hs = [], [] - for weighting in testing_weights: - super_prob, prefix, num_trajs, kes, weights = runAvCannonball( - kes=kes, weights=weighting, makeN2=makeN2) - printOutput(super_prob, prefix, num_trajs, kes, weights) - tvals, rvals, hvals = plotOutput( - super_prob, prefix, num_trajs, kes, weights, show=False) - - for r, h, weight, ke in zip(rvals, hvals, weighting, kes): - rs.append(r) - hs.append(h) - legendlst.append(f"KE: {ke/1e3} kJ, Weight: {weight} of {weighting}") - - _, ax = plt.subplots() - colors = ['r--', 'r-', 'b--', 'b-', 'g--', 'g-'] # same color for each cannonball - for r, h, col in zip(rs, hs, colors): - ax.plot(r, h, col) - plt.grid() - plt.legend(legendlst, loc='upper left') - titlestr = ", ".join([str(ke/1e3) for ke in kes]) - plt.title(f"Cannonballs With KEs: {titlestr} kJ") - plt.show() - - -if __name__ == '__main__': - # if run as python avcannonball.py n2, it will create an N2 - makeN2 = False - singlerun = True - if len(sys.argv) > 1: - if "n2" in sys.argv: - makeN2 = True - if "multi" in sys.argv: - # runs multiple weightings to see what impact system optimization makes - multiTestCase(makeN2) - singlerun = False - - if singlerun: - # singular weighting run - super_prob, prefix, num_trajs, kes, weights = runAvCannonball( - kes=[4e5, 6e5], weights=[2, 1.5], makeN2=makeN2) - printOutput(super_prob, prefix, num_trajs, kes, weights) - plotOutput(super_prob, prefix, num_trajs, kes, weights) - - -""" -Findings: -- importing prob.model solves the issue of connecting traj to pre/post mission (at least in cannonball) -- initial values can be set with the internal function as long as set_val gets called on the super problem instance - and as such the variable name passed in contains the unique reference - """ diff --git a/cannonball_models/multi_cannonball_copyparts.py b/cannonball_models/multi_cannonball_copyparts.py deleted file mode 100644 index 327b983d2..000000000 --- a/cannonball_models/multi_cannonball_copyparts.py +++ /dev/null @@ -1,484 +0,0 @@ -# Cannonball Multi Mission Example with Aviary-esque setup -# Each mission is defined as a "CannonballProblem", akin to AviaryProblem -from dymos.models.atmosphere.atmos_1976 import USatm1976Data -from scipy.interpolate import interp1d -import matplotlib.pyplot as plt -import openmdao.api as om -import dymos as dm -import numpy as np -import sys - - -class CannonballProblem(om.Problem): - def __init__(self): - super().__init__() - self.model = CannonballGroup() - self.pre_mission = PreMissionGroup() - self.post_mission = PostMissionGroup() - self.traj = None - self.model.add_subsystem('pre_mission', self.pre_mission, - promotes=['*']) - self.model.add_subsystem('post_mission', self.post_mission) - - def add_trajectory(self, ke_max=1e2): - traj = dm.Trajectory() - transcription = dm.Radau(num_segments=5, order=3, compressed=True) - ascent = dm.Phase(ode_class=CannonballODE, transcription=transcription) - traj.add_phase('ascent', ascent) - - transcription = dm.GaussLobatto(num_segments=5, order=3, compressed=True) - descent = dm.Phase(ode_class=CannonballODE, transcription=transcription) - traj.add_phase('descent', descent) - - for phase in (ascent, descent): - is_ascent = phase.name == "ascent" - phase.set_time_options(fix_initial=True if is_ascent else False, - duration_bounds=(1, 100), duration_ref=100, units='s') - phase.set_state_options('r', fix_initial=is_ascent, fix_final=False) - phase.set_state_options('h', fix_initial=is_ascent, fix_final=not is_ascent) - phase.set_state_options('gam', fix_initial=False, fix_final=is_ascent) - phase.set_state_options('v', fix_initial=False, fix_final=False) - phase.add_parameter('S', units='m**2', static_target=True, val=0.005) - phase.add_parameter('m', units='kg', static_target=True, val=1.0) - phase.add_parameter('price', units='USD', static_target=True, val=10) - phase.add_parameter('CD', units=None, static_target=True, val=0.5) - - # descent.add_objective('r', loc='final', scaler=-1.0) # negative means to maximize - for param in ('CD', 'm', 'S', 'price'): - traj.add_parameter(param, static_target=True) - - # Link Phases (link time and all state variables) - traj.link_phases(phases=['ascent', 'descent'], vars=['*']) - # have to set muzzle energy here before setup for sim to run properly - ascent.add_boundary_constraint('ke', loc='initial', - upper=ke_max, lower=0, ref=100000) - self.traj = traj - self.model.add_subsystem('traj', traj) - self.phases = [ascent, descent] - - def setDefaults(self): - self.model.set_input_defaults('density', val=7.87, units='g/cm**3') - - def addDesVar(self): - self.model.add_design_var('radius', lower=0.01, upper=0.10, - ref0=0.01, ref=0.10, units='m') - - def connectPreTraj(self): - self.model.connect('mass', 'traj.parameters:m') - self.model.connect('S', 'traj.parameters:S') - self.model.connect('price', 'traj.parameters:price') - - def setInitialVals(self): - self.set_val('radius', 0.05, units='m') - self.set_val('density', 7.87, units='g/cm**3') - - self.set_val("traj.parameters:CD", 0.5) - - self.set_val("traj.ascent.t_initial", 0.0) - self.set_val("traj.ascent.t_duration", 10.0) - # list is initial and final, based on phase info some are fixed others are not - ascent, descent = self.phases - self.set_val("traj.ascent.states:r", ascent.interp('r', [0, 100])) - self.set_val('traj.ascent.states:h', ascent.interp('h', [0, 100])) - self.set_val('traj.ascent.states:v', ascent.interp('v', [200, 150])) - self.set_val('traj.ascent.states:gam', - ascent.interp('gam', [25, 0]), units='deg') - - self.set_val('traj.descent.t_initial', 10.0) - self.set_val('traj.descent.t_duration', 10.0) - - self.set_val('traj.descent.states:r', descent.interp('r', [100, 200])) - self.set_val('traj.descent.states:h', descent.interp('h', [100, 0])) - self.set_val('traj.descent.states:v', descent.interp('v', [150, 200])) - self.set_val('traj.descent.states:gam', - descent.interp('gam', [0, -45]), units='deg') - - -class CannonballGroup(om.Group): - def __init__(self): - super().__init__() - - -class PreMissionGroup(om.Group): - def __init__(self): - super().__init__() - self.sizingcomp = CannonballSizing() - self.add_subsystem('sizing_comp', self.sizingcomp, - promotes=['*']) - - -class PostMissionGroup(om.Group): - pass - - -class CannonballODE(om.ExplicitComponent): - def initialize(self): - self.options.declare('num_nodes', types=int) - - def setup(self): - nn = self.options['num_nodes'] - # static params - self.add_input('m', units='kg') - self.add_input('S', units='m**2') - self.add_input('CD', 0.5) - - # time varying inputs - self.add_input('h', units='m', shape=nn) - self.add_input('v', units='m/s', shape=nn) - self.add_input('gam', units='rad', shape=nn) - - # state rates - self.add_output('v_dot', shape=nn, units='m/s**2', - tags=['dymos.state_rate_source:v']) - self.add_output('gam_dot', shape=nn, units='rad/s', - tags=['dymos.state_rate_source:gam']) - self.add_output('h_dot', shape=nn, units='m/s', - tags=['dymos.state_rate_source:h']) - self.add_output('r_dot', shape=nn, units='m/s', - tags=['dymos.state_rate_source:r']) - self.add_output('ke', shape=nn, units='J') - - # Ask OpenMDAO to compute the partial derivatives using complex-step - # with a partial coloring algorithm for improved performance, and use - # a graph coloring algorithm to automatically detect the sparsity pattern. - self.declare_coloring(wrt='*', method='cs') - - alt_data = USatm1976Data.alt * om.unit_conversion('ft', 'm')[0] - rho_data = USatm1976Data.rho * om.unit_conversion('slug/ft**3', 'kg/m**3')[0] - self.rho_interp = interp1d(np.array(alt_data, dtype=complex), - np.array(rho_data, dtype=complex), - kind='linear') - - def compute(self, inputs, outputs): - - gam = inputs['gam'] - v = inputs['v'] - h = inputs['h'] - m = inputs['m'] - S = inputs['S'] - CD = inputs['CD'] - - GRAVITY = 9.80665 # m/s**2 - - # handle complex-step gracefully from the interpolant - if np.iscomplexobj(h): - rho = self.rho_interp(inputs['h']) - else: - rho = self.rho_interp(inputs['h']).real - - q = 0.5*rho*inputs['v']**2 - qS = q * S - D = qS * CD - cgam = np.cos(gam) - sgam = np.sin(gam) - outputs['v_dot'] = - D/m-GRAVITY*sgam - outputs['gam_dot'] = -(GRAVITY/v)*cgam - outputs['h_dot'] = v*sgam - outputs['r_dot'] = v*cgam - outputs['ke'] = 0.5*m*v**2 - - -class CannonballSizing(om.ExplicitComponent): - def setup(self): - self.add_input(name='radius', val=1.0, units='m') - self.add_input(name='density', val=7870., units='kg/m**3') - - self.add_output(name='mass', shape=(1,), units='kg') - self.add_output(name='S', shape=(1,), units='m**2') - self.add_output(name='price', shape=(1,), units='USD') - - self.declare_partials(of='mass', wrt='density') - self.declare_partials(of='mass', wrt='radius') - self.declare_partials(of='S', wrt='radius') - self.declare_partials(of='price', wrt='radius') - self.declare_partials(of='price', wrt='density') - - def compute(self, inputs, outputs): - radius = inputs['radius'] - density = inputs['density'] - outputs['mass'] = (4/3.) * density * np.pi * radius ** 3 - outputs['S'] = np.pi * radius ** 2 - outputs['price'] = (4/3.) * density * np.pi * radius ** 3 * 10 # $10 per kg - - def compute_partials(self, inputs, partials): - radius = inputs['radius'] - density = inputs['density'] - partials['mass', 'density'] = (4/3.) * np.pi * radius ** 3 - partials['mass', 'radius'] = 4. * density * np.pi * radius ** 2 - partials['S', 'radius'] = 2 * np.pi * radius - partials['price', 'density'] = (4/3.) * np.pi * radius ** 3 * 10 - partials['price', 'radius'] = 4. * density * np.pi * radius ** 2 * 10 - - -def runAvCannonball(kes=[4e3], weights=[1], makeN2=False): - # handling of multiple KEs - # if fewer weights present than KEs, use same weight - if len(kes) > len(weights): - weights = [1]*len(kes) - elif len(kes) < len(weights): - raise Exception("Cannot have more weights than cannons!") - num_trajs = len(kes) - - probs = [] - super_prob = om.Problem() - - # create sub problems and add them to super in a group - # group prevents spillage of promoted vars into super - prefix = "group" # prefix for each om.Group - for i, ke in enumerate(kes): - prob = CannonballProblem() - prob.add_trajectory(ke_max=ke) - prob.setDefaults() - prob.addDesVar() # doesn't seem to do anything - prob.connectPreTraj() # doesn't seem to actually do anything - - group = om.Group() - group.add_subsystem('pre_mission', prob.pre_mission) - group.add_subsystem('traj', prob.traj) - group.add_subsystem('post_mission', prob.post_mission) - # promoting radius and density keeps it constant for all missions - super_prob.model.add_subsystem(prefix+f'_{i}', group, - promotes_inputs=['radius', 'density']) - probs.append(prob) - - # create an execComp with a compound range function to maximize range - # for all cannons with a weighted function - ranges = [f"r{i}" for i in range(num_trajs)] # looks like: [r0, r1, ...] - # weighted_sum_str looks like: 1*r0+1*r1+... - weighted_sum_str = "+".join([f"{weight}*{r}" for r, weight in zip(ranges, weights)]) - super_prob.model.add_subsystem('compoundComp', om.ExecComp( - "compound_range=" + weighted_sum_str), - promotes=['compound_range', *ranges]) - - # controlling radius to affect mass/ballistic coeff - super_prob.model.add_design_var('radius', lower=0.01, upper=0.10, - ref0=0.01, ref=0.10, units='m') - - for i in range(num_trajs): - # connect end of trajectory range to compound range input - super_prob.model.connect( - prefix+f'_{i}.traj.descent.states:r', ranges[i], - src_indices=-1) - - # connect pre-mission parameters to trajectory counter parts - # this connection would happen within each problem's internal function, - # but since we're extracting the components into a larger problem, - # these connections have to be made at the super problem level - super_prob.model.connect( - prefix+f'_{i}.mass', prefix+f'_{i}.traj.parameters:m') - super_prob.model.connect( - prefix+f'_{i}.S', prefix+f'_{i}.traj.parameters:S') - super_prob.model.connect( - prefix+f'_{i}.price', prefix+f'_{i}.traj.parameters:price') - - super_prob.model.add_objective('compound_range', scaler=-1) # maximize range - - super_prob.driver = om.ScipyOptimizeDriver() - super_prob.driver.options['optimizer'] = 'SLSQP' - super_prob.driver.declare_coloring() - super_prob.model.linear_solver = om.DirectSolver() - super_prob.setup() - - for i, prob in enumerate(probs): - reference = prefix+f"_{i}" - super_prob.set_val(reference+'.radius', 0.05, units='m') - super_prob.set_val(reference+'.density', 7.87, units='g/cm**3') - - super_prob.set_val(reference+".traj.parameters:CD", 0.5) - - super_prob.set_val(reference+".traj.ascent.t_initial", 0.0) - super_prob.set_val(reference+".traj.ascent.t_duration", 10.0) - # list is initial and final, based on phase info some are fixed others are not - ascent, descent = prob.phases - super_prob.set_val(reference+".traj.ascent.states:r", - ascent.interp('r', [0, 100])) - super_prob.set_val(reference+'.traj.ascent.states:h', - ascent.interp('h', [0, 100])) - super_prob.set_val(reference+'.traj.ascent.states:v', - ascent.interp('v', [200, 150])) - super_prob.set_val(reference+'.traj.ascent.states:gam', - ascent.interp('gam', [25, 0]), units='deg') - - super_prob.set_val(reference+'.traj.descent.t_initial', 10.0) - super_prob.set_val(reference+'.traj.descent.t_duration', 10.0) - - super_prob.set_val(reference+'.traj.descent.states:r', - descent.interp('r', [100, 200])) - super_prob.set_val(reference+'.traj.descent.states:h', - descent.interp('h', [100, 0])) - super_prob.set_val(reference+'.traj.descent.states:v', - descent.interp('v', [150, 200])) - super_prob.set_val(reference+'.traj.descent.states:gam', - descent.interp('gam', [0, -45]), units='deg') - - if makeN2: - sys.path.append('../') - from createN2 import createN2 - createN2(__file__, super_prob) - - dm.run_problem(super_prob) - return super_prob, prefix, num_trajs, kes, weights - - -def printOutput(super_prob, prefix, num_trajs, kes, weights): - # formatted output - print("\n\n=================================================") - print( - f"Optimized {num_trajs} trajectories with weights: {', '.join(map(str,weights))}") - rad = super_prob.get_val('radius', units='cm')[0] - - mass0 = super_prob.get_val(prefix+'_0.mass', units='kg')[0] - price0 = super_prob.get_val(prefix+'_0.price', units='USD')[0] - area0 = super_prob.get_val(prefix+'_0.S', units='cm**2')[0] - - # mass, price, S are outputs from sizing. These should be common amongst all - # trajectories, however since they're outputs they cannot be promoted upto - # super problem without unique names. This loop checks their values with - # value of the first trajectory to ensure they are the same. - if num_trajs > 1: - for i in range(num_trajs-1): - mass = super_prob.get_val(prefix+f'_{i+1}.mass', units='kg')[0] - price = super_prob.get_val(prefix+f'_{i+1}.price', units='USD')[0] - area = super_prob.get_val(prefix+f'_{i+1}.S', units='cm**2')[0] - if mass != mass0 or price != price0 or area != area0: - raise Exception( - "Masses, Prices, and/or Areas are not equivalent between trajectories.") - - print("\nOptimal Cannonball Description:") - print( - f"\tRadius: {rad:.2f} cm, Mass: {mass0:.2f} kg, Price: ${price0:.2f}, Area: {area0:.2f} sqcm") - - print("\nOptimal Trajectory Descriptions:") - ranges = 0 - for i, ke in enumerate(kes): - angle = super_prob.get_val( - prefix+f'_{i}.traj.ascent.timeseries.gam', units='deg')[0, 0] - max_range = super_prob.get_val( - prefix+f'_{i}.traj.descent.timeseries.r')[-1, 0] - - print( - f"\tKE: {ke/1e3:.2f} KJ, Launch Angle: {angle:.2f} deg, Max Range: {max_range:.2f} m") - ranges += weights[i]*max_range - print(f"System range: {ranges}") - - -def plotOutput(super_prob, prefix, num_trajs, kes, weights, show=True): - if show: - _, ax = plt.subplots() - timevals = [] - hvals = [] - rvals = [] - for i in range(num_trajs): - tv = [] - hv = [] - rv = [] - for phase in ('ascent', 'descent'): - tv.append(super_prob.get_val( - prefix+f'_{i}.traj.{phase}.timeseries.time')) - hv.append(super_prob.get_val( - prefix+f'_{i}.traj.{phase}.timeseries.h')) - rv.append(super_prob.get_val( - prefix+f'_{i}.traj.{phase}.timeseries.r')) - - timevals.append(np.vstack(tv)) - hvals.append(np.vstack(hv)) - rvals.append(np.vstack(rv)) - if show: - ax.plot(rvals[-1], hvals[-1]) - - if show: - plt.grid() - plt.legend([f"Weights = {weight}" for weight in weights]) - plt.title(f"Cannonballs With KEs: {kes} J") - plt.show() - return timevals, rvals, hvals - - -def multiTestCase(makeN2=False): - testing_weights = [[2, 1.2], [1.2, 2], [1, 1]] - kes = [1e5, 6e5] - legendlst = [] - rs, hs = [], [] - for weighting in testing_weights: - super_prob, prefix, num_trajs, kes, weights = runAvCannonball( - kes=kes, weights=weighting, makeN2=makeN2) - printOutput(super_prob, prefix, num_trajs, kes, weights) - tvals, rvals, hvals = plotOutput( - super_prob, prefix, num_trajs, kes, weights, show=False) - - for r, h, weight, ke in zip(rvals, hvals, weighting, kes): - rs.append(r) - hs.append(h) - legendlst.append(f"KE: {ke/1e3} kJ, Weight: {weight} of {weighting}") - - _, ax = plt.subplots() - colors = ['r--', 'r-', 'b--', 'b-', 'g--', 'g-'] # same color for each cannonball - for r, h, col in zip(rs, hs, colors): - ax.plot(r, h, col) - plt.grid() - plt.legend(legendlst, loc='upper left') - titlestr = ", ".join([str(ke/1e3) for ke in kes]) - plt.title(f"Cannonballs With KEs: {titlestr} kJ") - plt.show() - - -if __name__ == '__main__': - # if run as python multi_cannonball_copyparts.py n2, it will create an N2 - makeN2 = False - singlerun = True - if len(sys.argv) > 1: - if "n2" in sys.argv: - makeN2 = True - if "multi" in sys.argv: - # runs multiple weightings to see what impact system optimization makes - multiTestCase(makeN2) - singlerun = False - - if singlerun: - # singular weighting run - super_prob, prefix, num_trajs, kes, weights = runAvCannonball( - kes=[4e5, 6e5], weights=[2, 1.5], makeN2=makeN2) - printOutput(super_prob, prefix, num_trajs, kes, weights) - plotOutput(super_prob, prefix, num_trajs, kes, weights) - - -""" -Findings: -- connections between trajectory parameters and pre-mission parameters (and post-mission for aviary) - have to be made at super problem level, running the cannonballproblem method to form those connections - has seemingly no effect, causing divide by zero errors b/c the trajectory value is not set - -- design var has to be set in super problem, cannonballproblem design var is not manipulated by optimizer, - giving a result with the default value for ball radius - -- initial values have to be set at super problem level, running cannonballproblem's initial value function - throws error that setval cannot run before setup (even though superproblem setup was run). - -What works: -- copying instances of pre, traj, and post mission subsystems and adding to a super problem -- internal linkages between trajectory phases works without super problem references -- compound objective between multiple trajectories works -- connections between 2 problems to maintain same physical size of cannonball (i.e. airplane) -- optimization runs, gives sensible results - -To apply to Aviary: -- link_phases (includes connections to post/pre and traj) -- add_design_vars - sizing components, subsystem level variables - (aviary currently adds aero, prop des vars along with any external subsystem) -- set_initial_guesses - -Next setps: -- multi_mission specific add des var that adds them at super prob level - - aviary's design var can still be run at the aviaryProblem level it just won't have any effect - -- multi_mission link phases that does post/pre to traj connection - - aviary's link phases can still be run it just won't create trajectory to pre mission var connections - - be careful with connections vs. promotions - -- initial guesses, what's the best solution? - - possible ideas: - - use aviary's existing functions to create initial values, but use set val outside on super prob - - would require minimal mods to aviary to not run set val when a flag is passed - - write a fully seperate initial guesses function - - would be problematic to maintain with changes/new additions - """ diff --git a/easy_phase_info_inter.py b/easy_phase_info_inter.py deleted file mode 100644 index 6589101a8..000000000 --- a/easy_phase_info_inter.py +++ /dev/null @@ -1,83 +0,0 @@ -phase_info = { - "pre_mission": {"include_takeoff": False, "optimize_mass": True}, - "climb_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.3, "unitless"), - "final_mach": (0.7, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.72), "unitless"), - "initial_altitude": (0.0, "ft"), - "final_altitude": (24500.0, "ft"), - "altitude_bounds": ((0.0, 25000.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": True, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((0.0, 0.0), "min"), - "duration_bounds": ((35.0, 105.0), "min"), - }, - "initial_guesses": {"time": ([0.0, 70.0], "min")}, - }, - "climb_2": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.7, "unitless"), - "final_mach": (0.7, "unitless"), - "mach_bounds": ((0.6799999999999999, 0.72), "unitless"), - "initial_altitude": (24500.0, "ft"), - "final_altitude": (25000.0, "ft"), - "altitude_bounds": ((24000.0, 25500.0), "ft"), - "throttle_enforcement": "boundary_constraint", - "fix_initial": False, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((35.0, 105.0), "min"), - "duration_bounds": ((245.0, 735.0), "min"), - }, - "initial_guesses": {"time": ([70.0, 490.0], "min")}, - }, - "descent_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.7, "unitless"), - "final_mach": (0.3, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.72), "unitless"), - "initial_altitude": (25000.0, "ft"), - "final_altitude": (0.0, "ft"), - "altitude_bounds": ((0.0, 25500.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": False, - "constrain_final": True, - "fix_duration": False, - "initial_bounds": ((280.0, 840.0), "min"), - "duration_bounds": ((15.0, 45.0), "min"), - }, - "initial_guesses": {"time": ([560.0, 30.0], "min")}, - }, - "post_mission": { - "include_landing": False, - "constrain_range": True, - "target_range": (4367.14, "nmi"), - }, -} diff --git a/easy_phase_info_max.py b/easy_phase_info_max.py deleted file mode 100644 index 1f7df7f8e..000000000 --- a/easy_phase_info_max.py +++ /dev/null @@ -1,83 +0,0 @@ -phase_info = { - "pre_mission": {"include_takeoff": False, "optimize_mass": True}, - "climb_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.3, "unitless"), - "final_mach": (0.7, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.72), "unitless"), - "initial_altitude": (0.0, "ft"), - "final_altitude": (24500.0, "ft"), - "altitude_bounds": ((0.0, 25000.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": True, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((0.0, 0.0), "min"), - "duration_bounds": ((35.0, 105.0), "min"), - }, - "initial_guesses": {"time": ([0.0, 70.0], "min")}, - }, - "climb_2": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.7, "unitless"), - "final_mach": (0.7, "unitless"), - "mach_bounds": ((0.6799999999999999, 0.72), "unitless"), - "initial_altitude": (24500.0, "ft"), - "final_altitude": (25000.0, "ft"), - "altitude_bounds": ((24000.0, 25500.0), "ft"), - "throttle_enforcement": "boundary_constraint", - "fix_initial": False, - "constrain_final": False, - "fix_duration": False, - "initial_bounds": ((35.0, 105.0), "min"), - "duration_bounds": ((95.0, 285.0), "min"), - }, - "initial_guesses": {"time": ([70.0, 190.0], "min")}, - }, - "descent_1": { - "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, - "user_options": { - "optimize_mach": False, - "optimize_altitude": False, - "polynomial_control_order": 1, - "use_polynomial_control": True, - "num_segments": 3, - "order": 3, - "solve_for_distance": False, - "initial_mach": (0.7, "unitless"), - "final_mach": (0.3, "unitless"), - "mach_bounds": ((0.27999999999999997, 0.72), "unitless"), - "initial_altitude": (25000.0, "ft"), - "final_altitude": (0.0, "ft"), - "altitude_bounds": ((0.0, 25500.0), "ft"), - "throttle_enforcement": "path_constraint", - "fix_initial": False, - "constrain_final": True, - "fix_duration": False, - "initial_bounds": ((130.0, 390.0), "min"), - "duration_bounds": ((10.0, 30.0), "min"), - }, - "initial_guesses": {"time": ([260.0, 20.0], "min")}, - }, - "post_mission": { - "include_landing": False, - "constrain_range": True, - "target_range": (1977.99, "nmi"), - }, -} diff --git a/min_time_climb_models/min_time_climb.py b/min_time_climb_models/min_time_climb.py deleted file mode 100644 index b4b9dcd67..000000000 --- a/min_time_climb_models/min_time_climb.py +++ /dev/null @@ -1,301 +0,0 @@ -import openmdao.api as om -import dymos as dm -from dymos.examples.min_time_climb.min_time_climb_ode import MinTimeClimbODE -from plot_helper import make_min_time_climb_plot -import matplotlib.pyplot as plt -import numpy as np -import sys - - -class MinTimeClimbProblem(om.Problem): - def __init__( - self, target_height=20e3, - modelinfo={'m_initial': 16e3, 'S': 49.24, 'v_initial': 150, 'h_initial': 10, - 'mach_final': 1.0}): - super().__init__() - defaults = {'m_initial': 16e3, 'S': 49.24, 'v_initial': 150, 'h_initial': 10, - 'mach_final': 1.0} - for key in defaults.keys(): - if key not in modelinfo.keys(): - modelinfo[key] = defaults[key] - - self.model = om.Group() - self.target_height = target_height - self.modelinfo = modelinfo - - def setOptimizer(self, driver='scipy', optimizer='SLSQP'): - self.driver = om.pyOptSparseDriver() if driver == "pyoptsparse" else om.ScipyOptimizeDriver() - self.driver.options['optimizer'] = optimizer - self.driver.declare_coloring() - if optimizer == 'SNOPT': - self.driver.opt_settings['Major iterations limit'] = 1000 - self.driver.opt_settings['iSumm'] = 6 - self.driver.opt_settings['Major feasibility tolerance'] = 1.0E-6 - self.driver.opt_settings['Major optimality tolerance'] = 1.0E-6 - self.driver.opt_settings['Function precision'] = 1.0E-12 - self.driver.opt_settings['Linesearch tolerance'] = 0.1 - self.driver.opt_settings['Major step limit'] = 0.5 - elif optimizer == 'IPOPT': - self.driver.opt_settings['tol'] = 1.0E-5 - self.driver.opt_settings['print_level'] = 0 - self.driver.opt_settings['mu_strategy'] = 'monotone' - self.driver.opt_settings['bound_mult_init_method'] = 'mu-based' - self.driver.opt_settings['mu_init'] = 0.01 - - self.model.linear_solver = om.DirectSolver() - - def addTrajectory(self, num_seg=15, transcription='gauss-lobatto', - transcription_order=3, optWing=False): - t = {'gauss-lobatto': dm.GaussLobatto( - num_segments=num_seg, order=transcription_order), - 'radau-ps': dm.Radau(num_segments=num_seg, order=transcription_order)} - - traj = dm.Trajectory() - phase = dm.Phase(ode_class=MinTimeClimbODE, transcription=t[transcription]) - traj.add_phase('phase0', phase) - - height = self.target_height - time_name = 'time' - add_rate = False - phase.set_time_options(fix_initial=True, duration_bounds=(50, 600), - duration_ref=100.0, name=time_name) - - phase.add_state('r', fix_initial=True, lower=0, upper=1.0E6, - ref=1.0E3, defect_ref=1.0E3, units='m', - rate_source='flight_dynamics.r_dot') - - phase.add_state('h', fix_initial=True, lower=0, upper=height, - ref=height, defect_ref=height, units='m', - rate_source='flight_dynamics.h_dot', targets=['h']) - - phase.add_state('v', fix_initial=True, lower=10.0, - ref=1.0E2, defect_ref=1.0E2, units='m/s', - rate_source='flight_dynamics.v_dot', targets=['v']) - - phase.add_state('gam', fix_initial=True, lower=-1.5, upper=1.5, - ref=1.0, defect_ref=1.0, units='rad', - rate_source='flight_dynamics.gam_dot', targets=['gam']) - - phase.add_state('m', fix_initial=True, lower=10.0, upper=1.0E5, - ref=10_000, defect_ref=10_000, units='kg', - rate_source='prop.m_dot', targets=['m']) - - phase.add_control('alpha', units='deg', lower=-8.0, upper=8.0, scaler=1.0, - rate_continuity=True, rate_continuity_scaler=100.0, - rate2_continuity=False, targets=['alpha']) - - phase.add_parameter('S', val=self.modelinfo['S'], units='m**2', - opt=optWing, targets=['S']) - phase.add_parameter('Isp', val=1600.0, units='s', opt=False, targets=['Isp']) - phase.add_parameter('throttle', val=1.0, opt=False, targets=['throttle']) - - phase.add_boundary_constraint( - 'h', loc='final', equals=height) # , scaler=1.0E-3) - phase.add_boundary_constraint( - 'aero.mach', loc='final', equals=self.modelinfo['mach_final']) - phase.add_boundary_constraint('gam', loc='final', equals=0.0) - - phase.add_path_constraint(name='h', lower=100.0, upper=height, ref=height) - phase.add_path_constraint(name='aero.mach', lower=0.1, upper=1.8) - # phase.add_path_constraint(name='gam', lower=-23, upper=23, units='deg') - - # Unnecessary but included to test capability - phase.add_path_constraint(name='alpha', lower=-8, upper=8) - phase.add_path_constraint(name=f'{time_name}', lower=0, upper=600) - phase.add_path_constraint(name=f'{time_name}_phase', lower=0, upper=600) - - # test mixing wildcard ODE variable expansion and unit overrides - phase.add_timeseries_output(['aero.*', 'prop.thrust', 'prop.m_dot'], - units={'aero.f_lift': 'lbf', 'prop.thrust': 'lbf'}) - - # test adding rate as timeseries output - if add_rate: - phase.add_timeseries_rate_output('aero.mach') - - self.phase = phase - self.model.add_subsystem('traj', traj, promotes=['*']) - - def setInitialConditions(self, super_prob=None, prefix=""): - ref = self - if super_prob is not None and prefix != "": - ref = super_prob - phase = self.phase - ref.set_val(prefix+'traj.phase0.t_initial', 0.0) - ref.set_val(prefix+'traj.phase0.t_duration', 350.0) - - ref.set_val(prefix+'traj.phase0.states:r', phase.interp('r', [0.0, 100e3])) - ref.set_val(prefix+'traj.phase0.states:h', phase.interp( - 'h', [self.modelinfo['h_initial'], self.target_height])) - ref.set_val(prefix+'traj.phase0.states:v', - phase.interp('v', [self.modelinfo['v_initial'], 280])) - ref.set_val(prefix+'traj.phase0.states:gam', phase.interp('gam', [0.0, 0.0])) - ref.set_val(prefix+'traj.phase0.states:m', - phase.interp('m', [self.modelinfo['m_initial'], 16e3])) - ref.set_val(prefix+'traj.phase0.controls:alpha', - phase.interp('alpha', [0.0, 0.0])) - - def addObjective(self): - # Minimize time at the end of the phase - self.phase.add_objective('time', loc='final', ref=1.0) - - -def checkDeviation(filenum=0): - """Function to run min time climb problem multiple times for the same height and report any deviation in results. - Made to check for random results in outputs, fixed 7/31, seems to be caused by transcription order being 5 not 3""" - heights = [10e3]*2 - times_to_climb = [] - timeseries_pts = {'h': [], 'r': [], 'thrust': [], 'v': []} - prefix = 'traj.phase0.timeseries.' - - for height in heights: - p = MinTimeClimbProblem(target_height=height) - p.addTrajectory() - p.addObjective() - p.setOptimizer(driver='pyoptsparse') - p.setup() - p.setInitialConditions() - dm.run_problem(p, simulate=True) - sol = om.CaseReader('dymos_solution.db').get_case('final') - sim = om.CaseReader('dymos_simulation.db').get_case('final') - times_to_climb.append(p.get_val('traj.phase0.timeseries.time', - units='s')[-1][0]) - for var, varlst in timeseries_pts.items(): - varlst.append(sol.get_val(prefix+var)) - - print("\n\n=======================================") - with open(f'checkdiff_{filenum}.txt', 'w') as fp: - fp.write(f'time to climb: {times_to_climb[0]: .4f}\n\n') - fp.write(str(timeseries_pts)) - - for key in timeseries_pts.keys(): - timeseries_pts[key] = np.array( - timeseries_pts[key][1:]) - timeseries_pts[key][0] - print(f"Max difference in {key}: {np.max(timeseries_pts[key]):.2f}") - - print(f"Time to climb: {times_to_climb[0]:.2f}") - print(f"Standard deviation of time to climb in {len(heights)}" + - f" cases: {np.std(times_to_climb):.2f}") - for key in timeseries_pts.keys(): - print(f"Standard deviation of {key} in {len(heights)} cases:" + - f" {np.std(timeseries_pts[key]):.2f}") - - -def multiHeightTest(printResults=True): - heights = [6e3, 18e3] - times = [] - areas = [] - outfiles = {'sol': [], 'sim': []} - - for j, height in enumerate(heights): - solfile = f'single_solution_{j}.db' - simfile = f'single_simulation_{j}.db' - outfiles['sim'].append(simfile) - outfiles['sol'].append(solfile) - p = MinTimeClimbProblem(target_height=height) - p.addTrajectory(optWing=True) - p.addObjective() - p.setOptimizer(driver='pyoptsparse') - p.setup() - p.setInitialConditions() - dm.run_problem( - p, simulate=True, solution_record_file=solfile, - simulation_record_file=simfile) - areas.append(p.get_val('phase0.parameters:S', units='m**2')[0]) - times.append(p.get_val('phase0.timeseries.time', units='s')[-1][0]) - - if printResults: - print("\n\n=======================================") - for time, area, height in zip(times, areas, heights): - print(f"Time to climb {height/1e3} km: " + - f"{time:.2f}" + - f" s with wing area: {area} sqm") - - make_min_time_climb_plot( - solfile=outfiles['sol'], - simfile=outfiles['sim'], - omitpromote='traj') - - return outfiles - - -if __name__ == '__main__': - if 'filenum' in sys.argv: - checkDeviation(filenum=sys.argv[1].split('filenum=')[1]) - else: - multiHeightTest() - - -""" -var names - 'traj.phase0.controls:alpha' - 'traj.phase0.t_initial' - 'traj.phase0.t_duration' - 'traj.phase0.parameters:S' - 'traj.phase0.parameters:Isp' - 'traj.phase0.parameters:throttle' - 'traj.phase0.collocation_constraint.defects:gam' - 'traj.phase0.control_rates:alpha_rate' - 'traj.phase0.control_rates:alpha_rate2' - 'traj.phase0.control_values:alpha' - 'traj.phase0.states:gam' - 'traj.phase0.states:h' - 'traj.phase0.states:m' - 'traj.phase0.states:r' - 'traj.phase0.states:v' - 'traj.phase0.interleave_comp.all_values:CD' - 'traj.phase0.parameter_vals:Isp' - 'traj.phase0.parameter_vals:S' - 'traj.phase0.parameter_vals:throttle' - 'traj.phase0.t_duration_val' - 'traj.phase0.t_initial_val' - 'traj.phase0.rhs_col.aero.CD' - 'traj.phase0.rhs_disc.aero.CL' - 'traj.phase0.rhs_disc.aero.CD0' - 'traj.phase0.rhs_disc.aero.CLa' - 'traj.phase0.rhs_disc.aero.kappa' - 'traj.phase0.rhs_disc.aero.f_drag' - 'traj.phase0.rhs_disc.aero.f_lift' - 'traj.phase0.rhs_disc.aero.mach' - 'traj.phase0.rhs_disc.aero.q' - 'traj.phase0.rhs_disc.atmos.drhos_dh' - 'traj.phase0.rhs_disc.atmos.pres' - 'traj.phase0.rhs_disc.atmos.rho' - 'traj.phase0.rhs_disc.atmos.sos' - 'traj.phase0.rhs_disc.atmos.temp' - 'traj.phase0.rhs_disc.atmos.viscosity' - 'traj.phase0.rhs_disc.flight_dynamics.gam_dot' - 'traj.phase0.rhs_disc.flight_dynamics.h_dot' - 'traj.phase0.rhs_disc.flight_dynamics.r_dot' - 'traj.phase0.rhs_disc.flight_dynamics.v_dot' - 'traj.phase0.rhs_disc.prop.max_thrust' - 'traj.phase0.rhs_disc.prop.m_dot' - 'traj.phase0.rhs_disc.prop.thrust' - 'traj.phase0.state_interp.state_col:gam': array([[ 0.0702449 ], - 'traj.phase0.state_interp.state_col:h' - 'traj.phase0.state_interp.state_col:m' - 'traj.phase0.state_interp.state_col:r' - 'traj.phase0.state_interp.state_col:v' - 'traj.phase0.dt_dstau' - 'traj.phase0.t' - 'traj.phase0.t_phase' - 'traj.phase0.timeseries.CD': array([[0.0195346 ], - 'traj.phase0.timeseries.CD0' - 'traj.phase0.timeseries.CL' - 'traj.phase0.timeseries.CLa' - 'traj.phase0.timeseries.alpha' - 'traj.phase0.timeseries.f_drag' - 'traj.phase0.timeseries.f_lift' - 'traj.phase0.timeseries.gam' - 'traj.phase0.timeseries.h' - 'traj.phase0.timeseries.kappa' - 'traj.phase0.timeseries.m' - 'traj.phase0.timeseries.m_dot' - 'traj.phase0.timeseries.mach' - 'traj.phase0.timeseries.q' - 'traj.phase0.timeseries.r' - 'traj.phase0.timeseries.thrust' - 'traj.phase0.timeseries.time' - 'traj.phase0.timeseries.time_phase' - 'traj.phase0.timeseries.v' - - """ diff --git a/min_time_climb_models/multi_min_time_to_climb.py b/min_time_climb_models/multi_min_time_to_climb.py deleted file mode 100644 index 99b467850..000000000 --- a/min_time_climb_models/multi_min_time_to_climb.py +++ /dev/null @@ -1,173 +0,0 @@ -import openmdao.api as om -import dymos as dm -from plot_helper import make_min_time_climb_plot -from min_time_climb import MinTimeClimbProblem -import matplotlib.pyplot as plt -import sys - - -class MultiMinTime(om.Problem): - def __init__( - self, heights, weights, optWing=False, modelinfo={}): - super().__init__() - if len(weights) > len(heights): - raise Exception("Can't have more weights than heights!") - elif len(weights) < len(heights): - weights = [1]*len(heights) - - self.weights = weights - self.num_missions = len(heights) - self.probs = [] - - for i, height in enumerate(heights): - prob = MinTimeClimbProblem( - target_height=height, modelinfo=modelinfo) - prob.addTrajectory(optWing=optWing) - self.model.add_subsystem( - f"group_{i}", prob.model, promotes=[('phase0.parameters:S', 'S')]) - self.probs.append(prob) - if optWing: - self.model.add_design_var('S', lower=1, upper=100, units='m**2') - - def addCompoundObj(self): - num_missions = self.num_missions - weights = [float(weight/sum(self.weights)) for weight in self.weights] - times = [f"time_{i}" for i in range(num_missions)] - weighted_sum_str = "+".join([f"{time}*{weight}" for time, - weight in zip(times, weights)]) - self.model.add_subsystem('compoundComp', om.ExecComp( - "compound_time=" + weighted_sum_str), - promotes=['compound_time', *times]) - - for i in range(num_missions): - self.model.connect( - f"group_{i}.phase0.t", times[i], - src_indices=-1) - self.model.add_objective('compound_time') - - def addDriver(self, driver='pyoptsparse', optimizer='SLSQP'): - self.driver = om.pyOptSparseDriver() \ - if driver == 'pyoptsparse' else \ - om.ScipyOptimizeDriver() - self.driver.options['optimizer'] = optimizer # 'IPOPT' - self.driver.declare_coloring() - self.model.linear_solver = om.DirectSolver() - - def setICs(self): - for i, prob in enumerate(self.probs): - prob.setInitialConditions(self, f"group_{i}.") - - -def multiExample(): - """Example of multi mission min time to climb problem.""" - makeN2 = True if "n2" in sys.argv else False - super_prob = MultiMinTime(heights=[10e3, 15e3], weights=[1, 1], - optWing=True, modelinfo={'m_initial': 23e3}) - super_prob.addCompoundObj() - super_prob.addDriver() - super_prob.setup() - super_prob.setICs() - if makeN2: - sys.path.append('../') - from createN2 import createN2 - createN2(__file__, super_prob) - dm.run_problem(super_prob, simulate=True) - - wing_area = super_prob.get_val('S', units='m**2')[0] - print("\n\n=====================================") - for i in range(super_prob.num_missions): - timetoclimb = super_prob.get_val(f'group_{i}.phase0.t', units='s')[-1] - print(f"TtoC: {timetoclimb}, S: {wing_area}") - - make_min_time_climb_plot( - solfile='dymos_solution.db', - simfile=['dymos_simulation.db', 'dymos_simulation_1.db'], - solprefix='group', omitpromote='traj') - - -def weightCompare(): - """Runs the multi mission min time to climb problem for different weights. Shows - impact of changing weights on 1 figure.""" - heights = [10e3, 15e3] - weights_to_test = [[1, 3], [3, 1]] - modelinfo = {'m_initial': 18e3, 'S': 49.24, 'v_initial': 104, 'h_initial': 100, - 'mach_final': 1.0} - solfiles, simfiles = [], [] - for i, weights in enumerate(weights_to_test): - super_prob = MultiMinTime(heights=heights, weights=weights, - optWing=True, modelinfo=modelinfo) - super_prob.addCompoundObj() - super_prob.addDriver(driver='scipy') - super_prob.setup() - super_prob.setICs() - solfiles.append(f'weightsSol_{i}.db') - simfiles.append(f'weightsSim_{i}.db') - dm.run_problem(super_prob, simulate=True, - solution_record_file=solfiles[-1], - simulation_record_file=simfiles[-1]) - - fig = plt.figure() - colores = [['r', 'b'], ['g', 'm']] - for i, (solfile, simfile, colors) in enumerate(zip(solfiles, simfiles, colores)): - make_min_time_climb_plot( - solfile=solfile, - simfile=[simfile, simfile.replace(".db", "_1.db")], - solprefix='group', omitpromote='traj', show=False, fig=fig, - extratitle=", ".join([str(w) for w in weights_to_test[i]]), - colors=colors) - - plt.show() - - -def comparison(): - """Runs min time to climb problem for 2 heights individually, as well as with the - multi mission approach. Creates 2 figures showing the differences between the 2.""" - heights = [10e3, 15e3] - weights = [1, 1] - optimize_wing = True - m_0 = 23e3 - modelinfo = {'m_initial': m_0, 'S': 49.24, 'v_initial': 104, 'h_initial': 100, - 'mach_final': 1.0} - - solfiles, simfiles = [], [] - for i, height in enumerate(heights): - p = MinTimeClimbProblem(target_height=height, modelinfo=modelinfo) - p.addTrajectory(optWing=optimize_wing) - p.addObjective() - p.setOptimizer(driver='pyoptsparse') - p.setup() - p.setInitialConditions() - solfile, simfile = f'Sol_Comp_{i}.db', f'Sim_Comp_{i}.db' - solfiles.append(solfile) - simfiles.append(simfile) - dm.run_problem( - p, simulate=True, solution_record_file=solfile, - simulation_record_file=simfile) - - super_prob = MultiMinTime(heights=heights, weights=weights, - optWing=optimize_wing, modelinfo=modelinfo) - super_prob.addCompoundObj() - super_prob.addDriver() - super_prob.setup() - super_prob.setICs() - dm.run_problem(super_prob, simulate=True) - - fig1, fig2 = plt.figure(1), plt.figure(2) - make_min_time_climb_plot( - solfile=solfiles, simfile=simfiles, omitpromote='traj', show=False, fig=fig1, - extratitle=f"{m_0} kg") - make_min_time_climb_plot( - solfile='dymos_solution.db', - simfile=['dymos_simulation.db', 'dymos_simulation_1.db'], - solprefix='group', omitpromote='traj', show=False, fig=fig2, - extratitle=f"{m_0} kg") - plt.show() - - -if __name__ == '__main__': - if "comparison" in sys.argv: - comparison() - elif "weights" in sys.argv: - weightCompare() - else: - multiExample() diff --git a/min_time_climb_models/plot_helper.py b/min_time_climb_models/plot_helper.py deleted file mode 100644 index e8acc460e..000000000 --- a/min_time_climb_models/plot_helper.py +++ /dev/null @@ -1,98 +0,0 @@ -import matplotlib.pyplot as plt -from openmdao.api import CaseReader - - -def make_min_time_climb_plot( - solfile='dymos_solution.db', simfile='dymos_simulation.db', solprefix='', - omitpromote=None, show=True, fig=None, extratitle='', colors=['r', 'b', 'g', 'm']): - - singleprob, multiprob, multitraj = True, False, False - if isinstance(solfile, list) and isinstance(simfile, list): - multiprob, singleprob = True, False - if len(solfile) != len(simfile): - raise Exception( - "Must provide same number of solution and simulation files with separate problems") - - elif isinstance(simfile, list) and isinstance(solfile, str): - multitraj, singleprob = True, False - solfile = [solfile]*len(simfile) - if solprefix == '': - raise Exception( - "When plotting multiple trajectories, must provide prefix to access solutions!") - - if singleprob: - solfile, simfile = [solfile], [simfile] - - if fig is None: - fig = plt.figure() - plotvars = [('r', 'h'), - ('time', 'h'), - ('time', 'v'), - ('time', 'thrust'), - ('time', 'gam'), - ('time', 'alpha')] - plotunits = [ - ('km', 'km'), - ('s', 'km'), - ('s', 'm/s'), - ('s', 'kN'), - ('s', 'deg'), - ('s', 'deg')] - - numplots = len(plotvars) - axes = fig.axes - if len(axes) == 0: - axes = [None]*len(plotvars) - tsprefix = 'traj.phase0.timeseries.' - - sols = [CaseReader(file).get_case('final') for file in solfile] - sims = [CaseReader(file).get_case('final') for file in simfile] - - legend = [] - areas = [] - heights = [None]*len(simfile) - - for i, (solf, simf) in enumerate(zip(sols, sims)): - for j, ((xvar, yvar), (xunit, yunit)) in enumerate(zip(plotvars, plotunits)): - if axes[j] is None: - ax = fig.add_subplot(2, int(numplots/2), j+1, - xlabel=f"{xvar} ({xunit})", - ylabel=f"{yvar} ({yunit})") - axes[j] = ax - else: - ax = axes[j] - xname, yname = addPrefix(tsprefix, (xvar, yvar)) - xsim = simf.get_val(xname, units=xunit) - ysim = simf.get_val(yname, units=yunit) - if omitpromote is not None: - xname = xname.replace(omitpromote+".", "") - yname = yname.replace(omitpromote+".", "") - if multitraj: - xname, yname = addPrefix(f"{solprefix}_{i}.", (xname, yname)) - xsol = solf.get_val(xname, units=xunit) - ysol = solf.get_val(yname, units=yunit) - if yvar == "h" and not heights[i]: - heights[i] = round(ysol[-1][0]) - ax.plot(xsol, ysol, f"{colors[i]}o", fillstyle='none') - ax.plot(xsim, ysim, colors[i]) - ax.grid(visible=True) - legend.append(f"{heights[i]} {plotunits[0][1]} solution") - legend.append(f"{heights[i]} {plotunits[0][1]} simulation") - try: - areas.append(round(solf.get_val('S')[0], 2)) - except KeyError: - areas.append(round(solf.get_val('phase0.parameters:S')[0], 2)) - fig.legend(legend, ncols=len(simfile), loc='lower center') - fig.suptitle(f"Min Time to Climb, wing areas: {areas}, {extratitle}") - fig.tight_layout(pad=1) - if show: - plt.show() - - -def addPrefix(prefix, iterable): - return [prefix+item for item in iterable] - - -if __name__ == '__main__': - make_min_time_climb_plot(solfile=['dymos_solution_0.db', 'dymos_solution_1.db'], - simfile=['dymos_simulation_0.db', 'dymos_simulation_1.db']) diff --git a/multi_aviary_submodel.py b/multi_aviary_submodel.py deleted file mode 100644 index c1a640c72..000000000 --- a/multi_aviary_submodel.py +++ /dev/null @@ -1,125 +0,0 @@ -""" -Goal: use single aircraft description but optimize it for multiple missions simultaneously, -i.e. all missions are on the range-payload line instead of having excess performance -Aircraft csv: defines plane, but also defines payload (passengers, cargo) which can vary with mission - These will have to be specified in some alternate way such as a list correspond to mission # -Phase info: defines a particular mission, will have multiple phase infos -""" -import sys -import aviary.api as av -import openmdao.api as om -import dymos as dm -from c5_models.c5_ferry_phase_info import phase_info as c5_ferry_phase_info -from c5_models.c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info -from c5_models.c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info - -planes = ['c5_models/c5_maxpayload.csv', 'c5_models/c5_intermediate.csv'] -phase_infos = [c5_maxpayload_phase_info, c5_intermediate_phase_info] -weights = [1, 1] -num_missions = len(weights) - -if __name__ == '__main__': - makeN2 = True if len(sys.argv) > 1 and sys.argv[1] == "n2" else False - super_prob = om.Problem() - probs = [] - - # define individual aviary problems - for i, (plane, phase_info) in enumerate(zip(planes, phase_infos)): - prob = av.AviaryProblem() - prob.load_inputs(plane, phase_info) - prob.check_and_preprocess_inputs() - prob.add_pre_mission_systems() - prob.add_phases() - prob.add_post_mission_systems() - prob.link_phases() - probs.append(prob) - - subcomp = om.SubmodelComp( - problem=prob, inputs=['mission:design:gross_mass', 'aircraft:wing:span'], - outputs=['mission:summary:fuel_burned']) - # promoting gross mass to be used as a design var - # all problems have same name for gross mass so they are connected - super_prob.model.add_subsystem(f'subcomp_{i}', subcomp, promotes_inputs=[ - 'mission:design:gross_mass', 'aircraft:wing:span']) - - # creating variable strings that will represent fuel burn from each mission - fuel_burned_vars = [f"fuel_{i}" for i in range(num_missions)] - weighted_str = "+".join([f"{fuel}*{weight}" - for fuel, weight in zip(fuel_burned_vars, weights)]) - # weighted_str looks like: fuel_0 * weight[0] + fuel_1 * weight[1] - - # adding compound execComp to super problem - super_prob.model.add_subsystem('compound', om.ExecComp( - "compound = "+weighted_str), promotes=["compound", *fuel_burned_vars]) - - # connecting each subcomponent's fuel burn to super problem's unique fuel variables - # fuel_0, fuel_1, ... don't have units assigned, #TODO find a solution to specify units - for i in range(num_missions): - super_prob.model.connect(f"subcomp_{i}.mission:summary:fuel_burned", f"fuel_{i}") - - # specify gross mass as a design var - super_prob.model.add_design_var( - 'mission:design:gross_mass', lower=100e3, upper=1000e3, units='lbm') - - # this throws error: output not found for this design var - # super_prob.model.add_design_var( - # 'aircraft:design:span', lower=100., upper=300., units='ft') - - super_prob.driver = om.ScipyOptimizeDriver() - super_prob.driver.options['optimizer'] = 'SLSQP' - - super_prob.model.add_objective('compound') # output from execcomp goes here - - super_prob.setup() - - # set initial guesses for each aviary problem - for prob in probs: - prob.set_initial_guesses() - - if makeN2: - from createN2 import createN2 - createN2(__file__, super_prob) - - dm.run_problem(super_prob) - print(super_prob.check_partials()) - - -""" -Ferry mission phase info: -Times (min): 0, 50, 812, 843 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 7001 nmi -Notes: 32k in 30 mins too fast for aviary, climb to low alt then slow rise through cruise - -Intermediate mission phase info: -Times (min): 0, 50, 560, 590 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 4839 nmi - -Max Payload mission phase info: -Times (min): 0, 50, 260, 290 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 2272 nmi - -Hard to find multiple payload/range values for FwFm (737), so use C-5 instead -Based on: - https://en.wikipedia.org/wiki/Lockheed_C-5_Galaxy#Specifications_(C-5M), - https://www.af.mil/About-Us/Fact-Sheets/Display/Article/1529718/c-5-abc-galaxy-and-c-5m-super-galaxy/ - -MTOW: 840,000 lb -Max Payload: 281,000 lb -Max Fuel: 341,446 lb -Empty Weight: 380,000 lb -> leaves 460,000 lb for fuel+payload (max fuel + max payload = 622,446 lb) - -Payload/range: - 281,000 lb payload -> 2,150 nmi range (AF.mil) [max payload case] - 120,000 lb payload -> 4,800 nmi range (AF.mil) [intermediate case] - 0 lb payload -> 7,000 nmi range (AF.mil) [ferry case] - -Flight characteristics: - Cruise at M0.77 at 33k ft - Max rate of climb: 2100 ft/min -""" diff --git a/single_aviary.py b/single_aviary.py deleted file mode 100644 index 5966b37d6..000000000 --- a/single_aviary.py +++ /dev/null @@ -1,129 +0,0 @@ -from c5_models.c5_ferry_phase_info import phase_info as c5_ferry_phase_info -from c5_models.c5_intermediate_phase_info import phase_info as c5_intermediate_phase_info -from c5_models.c5_maxpayload_phase_info import phase_info as c5_maxpayload_phase_info -import aviary.api as av -import openmdao.api as om -import sys - - -def modify_plane(orig_filename, payloads, ranges): - if len(sys.argv) > 1: - plane_name = orig_filename.split(".csv")[0] - mission = sys.argv[1].lower() - temp_filename = f"{plane_name}_{mission}.csv" - with open(orig_filename, "r") as orig_plane: - orig_lines = orig_plane.readlines() - with open(temp_filename, "w") as temp_plane: - try: - payload, misrange = payloads[mission], ranges[mission] - except KeyError: - payload, misrange = "", "" - for line in orig_lines: - if "aircraft:crew_and_payload:cargo_mass" in line and payload != "": - line = ",".join( - [line.split(",")[0], - str(payload), - line.split(",")[2]]) - - elif "mission:design:range" in line and misrange != "": - line = ",".join( - [line.split(",")[0], - str(misrange), - line.split(",")[2]]) - - temp_plane.write(line) - else: - return orig_filename - return temp_filename, mission - - -if __name__ == '__main__': - makeN2 = True if len(sys.argv) > 2 and "n2" in sys.argv else False - prob = av.AviaryProblem() - plane_file = 'c5.csv' - payloads = {"ferry": 0, "intermediate": 120e3, "maxpayload": 281e3} - ranges = {"ferry": 7e3, "intermediate": 4.8e3, "maxpayload": 2.15e3} - plane_file, mission_name = modify_plane(plane_file, payloads, ranges) - phase_info = c5_maxpayload_phase_info - if mission_name == "intermediate": - phase_info = c5_intermediate_phase_info - elif mission_name == "ferry": - phase_info = c5_ferry_phase_info - - # Load aircraft and options data from user - # Allow for user overrides here - prob.load_inputs(plane_file, phase_info) - - # Preprocess inputs - prob.check_and_preprocess_inputs() - - prob.add_pre_mission_systems() - - prob.add_phases() - - prob.add_post_mission_systems() - - # Link phases and variables - prob.link_phases() - - prob.add_driver("SLSQP", max_iter=50) - - prob.add_design_variables() - - # Load optimization problem formulation - # Detail which variables the optimizer can control - prob.add_objective() # output from execcomp goes here) - - prob.setup() - - if makeN2: - om.n2(prob, outfile='single_aviary.html') - - prob.set_initial_guesses() - - # remove all plots and extras - prob.run_aviary_problem( - record_filename=f'{plane_file.split(".csv")[0]}.db', suppress_solver_print=True) - # prob.get_val() # look at final fuel burn - print( - f"Fuel burned: {prob.get_val(av.Mission.Summary.FUEL_BURNED,units='lbm')[0]:.3f} lbm") - -""" -Ferry mission phase info: -Times (min): 0, 50, 812, 843 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 7001 nmi -Notes: 32k in 30 mins too fast for aviary, climb to low alt then slow rise - -Intermediate mission phase info: -Times (min): 0, 50, 560, 590 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 4839 nmi - -Max Payload mission phase info: -Times (min): 0, 50, 260, 290 - Alt (ft): 0, 29500, 32000, 0 - Mach: 0.3, 0.77, 0.77, 0.3 -Est. Range: 2272 nmi - -Hard to find multiple payload/range values for FwFm (737), so use C-5 instead -Based on: - https://en.wikipedia.org/wiki/Lockheed_C-5_Galaxy#Specifications_(C-5M), - https://www.af.mil/About-Us/Fact-Sheets/Display/Article/1529718/c-5-abc-galaxy-and-c-5m-super-galaxy/ - -MTOW: 840,000 lb -Max Payload: 281,000 lb -Max Fuel: 341,446 lb -Empty Weight: 380,000 lb -> leaves 460,000 lb for fuel+payload (max fuel + max payload = 622,446 lb) - -Payload/range: - 281,000 lb payload -> 2,150 nmi range (AF.mil) [max payload case] - 120,000 lb payload -> 4,800 nmi range (AF.mil) [intermediate case] - 0 lb payload -> 7,000 nmi range (AF.mil) [ferry case] - -Flight characteristics: - Cruise at M0.77 at 33k ft - Max rate of climb: 2100 ft/min -""" From 052acc99a9cc1f59966274f3265775d21a1cee26 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Wed, 11 Sep 2024 15:34:40 -0400 Subject: [PATCH 062/113] moved createN2 into run_multimission example temporarily --- N2s/n2_multi_aviary_copymodel.html | 14840 ---------------- N2s/n2_multi_aviary_submodel.html | 14840 ---------------- N2s/n2_multi_cannonball_copymodel.html | 14840 ---------------- N2s/n2_multi_cannonball_copyparts.html | 14840 ---------------- N2s/n2_multi_min_time_to_climb.html | 14840 ---------------- ...multimission_example_large_single_aisle.py | 9 +- createN2.py | 8 - 7 files changed, 8 insertions(+), 74209 deletions(-) delete mode 100644 N2s/n2_multi_aviary_copymodel.html delete mode 100644 N2s/n2_multi_aviary_submodel.html delete mode 100644 N2s/n2_multi_cannonball_copymodel.html delete mode 100644 N2s/n2_multi_cannonball_copyparts.html delete mode 100644 N2s/n2_multi_min_time_to_climb.html delete mode 100644 createN2.py diff --git a/N2s/n2_multi_aviary_copymodel.html b/N2s/n2_multi_aviary_copymodel.html deleted file mode 100644 index e1f80b09c..000000000 --- a/N2s/n2_multi_aviary_copymodel.html +++ /dev/null @@ -1,14840 +0,0 @@ - - - -OpenMDAO Model Hierarchy and N2 diagram - - - - - - - - - - - - - - - - - -
-
- -
-
- -
- - -
-
-
-
- - - -
-
- - -
-
- - - - - -
-
- - - - -
-
- -
-
- -
- -
-
- -
- -
-
- Processing... -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

-
-
- - - -
- -
- -
-
- -
-
-
-
- N2 Information -
- - -
- -
-
-
-
-
- - - - - - - - - - -
- -
- -
- -
- -
-

Left-click on a node in the model hierarchy to navigate to that node.
- Right-click on a node to collapse/expand it. - Alt-right-click on a node with variables to select which ones to hide.
- Note: Right-click in Firefox displays a browser menu. To disable that, - visit about:config and set dom.event.contextmenu.enabled - to true.
- Hover over any cell in the matrix to display its connections - as arrows. Click that cell to make those arrows persistent. -

-

Toolbar Help

-
- Snapshot of toolbar buttons - -
-
- -
- - - - - - -
Variable NameVisible
-
- - -
-
-
- Search - -
-
- - - -
-
-
- - - - - - - diff --git a/N2s/n2_multi_aviary_submodel.html b/N2s/n2_multi_aviary_submodel.html deleted file mode 100644 index 8e59df467..000000000 --- a/N2s/n2_multi_aviary_submodel.html +++ /dev/null @@ -1,14840 +0,0 @@ - - - -OpenMDAO Model Hierarchy and N2 diagram - - - - - - - - - - - - - - - - - -
-
- -
-
- -
- - -
-
-
-
- - - -
-
- - -
-
- - - - - -
-
- - - - -
-
- -
-
- -
- -
-
- -
- -
-
- Processing... -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

-
-
- - - -
- -
- -
-
- -
-
-
-
- N2 Information -
- - -
- -
-
-
-
-
- - - - - - - - - - -
- -
- -
- -
- -
-

Left-click on a node in the model hierarchy to navigate to that node.
- Right-click on a node to collapse/expand it. - Alt-right-click on a node with variables to select which ones to hide.
- Note: Right-click in Firefox displays a browser menu. To disable that, - visit about:config and set dom.event.contextmenu.enabled - to true.
- Hover over any cell in the matrix to display its connections - as arrows. Click that cell to make those arrows persistent. -

-

Toolbar Help

-
- Snapshot of toolbar buttons - -
-
- -
- - - - - - -
Variable NameVisible
-
- - -
-
-
- Search - -
-
- - - -
-
-
- - - - - - - diff --git a/N2s/n2_multi_cannonball_copymodel.html b/N2s/n2_multi_cannonball_copymodel.html deleted file mode 100644 index 2dcaf5bd5..000000000 --- a/N2s/n2_multi_cannonball_copymodel.html +++ /dev/null @@ -1,14840 +0,0 @@ - - - -OpenMDAO Model Hierarchy and N2 diagram - - - - - - - - - - - - - - - - - -
-
- -
-
- -
- - -
-
-
-
- - - -
-
- - -
-
- - - - - -
-
- - - - -
-
- -
-
- -
- -
-
- -
- -
-
- Processing... -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

-
-
- - - -
- -
- -
-
- -
-
-
-
- N2 Information -
- - -
- -
-
-
-
-
- - - - - - - - - - -
- -
- -
- -
- -
-

Left-click on a node in the model hierarchy to navigate to that node.
- Right-click on a node to collapse/expand it. - Alt-right-click on a node with variables to select which ones to hide.
- Note: Right-click in Firefox displays a browser menu. To disable that, - visit about:config and set dom.event.contextmenu.enabled - to true.
- Hover over any cell in the matrix to display its connections - as arrows. Click that cell to make those arrows persistent. -

-

Toolbar Help

-
- Snapshot of toolbar buttons - -
-
- -
- - - - - - -
Variable NameVisible
-
- - -
-
-
- Search - -
-
- - - -
-
-
- - - - - - - diff --git a/N2s/n2_multi_cannonball_copyparts.html b/N2s/n2_multi_cannonball_copyparts.html deleted file mode 100644 index e29612ed5..000000000 --- a/N2s/n2_multi_cannonball_copyparts.html +++ /dev/null @@ -1,14840 +0,0 @@ - - - -OpenMDAO Model Hierarchy and N2 diagram - - - - - - - - - - - - - - - - - -
-
- -
-
- -
- - -
-
-
-
- - - -
-
- - -
-
- - - - - -
-
- - - - -
-
- -
-
- -
- -
-
- -
- -
-
- Processing... -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

-
-
- - - -
- -
- -
-
- -
-
-
-
- N2 Information -
- - -
- -
-
-
-
-
- - - - - - - - - - -
- -
- -
- -
- -
-

Left-click on a node in the model hierarchy to navigate to that node.
- Right-click on a node to collapse/expand it. - Alt-right-click on a node with variables to select which ones to hide.
- Note: Right-click in Firefox displays a browser menu. To disable that, - visit about:config and set dom.event.contextmenu.enabled - to true.
- Hover over any cell in the matrix to display its connections - as arrows. Click that cell to make those arrows persistent. -

-

Toolbar Help

-
- Snapshot of toolbar buttons - -
-
- -
- - - - - - -
Variable NameVisible
-
- - -
-
-
- Search - -
-
- - - -
-
-
- - - - - - - diff --git a/N2s/n2_multi_min_time_to_climb.html b/N2s/n2_multi_min_time_to_climb.html deleted file mode 100644 index 7b4a51ce7..000000000 --- a/N2s/n2_multi_min_time_to_climb.html +++ /dev/null @@ -1,14840 +0,0 @@ - - - -OpenMDAO Model Hierarchy and N2 diagram - - - - - - - - - - - - - - - - - -
-
- -
-
- -
- - -
-
-
-
- - - -
-
- - -
-
- - - - - -
-
- - - - -
-
- -
-
- -
- -
-
- -
- -
-
- Processing... -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

-
-
- - - -
- -
- -
-
- -
-
-
-
- N2 Information -
- - -
- -
-
-
-
-
- - - - - - - - - - -
- -
- -
- -
- -
-

Left-click on a node in the model hierarchy to navigate to that node.
- Right-click on a node to collapse/expand it. - Alt-right-click on a node with variables to select which ones to hide.
- Note: Right-click in Firefox displays a browser menu. To disable that, - visit about:config and set dom.event.contextmenu.enabled - to true.
- Hover over any cell in the matrix to display its connections - as arrows. Click that cell to make those arrows persistent. -

-

Toolbar Help

-
- Snapshot of toolbar buttons - -
-
- -
- - - - - - -
Variable NameVisible
-
- - -
-
-
- Search - -
-
- - - -
-
-
- - - - - - - diff --git a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py index ef49b1c77..6bb3a2968 100644 --- a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py @@ -265,7 +265,14 @@ def large_single_aisle_example(makeN2=False): prob.set_initial_guesses(super_prob, super_prob.group_prefix+f"_{i}.") if makeN2: - from createN2 import createN2 + # TODO: Not sure we need this at all. + from openmdao.api import n2 + from os.path import basename, dirname, join, abspath + def createN2(fileref, prob): + n2folder = join(dirname(abspath(__file__)), "N2s") + n2(prob, outfile=join(n2folder, + f"n2_{basename(fileref).split('.')[0]}.html")) + createN2(__file__, super_prob) super_prob.run() diff --git a/createN2.py b/createN2.py deleted file mode 100644 index a41f99de6..000000000 --- a/createN2.py +++ /dev/null @@ -1,8 +0,0 @@ -from openmdao.api import n2 -from os.path import basename, dirname, join, abspath - - -def createN2(fileref, prob): - n2folder = join(dirname(abspath(__file__)), "N2s") - n2(prob, outfile=join(n2folder, - f"n2_{basename(fileref).split('.')[0]}.html")) From 2c77bf0ff837df30f5ae02094250ba6a612ee7c6 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Wed, 11 Sep 2024 15:35:52 -0400 Subject: [PATCH 063/113] removed deck obsoluted since c5 examples were also removed --- aviary/models/engines/CF6.deck | 623 --------------------------------- 1 file changed, 623 deletions(-) delete mode 100644 aviary/models/engines/CF6.deck diff --git a/aviary/models/engines/CF6.deck b/aviary/models/engines/CF6.deck deleted file mode 100644 index 2d4b0f42a..000000000 --- a/aviary/models/engines/CF6.deck +++ /dev/null @@ -1,623 +0,0 @@ -Mach_Number (unitless), Altitude (ft), Throttle (unitless), Gross_Thrust (lbf), Ram_Drag (lbf), Fuel_Flow (lb/h), NOx_Rate (lb/h) -0, 0, 50, 51463, 0, 22544.2, 0.438066 -0, 0, 47, 46316.7, 0, 19554.2, 0.422184 -0, 0, 44, 41168.9, 0, 16706.8, 0.405811 -0, 0, 41, 36024.5, 0, 13993.4, 0.388441 -0, 0, 38, 30878.2, 0, 11478.9, 0.371747 -0, 0, 35, 25731.7, 0, 9223.64, 0.358454 -0, 0, 32, 20585, 0, 7189.32, 0.34925 -0, 0, 29, 15438.9, 0, 5352.09, 0.346662 -0, 0, 26, 10292.6, 0, 3719.21, 0.361348 -0.1, 0, 50, 54023, 5123.45, 23900.4, 0.488765 -0.1, 0, 47, 48904.4, 4894.93, 20792.4, 0.472452 -0.1, 0, 44, 43772.3, 4652.35, 17907.1, 0.457748 -0.1, 0, 41, 38628.8, 4399.32, 15117.4, 0.441647 -0.1, 0, 38, 33471.3, 4130.98, 12495.1, 0.425866 -0.1, 0, 35, 28290.4, 3840.72, 10110.9, 0.413537 -0.1, 0, 32, 23067.1, 3507.29, 7960.7, 0.406992 -0.1, 0, 29, 17780.3, 3110.29, 5995.71, 0.408705 -0.1, 0, 26, 12400.2, 2620.36, 4197.43, 0.429192 -0.2, 0, 50, 57647.3, 10603.3, 25425.5, 0.540462 -0.2, 0, 47, 52504, 10164.3, 22162.3, 0.523439 -0.2, 0, 44, 47327.3, 9692.14, 19180.2, 0.509636 -0.2, 0, 41, 42129, 9198.28, 16310.9, 0.495309 -0.2, 0, 38, 36905.1, 8679.85, 13562.1, 0.480496 -0.2, 0, 35, 31649.4, 8127.32, 10997.6, 0.467541 -0.2, 0, 32, 26321.7, 7503.92, 8696.87, 0.462162 -0.2, 0, 29, 20873.9, 6760.73, 6578.5, 0.466124 -0.2, 0, 26, 15253.2, 5844.67, 4620.23, 0.491067 -0.25, 0, 50, 59887.9, 13531.2, 26264, 0.566562 -0.25, 0, 47, 54709.5, 12988.4, 22946.7, 0.550002 -0.25, 0, 44, 49496.2, 12410.9, 19864.2, 0.535636 -0.25, 0, 41, 44250, 11801.1, 16940.8, 0.522076 -0.25, 0, 38, 38975.5, 11161.9, 14130.5, 0.508044 -0.25, 0, 35, 33661.3, 10482.8, 11491.3, 0.495772 -0.25, 0, 32, 28276.6, 9734.59, 9078.89, 0.48964 -0.25, 0, 29, 22745.7, 8838.64, 6880.2, 0.494728 -0.25, 0, 26, 17001.5, 7730.26, 4863.81, 0.524611 -0.3, 0, 50, 61345.2, 16480.9, 26442.8, 0.589397 -0.3, 0, 47, 56222.3, 15844.4, 23161.1, 0.573608 -0.3, 0, 44, 51062.6, 15171.4, 20084, 0.55958 -0.3, 0, 41, 45863.4, 14458.8, 17172.1, 0.546804 -0.3, 0, 38, 40630.7, 13712.8, 14371.1, 0.533887 -0.3, 0, 35, 35354.9, 12921.9, 11733, 0.523024 -0.3, 0, 32, 30003.3, 12058.2, 9305.99, 0.518583 -0.3, 0, 29, 24490.1, 11030.8, 7081.42, 0.526135 -0.3, 0, 26, 18737.7, 9764.8, 5027.29, 0.560277 -0.4, 0, 50, 65109.9, 22791, 26900.6, 0.635663 -0.4, 0, 47, 60065.1, 21978.5, 23682.1, 0.621795 -0.4, 0, 44, 54979.7, 21124.2, 20632.6, 0.609431 -0.4, 0, 41, 49860.8, 20237.6, 17672.8, 0.596586 -0.4, 0, 38, 44688.5, 19298.1, 14871.6, 0.585718 -0.4, 0, 35, 39465.8, 18305.4, 12227, 0.577823 -0.4, 0, 32, 34166.3, 17239.4, 9767.5, 0.57704 -0.4, 0, 29, 28693.9, 15998.2, 7482.36, 0.589363 -0.4, 0, 26, 22941.7, 14477.9, 5359.4, 0.633215 -0.5, 0, 50, 70055, 29779.2, 27487, 0.68247 -0.5, 0, 47, 65050.3, 28802.7, 24313.7, 0.670767 -0.5, 0, 44, 60006.3, 27785.4, 21267.7, 0.660061 -0.5, 0, 41, 54933.8, 26740.6, 18278.4, 0.648327 -0.5, 0, 38, 49804.8, 25639.6, 15438, 0.638853 -0.5, 0, 35, 44613.5, 24475.6, 12761.1, 0.633688 -0.5, 0, 32, 39346.5, 23236.6, 10261.2, 0.636952 -0.5, 0, 29, 33908.7, 21826, 7940.59, 0.657184 -0.5, 0, 26, 28159.8, 20104.6, 5792.28, 0.719078 -0, 2000, 50, 49123, 0, 21568.5, 0.439072 -0, 2000, 47, 44210.8, 0, 18665, 0.422182 -0, 2000, 44, 39298.6, 0, 15951.1, 0.405896 -0, 2000, 41, 34385.7, 0, 13349.7, 0.388235 -0, 2000, 38, 29474, 0, 10936.3, 0.371051 -0, 2000, 35, 24561.4, 0, 8769.85, 0.357058 -0, 2000, 32, 19649.5, 0, 6824.42, 0.347308 -0, 2000, 29, 14737, 0, 5070.39, 0.34406 -0, 2000, 26, 9824.59, 0, 3510.74, 0.357342 -0.1, 2000, 50, 51538.6, 4821.09, 22855.7, 0.489231 -0.1, 2000, 47, 46652.4, 4606.79, 19839.4, 0.471855 -0.1, 2000, 44, 41751.7, 4377.35, 17079.5, 0.456984 -0.1, 2000, 41, 36839.9, 4137.67, 14421.4, 0.440991 -0.1, 2000, 38, 31915.2, 3884.26, 11907.2, 0.424786 -0.1, 2000, 35, 26969.6, 3610.79, 9613.12, 0.411541 -0.1, 2000, 32, 21985.2, 3298.23, 7554.94, 0.404289 -0.1, 2000, 29, 16940.5, 2925.36, 5678.88, 0.405195 -0.1, 2000, 26, 11808.4, 2464.95, 3961.86, 0.424026 -0.2, 2000, 50, 54856.9, 9965.33, 24261, 0.540436 -0.2, 2000, 47, 49954, 9551.35, 21122.7, 0.522806 -0.2, 2000, 44, 45021.5, 9108.3, 18243.8, 0.507997 -0.2, 2000, 41, 40063.8, 8640.77, 15515.3, 0.493757 -0.2, 2000, 38, 35085.2, 8150.44, 12894.4, 0.478727 -0.2, 2000, 35, 30074.3, 7628.41, 10439.8, 0.46511 -0.2, 2000, 32, 25000.6, 7044.03, 8236.45, 0.458687 -0.2, 2000, 29, 19814, 6346.56, 6218.85, 0.461769 -0.2, 2000, 26, 14463.4, 5485.34, 4356.44, 0.485233 -0.25, 2000, 50, 56889.7, 12706.1, 25024.5, 0.566374 -0.25, 2000, 47, 51961.3, 12195.5, 21825, 0.54884 -0.25, 2000, 44, 47000.7, 11653.7, 18858.8, 0.533533 -0.25, 2000, 41, 42003.8, 11076.7, 16083.3, 0.520042 -0.25, 2000, 38, 36983.1, 10472.6, 13408.8, 0.505793 -0.25, 2000, 35, 31923.6, 9831.26, 10889.6, 0.492914 -0.25, 2000, 32, 26801.1, 9128.33, 8586.63, 0.485867 -0.25, 2000, 29, 21543.1, 8287.86, 6496.23, 0.490086 -0.25, 2000, 26, 16082.8, 7246.19, 4580.78, 0.518386 -0.3, 2000, 50, 58331.4, 15483.3, 25230.6, 0.588838 -0.3, 2000, 47, 53446.2, 14882.7, 22072.7, 0.572374 -0.3, 2000, 44, 48527.8, 14249.2, 19112.4, 0.557561 -0.3, 2000, 41, 43569.4, 13575.4, 16334.7, 0.544599 -0.3, 2000, 38, 38578.2, 12869, 13661.2, 0.531375 -0.3, 2000, 35, 33545.5, 12120.8, 11136.9, 0.519816 -0.3, 2000, 32, 28446.2, 11307.5, 8816.1, 0.514398 -0.3, 2000, 29, 23197.6, 10343, 6696.12, 0.520911 -0.3, 2000, 26, 17721.2, 9151.59, 4740.96, 0.553229 -0.4, 2000, 50, 61981.9, 21423.2, 25729.2, 0.634369 -0.4, 2000, 47, 57158, 20655.1, 22625.3, 0.619823 -0.4, 2000, 44, 52291.4, 19844.4, 19699.7, 0.607135 -0.4, 2000, 41, 47394.8, 19004.4, 16860.6, 0.593884 -0.4, 2000, 38, 42447.5, 18112.3, 14179, 0.582652 -0.4, 2000, 35, 37450.7, 17170.6, 11636.7, 0.573801 -0.4, 2000, 32, 32383.3, 16160.4, 9278.77, 0.571955 -0.4, 2000, 29, 27160.9, 14993.3, 7092.66, 0.582913 -0.4, 2000, 26, 21672.9, 13561.2, 5059.77, 0.623759 -0.5, 2000, 50, 66628.7, 27978.1, 26303.5, 0.680546 -0.5, 2000, 47, 61841, 27055.7, 23234, 0.667925 -0.5, 2000, 44, 57008, 26087.2, 20316.8, 0.657059 -0.5, 2000, 41, 52146.2, 25090.8, 17461.2, 0.645387 -0.5, 2000, 38, 47235.5, 24046.9, 14725.1, 0.635014 -0.5, 2000, 35, 42266.2, 22940.8, 12151.8, 0.6288 -0.5, 2000, 32, 37223.4, 21763.6, 9748.24, 0.630555 -0.5, 2000, 29, 32029.4, 20434.2, 7526.35, 0.649094 -0.5, 2000, 26, 26539.5, 18809.4, 5468.06, 0.707372 -0, 5000, 50, 45729, 0, 20147.1, 0.440576 -0, 5000, 47, 41156.2, 0, 17375.5, 0.422184 -0, 5000, 44, 36583.5, 0, 14847.5, 0.405853 -0, 5000, 41, 32010.2, 0, 12420.3, 0.38801 -0, 5000, 38, 27437.9, 0, 10162.2, 0.370371 -0, 5000, 35, 22864.4, 0, 8117.71, 0.355037 -0, 5000, 32, 18291.6, 0, 6302.05, 0.344532 -0, 5000, 29, 13718.8, 0, 4668.69, 0.340313 -0, 5000, 26, 9145.66, 0, 3214.88, 0.35152 -0.1, 5000, 50, 47774.7, 4385.2, 21260.7, 0.489997 -0.1, 5000, 47, 43241.8, 4191.27, 18388.1, 0.47088 -0.1, 5000, 44, 38693.5, 3981.83, 15806.6, 0.455369 -0.1, 5000, 41, 34133.4, 3761.8, 13349.8, 0.43955 -0.1, 5000, 38, 29564.2, 3530.12, 11008.2, 0.422838 -0.1, 5000, 35, 24975.1, 3280.19, 8864.57, 0.408602 -0.1, 5000, 32, 20353.4, 2997.61, 6944.72, 0.400139 -0.1, 5000, 29, 15676.3, 2659.48, 5205.59, 0.399912 -0.1, 5000, 26, 10919, 2241.12, 3619.1, 0.417048 -0.2, 5000, 50, 50690, 9049.69, 22515.2, 0.540706 -0.2, 5000, 47, 46150.7, 8674.24, 19539.7, 0.521386 -0.2, 5000, 44, 41585.1, 8272.76, 16829.7, 0.505208 -0.2, 5000, 41, 36992.3, 7844, 14313.3, 0.491051 -0.2, 5000, 38, 32379.4, 7394.61, 11888.1, 0.475814 -0.2, 5000, 35, 27737.1, 6916.8, 9606.91, 0.461421 -0.2, 5000, 32, 23043, 6386.91, 7556.59, 0.453682 -0.2, 5000, 29, 18247.1, 5755.01, 5690.29, 0.455511 -0.2, 5000, 26, 13300.7, 4972.69, 3972.54, 0.477012 -0.25, 5000, 50, 52484.3, 11527.5, 23208.9, 0.566667 -0.25, 5000, 47, 47929.3, 11067.8, 20155.1, 0.546778 -0.25, 5000, 44, 43341, 10576, 17375.6, 0.53031 -0.25, 5000, 41, 38717.5, 10047.6, 14814.3, 0.516721 -0.25, 5000, 38, 34068.5, 9493.96, 12343.2, 0.502275 -0.25, 5000, 35, 29384.9, 8906.69, 10006.8, 0.488655 -0.25, 5000, 32, 24650, 8267.65, 7869.75, 0.48038 -0.25, 5000, 29, 19793.1, 7506.04, 5939.51, 0.483395 -0.25, 5000, 26, 14751.2, 6559.92, 4173.3, 0.509483 -0.3, 5000, 50, 53778.8, 14041.6, 23399.8, 0.588864 -0.3, 5000, 47, 49265.6, 13501.7, 20379.6, 0.569839 -0.3, 5000, 44, 44713.3, 12924, 17620.6, 0.554294 -0.3, 5000, 41, 40125, 12308.8, 15042.8, 0.540794 -0.3, 5000, 38, 35504, 11661.1, 12572.9, 0.527325 -0.3, 5000, 35, 30844.6, 10975.6, 10231.8, 0.514964 -0.3, 5000, 32, 26128.9, 10234.1, 8080.14, 0.508353 -0.3, 5000, 29, 21280.9, 9359.98, 6121.21, 0.513485 -0.3, 5000, 26, 16224.3, 8276.88, 4319.04, 0.54345 -0.4, 5000, 50, 57169.6, 19432.3, 23908, 0.633537 -0.4, 5000, 47, 52703.6, 18739.3, 20944, 0.616647 -0.4, 5000, 44, 48188.7, 17998.8, 18205.1, 0.603019 -0.4, 5000, 41, 43641, 17224.9, 15582.2, 0.589874 -0.4, 5000, 38, 39051.2, 16408.2, 13080.5, 0.577686 -0.4, 5000, 35, 34412.2, 15543.1, 10712.8, 0.567746 -0.4, 5000, 32, 29709, 14614.4, 8524.74, 0.564751 -0.4, 5000, 29, 24876.3, 13555.3, 6496.67, 0.573861 -0.4, 5000, 26, 19797.8, 12250.3, 4616.48, 0.61166 -0.5, 5000, 50, 61590.4, 25405.6, 24552.7, 0.678537 -0.5, 5000, 47, 57136, 24569.7, 21618.7, 0.663835 -0.5, 5000, 44, 52624.5, 23677.1, 18882.1, 0.652287 -0.5, 5000, 41, 48080.4, 22752.1, 16230.1, 0.64079 -0.5, 5000, 38, 43503.7, 21792.2, 13661.3, 0.629222 -0.5, 5000, 35, 38862.8, 20770.3, 11247.2, 0.621647 -0.5, 5000, 32, 34156.2, 19682.8, 8995.21, 0.621501 -0.5, 5000, 29, 29324, 18468.5, 6920.89, 0.63755 -0.5, 5000, 26, 24220.5, 16983.6, 4999.74, 0.690863 -0, 10000, 50, 40056.6, 0, 17751, 0.443149 -0, 10000, 47, 36051.2, 0, 15208.3, 0.421853 -0, 10000, 44, 32045.3, 0, 12960, 0.404426 -0, 10000, 41, 28039.7, 0, 10850.4, 0.386964 -0, 10000, 38, 24034, 0, 8860.73, 0.368674 -0, 10000, 35, 20028.5, 0, 7044.48, 0.351723 -0, 10000, 32, 16022.6, 0, 5446.42, 0.339921 -0, 10000, 29, 12016.9, 0, 4018.95, 0.334442 -0, 10000, 26, 8011.24, 0, 2746.93, 0.342884 -0.1, 10000, 50, 41712.1, 3716.25, 18691.3, 0.491931 -0.1, 10000, 47, 37749.6, 3553.39, 16065.3, 0.469797 -0.1, 10000, 44, 33773.6, 3376.85, 13744.1, 0.452156 -0.1, 10000, 41, 29785.1, 3187.81, 11611, 0.436548 -0.1, 10000, 38, 25786.9, 2989.33, 9561.42, 0.419405 -0.1, 10000, 35, 21774, 2775.91, 7670.08, 0.40373 -0.1, 10000, 32, 17736.1, 2537.74, 5982.13, 0.393603 -0.1, 10000, 29, 13651.5, 2252.83, 4462.12, 0.391461 -0.1, 10000, 26, 9497.61, 1898.5, 3087.97, 0.406359 -0.2, 10000, 50, 44139.4, 7656.35, 19782.2, 0.54223 -0.2, 10000, 47, 40180, 7345.5, 17031.2, 0.518698 -0.2, 10000, 44, 36191.9, 7005.56, 14614, 0.500711 -0.2, 10000, 41, 32176.2, 6638.18, 12414.5, 0.486117 -0.2, 10000, 38, 28141.4, 6251.65, 10307.4, 0.470876 -0.2, 10000, 35, 24083.4, 5841.88, 8309.22, 0.455511 -0.2, 10000, 32, 19986.1, 5393.16, 6501.74, 0.445541 -0.2, 10000, 29, 15805, 4860.07, 4877.29, 0.445622 -0.2, 10000, 26, 11493.6, 4197.14, 3388.86, 0.464451 -0.25, 10000, 50, 45684.3, 9750.87, 20397.8, 0.567655 -0.25, 10000, 47, 41710, 9369.77, 17587.2, 0.543818 -0.25, 10000, 44, 37697, 8950.27, 15120.5, 0.525991 -0.25, 10000, 41, 33653.8, 8500.5, 12852.6, 0.51097 -0.25, 10000, 38, 29583.4, 8023.35, 10706.3, 0.496582 -0.25, 10000, 35, 25485.3, 7518.55, 8663.3, 0.482185 -0.25, 10000, 32, 21347.2, 6973.63, 6782.18, 0.47185 -0.25, 10000, 29, 17111.7, 6331.75, 5094.88, 0.472624 -0.25, 10000, 26, 12716.4, 5529.83, 3559.24, 0.495261 -0.3, 10000, 50, 46767.8, 11872, 20564.3, 0.589305 -0.3, 10000, 47, 42832, 11425.2, 17772.3, 0.565875 -0.3, 10000, 44, 38848.4, 10931.8, 15327.4, 0.549041 -0.3, 10000, 41, 34833.7, 10406.7, 13051, 0.534286 -0.3, 10000, 38, 30785.4, 9847.92, 10903.9, 0.520785 -0.3, 10000, 35, 26705.6, 9257.63, 8856.6, 0.507601 -0.3, 10000, 32, 22581.1, 8622.51, 6964.09, 0.498909 -0.3, 10000, 29, 18354, 7885.43, 5250.9, 0.501585 -0.3, 10000, 26, 13945.5, 6966.34, 3683.91, 0.527844 -0.4, 10000, 50, 49598.3, 16409.4, 21004.8, 0.632888 -0.4, 10000, 47, 45708.6, 15837.9, 18248.9, 0.61093 -0.4, 10000, 44, 41756.7, 15205.6, 15819.1, 0.595797 -0.4, 10000, 41, 37767.8, 14535.1, 13539.9, 0.582797 -0.4, 10000, 38, 33747.6, 13834.3, 11339.1, 0.569421 -0.4, 10000, 35, 29681.9, 13087.4, 9268.34, 0.558519 -0.4, 10000, 32, 25562.8, 12287, 7345.33, 0.553289 -0.4, 10000, 29, 21346.3, 11389.8, 5572.37, 0.559673 -0.4, 10000, 26, 16917.4, 10279.7, 3936.98, 0.593127 -0.5, 10000, 50, 53375.8, 21443.9, 21598.4, 0.676389 -0.5, 10000, 47, 49488.7, 20749.1, 18879.4, 0.656914 -0.5, 10000, 44, 45532.1, 19986.3, 16439.1, 0.643514 -0.5, 10000, 41, 41534.3, 19181.4, 14131.5, 0.632202 -0.5, 10000, 38, 37509.3, 18350.3, 11874.6, 0.619792 -0.5, 10000, 35, 33433.7, 17467.9, 9745.72, 0.610412 -0.5, 10000, 32, 29297.9, 16525, 7766.15, 0.608019 -0.5, 10000, 29, 25069.2, 15489.6, 5940, 0.620069 -0.5, 10000, 26, 20611.4, 14225, 4257.12, 0.666594 -0.3, 15000, 50, 39299, 9860.24, 16463.6, 0.559248 -0.3, 15000, 47, 35982.8, 9488.15, 14228.4, 0.537029 -0.3, 15000, 44, 32630.1, 9079.06, 12241.7, 0.519793 -0.3, 15000, 41, 29249.1, 8641.89, 10411.5, 0.505238 -0.3, 15000, 38, 25836.6, 8173.34, 8703.84, 0.492766 -0.3, 15000, 35, 22398.2, 7678.76, 7070.51, 0.480352 -0.3, 15000, 32, 18922.5, 7146.71, 5556.27, 0.471838 -0.3, 15000, 29, 15365, 6533.49, 4187.09, 0.474108 -0.3, 15000, 26, 11655.7, 5767.98, 2936.51, 0.49875 -0.3, 15000, 21, 5524.72, 4052.79, 1241.13, 0.843202 -0.4, 15000, 50, 42330.4, 13716.5, 17317.3, 0.605205 -0.4, 15000, 47, 38990.2, 13238.1, 15018, 0.583177 -0.4, 15000, 44, 35604.6, 12713, 12955.9, 0.565968 -0.4, 15000, 41, 32175.7, 12145.9, 11071.5, 0.55275 -0.4, 15000, 38, 28719, 11551.1, 9266.82, 0.539776 -0.4, 15000, 35, 25221.8, 10915.2, 7569.29, 0.529076 -0.4, 15000, 32, 21680.6, 10234.8, 5984.2, 0.522829 -0.4, 15000, 29, 18062.6, 9478.53, 4529.89, 0.527706 -0.4, 15000, 26, 14267.1, 8544.28, 3190.68, 0.557541 -0.4, 15000, 21, 7929.73, 6499.04, 1386.96, 0.969436 -0.5, 15000, 50, 46481, 18076.9, 18535.3, 0.652557 -0.5, 15000, 47, 43056.4, 17493.1, 16123.2, 0.630717 -0.5, 15000, 44, 39578.9, 16855.3, 13935.8, 0.613274 -0.5, 15000, 41, 36042.2, 16159.3, 11950.8, 0.601059 -0.5, 15000, 38, 32473, 15430.4, 10049.1, 0.589643 -0.5, 15000, 35, 28868.7, 14666.5, 8220.08, 0.578787 -0.5, 15000, 32, 25207.9, 13846, 6520.09, 0.573855 -0.5, 15000, 29, 21475.8, 12954.5, 4955.95, 0.5816 -0.5, 15000, 26, 17556.3, 11875.5, 3523.04, 0.620165 -0.5, 15000, 21, 10988.5, 9568.25, 1583.03, 1.11464 -0.6, 15000, 50, 51937.7, 23089.4, 20221.5, 0.700959 -0.6, 15000, 47, 48348.9, 22385.7, 17638.8, 0.679375 -0.6, 15000, 44, 44708.5, 21629.4, 15271.4, 0.661699 -0.6, 15000, 41, 40994.7, 20801, 13123.2, 0.649867 -0.6, 15000, 38, 37240.9, 19931.8, 11070.4, 0.63957 -0.6, 15000, 35, 33451.3, 19026.4, 9087.13, 0.629962 -0.6, 15000, 32, 29595.1, 18055.5, 7237.28, 0.627171 -0.6, 15000, 29, 25665.6, 17011.1, 5526.65, 0.638587 -0.6, 15000, 26, 21588.9, 15819.2, 3941.01, 0.683057 -0.6, 15000, 21, 14717.4, 13275, 1834.23, 1.27163 -0.7, 15000, 50, 58791.9, 28946.4, 22389.8, 0.750191 -0.7, 15000, 47, 54936.7, 28076, 19562.6, 0.728298 -0.7, 15000, 44, 51024.6, 27147.8, 16963.5, 0.710462 -0.7, 15000, 41, 47045.5, 26153.8, 14594.5, 0.698579 -0.7, 15000, 38, 43038.4, 25131, 12334.5, 0.688797 -0.7, 15000, 35, 38998.9, 24075.2, 10145, 0.67979 -0.7, 15000, 32, 34883, 22944.6, 8097.44, 0.678266 -0.7, 15000, 29, 30687.3, 21733.9, 6195.38, 0.691958 -0.7, 15000, 26, 26384, 20414.9, 4422.46, 0.740891 -0.7, 15000, 21, 19136.3, 17644, 2100.57, 1.40763 -0.4, 20000, 50, 31214.6, 10707.6, 11569.4, 0.56417 -0.4, 20000, 47, 28779.8, 10323.6, 10168.3, 0.550939 -0.4, 20000, 44, 26321.6, 9916.01, 8857.65, 0.539917 -0.4, 20000, 41, 23845.1, 9490.92, 7595.72, 0.529164 -0.4, 20000, 38, 21345.9, 9041.58, 6394.24, 0.519675 -0.4, 20000, 35, 18819.7, 8565.95, 5256.2, 0.512611 -0.4, 20000, 32, 16257.9, 8055.27, 4200.61, 0.512106 -0.4, 20000, 29, 13618.5, 7466.45, 3222.58, 0.52382 -0.4, 20000, 26, 10846.6, 6745.26, 2310.41, 0.563324 -0.4, 20000, 21, 6225.55, 5200.2, 1060.74, 1.03451 -0.5, 20000, 50, 34438.9, 14143.5, 12381.9, 0.610083 -0.5, 20000, 47, 31943.4, 13677.6, 10900.6, 0.596777 -0.5, 20000, 44, 29414.2, 13178.2, 9525.88, 0.586715 -0.5, 20000, 41, 26864.6, 12657.7, 8202.52, 0.577363 -0.5, 20000, 38, 24297.4, 12119.7, 6911.54, 0.567556 -0.5, 20000, 35, 21693.4, 11545.4, 5700.09, 0.5617 -0.5, 20000, 32, 19051.7, 10933.7, 4568.45, 0.562758 -0.5, 20000, 29, 16340, 10251.4, 3524.79, 0.578914 -0.5, 20000, 26, 13477, 9417.93, 2556.73, 0.629878 -0.5, 20000, 21, 8703.03, 7688.25, 1212.45, 1.19479 -0.6, 20000, 50, 38618.4, 18088, 13484.8, 0.656819 -0.6, 20000, 47, 36014.2, 17536.8, 11889.6, 0.643469 -0.6, 20000, 44, 33366.8, 16942.8, 10411.8, 0.633942 -0.6, 20000, 41, 30695.4, 16324.1, 8989.66, 0.625526 -0.6, 20000, 38, 28005.7, 15687, 7599.89, 0.616938 -0.6, 20000, 35, 25273.7, 15008.6, 6289.78, 0.612735 -0.6, 20000, 32, 22500.7, 14288.7, 5062.95, 0.616527 -0.6, 20000, 29, 19673.1, 13514, 3917.64, 0.636073 -0.6, 20000, 26, 16706.1, 12600, 2844.38, 0.692723 -0.6, 20000, 21, 11723.3, 10696.8, 1402.98, 1.36674 -0.7, 20000, 50, 43875.2, 22676.7, 14924.6, 0.704039 -0.7, 20000, 47, 41082.7, 22004, 13175.7, 0.690598 -0.7, 20000, 44, 38250.3, 21291.8, 11552.3, 0.681213 -0.7, 20000, 41, 35403.4, 20564.5, 9990.45, 0.673258 -0.7, 20000, 38, 32540.7, 19821, 8462.53, 0.665311 -0.7, 20000, 35, 29631.5, 19032.3, 7016.05, 0.661942 -0.7, 20000, 32, 26675.8, 18196.4, 5659.53, 0.667448 -0.7, 20000, 29, 23663.9, 17304.3, 4388.01, 0.689986 -0.7, 20000, 26, 20556.9, 16317.2, 3185.13, 0.751261 -0.7, 20000, 21, 15306, 14246.1, 1604.52, 1.5138 -0.5, 25000, 50, 27774.6, 11421.1, 9716.34, 0.594143 -0.5, 25000, 47, 25762.5, 11044.3, 8560.65, 0.581638 -0.5, 25000, 44, 23723.4, 10640.8, 7485.72, 0.572191 -0.5, 25000, 41, 21667.3, 10220.5, 6449.14, 0.563398 -0.5, 25000, 38, 19598.5, 9786.01, 5438.48, 0.55424 -0.5, 25000, 35, 17499.1, 9322.09, 4490.19, 0.549126 -0.5, 25000, 32, 15369.2, 8827.92, 3604.08, 0.550971 -0.5, 25000, 29, 13181.8, 8275.7, 2786.06, 0.567881 -0.5, 25000, 26, 10872.2, 7601.47, 2027.38, 0.619861 -0.5, 25000, 21, 7021.5, 6203.82, 971.811, 1.18849 -0.6, 25000, 50, 31147.1, 14606.4, 10579.8, 0.639621 -0.6, 25000, 47, 29047.3, 14160.6, 9334.47, 0.627036 -0.6, 25000, 44, 26913.1, 13680.8, 8179, 0.618107 -0.6, 25000, 41, 24759.6, 13181, 7066.29, 0.61029 -0.6, 25000, 38, 22591.5, 12666.6, 5977.56, 0.602283 -0.6, 25000, 35, 20388.9, 12118.6, 4952.29, 0.598806 -0.6, 25000, 32, 18153.1, 11536.9, 3991.52, 0.603298 -0.6, 25000, 29, 15873, 10910.7, 3094.23, 0.623558 -0.6, 25000, 26, 13479.2, 10171.1, 2252.69, 0.680951 -0.6, 25000, 21, 9459.57, 8632.53, 1121.87, 1.3565 -0.7, 25000, 50, 35388.2, 18311.8, 11705.9, 0.685501 -0.7, 25000, 47, 33136.5, 17767.8, 10340.7, 0.672837 -0.7, 25000, 44, 30853.4, 17192.6, 9071.57, 0.664056 -0.7, 25000, 41, 28558.6, 16605.1, 7849.8, 0.656695 -0.7, 25000, 38, 26251, 16004.8, 6653.42, 0.649351 -0.7, 25000, 35, 23905.8, 15367.7, 5521.24, 0.646657 -0.7, 25000, 32, 21522.8, 14692.3, 4459.28, 0.65285 -0.7, 25000, 29, 19094.7, 13971.8, 3462.95, 0.675971 -0.7, 25000, 26, 16588.2, 13172.9, 2520.07, 0.73788 -0.7, 25000, 21, 12352.3, 11498.4, 1279.89, 1.49902 -0.75, 25000, 50, 37866.1, 20407.9, 12372.7, 0.708703 -0.75, 25000, 47, 35516.4, 19804.1, 10933.5, 0.695854 -0.75, 25000, 44, 33131.2, 19164.9, 9593.92, 0.686934 -0.75, 25000, 41, 30733.4, 18512.7, 8304.18, 0.679516 -0.75, 25000, 38, 28333.3, 17857.8, 7042.94, 0.672329 -0.75, 25000, 35, 25902.1, 17173.1, 5846.71, 0.669802 -0.75, 25000, 32, 23430.8, 16447.6, 4723.81, 0.676456 -0.75, 25000, 29, 20912.3, 15674.9, 3669.16, 0.700561 -0.75, 25000, 26, 18328.7, 14837.1, 2671.79, 0.765195 -0.75, 25000, 21, 13964.1, 13091.2, 1369.93, 1.56938 -0.8, 25000, 50, 40606.7, 22691.5, 13118.2, 0.732236 -0.8, 25000, 47, 38146.1, 22022.4, 11594.2, 0.71908 -0.8, 25000, 44, 35644.8, 21312.9, 10174.4, 0.709916 -0.8, 25000, 41, 33128.6, 20588.3, 8807.8, 0.70236 -0.8, 25000, 38, 30610.8, 19861.1, 7470.49, 0.694952 -0.8, 25000, 35, 28064.5, 19107.6, 6201.77, 0.692395 -0.8, 25000, 32, 25492.7, 18326.8, 5011.13, 0.699308 -0.8, 25000, 29, 22873.4, 17498.8, 3891.17, 0.723997 -0.8, 25000, 26, 20193.2, 16610.1, 2837.67, 0.791973 -0.8, 25000, 21, 15688.2, 14792.5, 1464.43, 1.63486 -0.5, 30000, 50, 22197.7, 9139.31, 7553.34, 0.578427 -0.5, 30000, 47, 20589.8, 8837.27, 6660.41, 0.56672 -0.5, 30000, 44, 18960.8, 8514.25, 5827.79, 0.557868 -0.5, 30000, 41, 17318.3, 8177.88, 5024.02, 0.549648 -0.5, 30000, 38, 15665.4, 7830.04, 4240.92, 0.541253 -0.5, 30000, 35, 13988, 7458.59, 3505.89, 0.536939 -0.5, 30000, 32, 12286.1, 7062.74, 2819.36, 0.539757 -0.5, 30000, 29, 10537.4, 6619.85, 2184.53, 0.557631 -0.5, 30000, 26, 8690.84, 6079.16, 1595.86, 0.611046 -0.5, 30000, 21, 5612.47, 4959.54, 775.321, 1.18745 -0.6, 30000, 50, 24893.8, 11688.3, 8220.68, 0.622522 -0.6, 30000, 47, 23215.8, 11330.8, 7259.3, 0.610799 -0.6, 30000, 44, 21510.8, 10946.6, 6365.11, 0.602518 -0.6, 30000, 41, 19789.9, 10546.6, 5502.15, 0.595259 -0.6, 30000, 38, 18058.5, 10135, 4658.72, 0.587956 -0.6, 30000, 35, 16298.8, 9696.13, 3864.3, 0.585265 -0.6, 30000, 32, 14512.4, 9230.3, 3119.75, 0.590629 -0.6, 30000, 29, 12690.3, 8728.63, 2423.39, 0.611713 -0.6, 30000, 26, 10776.3, 8135.17, 1770.44, 0.670342 -0.6, 30000, 21, 7562.34, 6902.07, 892.382, 1.35153 -0.7, 30000, 50, 28284.9, 14653.5, 9092.75, 0.667048 -0.7, 30000, 47, 26485.5, 14217.3, 8038.8, 0.655256 -0.7, 30000, 44, 24661.5, 13756.7, 7056.83, 0.647127 -0.7, 30000, 41, 22828.6, 13286.6, 6109.92, 0.640321 -0.7, 30000, 38, 20985.3, 12806.1, 5182.55, 0.63363 -0.7, 30000, 35, 19111.6, 12296, 4305.7, 0.631742 -0.7, 30000, 32, 17207.6, 11755.2, 3482.43, 0.638694 -0.7, 30000, 29, 15267.6, 11178.2, 2709.71, 0.662618 -0.7, 30000, 26, 13263.6, 10537.4, 1978.02, 0.725541 -0.7, 30000, 21, 9876.64, 9195.07, 1014.76, 1.48885 -0.75, 30000, 50, 30266.4, 16330.8, 9610.02, 0.689605 -0.75, 30000, 47, 28388.8, 15846.9, 8498.01, 0.677566 -0.75, 30000, 44, 26483.4, 15335.2, 7461.34, 0.669286 -0.75, 30000, 41, 24567.3, 14812.9, 6462.68, 0.662538 -0.75, 30000, 38, 22650.8, 14289, 5484.74, 0.655934 -0.75, 30000, 35, 20708.4, 13740.7, 4558.17, 0.654186 -0.75, 30000, 32, 18733.9, 13159.8, 3687.83, 0.661594 -0.75, 30000, 29, 16721.7, 12541, 2869.84, 0.686457 -0.75, 30000, 26, 14656.6, 11869.5, 2095.57, 0.751881 -0.75, 30000, 21, 11166.3, 10469.6, 1084.69, 1.55675 -0.8, 30000, 50, 32457.4, 18158.3, 10187, 0.712421 -0.8, 30000, 47, 30491, 17621.8, 9009.6, 0.700091 -0.8, 30000, 44, 28493, 17053.9, 7911.02, 0.691577 -0.8, 30000, 41, 26483.4, 16474, 6852.57, 0.684614 -0.8, 30000, 38, 24471.9, 15892, 5816.13, 0.677879 -0.8, 30000, 35, 22438, 15288.7, 4833.52, 0.676081 -0.8, 30000, 32, 20383.1, 14663.5, 3910.77, 0.68375 -0.8, 30000, 29, 18290.2, 14000.4, 3042.14, 0.709168 -0.8, 30000, 26, 16148.3, 13288.5, 2224.41, 0.777812 -0.8, 30000, 21, 12545.8, 11830.8, 1158.13, 1.61986 -0.85, 30000, 50, 34874.9, 20152.7, 10830.7, 0.735667 -0.85, 30000, 47, 32808.8, 19558.8, 9579.17, 0.722957 -0.85, 30000, 44, 30706.5, 18929, 8410.59, 0.71412 -0.85, 30000, 41, 28591.1, 18285.5, 7284.47, 0.706849 -0.85, 30000, 38, 26473.4, 17639.6, 6181.94, 0.699807 -0.85, 30000, 35, 24330.4, 16969.7, 5135.29, 0.69766 -0.85, 30000, 32, 22165.9, 16277.1, 4152.72, 0.705187 -0.85, 30000, 29, 19975.8, 15559.1, 3227.83, 0.730829 -0.85, 30000, 26, 17744.2, 14799.7, 2359.65, 0.801392 -0.85, 30000, 21, 14019.9, 13283.8, 1229.14, 1.66978 -0.6, 35000, 50, 19701.5, 9260.88, 6326.38, 0.60594 -0.6, 35000, 47, 18374, 8977.38, 5590.04, 0.5949 -0.6, 35000, 44, 17025.2, 8672.8, 4904.67, 0.587215 -0.6, 35000, 41, 15663.7, 8355.73, 4243.12, 0.580612 -0.6, 35000, 38, 14293.9, 8029.3, 3596.59, 0.574115 -0.6, 35000, 35, 12901.5, 7681.3, 2987.49, 0.57229 -0.6, 35000, 32, 11487.8, 7311.66, 2416.88, 0.578733 -0.6, 35000, 29, 10045.7, 6913.51, 1882.34, 0.600969 -0.6, 35000, 26, 8529.99, 6441.87, 1380.97, 0.661345 -0.6, 35000, 21, 5984.52, 5462.49, 706.823, 1.35398 -0.7, 35000, 50, 22385.2, 11610.5, 6992.44, 0.648964 -0.7, 35000, 47, 20961.5, 11264.1, 6186.78, 0.637979 -0.7, 35000, 44, 19518.6, 10899, 5434.53, 0.63048 -0.7, 35000, 41, 18068.3, 10526.3, 4708.47, 0.624302 -0.7, 35000, 38, 16610.6, 10145.5, 3997.96, 0.618389 -0.7, 35000, 35, 15128.3, 9740.94, 3325.76, 0.617332 -0.7, 35000, 32, 13621.5, 9311.79, 2694.94, 0.625312 -0.7, 35000, 29, 12086.8, 8854.34, 2101.85, 0.650237 -0.7, 35000, 26, 10500, 8345, 1540.19, 0.714721 -0.7, 35000, 21, 7817.53, 7278.79, 800.352, 1.4856 -0.75, 35000, 50, 23953.4, 12939.6, 7387.05, 0.670704 -0.75, 35000, 47, 22467.9, 12555.2, 6537.93, 0.659551 -0.75, 35000, 44, 20960.3, 12149.4, 5744.54, 0.651977 -0.75, 35000, 41, 19444.9, 11735.6, 4978.6, 0.64579 -0.75, 35000, 38, 17928.9, 11320.3, 4229.4, 0.63998 -0.75, 35000, 35, 16392.3, 10885.5, 3519.44, 0.639098 -0.75, 35000, 32, 14829.9, 10424.5, 2852.33, 0.647464 -0.75, 35000, 29, 13238.1, 9933.95, 2224.61, 0.673275 -0.75, 35000, 26, 11603.5, 9400.67, 1630.17, 0.74005 -0.75, 35000, 21, 8839.18, 8288.49, 853.868, 1.55054 -0.8, 35000, 50, 25687.6, 14387.7, 7827.67, 0.692719 -0.8, 35000, 47, 24131.4, 13961.5, 6929.32, 0.681353 -0.8, 35000, 44, 22550.8, 13511, 6088.78, 0.673553 -0.8, 35000, 41, 20961, 13051.5, 5277.26, 0.667201 -0.8, 35000, 38, 19370.5, 12590.2, 4483.23, 0.661215 -0.8, 35000, 35, 17761.9, 12111.9, 3730.66, 0.660302 -0.8, 35000, 32, 16135.7, 11615.8, 3023.34, 0.668893 -0.8, 35000, 29, 14480, 11090.1, 2356.88, 0.69525 -0.8, 35000, 26, 12785.2, 10525.2, 1728.99, 0.765044 -0.8, 35000, 21, 9931.9, 9366.91, 910.215, 1.61102 -0.85, 35000, 50, 27601.6, 15968, 8320.74, 0.715231 -0.85, 35000, 47, 25966.5, 15496.3, 7365.64, 0.703482 -0.85, 35000, 44, 24303.5, 14996.8, 6471.58, 0.695363 -0.85, 35000, 41, 22630, 14486.8, 5608.53, 0.688742 -0.85, 35000, 38, 20955.5, 13975, 4763.55, 0.682405 -0.85, 35000, 35, 19260.7, 13443.9, 3962.24, 0.681174 -0.85, 35000, 32, 17547.8, 12894.4, 3208.85, 0.689569 -0.85, 35000, 29, 15815, 12324.9, 2499.47, 0.716162 -0.85, 35000, 26, 14049.6, 11722.8, 1832.8, 0.787713 -0.85, 35000, 21, 11099.6, 10517.9, 964.752, 1.65855 -0.9, 35000, 50, 29708.9, 17695.2, 8869.75, 0.738306 -0.9, 35000, 47, 27985.7, 17173.4, 7850.63, 0.726085 -0.9, 35000, 44, 26230.9, 16620.1, 6896.06, 0.717534 -0.9, 35000, 41, 24463.7, 16054.5, 5975.18, 0.710556 -0.9, 35000, 38, 22695.6, 15487.1, 5073.16, 0.703768 -0.9, 35000, 35, 20904.6, 14897.8, 4216.94, 0.702029 -0.9, 35000, 32, 19092.9, 14287.5, 3411.61, 0.709951 -0.9, 35000, 29, 17258.6, 13654.5, 2653.04, 0.736118 -0.9, 35000, 26, 15398.7, 12996, 1941.63, 0.808093 -0.9, 35000, 21, 12343.5, 11742.9, 1017, 1.69307 -0.6, 39000, 50, 16259, 7642.84, 5199.94, 0.603512 -0.6, 39000, 47, 15163.1, 7408.63, 4596.71, 0.59278 -0.6, 39000, 44, 14050, 7157.14, 4034.63, 0.585338 -0.6, 39000, 41, 12926.3, 6895.35, 3492.21, 0.579044 -0.6, 39000, 38, 11795.7, 6625.78, 2962.17, 0.572968 -0.6, 39000, 35, 10646.3, 6338.25, 2463.1, 0.571748 -0.6, 39000, 32, 9479.15, 6032.76, 1995.78, 0.579092 -0.6, 39000, 29, 8288.59, 5703.75, 1557.43, 0.602524 -0.6, 39000, 26, 7036.79, 5313.57, 1146.64, 0.665405 -0.6, 39000, 21, 4934.19, 4503.38, 594.148, 1.37915 -0.7, 39000, 50, 18473.4, 9582.01, 5745.22, 0.646157 -0.7, 39000, 47, 17298.2, 9296.01, 5084.86, 0.63543 -0.7, 39000, 44, 16107.4, 8994.32, 4468.66, 0.628233 -0.7, 39000, 41, 14910.3, 8686.59, 3873.36, 0.622359 -0.7, 39000, 38, 13707.1, 8372.04, 3290.98, 0.61686 -0.7, 39000, 35, 12483.5, 8037.82, 2740.17, 0.616373 -0.7, 39000, 32, 11239.5, 7683.11, 2223.52, 0.625211 -0.7, 39000, 29, 9972.6, 7305.19, 1737.2, 0.651266 -0.7, 39000, 26, 8662.23, 6883.95, 1276.7, 0.717943 -0.7, 39000, 21, 6446.01, 6001.45, 670.743, 1.50875 -0.75, 39000, 50, 19766.9, 10678.8, 6068.1, 0.667701 -0.75, 39000, 47, 18540.6, 10361.4, 5372.44, 0.656836 -0.75, 39000, 44, 17296.5, 10026.2, 4722.34, 0.649535 -0.75, 39000, 41, 16045.8, 9684.48, 4094.43, 0.643644 -0.75, 39000, 38, 14794.5, 9341.4, 3480.42, 0.638248 -0.75, 39000, 35, 13526.2, 8982.2, 2898.58, 0.637895 -0.75, 39000, 32, 12236.3, 8601.19, 2352.36, 0.647127 -0.75, 39000, 29, 10922.3, 8195.92, 1837.7, 0.674036 -0.75, 39000, 26, 9572.83, 7755.23, 1350, 0.742735 -0.75, 39000, 21, 7288.97, 6834.57, 714.121, 1.57155 -0.8, 39000, 50, 21198, 11874, 6429.19, 0.689528 -0.8, 39000, 47, 19913.8, 11522, 5693.01, 0.678408 -0.8, 39000, 44, 18609.1, 11150, 5004.47, 0.67092 -0.8, 39000, 41, 17297, 10770.5, 4339.18, 0.664853 -0.8, 39000, 38, 15984.2, 10389.5, 3688.43, 0.659273 -0.8, 39000, 35, 14656.3, 9994.34, 3071.77, 0.658897 -0.8, 39000, 32, 13313.7, 9584.24, 2492.36, 0.668286 -0.8, 39000, 29, 11947.1, 9149.87, 1945.97, 0.695682 -0.8, 39000, 26, 10548, 8683.19, 1430.95, 0.767342 -0.8, 39000, 21, 8190.5, 7724.31, 760.273, 1.63079 -0.85, 39000, 50, 22776.9, 13178.4, 6831.86, 0.711759 -0.85, 39000, 47, 21427.2, 12788.4, 6050.07, 0.700335 -0.85, 39000, 44, 20054.6, 12375.9, 5317.72, 0.692527 -0.85, 39000, 41, 18673.5, 11954.8, 4610.27, 0.686188 -0.85, 39000, 38, 17291.5, 11532.1, 3917.84, 0.680249 -0.85, 39000, 35, 15892.6, 11093.4, 3261.28, 0.679541 -0.85, 39000, 32, 14478.4, 10639.1, 2644.13, 0.688709 -0.85, 39000, 29, 13048.3, 10168.7, 2062.72, 0.716329 -0.85, 39000, 26, 11591.2, 9671.47, 1515.86, 0.789631 -0.85, 39000, 21, 9153.9, 8673.97, 804.814, 1.67696 -0.9, 39000, 50, 24515.6, 14604, 7280.33, 0.734532 -0.9, 39000, 47, 23092.9, 14172.5, 6447.04, 0.722732 -0.9, 39000, 44, 21644.4, 13715.3, 5665.61, 0.714534 -0.9, 39000, 41, 20186.2, 13248.5, 4910.43, 0.707788 -0.9, 39000, 38, 18727.1, 12779.9, 4171.32, 0.701389 -0.9, 39000, 35, 17248.8, 12293.1, 3469.88, 0.700175 -0.9, 39000, 32, 15753.1, 11788.7, 2810.11, 0.708831 -0.9, 39000, 29, 14239.3, 11265.8, 2188.44, 0.735991 -0.9, 39000, 26, 12704.3, 10722, 1604.97, 0.809645 -0.9, 39000, 21, 10180.1, 9684.56, 847.502, 1.71014 -0.7, 43000, 50, 15244.9, 7905.28, 4755.01, 0.647856 -0.7, 43000, 47, 14274.5, 7668.89, 4210.44, 0.637402 -0.7, 43000, 44, 13291.4, 7419.82, 3701.44, 0.630396 -0.7, 43000, 41, 12303.3, 7165.8, 3209.77, 0.62477 -0.7, 43000, 38, 11310, 6906.06, 2728.9, 0.619649 -0.7, 43000, 35, 10299.7, 6629.95, 2274.38, 0.619764 -0.7, 43000, 32, 9272.51, 6336.76, 1848.37, 0.629609 -0.7, 43000, 29, 8226.51, 6024.62, 1446.77, 0.657061 -0.7, 43000, 26, 7144.26, 5676.34, 1066.63, 0.726629 -0.7, 43000, 21, 5312.51, 4945.53, 567.524, 1.54646 -0.75, 43000, 50, 16312.2, 8810.25, 5021.42, 0.66935 -0.75, 43000, 47, 15299.6, 8547.89, 4447.59, 0.658735 -0.75, 43000, 44, 14272.6, 8271.12, 3910.78, 0.651637 -0.75, 43000, 41, 13240.2, 7989.05, 3392.17, 0.645989 -0.75, 43000, 38, 12207.1, 7705.74, 2885.19, 0.640956 -0.75, 43000, 35, 11159.9, 7408.97, 2405.05, 0.64119 -0.75, 43000, 32, 10094.7, 7094.04, 1954.61, 0.651394 -0.75, 43000, 29, 9009.86, 6759.27, 1529.63, 0.67966 -0.75, 43000, 26, 7895.58, 6395.2, 1126.72, 0.750954 -0.75, 43000, 21, 6007.87, 5632.78, 602.735, 1.60688 -0.8, 43000, 50, 17493, 9796.33, 5319.42, 0.691131 -0.8, 43000, 47, 16432.7, 9505.68, 4711.69, 0.680191 -0.8, 43000, 44, 15355.7, 9198.3, 4143.59, 0.672948 -0.8, 43000, 41, 14272.4, 8884.99, 3594.12, 0.66713 -0.8, 43000, 38, 13188.6, 8570.38, 3056.82, 0.661901 -0.8, 43000, 35, 12092.2, 8243.91, 2547.91, 0.662085 -0.8, 43000, 32, 10983.5, 7904.9, 2070.06, 0.672414 -0.8, 43000, 29, 9855.1, 7546.08, 1618.99, 0.701162 -0.8, 43000, 26, 8699.97, 7160.63, 1193.37, 0.775253 -0.8, 43000, 21, 6751.37, 6366.54, 640.55, 1.66448 -0.85, 43000, 50, 18795.8, 10872.5, 5651.78, 0.713312 -0.85, 43000, 47, 17681.5, 10550.6, 5006.32, 0.702055 -0.85, 43000, 44, 16548.3, 10209.7, 4402.05, 0.69449 -0.85, 43000, 41, 15408.2, 9862.12, 3817.82, 0.688385 -0.85, 43000, 38, 14267.3, 9513.05, 3246.11, 0.682786 -0.85, 43000, 35, 13112.2, 9150.58, 2704.26, 0.682616 -0.85, 43000, 32, 11944.3, 8775.09, 2195.24, 0.692682 -0.85, 43000, 29, 10763.4, 8386.44, 1715.16, 0.721569 -0.85, 43000, 26, 9560.52, 7975.87, 1263.34, 0.797234 -0.85, 43000, 21, 7545.89, 7149.73, 677.138, 1.70923 -0.9, 43000, 50, 20230.2, 12048.8, 6021.6, 0.736009 -0.9, 43000, 47, 19055.7, 11692.4, 5333.92, 0.724392 -0.9, 43000, 44, 17859.8, 11314.8, 4689.04, 0.716427 -0.9, 43000, 41, 16656.1, 10929.4, 4065.39, 0.7099 -0.9, 43000, 38, 15451.5, 10542.4, 3455.17, 0.70383 -0.9, 43000, 35, 14230.9, 10140.3, 2876.26, 0.703126 -0.9, 43000, 32, 12995.8, 9723.33, 2332.1, 0.71265 -0.9, 43000, 29, 11745.8, 9291.37, 1818.79, 0.741025 -0.9, 43000, 26, 10478.6, 8842.36, 1336.74, 0.816939 -0.9, 43000, 21, 8392.24, 7983.17, 712.209, 1.74104 From 8aa0938f3c5de65d6117646200ee1ad10b7e2e72 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Wed, 18 Sep 2024 13:12:21 -0400 Subject: [PATCH 064/113] updates to preprocessor to ensure that proper checks are being run on num_passengers and design_num_passengers, some pep8 updates --- ...multimission_example_large_single_aisle.py | 42 ++++++---- aviary/interface/methods_for_level2.py | 6 +- aviary/utils/preprocessors.py | 81 +++++++++++++------ 3 files changed, 85 insertions(+), 44 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py index 6bb3a2968..cb6fdc058 100644 --- a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py @@ -8,6 +8,7 @@ aircraft:crew_and_payload:num_first_class,0,unitless """ +from aviary.validation_cases.validation_tests import get_flops_inputs from aviary.api import SubsystemBuilderBase from aviary.subsystems.mass.flops_based.furnishings import TransportFurnishingsGroupMass import sys @@ -29,24 +30,32 @@ # fly the same mission twice with two different passenger loads phase_info_primary = copy.deepcopy(phase_info) phase_info_deadhead = copy.deepcopy(phase_info) +# phase_info_deadhead['post_mission']['target_range'] = [500, "nmi"] # get large single aisle values -from aviary.validation_cases.validation_tests import get_flops_inputs aviary_inputs_primary = get_flops_inputs('LargeSingleAisle2FLOPS') -aviary_inputs_primary.set_val('aircraft:crew_and_payload:design:num_passengers', 162, 'unitless') -aviary_inputs_primary.set_val('aircraft:crew_and_payload:design:num_tourist_class', 150, 'unitless') -aviary_inputs_primary.set_val('aircraft:crew_and_payload:design:num_business_class', 0, 'unitless') -aviary_inputs_primary.set_val('aircraft:crew_and_payload:design:num_first_class', 12, 'unitless') +aviary_inputs_primary.set_val( + 'aircraft:crew_and_payload:design:num_passengers', 162, 'unitless') +aviary_inputs_primary.set_val( + 'aircraft:crew_and_payload:design:num_tourist_class', 150, 'unitless') +aviary_inputs_primary.set_val( + 'aircraft:crew_and_payload:design:num_business_class', 0, 'unitless') +aviary_inputs_primary.set_val( + 'aircraft:crew_and_payload:design:num_first_class', 12, 'unitless') aviary_inputs_deadhead = copy.deepcopy(aviary_inputs_primary) aviary_inputs_deadhead.set_val('aircraft:crew_and_payload:num_passengers', 0, 'unitless') -aviary_inputs_deadhead.set_val('aircraft:crew_and_payload:num_tourist_class', 0, 'unitless') -aviary_inputs_deadhead.set_val('aircraft:crew_and_payload:num_business_class', 0, 'unitless') -aviary_inputs_deadhead.set_val('aircraft:crew_and_payload:num_first_class', 0, 'unitless') +aviary_inputs_deadhead.set_val( + 'aircraft:crew_and_payload:num_tourist_class', 0, 'unitless') +aviary_inputs_deadhead.set_val( + 'aircraft:crew_and_payload:num_business_class', 0, 'unitless') +aviary_inputs_deadhead.set_val( + 'aircraft:crew_and_payload:num_first_class', 0, 'unitless') aviary_inputs_deadhead.set_val(Aircraft.CrewPayload.MISC_CARGO, 0.0, 'lbm') -#phase_info_deadhead['post_mission']['target_range'] = [1500, "nmi"] +# phase_info_deadhead['post_mission']['target_range'] = [1500, "nmi"] + class MultiMissionProblem(om.Problem): def __init__(self, aviary_values, phase_infos, weights): @@ -159,7 +168,7 @@ def get_design_range(self): ['target_range'][0]) # TBD add units design_range_min = np.min(design_range) design_range_max = np.max(design_range) - return design_range_max, design_range_min # design_range_min + return design_range_max, design_range_min # design_range_min def create_timeseries_plots(self, plotvars=[], show=True): """ @@ -228,7 +237,7 @@ def print_vars(self, vars=[]): print(f"{name:^30}", end='| ') print() for var, unit in vars: - varname = f"Variable: {var.replace(':','.').upper()}" + varname = f"Variable: {var.replace(':', '.').upper()}" print(f"{varname:40}", end=": ") for i in range(self.num_missions): val = self.get_val(f'group_{i}.{var}', units=unit)[0] @@ -238,8 +247,8 @@ def print_vars(self, vars=[]): def large_single_aisle_example(makeN2=False): - aviary_values=[aviary_inputs_primary, - aviary_inputs_deadhead] + aviary_values = [aviary_inputs_primary, + aviary_inputs_deadhead] phase_infos = [phase_info_primary, phase_info_deadhead] optalt, optmach = False, False @@ -268,11 +277,12 @@ def large_single_aisle_example(makeN2=False): # TODO: Not sure we need this at all. from openmdao.api import n2 from os.path import basename, dirname, join, abspath + def createN2(fileref, prob): n2folder = join(dirname(abspath(__file__)), "N2s") n2(prob, outfile=join(n2folder, - f"n2_{basename(fileref).split('.')[0]}.html")) - + f"n2_{basename(fileref).split('.')[0]}.html")) + createN2(__file__, super_prob) super_prob.run() @@ -311,6 +321,6 @@ def createN2(fileref, prob): makeN2 = True if (len(sys.argv) > 1 and "n2" in sys.argv[1]) else False super_prob = large_single_aisle_example(makeN2=makeN2) - + # super_prob.model.group_1.list_vars(val=True, units=True, print_arrays=False) # https://openmdao.org/newdocs/versions/latest/features/debugging/listing_variables.html?highlight=list_driver_vars diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index f463b79fb..5bd2e1d69 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -474,7 +474,8 @@ def check_and_preprocess_inputs(self): "target_duration"] if target_duration[0] <= 0: raise ValueError( - f"Invalid target_duration in phase_info[{phase_name}][user_options]. " + f"Invalid target_duration in phase_info" + f"[{phase_name}][user_options]. " f"Current (value: {target_duration[0]}), (units: {target_duration[1]}) <= 0") # Only applies to non-analytic phases (all HE and most 2DOF) @@ -2187,7 +2188,8 @@ def _add_guesses(self, phase_name, phase, guesses, setvalprob, parent_prefix): units=units) except KeyError: setvalprob.set_val(parent_prefix + - f'traj.{phase_name}.bspline_controls:{guess_key}', + f'traj.{phase_name}.bspline_controls:', + {guess_key}, self._process_guess_var( val, guess_key, phase), units=units) diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index fb5dd26ff..5d9e8fa0c 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -35,35 +35,64 @@ def preprocess_crewpayload(aviary_options: AviaryValues): returns the modified collection. """ - if Aircraft.CrewPayload.NUM_PASSENGERS not in aviary_options: - if Aircraft.CrewPayload.Design.NUM_PASSENGERS in aviary_options: - # Set the num_passengers to the designed number of passengers - passenger_count = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) - else: - # sum up the number of passengers - passenger_count = 0 - for key in (Aircraft.CrewPayload.NUM_FIRST_CLASS, - Aircraft.CrewPayload.NUM_BUSINESS_CLASS, - Aircraft.CrewPayload.NUM_TOURIST_CLASS): - if key in aviary_options: - passenger_count += aviary_options.get_val(key) - if passenger_count == 0: - passenger_count = 1 - + # If Design.Num_Passenger values are left blank (as they are in all pre- 9/18/2024 examples), + # then set Design.Num_Passenger to Num_Passenger + + # If individual passenger numbers are set but not totals, sum them up to find the total + + # CHeck if total = individual passenger counts + + # If Design.Num_Passengers < Num_Passengers warn and exit? + + # sum up the number of passengers if they were defined individually + passenger_count = 0 + design_passenger_count = 0 + for key in (Aircraft.CrewPayload.NUM_FIRST_CLASS, + Aircraft.CrewPayload.NUM_BUSINESS_CLASS, + Aircraft.CrewPayload.NUM_TOURIST_CLASS): + if key in aviary_options: + passenger_count += aviary_options.get_val(key) + for key in (Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, + Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, + Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS): + if key in aviary_options: + design_passenger_count += aviary_options.get_val(key) + + # check if passenger_count = num_passengers, otherwise set num_passengers + if Aircraft.CrewPayload.NUM_PASSENGERS in aviary_options: + if passenger_count != aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS): + raise om.AnalysisError( + f"ERROR: In preprocesssors.py: NUM_PASSENGERS ({Aircraft.CrewPayload.NUM_PASSENGERS}) does not equal the sum of first class + business class + tourist class passengers (total of {passenger_count}).") + else: aviary_options.set_val( Aircraft.CrewPayload.NUM_PASSENGERS, passenger_count) - else: - passenger_count = aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS) - # check in here to ensure that in this case passenger count is the sum of the first class, business class, and tourist class counts. - passenger_check = aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS) - passenger_check += aviary_options.get_val( - Aircraft.CrewPayload.NUM_BUSINESS_CLASS) - passenger_check += aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS) - # only perform check if at least one passenger class is entered - if passenger_check > 0 and passenger_count != passenger_check: + + # check if design_passenger_count = design.num_passengers, otherwise set design.num_passengers + if Aircraft.CrewPayload.Design.NUM_PASSENGERS in aviary_options: + if design_passenger_count != aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS): raise om.AnalysisError( - f"ERROR: In preprocesssors.py: passenger_count ({passenger_count}) does not equal the sum of first class + business class + tourist class passengers (total of {passenger_check}).") + f"ERROR: In preprocesssors.py: Design.NUM_PASSENGERS ({Aircraft.CrewPayload.Design.NUM_PASSENGERS}) does not equal the sum of Design [first class + business class + tourist class] passengers (total of {design_passenger_count}).") + else: + # Design.NUM_PASSENGERS has not been set + if design_passenger_count > 0: + # a design passenger number for business / tourist / first class was set + aviary_options.set_val( + Aircraft.CrewPayload.Design.NUM_PASSENGERS, design_passenger_count) + else: + # no design passenger values were set, assume design is same as num_passengers + aviary_options.set_val( + Aircraft.CrewPayload.Design.NUM_PASSENGERS, aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)) + aviary_options.set_val( + Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS)) + aviary_options.set_val( + Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, aviary_options.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS)) + aviary_options.set_val( + Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS)) + + # check if NUM_PASSENGERS > DESIGN.NUM_PASSENGERS + if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS): + raise om.AnalysisError( + f"ERROR: In preprocesssors.py: Design.NUM_PASSENGERS ({Aircraft.CrewPayload.Design.NUM_PASSENGERS}) is less than NUM_PASSENGERS ({Aircraft.CrewPayload.NUM_PASSENGERS}).") if Aircraft.CrewPayload.NUM_FLIGHT_ATTENDANTS not in aviary_options: flight_attendants_count = 0 # assume no passengers From 6664fdafbc45a4f28ea020dd1b9dbe8c88d4d233 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Fri, 20 Sep 2024 15:10:01 -0400 Subject: [PATCH 065/113] big updates to preprocessor, but checks there still failing because Design.NUM_PASSENGERS is being set even when it should be set --- ...multimission_example_large_single_aisle.py | 35 ++- aviary/utils/preprocessors.py | 238 ++++++++++++++---- .../flops_data/FLOPS_Test_Data.py | 1 + aviary/variable_info/variable_meta_data.py | 2 +- 4 files changed, 213 insertions(+), 63 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py index cb6fdc058..689bac204 100644 --- a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py @@ -8,24 +8,21 @@ aircraft:crew_and_payload:num_first_class,0,unitless """ -from aviary.validation_cases.validation_tests import get_flops_inputs -from aviary.api import SubsystemBuilderBase -from aviary.subsystems.mass.flops_based.furnishings import TransportFurnishingsGroupMass -import sys -import warnings -import dymos as dm -import numpy as np -from os.path import join -import matplotlib.pyplot as plt - -import openmdao.api as om -import aviary.api as av -from aviary.variable_info.enums import ProblemType -from aviary.variable_info.variables import Mission, Aircraft - - -from aviary.examples.example_phase_info import phase_info import copy as copy +from aviary.examples.example_phase_info import phase_info +from aviary.variable_info.variables import Mission, Aircraft +from aviary.variable_info.enums import ProblemType +import aviary.api as av +import openmdao.api as om +import matplotlib.pyplot as plt +from os.path import join +import numpy as np +import dymos as dm +import warnings +import sys +from aviary.subsystems.mass.flops_based.furnishings import TransportFurnishingsGroupMass +from aviary.api import SubsystemBuilderBase +from aviary.validation_cases.validation_tests import get_flops_inputs # fly the same mission twice with two different passenger loads phase_info_primary = copy.deepcopy(phase_info) @@ -35,7 +32,7 @@ # get large single aisle values aviary_inputs_primary = get_flops_inputs('LargeSingleAisle2FLOPS') aviary_inputs_primary.set_val( - 'aircraft:crew_and_payload:design:num_passengers', 162, 'unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, 162, 'unitless') aviary_inputs_primary.set_val( 'aircraft:crew_and_payload:design:num_tourist_class', 150, 'unitless') aviary_inputs_primary.set_val( @@ -43,7 +40,6 @@ aviary_inputs_primary.set_val( 'aircraft:crew_and_payload:design:num_first_class', 12, 'unitless') - aviary_inputs_deadhead = copy.deepcopy(aviary_inputs_primary) aviary_inputs_deadhead.set_val('aircraft:crew_and_payload:num_passengers', 0, 'unitless') aviary_inputs_deadhead.set_val( @@ -54,6 +50,7 @@ 'aircraft:crew_and_payload:num_first_class', 0, 'unitless') aviary_inputs_deadhead.set_val(Aircraft.CrewPayload.MISC_CARGO, 0.0, 'lbm') + # phase_info_deadhead['post_mission']['target_range'] = [1500, "nmi"] diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 5d9e8fa0c..de43c09cf 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -8,6 +8,7 @@ from aviary.variable_info.variable_meta_data import _MetaData from aviary.variable_info.variables import Aircraft, Mission from aviary.utils.test_utils.variable_test import get_names_from_hierarchy +from aviary.variable_info.variable_meta_data import _MetaData as BaseMetaData def preprocess_options(aviary_options: AviaryValues, **kwargs): @@ -35,64 +36,215 @@ def preprocess_crewpayload(aviary_options: AviaryValues): returns the modified collection. """ - # If Design.Num_Passenger values are left blank (as they are in all pre- 9/18/2024 examples), - # then set Design.Num_Passenger to Num_Passenger + # Check which values were received from user input + user_input_num_pax = False + user_input_design_num_pax = False + user_input_1TB = False + user_input_design_1TB = False - # If individual passenger numbers are set but not totals, sum them up to find the total - - # CHeck if total = individual passenger counts - - # If Design.Num_Passengers < Num_Passengers warn and exit? - - # sum up the number of passengers if they were defined individually + if Aircraft.CrewPayload.NUM_PASSENGERS in aviary_options: + user_input_num_pax = True + print('NUM_PASSENGERS', aviary_options.get_val( + Aircraft.CrewPayload.NUM_PASSENGERS)) + if Aircraft.CrewPayload.Design.NUM_PASSENGERS in aviary_options: + user_input_design_num_pax = True + print('Design.NUM_PASSENGERS', aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_PASSENGERS)) + if Aircraft.CrewPayload.NUM_FIRST_CLASS in aviary_options or \ + Aircraft.CrewPayload.NUM_BUSINESS_CLASS in aviary_options or \ + Aircraft.CrewPayload.NUM_TOURIST_CLASS in aviary_options: + user_input_1TB = True + if Aircraft.CrewPayload.Design.NUM_FIRST_CLASS in aviary_options or \ + Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS in aviary_options or \ + Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS in aviary_options: + user_input_design_1TB = True + + print('user_input_num_pax', user_input_num_pax) + print('user_input_design_num_pax', user_input_design_num_pax) + print('user_input_1TB', user_input_1TB) + print('user_input_design_1TB', user_input_design_1TB) + + # Grab Default values for 1TB (1st class, Tourist Class, Business Class Passengers) to make + # sure they are accessible so we don't have to run checks if they exist again + if user_input_1TB: + if Aircraft.CrewPayload.NUM_FIRST_CLASS not in aviary_options: + aviary_options.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, + BaseMetaData[Aircraft.CrewPayload.NUM_FIRST_CLASS]['default_value']) + if Aircraft.CrewPayload.NUM_BUSINESS_CLASS not in aviary_options: + aviary_options.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, + BaseMetaData[Aircraft.CrewPayload.NUM_BUSINESS_CLASS]['default_value']) + if Aircraft.CrewPayload.NUM_TOURIST_CLASS not in aviary_options: + aviary_options.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, + BaseMetaData[Aircraft.CrewPayload.NUM_TOURIST_CLASS]['default_value']) + if user_input_design_1TB: + if Aircraft.CrewPayload.Design.NUM_FIRST_CLASS not in aviary_options: + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, + BaseMetaData[Aircraft.CrewPayload.Design.NUM_FIRST_CLASS]['default_value']) + if Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS not in aviary_options: + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, + BaseMetaData[Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS]['default_value']) + if Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS not in aviary_options: + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, + BaseMetaData[Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS]['default_value']) + + # Sum passenger Counts for later checks and assignments passenger_count = 0 - design_passenger_count = 0 for key in (Aircraft.CrewPayload.NUM_FIRST_CLASS, Aircraft.CrewPayload.NUM_BUSINESS_CLASS, Aircraft.CrewPayload.NUM_TOURIST_CLASS): if key in aviary_options: passenger_count += aviary_options.get_val(key) + design_passenger_count = 0 for key in (Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS): if key in aviary_options: design_passenger_count += aviary_options.get_val(key) - # check if passenger_count = num_passengers, otherwise set num_passengers - if Aircraft.CrewPayload.NUM_PASSENGERS in aviary_options: - if passenger_count != aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS): - raise om.AnalysisError( - f"ERROR: In preprocesssors.py: NUM_PASSENGERS ({Aircraft.CrewPayload.NUM_PASSENGERS}) does not equal the sum of first class + business class + tourist class passengers (total of {passenger_count}).") - else: + # Create summary data if it was not assigned by the user originally + if user_input_num_pax is False and user_input_1TB is True: + aviary_options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, passenger_count) + user_input_num_pax = True + if user_input_design_1TB and not user_input_design_num_pax: + print('setting Design.NUM_PASSENGERS') aviary_options.set_val( - Aircraft.CrewPayload.NUM_PASSENGERS, passenger_count) + Aircraft.CrewPayload.Design.NUM_PASSENGERS, design_passenger_count) + user_input_design_num_pax = True - # check if design_passenger_count = design.num_passengers, otherwise set design.num_passengers - if Aircraft.CrewPayload.Design.NUM_PASSENGERS in aviary_options: - if design_passenger_count != aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS): - raise om.AnalysisError( - f"ERROR: In preprocesssors.py: Design.NUM_PASSENGERS ({Aircraft.CrewPayload.Design.NUM_PASSENGERS}) does not equal the sum of Design [first class + business class + tourist class] passengers (total of {design_passenger_count}).") - else: - # Design.NUM_PASSENGERS has not been set - if design_passenger_count > 0: - # a design passenger number for business / tourist / first class was set - aviary_options.set_val( - Aircraft.CrewPayload.Design.NUM_PASSENGERS, design_passenger_count) - else: - # no design passenger values were set, assume design is same as num_passengers - aviary_options.set_val( - Aircraft.CrewPayload.Design.NUM_PASSENGERS, aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)) - aviary_options.set_val( - Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS)) - aviary_options.set_val( - Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, aviary_options.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS)) - aviary_options.set_val( - Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS)) - - # check if NUM_PASSENGERS > DESIGN.NUM_PASSENGERS - if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS): + # Fail if incorrect data sets were provided: + if user_input_num_pax and user_input_design_1TB and not user_input_1TB: + raise om.AnalysisError( + f"ERROR: In preprocessor.py: User must specify CrewPayload.FIRST_CLASS, CrewPayload.NUM_BUSINESS_CLASS, Design.NUM_TOURIST_CLASS in aviary_values.") + if user_input_design_num_pax and user_input_1TB and not user_input_design_1TB: + raise om.AnalysisError( + f"ERROR: In preprocessor.py: User must specify Design.FIRST_CLASS, Design.NUM_BUSINESS_CLASS, Design.NUM_TOURIST_CLASS in aviary_values.") + + # Check summary data against individual data if individual data was entered + if user_input_1TB is True and aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) != passenger_count: raise om.AnalysisError( - f"ERROR: In preprocesssors.py: Design.NUM_PASSENGERS ({Aircraft.CrewPayload.Design.NUM_PASSENGERS}) is less than NUM_PASSENGERS ({Aircraft.CrewPayload.NUM_PASSENGERS}).") + f"ERROR: In preprocesssors.py: NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)}) does not equal the sum of first class + business class + tourist class passengers (total of {passenger_count}).") + if user_input_design_1TB is True and aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) != design_passenger_count: + raise om.AnalysisError( + f"ERROR: In preprocesssors.py: Design.NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS)}) does not equal the sum of design first class + business class + tourist class passengers (total of {design_passenger_count}).") + + # Copy data over if only one set of data exists + if user_input_1TB and not (user_input_design_num_pax and user_input_design_1TB): + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, + aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS)) + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, + aviary_options.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS)) + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, + aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS)) + user_input_design_1TB = True + if user_input_num_pax and not user_input_design_num_pax: + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)) + user_input_design_num_pax = True + if user_input_design_1TB and not (user_input_num_pax and user_input_1TB): + aviary_options.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_FIRST_CLASS)) + aviary_options.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS)) + aviary_options.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS)) + user_input_1TB = True + if user_input_design_num_pax and not user_input_num_pax: + aviary_options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_PASSENGERS)) + user_input_num_pax = True + + # Performe checks on the final data tables to ensure data is accurate + if user_input_design_num_pax and user_input_num_pax: + if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS): + raise om.AnalysisError( + f"ERROR: In preprocesssors.py: NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)}) is larger than the number of seats set by Design.NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS)}) .") + if user_input_1TB and user_input_design_1TB: + if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS): + raise om.AnalysisError( + f"ERROR: In preprocesssors.py: NUM_FIRST_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS)}) is larger than the number of seats set by Design.NUM_FIRST_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS)}) .") + if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS): + raise om.AnalysisError( + f"ERROR: In preprocesssors.py: NUM_BUSINESS_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS)}) is larger than the number of seats set by Design.NUM_BUSINESS_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS)}) .") + if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS): + raise om.AnalysisError( + f"ERROR: In preprocesssors.py: NUM_TOURIST_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS)}) is larger than the number of seats set by Design.NUM_TOURIST_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS)}) .") + + # fail + + # # Assign NUM_Passengers if it's not assigned + # if Aircraft.CrewPayload.NUM_PASSENGERS not in aviary_options: + # aviary_options.set_val( + # Aircraft.CrewPayload.NUM_PASSENGERS, passenger_count) + # else: + # # we only do this if the values don't match AND at least one of the first/buisness/tourist passenger counts has been set + # if passenger_count > 0 and aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) != passenger_count: + # raise om.AnalysisError( + # f"ERROR: In preprocesssors.py: NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)}) does not equal the sum of first class + business class + tourist class passengers (total of {passenger_count}).") + + # # Check if any Design.NUM_ values exist, if non of them exist, assign all values + # # if any of them do exist, don't over-write anything + # if Aircraft.CrewPayload.Design.NUM_PASSENGERS not in aviary_options and \ + # Aircraft.CrewPayload.Design.NUM_FIRST_CLASS not in aviary_options and \ + # Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS not in aviary_options and \ + # Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS not in aviary_options: + # for key in ([Aircraft.CrewPayload.NUM_PASSENGERS, Aircraft.CrewPayload.Design.NUM_PASSENGERS], + # [Aircraft.CrewPayload.NUM_FIRST_CLASS, + # Aircraft.CrewPayload.Design.NUM_FIRST_CLASS], + # [Aircraft.CrewPayload.NUM_BUSINESS_CLASS, + # Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS], + # [Aircraft.CrewPayload.NUM_TOURIST_CLASS, Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS]): + # if key[0] in aviary_options: + # aviary_options.set_val( + # key[1], aviary_options.get_val(key[0])) + + # # if the user has specified Design.NUM_ + # if Aircraft.CrewPayload.NUM_PASSENGERS not in aviary_options and \ + # Aircraft.CrewPayload.NUM_FIRST_CLASS not in aviary_options and \ + # Aircraft.CrewPayload.NUM_BUSINESS_CLASS not in aviary_options and \ + # Aircraft.CrewPayload.NUM_TOURIST_CLASS not in aviary_options: + # for key in ([Aircraft.CrewPayload.NUM_PASSENGERS, Aircraft.CrewPayload.Design.NUM_PASSENGERS], + # [Aircraft.CrewPayload.NUM_FIRST_CLASS, + # Aircraft.CrewPayload.Design.NUM_FIRST_CLASS], + # [Aircraft.CrewPayload.NUM_BUSINESS_CLASS, + # Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS], + # [Aircraft.CrewPayload.NUM_TOURIST_CLASS, Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS]): + # if key[1] in aviary_options: + # aviary_options.set_val( + # key[0], aviary_options.get_val(key[1])) + + # # Assign Design.NUM_Passengers if it hasn't been set yet + # if Aircraft.CrewPayload.Design.NUM_PASSENGERS not in aviary_options: + # aviary_options.set_val( + # Aircraft.CrewPayload.NUM_PASSENGERS, design_passenger_count) + # else: + # # we only do this if the values don't match AND at least one of the first/buisness/tourist passenger counts has been set + # if design_passenger_count > 0 and aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) != design_passenger_count: + # raise om.AnalysisError( + # f"ERROR: In preprocesssors.py: Design.NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS)}) does not equal the sum of design first class + business class + tourist class passengers (total of {design_passenger_count}).") + + # # Check the individual seat assignments if they exist and error if more passengers have been assigned to that group than seats: + # if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS): + # raise om.AnalysisError( + # f"ERROR: In preprocessor.py: More passengers assigned to aircraft than seats. Design.NUM_PASSENGERS < NUM_PASSENGERS." + # ) + + # if Aircraft.CrewPayload.Design.NUM_FIRST_CLASS in aviary_options and Aircraft.CrewPayload.NUM_FIRST_CLASS in aviary_options: + # if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS): + # raise om.AnalysisError( + # f"ERROR: In preprocessor.py: More passengers assigned to first class than seats. Design.NUM_FIRST_CLASS < NUM_FIRST_CLASS." + # ) + + # if Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS in aviary_options and Aircraft.CrewPayload.NUM_BUSINESS_CLASS in aviary_options: + # if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS): + # raise om.AnalysisError( + # f"ERROR: In preprocessor.py: More passengers assigned to business class than seats. Design.NUM_BUSINESS_CLASS < NUM_BUSINESS_CLASS." + # ) + + # if Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS in aviary_options and Aircraft.CrewPayload.NUM_TOURIST_CLASS in aviary_options: + # if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS): + # raise om.AnalysisError( + # f"ERROR: In preprocessor.py: More passengers assigned to tourist class than seats. Design.NUM_TOURIST_CLASS < NUM_TOURIST_CLASS." + # ) if Aircraft.CrewPayload.NUM_FLIGHT_ATTENDANTS not in aviary_options: flight_attendants_count = 0 # assume no passengers @@ -154,7 +306,7 @@ def preprocess_propulsion(aviary_options: AviaryValues, engine_models: list = No Performs basic sanity checks on inputs that are universal to all EngineModels. !!! WARNING !!! - Values in aviary_options can be overwritten with corresponding values from + Values in aviary_options can be overwritten with corresponding values from engine_models! Parameters diff --git a/aviary/validation_cases/validation_data/flops_data/FLOPS_Test_Data.py b/aviary/validation_cases/validation_data/flops_data/FLOPS_Test_Data.py index 94e0388e6..fc2c906b5 100644 --- a/aviary/validation_cases/validation_data/flops_data/FLOPS_Test_Data.py +++ b/aviary/validation_cases/validation_data/flops_data/FLOPS_Test_Data.py @@ -16,6 +16,7 @@ FLOPS_Test_Data['LargeSingleAisle2FLOPS'] = LargeSingleAisle2FLOPS FLOPS_Test_Data['LargeSingleAisle2FLOPSdw'] = LargeSingleAisle2FLOPSdw FLOPS_Test_Data['LargeSingleAisle2FLOPSalt'] = LargeSingleAisle2FLOPSalt +# when importing get_flops_inputs(), this is the data file that is loaded as the default aviary_values FLOPS_Test_Data['N3CC'] = N3CC # We don't have full date for this yet, but might still want to run one in a single unit test. diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index c7bf11128..30bd3ad02 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -632,7 +632,7 @@ desc='number of business class passengers that the aircraft is designed to accommodate', types=int, option=True, - default_value=0, #AviaryValues.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS), + default_value=0, # AviaryValues.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS), ) add_meta_data( From dcbab17be410c9581fb1448412073c42d30e8a35 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Fri, 20 Sep 2024 16:21:40 -0400 Subject: [PATCH 066/113] preprocessor.py modified to work even if user inputs 0 value for num_pax and design.num_pax but the uder inputs values for num_businesclass/first/tourist or num_design(business/first/tourist). we assume the the zero on num_pax was set by default as we cant tell the difference between that and user input someimtes --- aviary/utils/preprocessors.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index de43c09cf..e74b94744 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -59,11 +59,6 @@ def preprocess_crewpayload(aviary_options: AviaryValues): Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS in aviary_options: user_input_design_1TB = True - print('user_input_num_pax', user_input_num_pax) - print('user_input_design_num_pax', user_input_design_num_pax) - print('user_input_1TB', user_input_1TB) - print('user_input_design_1TB', user_input_design_1TB) - # Grab Default values for 1TB (1st class, Tourist Class, Business Class Passengers) to make # sure they are accessible so we don't have to run checks if they exist again if user_input_1TB: @@ -102,11 +97,13 @@ def preprocess_crewpayload(aviary_options: AviaryValues): design_passenger_count += aviary_options.get_val(key) # Create summary data if it was not assigned by the user originally - if user_input_num_pax is False and user_input_1TB is True: + # or if it was left or set to it's default value of zero + if user_input_num_pax is False and user_input_1TB is True or \ + user_input_num_pax and aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) == 0: aviary_options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, passenger_count) user_input_num_pax = True - if user_input_design_1TB and not user_input_design_num_pax: - print('setting Design.NUM_PASSENGERS') + if user_input_design_1TB and not user_input_design_num_pax or \ + user_input_design_num_pax and aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) == 0: aviary_options.set_val( Aircraft.CrewPayload.Design.NUM_PASSENGERS, design_passenger_count) user_input_design_num_pax = True From c031abaa7c639ca72233b8ddcd9120299b5b33ea Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Mon, 23 Sep 2024 17:09:03 -0400 Subject: [PATCH 067/113] Modified pre processor with Chris Bennett to correctly capture and report all error cases and give user input as to what data was being filled in from as-flow vs. design --- ...multimission_example_large_single_aisle.py | 2 +- aviary/utils/preprocessors.py | 251 ++++++------------ 2 files changed, 76 insertions(+), 177 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py index 689bac204..5cc253dbb 100644 --- a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py @@ -23,7 +23,7 @@ from aviary.subsystems.mass.flops_based.furnishings import TransportFurnishingsGroupMass from aviary.api import SubsystemBuilderBase from aviary.validation_cases.validation_tests import get_flops_inputs - +print("========== Starting Run ===============") # fly the same mission twice with two different passenger loads phase_info_primary = copy.deepcopy(phase_info) phase_info_deadhead = copy.deepcopy(phase_info) diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index e74b94744..0bbb03281 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -36,212 +36,111 @@ def preprocess_crewpayload(aviary_options: AviaryValues): returns the modified collection. """ - # Check which values were received from user input - user_input_num_pax = False - user_input_design_num_pax = False - user_input_1TB = False - user_input_design_1TB = False - - if Aircraft.CrewPayload.NUM_PASSENGERS in aviary_options: - user_input_num_pax = True - print('NUM_PASSENGERS', aviary_options.get_val( - Aircraft.CrewPayload.NUM_PASSENGERS)) - if Aircraft.CrewPayload.Design.NUM_PASSENGERS in aviary_options: - user_input_design_num_pax = True - print('Design.NUM_PASSENGERS', aviary_options.get_val( - Aircraft.CrewPayload.Design.NUM_PASSENGERS)) - if Aircraft.CrewPayload.NUM_FIRST_CLASS in aviary_options or \ - Aircraft.CrewPayload.NUM_BUSINESS_CLASS in aviary_options or \ - Aircraft.CrewPayload.NUM_TOURIST_CLASS in aviary_options: - user_input_1TB = True - if Aircraft.CrewPayload.Design.NUM_FIRST_CLASS in aviary_options or \ - Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS in aviary_options or \ - Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS in aviary_options: - user_input_design_1TB = True - - # Grab Default values for 1TB (1st class, Tourist Class, Business Class Passengers) to make + # Grab Default all values for num_pax and 1TB (1st class, Tourist Class, Business Class Passengers) to make # sure they are accessible so we don't have to run checks if they exist again - if user_input_1TB: - if Aircraft.CrewPayload.NUM_FIRST_CLASS not in aviary_options: - aviary_options.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, - BaseMetaData[Aircraft.CrewPayload.NUM_FIRST_CLASS]['default_value']) - if Aircraft.CrewPayload.NUM_BUSINESS_CLASS not in aviary_options: - aviary_options.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, - BaseMetaData[Aircraft.CrewPayload.NUM_BUSINESS_CLASS]['default_value']) - if Aircraft.CrewPayload.NUM_TOURIST_CLASS not in aviary_options: - aviary_options.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, - BaseMetaData[Aircraft.CrewPayload.NUM_TOURIST_CLASS]['default_value']) - if user_input_design_1TB: - if Aircraft.CrewPayload.Design.NUM_FIRST_CLASS not in aviary_options: - aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, - BaseMetaData[Aircraft.CrewPayload.Design.NUM_FIRST_CLASS]['default_value']) - if Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS not in aviary_options: - aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, - BaseMetaData[Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS]['default_value']) - if Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS not in aviary_options: - aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, - BaseMetaData[Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS]['default_value']) + for key in ( + Aircraft.CrewPayload.NUM_PASSENGERS, + Aircraft.CrewPayload.NUM_FIRST_CLASS, + Aircraft.CrewPayload.NUM_BUSINESS_CLASS, + Aircraft.CrewPayload.NUM_TOURIST_CLASS, + Aircraft.CrewPayload.Design.NUM_PASSENGERS, + Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, + Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, + Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS,): + if key not in aviary_options: + aviary_options.set_val(key, BaseMetaData[key]['default_value']) # Sum passenger Counts for later checks and assignments passenger_count = 0 for key in (Aircraft.CrewPayload.NUM_FIRST_CLASS, Aircraft.CrewPayload.NUM_BUSINESS_CLASS, Aircraft.CrewPayload.NUM_TOURIST_CLASS): - if key in aviary_options: - passenger_count += aviary_options.get_val(key) + passenger_count += aviary_options.get_val(key) design_passenger_count = 0 for key in (Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS): - if key in aviary_options: - design_passenger_count += aviary_options.get_val(key) + design_passenger_count += aviary_options.get_val(key) - # Create summary data if it was not assigned by the user originally - # or if it was left or set to it's default value of zero - if user_input_num_pax is False and user_input_1TB is True or \ - user_input_num_pax and aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) == 0: + # Create summary value (num_pax) if it was not assigned by the user + # or if it was set to it's default value of zero + if passenger_count != 0 and aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) == 0: aviary_options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, passenger_count) - user_input_num_pax = True - if user_input_design_1TB and not user_input_design_num_pax or \ - user_input_design_num_pax and aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) == 0: + print("User has specified supporting values for num_pax but has left num_pax blank or zero. Replacing num_pax with passenger_count.") + if design_passenger_count != 0 and aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) == 0: aviary_options.set_val( Aircraft.CrewPayload.Design.NUM_PASSENGERS, design_passenger_count) - user_input_design_num_pax = True + print("User has specified supporting values for design.num_pax but has left design.num_pax blank or zero. Replacing design.num_pax with design_passenger_count.") - # Fail if incorrect data sets were provided: - if user_input_num_pax and user_input_design_1TB and not user_input_1TB: - raise om.AnalysisError( - f"ERROR: In preprocessor.py: User must specify CrewPayload.FIRST_CLASS, CrewPayload.NUM_BUSINESS_CLASS, Design.NUM_TOURIST_CLASS in aviary_values.") - if user_input_design_num_pax and user_input_1TB and not user_input_design_1TB: - raise om.AnalysisError( - f"ERROR: In preprocessor.py: User must specify Design.FIRST_CLASS, Design.NUM_BUSINESS_CLASS, Design.NUM_TOURIST_CLASS in aviary_values.") + num_pax = aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) + design_num_pax = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) # Check summary data against individual data if individual data was entered - if user_input_1TB is True and aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) != passenger_count: + if num_pax != passenger_count: raise om.AnalysisError( f"ERROR: In preprocesssors.py: NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)}) does not equal the sum of first class + business class + tourist class passengers (total of {passenger_count}).") - if user_input_design_1TB is True and aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) != design_passenger_count: + if design_num_pax != design_passenger_count: raise om.AnalysisError( f"ERROR: In preprocesssors.py: Design.NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS)}) does not equal the sum of design first class + business class + tourist class passengers (total of {design_passenger_count}).") + # Fail if incorrect data sets were provided: + # have you give us enough info to determine where people were sitting vs. designed seats + if num_pax != 0 and design_passenger_count != 0 and passenger_count == 0: + raise om.AnalysisError( + f"ERROR: In preprocessor.py: User must specify CrewPayload.FIRST_CLASS, CrewPayload.NUM_BUSINESS_CLASS, Design.NUM_TOURIST_CLASS in aviary_values.") + # where are the people sitting? is first class full? We know how many seats are in each class. + if design_num_pax != 0 and passenger_count != 0 and design_passenger_count == 0: + raise om.AnalysisError( + f"ERROR: In preprocessor.py: User must specify Design.FIRST_CLASS, Design.NUM_BUSINESS_CLASS, Design.NUM_TOURIST_CLASS in aviary_values.") + # we don't know which classes this aircraft has been design for. How many 1st class seats are there? + # Copy data over if only one set of data exists - if user_input_1TB and not (user_input_design_num_pax and user_input_design_1TB): + # User has given detailed values for 1TB as flow and NO design values at all + if passenger_count != 0 and design_num_pax == 0 and design_passenger_count == 0: + print("User has not input design data. Assume design data is equal to as-flow data user has already input") + aviary_options.set_val( + Aircraft.CrewPayload.Design.NUM_PASSENGERS, passenger_count) aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS)) aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, aviary_options.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS)) aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS)) - user_input_design_1TB = True - if user_input_num_pax and not user_input_design_num_pax: - aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, - aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)) - user_input_design_num_pax = True - if user_input_design_1TB and not (user_input_num_pax and user_input_1TB): - aviary_options.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, aviary_options.get_val( - Aircraft.CrewPayload.Design.NUM_FIRST_CLASS)) - aviary_options.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, aviary_options.get_val( - Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS)) - aviary_options.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, aviary_options.get_val( - Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS)) - user_input_1TB = True - if user_input_design_num_pax and not user_input_num_pax: - aviary_options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, aviary_options.get_val( - Aircraft.CrewPayload.Design.NUM_PASSENGERS)) - user_input_num_pax = True - - # Performe checks on the final data tables to ensure data is accurate - if user_input_design_num_pax and user_input_num_pax: - if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS): - raise om.AnalysisError( - f"ERROR: In preprocesssors.py: NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)}) is larger than the number of seats set by Design.NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS)}) .") - if user_input_1TB and user_input_design_1TB: - if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS): - raise om.AnalysisError( - f"ERROR: In preprocesssors.py: NUM_FIRST_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS)}) is larger than the number of seats set by Design.NUM_FIRST_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS)}) .") - if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS): - raise om.AnalysisError( - f"ERROR: In preprocesssors.py: NUM_BUSINESS_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS)}) is larger than the number of seats set by Design.NUM_BUSINESS_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS)}) .") - if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS): - raise om.AnalysisError( - f"ERROR: In preprocesssors.py: NUM_TOURIST_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS)}) is larger than the number of seats set by Design.NUM_TOURIST_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS)}) .") - - # fail - - # # Assign NUM_Passengers if it's not assigned - # if Aircraft.CrewPayload.NUM_PASSENGERS not in aviary_options: - # aviary_options.set_val( - # Aircraft.CrewPayload.NUM_PASSENGERS, passenger_count) - # else: - # # we only do this if the values don't match AND at least one of the first/buisness/tourist passenger counts has been set - # if passenger_count > 0 and aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) != passenger_count: - # raise om.AnalysisError( - # f"ERROR: In preprocesssors.py: NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)}) does not equal the sum of first class + business class + tourist class passengers (total of {passenger_count}).") - - # # Check if any Design.NUM_ values exist, if non of them exist, assign all values - # # if any of them do exist, don't over-write anything - # if Aircraft.CrewPayload.Design.NUM_PASSENGERS not in aviary_options and \ - # Aircraft.CrewPayload.Design.NUM_FIRST_CLASS not in aviary_options and \ - # Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS not in aviary_options and \ - # Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS not in aviary_options: - # for key in ([Aircraft.CrewPayload.NUM_PASSENGERS, Aircraft.CrewPayload.Design.NUM_PASSENGERS], - # [Aircraft.CrewPayload.NUM_FIRST_CLASS, - # Aircraft.CrewPayload.Design.NUM_FIRST_CLASS], - # [Aircraft.CrewPayload.NUM_BUSINESS_CLASS, - # Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS], - # [Aircraft.CrewPayload.NUM_TOURIST_CLASS, Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS]): - # if key[0] in aviary_options: - # aviary_options.set_val( - # key[1], aviary_options.get_val(key[0])) - - # # if the user has specified Design.NUM_ - # if Aircraft.CrewPayload.NUM_PASSENGERS not in aviary_options and \ - # Aircraft.CrewPayload.NUM_FIRST_CLASS not in aviary_options and \ - # Aircraft.CrewPayload.NUM_BUSINESS_CLASS not in aviary_options and \ - # Aircraft.CrewPayload.NUM_TOURIST_CLASS not in aviary_options: - # for key in ([Aircraft.CrewPayload.NUM_PASSENGERS, Aircraft.CrewPayload.Design.NUM_PASSENGERS], - # [Aircraft.CrewPayload.NUM_FIRST_CLASS, - # Aircraft.CrewPayload.Design.NUM_FIRST_CLASS], - # [Aircraft.CrewPayload.NUM_BUSINESS_CLASS, - # Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS], - # [Aircraft.CrewPayload.NUM_TOURIST_CLASS, Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS]): - # if key[1] in aviary_options: - # aviary_options.set_val( - # key[0], aviary_options.get_val(key[1])) - - # # Assign Design.NUM_Passengers if it hasn't been set yet - # if Aircraft.CrewPayload.Design.NUM_PASSENGERS not in aviary_options: - # aviary_options.set_val( - # Aircraft.CrewPayload.NUM_PASSENGERS, design_passenger_count) - # else: - # # we only do this if the values don't match AND at least one of the first/buisness/tourist passenger counts has been set - # if design_passenger_count > 0 and aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) != design_passenger_count: - # raise om.AnalysisError( - # f"ERROR: In preprocesssors.py: Design.NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS)}) does not equal the sum of design first class + business class + tourist class passengers (total of {design_passenger_count}).") - - # # Check the individual seat assignments if they exist and error if more passengers have been assigned to that group than seats: - # if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS): - # raise om.AnalysisError( - # f"ERROR: In preprocessor.py: More passengers assigned to aircraft than seats. Design.NUM_PASSENGERS < NUM_PASSENGERS." - # ) - - # if Aircraft.CrewPayload.Design.NUM_FIRST_CLASS in aviary_options and Aircraft.CrewPayload.NUM_FIRST_CLASS in aviary_options: - # if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS): - # raise om.AnalysisError( - # f"ERROR: In preprocessor.py: More passengers assigned to first class than seats. Design.NUM_FIRST_CLASS < NUM_FIRST_CLASS." - # ) - - # if Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS in aviary_options and Aircraft.CrewPayload.NUM_BUSINESS_CLASS in aviary_options: - # if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS): - # raise om.AnalysisError( - # f"ERROR: In preprocessor.py: More passengers assigned to business class than seats. Design.NUM_BUSINESS_CLASS < NUM_BUSINESS_CLASS." - # ) - - # if Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS in aviary_options and Aircraft.CrewPayload.NUM_TOURIST_CLASS in aviary_options: - # if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS): - # raise om.AnalysisError( - # f"ERROR: In preprocessor.py: More passengers assigned to tourist class than seats. Design.NUM_TOURIST_CLASS < NUM_TOURIST_CLASS." - # ) + # user has not supplied detailed information on design but has supplied summary information on passengers + elif num_pax != 0 and design_num_pax == 0: + print("User has specified summary as-flow passenger data but has not specified how many passengers the arcraft was designed for.") + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, num_pax) + elif design_passenger_count != 0 and num_pax == 0 and passenger_count == 0: + print("User has not input as-flow data. Assume as-flow data is equal to design seating data user has already input.") + aviary_options.set_val( + Aircraft.CrewPayload.NUM_PASSENGERS, design_passenger_count) + aviary_options.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, + aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS)) + aviary_options.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, + aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS)) + aviary_options.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, + aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS)) + # user has not supplied detailed information on design but has supplied summary information on passengers + elif design_num_pax != 0 and num_pax == 0: + print("User has specified summary design passenger data but has not specified how many passengers are on the aircraft as flow.") + aviary_options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, design_num_pax) + + # Performe checks on the final data tables to ensure Design is always large then As-Flow + if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS): + raise om.AnalysisError( + f"ERROR: In preprocesssors.py: NUM_FIRST_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_FIRST_CLASS)}) is larger than the number of seats set by Design.NUM_FIRST_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS)}) .") + if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS): + raise om.AnalysisError( + f"ERROR: In preprocesssors.py: NUM_BUSINESS_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS)}) is larger than the number of seats set by Design.NUM_BUSINESS_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS)}) .") + if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS): + raise om.AnalysisError( + f"ERROR: In preprocesssors.py: NUM_TOURIST_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS)}) is larger than the number of seats set by Design.NUM_TOURIST_CLASS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS)}) .") + if aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) < aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS): + raise om.AnalysisError( + f"ERROR: In preprocesssors.py: NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)}) is larger than the number of seats set by Design.NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS)}) .") + + design_num_pax = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) + print(f"Aircraft has been designed for {design_num_pax} passengers.") if Aircraft.CrewPayload.NUM_FLIGHT_ATTENDANTS not in aviary_options: flight_attendants_count = 0 # assume no passengers From 663dd108ca05102f98e2f7a9afde81c3b69c1d67 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Mon, 23 Sep 2024 17:14:12 -0400 Subject: [PATCH 068/113] added shortening of preprocessor call to methods for level 2 --- aviary/interface/methods_for_level2.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index 3a0dde773..4381880ac 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -41,7 +41,7 @@ from aviary.subsystems.premission import CorePreMission from aviary.utils.functions import create_opts2vals, add_opts2vals, promote_aircraft_and_mission_vars, wrapped_convert_units from aviary.utils.process_input_decks import create_vehicle, update_GASP_options, initialization_guessing -from aviary.utils.preprocessors import preprocess_crewpayload +from aviary.utils.preprocessors import preprocess_options from aviary.interface.utils.check_phase_info import check_phase_info from aviary.utils.aviary_values import AviaryValues from aviary.utils.functions import convert_strings_to_data, set_value @@ -56,7 +56,6 @@ from aviary.subsystems.geometry.geometry_builder import CoreGeometryBuilder from aviary.subsystems.mass.mass_builder import CoreMassBuilder from aviary.subsystems.aerodynamics.aerodynamics_builder import CoreAerodynamicsBuilder -from aviary.utils.preprocessors import preprocess_propulsion from aviary.utils.merge_variable_metadata import merge_meta_data from aviary.interface.default_phase_info.two_dof_fiti import add_default_sgm_args @@ -503,8 +502,7 @@ def check_and_preprocess_inputs(self): # PREPROCESSORS # # Fill in anything missing in the options with computed defaults. - preprocess_propulsion(aviary_inputs, self.engine_builders) - preprocess_crewpayload(aviary_inputs) + preprocess_options(aviary_inputs, engine_models=self.engine_builders) mission_method = aviary_inputs.get_val(Settings.EQUATIONS_OF_MOTION) mass_method = aviary_inputs.get_val(Settings.MASS_METHOD) From ec003b3b375e0adcbc639da296bb99380bb2e6d2 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Tue, 24 Sep 2024 11:18:55 -0400 Subject: [PATCH 069/113] upd preprocessor INFO messages, added design. values into all FLOPS tests, target_range tweaks to methods_for_level2 --- aviary/interface/methods_for_level2.py | 7 ++++--- aviary/models/N3CC/N3CC_data.py | 13 ++++++++---- .../large_single_aisle_1_FLOPS_data.py | 11 +++++++--- .../large_single_aisle_2_FLOPS_data.py | 14 ++++++++----- .../large_single_aisle_2_altwt_FLOPS_data.py | 14 ++++++++----- ...ge_single_aisle_2_detailwing_FLOPS_data.py | 9 ++++----- .../multi_engine_single_aisle_data.py | 14 ++++++++----- aviary/utils/preprocessors.py | 20 +++++++++---------- 8 files changed, 62 insertions(+), 40 deletions(-) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index 4381880ac..fde44c227 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -370,11 +370,12 @@ def load_inputs( aviary_inputs.set_val(Mission.Summary.RANGE, wrapped_convert_units( phase_info['post_mission']['target_range'], 'NM'), units='NM') self.require_range_residual = True + self.target_range = aviary_inputs.get_val( + Mission.Summary.RANGE, units='NM') else: self.require_range_residual = False - - self.target_range = aviary_inputs.get_val( - Mission.Summary.RANGE, units='NM') + # TODO: this maybe broken? + self.target_range = aviary_inputs.get_val(Mission.Design.RANGE, units='NM') return aviary_inputs diff --git a/aviary/models/N3CC/N3CC_data.py b/aviary/models/N3CC/N3CC_data.py index 4b4d66971..cfffe854e 100644 --- a/aviary/models/N3CC/N3CC_data.py +++ b/aviary/models/N3CC/N3CC_data.py @@ -62,15 +62,20 @@ # Crew and Payload # --------------------------- +inputs.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 20) +inputs.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 16) +inputs.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, 154, units='unitless') +inputs.set_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, 118) +inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 20) +inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 16) +inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 154, units='unitless') +inputs.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, 118) + inputs.set_val(Aircraft.CrewPayload.BAGGAGE_MASS_PER_PASSENGER, 35.0, 'lbm') inputs.set_val(Aircraft.CrewPayload.CARGO_CONTAINER_MASS_SCALER, 0.0) inputs.set_val(Aircraft.CrewPayload.FLIGHT_CREW_MASS_SCALER, 1.0) inputs.set_val(Aircraft.CrewPayload.NON_FLIGHT_CREW_MASS_SCALER, 1.0) -inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 20) -inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 16) inputs.set_val(Aircraft.CrewPayload.MISC_CARGO, 0., 'lbm') -inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 154, units='unitless') -inputs.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, 118) inputs.set_val(Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_SCALER, 1.) inputs.set_val(Aircraft.CrewPayload.MASS_PER_PASSENGER, 165., 'lbm') inputs.set_val(Aircraft.CrewPayload.WING_CARGO, 0., 'lbm') diff --git a/aviary/models/large_single_aisle_1/large_single_aisle_1_FLOPS_data.py b/aviary/models/large_single_aisle_1/large_single_aisle_1_FLOPS_data.py index c5fd70877..9c74cfbd5 100644 --- a/aviary/models/large_single_aisle_1/large_single_aisle_1_FLOPS_data.py +++ b/aviary/models/large_single_aisle_1/large_single_aisle_1_FLOPS_data.py @@ -45,18 +45,23 @@ # Crew and Payload # --------------------------- +inputs.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 0) +inputs.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 11) +inputs.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, 169, units='unitless') +inputs.set_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, 158) inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 0) -inputs.set_val(Aircraft.CrewPayload.CARGO_CONTAINER_MASS_SCALER, 1.0) inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 11) +inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 169, units='unitless') +inputs.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, 158) + +inputs.set_val(Aircraft.CrewPayload.CARGO_CONTAINER_MASS_SCALER, 1.0) inputs.set_val(Aircraft.CrewPayload.NUM_FLIGHT_ATTENDANTS, 3) inputs.set_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW, 2) inputs.set_val(Aircraft.CrewPayload.FLIGHT_CREW_MASS_SCALER, 1.0) inputs.set_val(Aircraft.CrewPayload.NUM_GALLEY_CREW, 0) inputs.set_val(Aircraft.CrewPayload.MISC_CARGO, 0., 'lbm') inputs.set_val(Aircraft.CrewPayload.NON_FLIGHT_CREW_MASS_SCALER, 1.0) -inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 169, units='unitless') inputs.set_val(Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_SCALER, 1.) -inputs.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, 158) inputs.set_val(Aircraft.CrewPayload.MASS_PER_PASSENGER, 180., 'lbm') inputs.set_val(Aircraft.CrewPayload.WING_CARGO, 0., 'lbm') diff --git a/aviary/models/large_single_aisle_2/large_single_aisle_2_FLOPS_data.py b/aviary/models/large_single_aisle_2/large_single_aisle_2_FLOPS_data.py index c6c0f8e34..3787f9ddc 100644 --- a/aviary/models/large_single_aisle_2/large_single_aisle_2_FLOPS_data.py +++ b/aviary/models/large_single_aisle_2/large_single_aisle_2_FLOPS_data.py @@ -50,19 +50,23 @@ # Crew and Payload # --------------------------- -inputs.set_val(Aircraft.CrewPayload.BAGGAGE_MASS_PER_PASSENGER, 35., 'lbm') +inputs.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 0) +inputs.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 12) +inputs.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, 162, units='unitless') +inputs.set_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, 150) inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 0) +inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 12) +inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 162, units='unitless') +inputs.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, 150) + +inputs.set_val(Aircraft.CrewPayload.BAGGAGE_MASS_PER_PASSENGER, 35., 'lbm') inputs.set_val(Aircraft.CrewPayload.CARGO_CONTAINER_MASS_SCALER, 1.0) inputs.set_val(Aircraft.CrewPayload.NUM_FLIGHT_ATTENDANTS, 5) inputs.set_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW, 2) inputs.set_val(Aircraft.CrewPayload.FLIGHT_CREW_MASS_SCALER, 1.0) -inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 12) inputs.set_val(Aircraft.CrewPayload.NUM_GALLEY_CREW, 1) -inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 0) inputs.set_val(Aircraft.CrewPayload.MISC_CARGO, 4077., 'lbm') inputs.set_val(Aircraft.CrewPayload.NON_FLIGHT_CREW_MASS_SCALER, 1.0) -inputs.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, 150) -inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 162, units='unitless') inputs.set_val(Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_SCALER, 1.) inputs.set_val(Aircraft.CrewPayload.MASS_PER_PASSENGER, 165., 'lbm') inputs.set_val(Aircraft.CrewPayload.WING_CARGO, 0., 'lbm') diff --git a/aviary/models/large_single_aisle_2/large_single_aisle_2_altwt_FLOPS_data.py b/aviary/models/large_single_aisle_2/large_single_aisle_2_altwt_FLOPS_data.py index c08f43020..454b605f4 100644 --- a/aviary/models/large_single_aisle_2/large_single_aisle_2_altwt_FLOPS_data.py +++ b/aviary/models/large_single_aisle_2/large_single_aisle_2_altwt_FLOPS_data.py @@ -50,19 +50,23 @@ # Crew and Payload # --------------------------- -inputs.set_val(Aircraft.CrewPayload.BAGGAGE_MASS_PER_PASSENGER, 35., 'lbm') +inputs.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 0) +inputs.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 12) +inputs.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, 162, units='unitless') +inputs.set_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, 150) inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 0) +inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 12) +inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 162, units='unitless') +inputs.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, 150) + +inputs.set_val(Aircraft.CrewPayload.BAGGAGE_MASS_PER_PASSENGER, 35., 'lbm') inputs.set_val(Aircraft.CrewPayload.CARGO_CONTAINER_MASS_SCALER, 1.0) inputs.set_val(Aircraft.CrewPayload.NUM_FLIGHT_ATTENDANTS, 5) inputs.set_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW, 2) inputs.set_val(Aircraft.CrewPayload.FLIGHT_CREW_MASS_SCALER, 1.0) -inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 12) inputs.set_val(Aircraft.CrewPayload.NUM_GALLEY_CREW, 1) -inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 0) inputs.set_val(Aircraft.CrewPayload.MISC_CARGO, 4077., 'lbm') inputs.set_val(Aircraft.CrewPayload.NON_FLIGHT_CREW_MASS_SCALER, 1.0) -inputs.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, 150) -inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 162, units='unitless') inputs.set_val(Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_SCALER, 1.) inputs.set_val(Aircraft.CrewPayload.MASS_PER_PASSENGER, 165., 'lbm') inputs.set_val(Aircraft.CrewPayload.WING_CARGO, 0., 'lbm') diff --git a/aviary/models/large_single_aisle_2/large_single_aisle_2_detailwing_FLOPS_data.py b/aviary/models/large_single_aisle_2/large_single_aisle_2_detailwing_FLOPS_data.py index 2aca006c4..63721e4a4 100644 --- a/aviary/models/large_single_aisle_2/large_single_aisle_2_detailwing_FLOPS_data.py +++ b/aviary/models/large_single_aisle_2/large_single_aisle_2_detailwing_FLOPS_data.py @@ -46,19 +46,18 @@ # Crew and Payload # --------------------------- inputs.set_val(Aircraft.CrewPayload.BAGGAGE_MASS_PER_PASSENGER, 35., 'lbm') -inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 0) +inputs.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 0) inputs.set_val(Aircraft.CrewPayload.CARGO_CONTAINER_MASS_SCALER, 1.0) inputs.set_val(Aircraft.CrewPayload.NUM_FLIGHT_ATTENDANTS, 5) inputs.set_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW, 2) inputs.set_val(Aircraft.CrewPayload.FLIGHT_CREW_MASS_SCALER, 1.0) -inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 12) +inputs.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 12) inputs.set_val(Aircraft.CrewPayload.NUM_GALLEY_CREW, 1) -inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 0) inputs.set_val(Aircraft.CrewPayload.MISC_CARGO, 4077., 'lbm') inputs.set_val(Aircraft.CrewPayload.NON_FLIGHT_CREW_MASS_SCALER, 1.0) -inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 162, units='unitless') +inputs.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, 162, units='unitless') inputs.set_val(Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_SCALER, 1.) -inputs.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, 150) +inputs.set_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, 150) inputs.set_val(Aircraft.CrewPayload.MASS_PER_PASSENGER, 165., 'lbm') inputs.set_val(Aircraft.CrewPayload.WING_CARGO, 0., 'lbm') diff --git a/aviary/models/multi_engine_single_aisle/multi_engine_single_aisle_data.py b/aviary/models/multi_engine_single_aisle/multi_engine_single_aisle_data.py index 000d8098e..0ff0dc67a 100644 --- a/aviary/models/multi_engine_single_aisle/multi_engine_single_aisle_data.py +++ b/aviary/models/multi_engine_single_aisle/multi_engine_single_aisle_data.py @@ -45,20 +45,24 @@ # Crew and Payload # --------------------------- -inputs.set_val(Aircraft.CrewPayload.BAGGAGE_MASS_PER_PASSENGER, 35., 'lbm') +inputs.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 0) +inputs.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 12) +inputs.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, 162, units='unitless') +inputs.set_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, 150) inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 0) +inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 12) +inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 162, units='unitless') +inputs.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, 150) + +inputs.set_val(Aircraft.CrewPayload.BAGGAGE_MASS_PER_PASSENGER, 35., 'lbm') inputs.set_val(Aircraft.CrewPayload.CARGO_CONTAINER_MASS_SCALER, 1.0) inputs.set_val(Aircraft.CrewPayload.NUM_FLIGHT_ATTENDANTS, 5) inputs.set_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW, 2) inputs.set_val(Aircraft.CrewPayload.FLIGHT_CREW_MASS_SCALER, 1.0) -inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 12) inputs.set_val(Aircraft.CrewPayload.NUM_GALLEY_CREW, 1) -inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 0) inputs.set_val(Aircraft.CrewPayload.MISC_CARGO, 4077., 'lbm') inputs.set_val(Aircraft.CrewPayload.NON_FLIGHT_CREW_MASS_SCALER, 1.0) -inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 162, units='unitless') inputs.set_val(Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_SCALER, 1.) -inputs.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, 150) inputs.set_val(Aircraft.CrewPayload.MASS_PER_PASSENGER, 165., 'lbm') inputs.set_val(Aircraft.CrewPayload.WING_CARGO, 0., 'lbm') diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 0bbb03281..3e6e1413c 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -66,20 +66,20 @@ def preprocess_crewpayload(aviary_options: AviaryValues): # or if it was set to it's default value of zero if passenger_count != 0 and aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) == 0: aviary_options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, passenger_count) - print("User has specified supporting values for num_pax but has left num_pax blank or zero. Replacing num_pax with passenger_count.") + print("INFO: In preprocessor.py: User has specified supporting values for NUM_PASSENGERS but has left NUM_PASSENGERS=0. Replacing NUM_PASSENGERS with passenger_count.") if design_passenger_count != 0 and aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) == 0: aviary_options.set_val( Aircraft.CrewPayload.Design.NUM_PASSENGERS, design_passenger_count) - print("User has specified supporting values for design.num_pax but has left design.num_pax blank or zero. Replacing design.num_pax with design_passenger_count.") + print("INFO: In preprocessor.py: User has specified supporting values for Design.NUM_PASSENGERS but has left Design.NUM_PASSENGERS=0. Replacing Design.NUM_PASSENGERS with design_passenger_count.") num_pax = aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) design_num_pax = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) # Check summary data against individual data if individual data was entered - if num_pax != passenger_count: + if passenger_count != 0 and num_pax != passenger_count: raise om.AnalysisError( f"ERROR: In preprocesssors.py: NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)}) does not equal the sum of first class + business class + tourist class passengers (total of {passenger_count}).") - if design_num_pax != design_passenger_count: + if design_passenger_count != 0 and design_num_pax != design_passenger_count: raise om.AnalysisError( f"ERROR: In preprocesssors.py: Design.NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS)}) does not equal the sum of design first class + business class + tourist class passengers (total of {design_passenger_count}).") @@ -97,7 +97,7 @@ def preprocess_crewpayload(aviary_options: AviaryValues): # Copy data over if only one set of data exists # User has given detailed values for 1TB as flow and NO design values at all if passenger_count != 0 and design_num_pax == 0 and design_passenger_count == 0: - print("User has not input design data. Assume design data is equal to as-flow data user has already input") + print("INFO: In preprocessor.py: User has not input design passengers data. Assuming design is equal to as-flow passenger data.") aviary_options.set_val( Aircraft.CrewPayload.Design.NUM_PASSENGERS, passenger_count) aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, @@ -108,10 +108,10 @@ def preprocess_crewpayload(aviary_options: AviaryValues): aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS)) # user has not supplied detailed information on design but has supplied summary information on passengers elif num_pax != 0 and design_num_pax == 0: - print("User has specified summary as-flow passenger data but has not specified how many passengers the arcraft was designed for.") + print("INFO: In preprocessor.py: User has specified as-flown NUM_PASSENGERS but not how many passengers the aircraft was designed for in Design.NUM_PASSENGERS. Assuming they are equal.") aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, num_pax) elif design_passenger_count != 0 and num_pax == 0 and passenger_count == 0: - print("User has not input as-flow data. Assume as-flow data is equal to design seating data user has already input.") + print("INFO: In preprocessor.py: User has not input as-flown passengers data. Assuming as-flow is equal to design passenger data.") aviary_options.set_val( Aircraft.CrewPayload.NUM_PASSENGERS, design_passenger_count) aviary_options.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, @@ -122,7 +122,7 @@ def preprocess_crewpayload(aviary_options: AviaryValues): aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS)) # user has not supplied detailed information on design but has supplied summary information on passengers elif design_num_pax != 0 and num_pax == 0: - print("User has specified summary design passenger data but has not specified how many passengers are on the aircraft as flow.") + print("INFO: In preprocessor.py: User has specified Design.NUM_PASSENGERS but not how many passengers are on the flight in NUM_PASSENGERS. Assuming they are equal.") aviary_options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, design_num_pax) # Performe checks on the final data tables to ensure Design is always large then As-Flow @@ -139,8 +139,8 @@ def preprocess_crewpayload(aviary_options: AviaryValues): raise om.AnalysisError( f"ERROR: In preprocesssors.py: NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)}) is larger than the number of seats set by Design.NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS)}) .") - design_num_pax = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) - print(f"Aircraft has been designed for {design_num_pax} passengers.") + dnp = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) + print(f"INFO: In preprocessor.py: Aircraft has been designed for {dnp} passengers.") if Aircraft.CrewPayload.NUM_FLIGHT_ATTENDANTS not in aviary_options: flight_attendants_count = 0 # assume no passengers From 61ceb38edd4a37f0ef32967ff2a78ae1de1e300a Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Tue, 24 Sep 2024 14:05:29 -0400 Subject: [PATCH 070/113] added warning messages to target_range selection, fixed errors in Test_fuselage referring to NUM_PAX instead of Design.NUM_PAX, upd range_resid in test_phase_info because it needs to use target_range not design.range --- aviary/interface/methods_for_level2.py | 18 +++++++++++++----- aviary/interface/test/test_phase_info.py | 4 ++-- .../geometry/gasp_based/fuselage.py | 4 ++-- .../geometry/gasp_based/test/test_fuselage.py | 19 ++++++++++++------- 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index fde44c227..faad9e9d7 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -357,6 +357,12 @@ def load_inputs( self.cruise_mass_final = aviary_inputs.get_val( Mission.Summary.CRUISE_MASS_FINAL, units='lbm') + + # if 'target_range' in self.post_mission_info: + # self.target_range = wrapped_convert_units( + # phase_info['post_mission']['target_range'], 'NM') + # else: + print('WARNING: In methods_for_level2: user has not specified target_range in phase_info. This will be required in future release.') self.target_range = aviary_inputs.get_val( Mission.Design.RANGE, units='NM') self.cruise_mach = aviary_inputs.get_val(Mission.Design.MACH) @@ -370,12 +376,14 @@ def load_inputs( aviary_inputs.set_val(Mission.Summary.RANGE, wrapped_convert_units( phase_info['post_mission']['target_range'], 'NM'), units='NM') self.require_range_residual = True - self.target_range = aviary_inputs.get_val( - Mission.Summary.RANGE, units='NM') + self.target_range = wrapped_convert_units( + phase_info['post_mission']['target_range'], 'NM') else: + print('WARNING: In methods_for_level2: user has not specified target_range in phase_info. This will be required in future release.') self.require_range_residual = False - # TODO: this maybe broken? - self.target_range = aviary_inputs.get_val(Mission.Design.RANGE, units='NM') + # still instantiate target_range because used for default guesses for phase comps + self.target_range = aviary_inputs.get_val( + Mission.Design.RANGE, units='NM') return aviary_inputs @@ -2671,7 +2679,7 @@ def _add_objectives(self): om.ExecComp( "range_resid = target_range - actual_range", target_range={"val": self.target_range, "units": "NM"}, - actual_range={"val": self.target_range - 25, "units": "NM"}, + actual_range={"val": self.target_range, "units": "NM"}, range_resid={"val": 30, "units": "NM"}, ), promotes_inputs=[ diff --git a/aviary/interface/test/test_phase_info.py b/aviary/interface/test/test_phase_info.py index dd3b8ac82..9d4c0aca9 100644 --- a/aviary/interface/test/test_phase_info.py +++ b/aviary/interface/test/test_phase_info.py @@ -146,8 +146,8 @@ def test_phase_info_parameterization_height_energy(self): prob.run_model() - range_resid = prob.get_val(Mission.Constraints.RANGE_RESIDUAL, units='km')[-1] - assert_near_equal(range_resid, 5000.0 - 1.e-3) + range_resid = prob.get_val(Mission.Constraints.RANGE_RESIDUAL, units='nmi')[-1] + assert_near_equal(range_resid, 1906, tolerance=1e-3) assert_near_equal(prob.get_val("traj.cruise.timeseries.altitude", units='ft')[0], 31000.0) assert_near_equal(prob.get_val("traj.cruise.timeseries.mach")[0], diff --git a/aviary/subsystems/geometry/gasp_based/fuselage.py b/aviary/subsystems/geometry/gasp_based/fuselage.py index c45766382..af7e78556 100644 --- a/aviary/subsystems/geometry/gasp_based/fuselage.py +++ b/aviary/subsystems/geometry/gasp_based/fuselage.py @@ -56,8 +56,7 @@ def compute(self, inputs, outputs): seat_width = aviary_options.get_val(Aircraft.Fuselage.SEAT_WIDTH, units='inch') num_aisle = aviary_options.get_val(Aircraft.Fuselage.NUM_AISLES) aisle_width = aviary_options.get_val(Aircraft.Fuselage.AISLE_WIDTH, units='inch') - PAX = self.options['aviary_options'].get_val( - Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') + PAX = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) seat_pitch = aviary_options.get_val(Aircraft.Fuselage.SEAT_PITCH, units='inch') delta_diameter = inputs[Aircraft.Fuselage.DELTA_DIAMETER] @@ -65,6 +64,7 @@ def compute(self, inputs, outputs): if PAX < 1: print("Warning: you have not specified at least one passenger") + print(aviary_options) # single seat across cabin_len_a = PAX * seat_pitch / 12 diff --git a/aviary/subsystems/geometry/gasp_based/test/test_fuselage.py b/aviary/subsystems/geometry/gasp_based/test/test_fuselage.py index b40f34f9d..ed0d33693 100644 --- a/aviary/subsystems/geometry/gasp_based/test/test_fuselage.py +++ b/aviary/subsystems/geometry/gasp_based/test/test_fuselage.py @@ -18,7 +18,7 @@ class FuselageParametersTestCase1(unittest.TestCase): def setUp(self): options = get_option_defaults() - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, val=180) options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) @@ -57,7 +57,8 @@ class FuselageParametersTestCase2(unittest.TestCase): def setUp(self): options = get_option_defaults() - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=30, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=30, units='unitless') options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 1) @@ -93,7 +94,7 @@ def test_case2(self): class FuselageSizeTestCase1(unittest.TestCase): - """ + """ this is the GASP test case, input and output values based on large single aisle 1 v3 without bug fix """ @@ -186,7 +187,8 @@ class FuselageGroupTestCase1( def setUp(self): options = get_option_defaults() - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) @@ -235,7 +237,8 @@ class FuselageGroupTestCase2(unittest.TestCase): def setUp(self): options = get_option_defaults() - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") # not actual GASP value options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) # not actual GASP value @@ -295,7 +298,8 @@ class FuselageGroupTestCase3(unittest.TestCase): def setUp(self): options = get_option_defaults() - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=30, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=30, units='unitless') options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") # not actual GASP value options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) # not actual GASP value @@ -355,7 +359,8 @@ class FuselageGroupTestCase4(unittest.TestCase): def setUp(self): options = get_option_defaults() - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=30, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=30, units='unitless') options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") # not actual GASP value options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) # not actual GASP value From ee7783bb8c71ca4a37abddbc5217891ecc14435d Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Tue, 24 Sep 2024 14:30:51 -0400 Subject: [PATCH 071/113] changed num_pax to design.num_pax for several tests. converter_configuration_test_data_GwGm had to be updated because preprocess_crewpayload() is not run before some tests such as test_ovverride.py, and will therefore cause aircraft mis-sizing when only num_pax info is entered instead of design.num_pax --- ...converter_configuration_test_data_GwGm.csv | 2 +- .../gasp_based/test/test_size_group.py | 12 +++++++---- .../flops_based/test/test_air_conditioning.py | 4 ++-- .../test/test_equipment_and_useful_load.py | 21 ++++++++++++------- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/aviary/models/test_aircraft/converter_configuration_test_data_GwGm.csv b/aviary/models/test_aircraft/converter_configuration_test_data_GwGm.csv index c13c48922..821224123 100644 --- a/aviary/models/test_aircraft/converter_configuration_test_data_GwGm.csv +++ b/aviary/models/test_aircraft/converter_configuration_test_data_GwGm.csv @@ -9,7 +9,7 @@ aircraft:controls:stability_augmentation_system_mass,0,lbm aircraft:controls:stability_augmentation_system_mass_scaler,1,unitless aircraft:crew_and_payload:cargo_mass,15970,lbm aircraft:crew_and_payload:catering_items_mass_per_passenger,10,lbm -aircraft:crew_and_payload:num_passengers,154,unitless +aircraft:crew_and_payload:design:num_passengers,154,unitless aircraft:crew_and_payload:passenger_mass_with_bags,200,lbm aircraft:crew_and_payload:passenger_service_mass_per_passenger,5,lbm aircraft:crew_and_payload:water_mass_per_occupant,3,lbm diff --git a/aviary/subsystems/geometry/gasp_based/test/test_size_group.py b/aviary/subsystems/geometry/gasp_based/test/test_size_group.py index 0a9530218..dc7c1bb1f 100644 --- a/aviary/subsystems/geometry/gasp_based/test/test_size_group.py +++ b/aviary/subsystems/geometry/gasp_based/test/test_size_group.py @@ -17,7 +17,8 @@ def setUp(self): options = get_option_defaults() options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) @@ -164,7 +165,8 @@ def setUp(self): options.set_val(Aircraft.Wing.HAS_STRUT, val=True, units='unitless') options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, val=True, units='unitless') @@ -384,7 +386,8 @@ def setUp(self): val=True, units='unitless') options.set_val(Aircraft.Design.COMPUTE_VTAIL_VOLUME_COEFF, val=True, units='unitless') - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, val=True, units='unitless') options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") @@ -607,7 +610,8 @@ def setUp(self): val=False, units='unitless') options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 1) diff --git a/aviary/subsystems/mass/flops_based/test/test_air_conditioning.py b/aviary/subsystems/mass/flops_based/test/test_air_conditioning.py index a168955a5..b0becd20f 100644 --- a/aviary/subsystems/mass/flops_based/test/test_air_conditioning.py +++ b/aviary/subsystems/mass/flops_based/test/test_air_conditioning.py @@ -43,7 +43,7 @@ def test_case(self, case_name): Aircraft.Fuselage.MAX_HEIGHT, Aircraft.Fuselage.PLANFORM_AREA], output_keys=Aircraft.AirConditioning.MASS, - aviary_option_keys=[Aircraft.CrewPayload.NUM_PASSENGERS], + aviary_option_keys=[Aircraft.CrewPayload.Design.NUM_PASSENGERS], version=Version.TRANSPORT, tol=3.0e-4, atol=1e-11) @@ -115,7 +115,7 @@ def test_case(self, case_name): case_name, input_keys=Aircraft.AirConditioning.MASS_SCALER, output_keys=Aircraft.AirConditioning.MASS, - aviary_option_keys=Aircraft.CrewPayload.NUM_PASSENGERS, + aviary_option_keys=Aircraft.CrewPayload.Design.NUM_PASSENGERS, version=Version.ALTERNATE) def test_IO(self): diff --git a/aviary/subsystems/mass/gasp_based/test/test_equipment_and_useful_load.py b/aviary/subsystems/mass/gasp_based/test/test_equipment_and_useful_load.py index fe0d4c988..218e64672 100644 --- a/aviary/subsystems/mass/gasp_based/test/test_equipment_and_useful_load.py +++ b/aviary/subsystems/mass/gasp_based/test/test_equipment_and_useful_load.py @@ -16,7 +16,8 @@ class FixedEquipMassTestCase1(unittest.TestCase): def setUp(self): options = get_option_defaults() - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.LandingGear.FIXED_GEAR, val=False, units='unitless') @@ -105,7 +106,8 @@ class FixedEquipMassTestCase2(unittest.TestCase): def setUp(self): options = get_option_defaults() - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=5, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=5, units='unitless') options.set_val(Aircraft.LandingGear.FIXED_GEAR, val=False, units='unitless') @@ -288,7 +290,8 @@ class FixedEquipMassTestCase4smooth( def setUp(self): options = get_option_defaults() - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.LandingGear.FIXED_GEAR, val=False, units='unitless') options.set_val(Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, @@ -382,7 +385,8 @@ class FixedEquipMassTestCase5smooth(unittest.TestCase): def setUp(self): options = get_option_defaults() - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=5, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=5, units='unitless') options.set_val(Aircraft.LandingGear.FIXED_GEAR, val=False, units='unitless') options.set_val(Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, @@ -476,7 +480,8 @@ class FixedEquipMassTestCase6smooth(unittest.TestCase): def setUp(self): options = get_option_defaults() - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=5, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=5, units='unitless') options.set_val(Aircraft.Engine.TYPE, val=[GASPEngineType.RECIP_CARB], units='unitless') options.set_val(Aircraft.LandingGear.FIXED_GEAR, @@ -574,7 +579,8 @@ class EquipAndUsefulMassGroupTestCase1( def setUp(self): options = get_option_defaults() - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.LandingGear.FIXED_GEAR, val=False, units='unitless') @@ -676,7 +682,8 @@ def tearDown(self): def test_case1(self): options = get_option_defaults() - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.LandingGear.FIXED_GEAR, val=False, units='unitless') From aa8e6ce0e396343d7feb67bd22142cc5f9e7d024 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 26 Sep 2024 09:14:16 -0400 Subject: [PATCH 072/113] still trying to track down OEM_winfuel_mass issues --- .../large_single_aisle_1/V3_bug_fixed_IO.py | 2 +- aviary/subsystems/mass/gasp_based/fuel.py | 9 + .../gasp_based/test/test_mass_summation.py | 6274 ++++++++--------- 3 files changed, 3147 insertions(+), 3138 deletions(-) diff --git a/aviary/models/large_single_aisle_1/V3_bug_fixed_IO.py b/aviary/models/large_single_aisle_1/V3_bug_fixed_IO.py index 5686a33a0..ac83b406e 100644 --- a/aviary/models/large_single_aisle_1/V3_bug_fixed_IO.py +++ b/aviary/models/large_single_aisle_1/V3_bug_fixed_IO.py @@ -13,7 +13,7 @@ V3_bug_fixed_options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, val=False, units='unitless') V3_bug_fixed_options.set_val( - Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + Aircraft.CrewPayload.Design.NUM_PASSENGERS, val=180, units='unitless') V3_bug_fixed_options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') V3_bug_fixed_options.set_val( Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') diff --git a/aviary/subsystems/mass/gasp_based/fuel.py b/aviary/subsystems/mass/gasp_based/fuel.py index df1734897..650717fb5 100644 --- a/aviary/subsystems/mass/gasp_based/fuel.py +++ b/aviary/subsystems/mass/gasp_based/fuel.py @@ -502,6 +502,15 @@ def compute(self, inputs, outputs): - useful_wt ) + print('OEM_wingfuel_mass', OEM_wingfuel_wt / GRAV_ENGLISH_LBM) + print('supporting values') + print('gross_wt_initial', gross_wt_initial) + print('propulsion_wt', propulsion_wt) + print('control_wt', control_wt) + print('struct_wt', struct_wt) + print('fixed_equip_wt', fixed_equip_wt) + print('useful_wt', useful_wt) + OEM_fuel_vol = OEM_wingfuel_wt / rho_fuel design_fuel_vol = (1.0 + fuel_margin / 100.0) * req_fuel_wt / rho_fuel diff --git a/aviary/subsystems/mass/gasp_based/test/test_mass_summation.py b/aviary/subsystems/mass/gasp_based/test/test_mass_summation.py index 4101e5325..b8dc00c63 100644 --- a/aviary/subsystems/mass/gasp_based/test/test_mass_summation.py +++ b/aviary/subsystems/mass/gasp_based/test/test_mass_summation.py @@ -162,3143 +162,3143 @@ def test_case1(self): assert_check_partials(partial_data, atol=3e-10, rtol=1e-12) -class MassSummationTestCase2(unittest.TestCase): - """ - This is the large single aisle 1 V3.5 test case. - All values are from V3.5 output (or hand calculated from the output, and these cases - are specified). - """ - - def setUp(self): - - options = get_option_defaults() - options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, - val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') - options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') - options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') - options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.LandingGear.FIXED_GEAR, - val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, - val=200, units="lbm") - options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) - options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") - options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") - options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - - self.prob = om.Problem() - self.prob.model.add_subsystem( - "size", - SizeGroup( - aviary_options=options, - ), - promotes_inputs=["aircraft:*", "mission:*"], - promotes_outputs=[ - "aircraft:*", - ], - ) - self.prob.model.add_subsystem( - "GASP_mass", - MassPremission( - aviary_options=options, - ), - promotes=["*"], - ) - - self.prob.model.set_input_defaults( - Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" - ) - self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" - ) - self.prob.model.set_input_defaults( - Mission.Design.GROSS_MASS, val=175400, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.LOADING, val=128, units="lbf/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") - self.prob.model.set_input_defaults( - Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") - self.prob.model.set_input_defaults( - Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" - ) - # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 - self.prob.model.set_input_defaults( - Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") - # self.prob.model.set_input_defaults( - # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" - # ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless') - self.prob.model.set_input_defaults( - Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Nacelle.FINENESS, 2, units="unitless") - - self.prob.model.set_input_defaults( - Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" - ) - - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.SWEEP, val=0, units='deg' - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" - ) # Based onlarge single aisle 1for updated flaps mass model - self.prob.model.set_input_defaults( - Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" - ) # Based onlarge single aisle 1for updated flaps mass model - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.APU.MASS, val=928.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Avionics.MASS, val=1959.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.AntiIcing.MASS, val=551.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Furnishings.MASS, val=11192.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_MARGIN, val=0, units="unitless") - - self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - - self.prob.setup(check=False, force_alloc_complex=True) - - def test_case1(self): - - self.prob.run_model() - - tol = 5e-4 - # size values: - assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) - assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) - assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - - assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 17.49, tol) - assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.41, tol) - assert_near_equal( - self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1397, tol - ) # not exact GASP value from the output file, likely due to rounding error - - # note: this is not the value in the GASP output, because the output calculates - # them differently. This was calculated by hand. - assert_near_equal( - self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.578314120156815, tol - ) - # note: this is not the value in the GASP output, because the output calculates - # them differently. This was calculated by hand. - assert_near_equal( - self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 16.828924591320984, tol - ) - assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) - - # fixed mass values: - assert_near_equal( - self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.35, tol - ) # calculated by hand - - # note: fixed_mass.tail.loc_MAC_vtail not included in v3.5 - - assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) - assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) - - # wing values: - assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15653, tol) - - # fuel values: - # modified from GASP value to account for updated crew mass. GASP value is - # 79147.2 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 79002.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 79147.2 - - # calculated by hand, #modified from GASP value to account for updated crew - # mass. GASP value is 102321.45695930265 - assert_near_equal( - self.prob["fuel_mass.fus_mass_full"], 102359.6, tol - ) - # modified from GASP value to account for updated crew mass. GASP value is - # 1769 - assert_near_equal( - self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1763.1, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1769 - - assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 50186, tol) - assert_near_equal( - self.prob[Aircraft.Fuselage.MASS], 18663, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 18787 - - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS_REQUIRED], 43002.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 43147.2 - assert_near_equal( - self.prob[Aircraft.Propulsion.MASS], 16133.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 16140 - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS], 43002.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 43147 - assert_near_equal( - self.prob["fuel_mass.fuel_mass_min"], 32962.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 33107.2 - assert_near_equal( - self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 859.68, tol - ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 862.5603807559726 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1579.36, tol - ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 1582.2403068511774 - assert_near_equal( - self.prob[Aircraft.Design.OPERATING_MASS], 96397.1, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 96253.0 - # extra_fuel_mass calculated differently in this version, so fuel_mass.fuel_and_oem.payload_mass_max_fuel test not included - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 55725.1, tol - ) - assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 55725.1, tol) - assert_near_equal( - self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol - ) # always zero when no body tank - assert_near_equal( - self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol - ) # always zero when no body tank - assert_near_equal( - self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol - ) # always zero when no body tank - - partial_data = self.prob.check_partials(out_stream=None, method="cs") - assert_check_partials(partial_data, atol=2e-10, rtol=1e-12) - - -class MassSummationTestCase3(unittest.TestCase): - """ - This is thelarge single aisle 1V3.6 test case with a fuel margin of 0%, a wing loading of 128 psf, and a SLS thrust of 29500 lbf - All values are from V3.6 output (or hand calculated from the output, and these cases are specified). - """ - - def setUp(self): - - options = get_option_defaults() - options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, - val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') - options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') - options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') - options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.LandingGear.FIXED_GEAR, - val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, - val=200, units="lbm") - options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) - options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") - options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") - options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - - self.prob = om.Problem() - self.prob.model.add_subsystem( - "size", - SizeGroup( - aviary_options=options, - ), - promotes_inputs=["aircraft:*", "mission:*"], - promotes_outputs=[ - "aircraft:*", - ], - ) - self.prob.model.add_subsystem( - "GASP_mass", - MassPremission( - aviary_options=options, - ), - promotes=["*"], - ) - - self.prob.model.set_input_defaults( - Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" - ) - self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" - ) - self.prob.model.set_input_defaults( - Mission.Design.GROSS_MASS, val=175400, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.LOADING, val=128, units="lbf/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") - self.prob.model.set_input_defaults( - Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") - self.prob.model.set_input_defaults( - Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" - ) - # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 - self.prob.model.set_input_defaults( - Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") - # self.prob.model.set_input_defaults( - # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" - # ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Nacelle.FINENESS, 2, units="unitless") - - self.prob.model.set_input_defaults( - Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" - ) - - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.SWEEP, val=0, units='deg' - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" - ) # Based onlarge single aisle 1for updated flaps mass model - self.prob.model.set_input_defaults( - Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" - ) # Based on large single aisle 1 for updated flaps mass model - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.APU.MASS, val=928.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Avionics.MASS, val=1959.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.AntiIcing.MASS, val=551.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Furnishings.MASS, val=11192.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_MARGIN, val=0, units="unitless") - - self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - - self.prob.setup(check=False, force_alloc_complex=True) - - def test_case1(self): - - self.prob.run_model() - - tol = 5e-4 - # size values: - assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) - assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) - assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - - assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 17.49, tol) - assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.41, tol) - assert_near_equal( - self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1397, tol - ) # not exact value, likely due to rounding error - - assert_near_equal( - self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.578314120156815, tol - ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. - assert_near_equal( - self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 16.828924591320984, tol - ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. - assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) - - # fixed mass values: - assert_near_equal( - self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol - ) # calculated by hand - - assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) - assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) - - # wing values: - assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15653, tol) - - # fuel values: - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 79002.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 79147.2 - - assert_near_equal( - self.prob["fuel_mass.fus_mass_full"], 102359.6, tol - ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 102321.45695930265 - assert_near_equal( - self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1763.1, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 102321.45695930265 - - assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 50186, tol) - assert_near_equal( - self.prob[Aircraft.Fuselage.MASS], 18663, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 18787 - - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS_REQUIRED], 43002.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 43147.2 - assert_near_equal( - self.prob[Aircraft.Propulsion.MASS], 16133.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 16140 - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS], 43002.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 43147 - assert_near_equal( - self.prob["fuel_mass.fuel_mass_min"], 32962.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 33107.2 - assert_near_equal( - self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 859.68, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 862.6 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1579.36, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1582.2 - assert_near_equal( - self.prob[Aircraft.Design.OPERATING_MASS], 96397.1, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 96253.0 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 36000, tol - ) # note: value came from running the GASP code on my own and printing it out - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 55725.1, tol - ) - assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 55725.1, tol) - assert_near_equal( - self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol - ) # always zero when no body tank - assert_near_equal( - self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol - ) # always zero when no body tank - assert_near_equal( - self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol - ) # always zero when no body tank - - partial_data = self.prob.check_partials(out_stream=None, method="cs") - assert_check_partials(partial_data, atol=2e-10, rtol=1e-12) - - -class MassSummationTestCase4(unittest.TestCase): - """ - This is the large single aisle 1V3.6 test case with a fuel margin of 10%, a wing loading of 128 psf, and a SLS thrust of 29500 lbf - All values are from V3.6 output (or hand calculated from the output, and these cases are specified). - """ - - def setUp(self): - - options = get_option_defaults() - options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, - val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') - options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') - options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') - options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.LandingGear.FIXED_GEAR, - val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, - val=200, units="lbm") - options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) - options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") - options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") - options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - - self.prob = om.Problem() - self.prob.model.add_subsystem( - "size", - SizeGroup( - aviary_options=options, - ), - promotes_inputs=["aircraft:*", "mission:*"], - promotes_outputs=[ - "aircraft:*", - ], - ) - self.prob.model.add_subsystem( - "GASP_mass", - MassPremission( - aviary_options=options, - ), - promotes=["*"], - ) - - self.prob.model.set_input_defaults( - Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" - ) - self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" - ) - self.prob.model.set_input_defaults( - Mission.Design.GROSS_MASS, val=175400, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.LOADING, val=128, units="lbf/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") - self.prob.model.set_input_defaults( - Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") - self.prob.model.set_input_defaults( - Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" - ) - # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 - self.prob.model.set_input_defaults( - Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") - # self.prob.model.set_input_defaults( - # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" - # ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Nacelle.FINENESS, 2, units="unitless") - - self.prob.model.set_input_defaults( - Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" - ) - - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.SWEEP, val=0, units='deg' - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" - ) # Based onlarge single aisle 1for updated flaps mass model - self.prob.model.set_input_defaults( - Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" - ) # Based on large single aisle 1 for updated flaps mass model - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.APU.MASS, val=928.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Avionics.MASS, val=1959.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.AntiIcing.MASS, val=551.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Furnishings.MASS, val=11192.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_MARGIN, val=10, units="unitless" - ) - - self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - - self.prob.setup(check=False, force_alloc_complex=True) - - def test_case1(self): - - self.prob.run_model() - - tol = 5e-4 - # size values: - assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) - assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) - assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - - assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 17.49, tol) - assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.41, tol) - assert_near_equal( - self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1397, tol - ) # slightly different from GASP value, likely numerical error - - assert_near_equal( - self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.578314120156815, tol - ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. - assert_near_equal( - self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 16.828924591320984, tol - ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. - assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) - - # fixed mass values: - assert_near_equal( - self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol - ) # calculated by hand - - assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) - assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) - - # wing values: - assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15653, tol) - - # fuel values: - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 78823.0, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 78966.7 - - assert_near_equal( - self.prob["fuel_mass.fus_mass_full"], 102541.4, tol - ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 102501.95695930265 - assert_near_equal( - self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1931.3, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1938 - - assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 50198, tol) - assert_near_equal( - self.prob[Aircraft.Fuselage.MASS], 18675, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 18799 - - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS_REQUIRED], 42823.0, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 42966.7 - assert_near_equal( - self.prob[Aircraft.Propulsion.MASS], 16302.1, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 16309 - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS], 42823.0, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 42967 - assert_near_equal( - self.prob["fuel_mass.fuel_mass_min"], 32783.0, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 32926.7 - assert_near_equal( - self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 941.69, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 944.8 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1575.76, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1578.6 - assert_near_equal( - self.prob[Aircraft.Design.OPERATING_MASS], 96577.0, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 96433.0 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 36000, tol - ) # note: value came from running the GASP code on my own and printing it out - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 55725.1, tol - ) - assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 55725.1, tol) - assert_near_equal( - self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol - ) # always zero when no body tank - assert_near_equal( - self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol - ) # always zero when no body tank - assert_near_equal( - self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol - ) # always zero when no body tank - - partial_data = self.prob.check_partials(out_stream=None, method="cs") - assert_check_partials(partial_data, atol=2e-10, rtol=1e-12) - - -class MassSummationTestCase5(unittest.TestCase): - """ - This is thelarge single aisle 1V3.6 test case with a fuel margin of 0%, a wing loading of 150 psf, and a SLS thrust of 29500 lbf - All values are from V3.6 output (or hand calculated from the output, and these cases are specified). - """ - - def setUp(self): - - options = get_option_defaults() - options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, - val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') - options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') - options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') - options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.LandingGear.FIXED_GEAR, - val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, - val=200, units="lbm") - options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) - options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") - options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") - options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - - self.prob = om.Problem() - self.prob.model.add_subsystem( - "size", - SizeGroup( - aviary_options=options, - ), - promotes_inputs=["aircraft:*", "mission:*"], - promotes_outputs=[ - "aircraft:*", - ], - ) - self.prob.model.add_subsystem( - "GASP_mass", - MassPremission( - aviary_options=options, - ), - promotes=["*"], - ) - - self.prob.model.set_input_defaults( - Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" - ) - self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" - ) - self.prob.model.set_input_defaults( - Mission.Design.GROSS_MASS, val=175400, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.LOADING, val=150, units="lbf/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") - self.prob.model.set_input_defaults( - Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") - self.prob.model.set_input_defaults( - Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" - ) - # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 - self.prob.model.set_input_defaults( - Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") - # self.prob.model.set_input_defaults( - # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" - # ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Nacelle.FINENESS, 2, units="unitless") - - self.prob.model.set_input_defaults( - Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" - ) - - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.SWEEP, val=0, units='deg' - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" - ) # Based onlarge single aisle 1for updated flaps mass model - self.prob.model.set_input_defaults( - Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" - ) # Based on large single aisle 1 for updated flaps mass model - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.APU.MASS, val=928.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Avionics.MASS, val=1959.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.AntiIcing.MASS, val=551.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Furnishings.MASS, val=11192.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_MARGIN, val=0.0, units="unitless" - ) - - self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - - self.prob.setup(check=False, force_alloc_complex=True) - - def test_case1(self): - - self.prob.run_model() - - tol = 5e-4 - # size values: - assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) - assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) - assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - - assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 16.16, tol) - assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 15.1, tol) - assert_near_equal( - self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1394, tol - ) # slightly different from GASP value, likely rounding error - - assert_near_equal( - self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 8.848695928254141, tol - ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. - assert_near_equal( - self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 15.550266681026597, tol - ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. - assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) - - # fixed mass values: - assert_near_equal( - self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol - # self.prob["fixed_mass.main_gear_mass"], 6384.349999999999, tol - ) # calculated by hand - - assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) - assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) - - # wing values: - assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 14631, tol) - - # fuel values: - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 80475.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 81424.8 - - assert_near_equal( - self.prob["fuel_mass.fus_mass_full"], 102510.7, tol - ) # calculated by hand - assert_near_equal( - self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1823.4, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1862 - - assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 48941, tol) - assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 18675, tol) - - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS_REQUIRED], 44472.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 45424.8 - assert_near_equal( - self.prob[Aircraft.Propulsion.MASS], 16194.2, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 16233 - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS], 44472.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 45425 - assert_near_equal( - self.prob["fuel_mass.fuel_mass_min"], 34432.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 35384.8 - assert_near_equal( - self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 889.06, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 908.1 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1608.74, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1627.8 - assert_near_equal( - self.prob[Aircraft.Design.OPERATING_MASS], 94927.1, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 93975 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 35380.5, tol - ) # note: value came from running the GASP code on my own and printing it out, #modified from GASP value to account for updated crew mass. GASP value is 34427.4 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 43852.1, tol - ) - assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 43852.1, tol) - assert_near_equal( - self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 620.739, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1572.6 - assert_near_equal( - self.prob["fuel_mass.body_tank.extra_fuel_volume"], 12.4092, tol - ) # slightly different from GASP value, likely a rounding error, #modified from GASP value to account for updated crew mass. GASP value is 31.43 - assert_near_equal( - self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 620.736, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1572.6 - - partial_data = self.prob.check_partials(out_stream=None, method="cs") - assert_check_partials(partial_data, atol=3e-10, rtol=1e-12) - - -class MassSummationTestCase6(unittest.TestCase): - """ - This is thelarge single aisle 1V3.6 test case with a fuel margin of 10%, a wing loading of 150 psf, and a SLS thrust of 29500 lbf - All values are from V3.6 output (or hand calculated from the output, and these cases are specified). - """ - - def setUp(self): - - options = get_option_defaults() - options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, - val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') - options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') - options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') - options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.LandingGear.FIXED_GEAR, - val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, - val=200, units="lbm") - options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) - options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") - options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") - options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - - self.prob = om.Problem() - self.prob.model.add_subsystem( - "size", - SizeGroup( - aviary_options=options, - ), - promotes_inputs=["aircraft:*", "mission:*"], - promotes_outputs=[ - "aircraft:*", - ], - ) - self.prob.model.add_subsystem( - "GASP_mass", - MassPremission( - aviary_options=options, - ), - promotes=["*"], - ) - - self.prob.model.set_input_defaults( - Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" - ) - self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" - ) - self.prob.model.set_input_defaults( - Mission.Design.GROSS_MASS, val=175400, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.LOADING, val=150, units="lbf/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") - self.prob.model.set_input_defaults( - Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") - self.prob.model.set_input_defaults( - Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" - ) - # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 - self.prob.model.set_input_defaults( - Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") - # self.prob.model.set_input_defaults( - # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" - # ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Nacelle.FINENESS, 2, units="unitless") - - self.prob.model.set_input_defaults( - Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" - ) - - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.SWEEP, val=0, units='deg' - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" - ) # Based onlarge single aisle 1for updated flaps mass model - self.prob.model.set_input_defaults( - Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" - ) # Based onlarge single aisle 1for updated flaps mass model - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.APU.MASS, val=928.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Avionics.MASS, val=1959.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.AntiIcing.MASS, val=551.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Furnishings.MASS, val=11192.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_MARGIN, val=10.0, units="unitless" - ) - - self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - - self.prob.setup(check=False, force_alloc_complex=True) - - def test_case1(self): - - self.prob.run_model() - - tol = 5e-4 - # size values: - assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) - assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) - assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - - assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 16.16, tol) - assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 15.1, tol) - assert_near_equal( - self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1394, tol - ) # note: not exact GASP value, likely rounding error - - assert_near_equal( - self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 8.848695928254141, tol - ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. - assert_near_equal( - self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 15.550266681026597, tol - ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. - assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) - - # fixed mass values: - assert_near_equal( - self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol - # self.prob["fixed_mass.main_gear_mass"], 6384.349999999999, tol - ) # calculated by hand - - assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) - assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) - - # wing values: - assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 14631, tol) - - # fuel values: - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 80029.2, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 80982.7 - - assert_near_equal( - self.prob["fuel_mass.fus_mass_full"], 106913.6, tol - ) # calculated by hand - assert_near_equal( - self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1985.7, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 2029 - - assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 49222, tol) - assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 18956, tol) - - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS_REQUIRED], 44029.2, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 44982.7 - assert_near_equal( - self.prob[Aircraft.Propulsion.MASS], 16356.5, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 16399 - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS], 44029.2, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 44982.7 - assert_near_equal( - self.prob["fuel_mass.fuel_mass_min"], 33989.2, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 34942.7 - assert_near_equal( - self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 968.21, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 989.2 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1599.87, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1618.9 - assert_near_equal( - self.prob[Aircraft.Design.OPERATING_MASS], 95370.8, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 94417 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 35823.0, tol - ) # note: value came from running the GASP code on my own and printing it out, #modified from GASP value to account for updated crew mass. GASP value is 34879.2 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 43852.1, tol - ) - assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 43852.1, tol) - assert_near_equal( - self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 177.042, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1120.9 - assert_near_equal( - self.prob["fuel_mass.body_tank.extra_fuel_volume"], 91.5585, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 112.3 - assert_near_equal( - self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 4579.96, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 5618.2 - - partial_data = self.prob.check_partials(out_stream=None, method="cs") - assert_check_partials(partial_data, atol=3e-10, rtol=1e-12) - - -class MassSummationTestCase7(unittest.TestCase): - """ - This is the Advanced Tube and Wing V3.6 test case - All values are from V3.6 output, hand calculated from the output, or were printed out after running the code manually. - Values not directly from the output are labeled as such. - """ - - def setUp(self): - - options = get_option_defaults() - options.set_val(Aircraft.Wing.HAS_FOLD, val=True, units='unitless') - options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, - val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') - options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37100, units='ft') - options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.LandingGear.FIXED_GEAR, - val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, - val=200, units="lbm") - options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) - options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") - options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") - options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - - self.prob = om.Problem() - self.prob.model.add_subsystem( - "size", - SizeGroup( - aviary_options=options, - ), - promotes_inputs=["aircraft:*", "mission:*"], - promotes_outputs=[ - "aircraft:*", - ], - ) - self.prob.model.add_subsystem( - "GASP_mass", - MassPremission( - aviary_options=options, - ), - promotes=["*"], - ) - - self.prob.model.set_input_defaults( - Aircraft.Wing.ASPECT_RATIO, val=11, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" - ) - self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Mission.Design.GROSS_MASS, val=145388.0, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.LOADING, val=104.50, units="lbf/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALED_SLS_THRUST, val=17000.0, units="lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") - self.prob.model.set_input_defaults( - Aircraft.Fuel.WING_FUEL_FRACTION, 0.475, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.09986, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") - self.prob.model.set_input_defaults( - Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.WETTED_AREA_SCALER, 1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MOMENT_RATIO, 2.1621, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.REFERENCE_DIAMETER, 7.36, units="ft") - # self.prob.model.set_input_defaults( - # Aircraft.Engine.REFERENCE_SLS_THRUST, 28620.0, units="lbf" - # ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALE_FACTOR, 0.594, units='unitless' - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.2095, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Nacelle.FINENESS, 1.715, units="unitless") - self.prob.model.set_input_defaults(Aircraft.Wing.FOLDED_SPAN, 118, units="ft") - - self.prob.model.set_input_defaults( - Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" - ) - - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CARGO_MASS, val=15970.0, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.SWEEP, val=0, units='deg' - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" - ) # Based onlarge single aisle 1for updated flaps mass model - self.prob.model.set_input_defaults( - Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" - ) # Based on large single aisle 1 for updated flaps mass model - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SPECIFIC, val=0.2355, units="lbm/lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.165, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.APU.MASS, val=1014.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.085, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.105, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Avionics.MASS, val=1504.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.AntiIcing.MASS, val=126.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Furnishings.MASS, val=9114.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=0.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=10.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_COEFFICIENT, val=85, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.FOLD_MASS_COEFFICIENT, val=0.2, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' - ) # note: not actually defined in program, likely an error - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_MARGIN, val=10.0, units="unitless" - ) - - self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - - self.prob.setup(check=False, force_alloc_complex=True) - - def test_case1(self): - - self.prob.run_model() - - tol = 5e-4 - # size values: - assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) - assert_near_equal(self.prob["size.fuselage.cabin_len"], 61.6, tol) - assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - - assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 16.91, tol) - assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.01, tol) - assert_near_equal( - self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1132, tol - ) # slightly different from GASP value, likely a rounding error - - assert_near_equal( - self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.6498, tol - # note: value came from running the GASP code on my own and printing it out (GASP output calculates this differently) - ) - assert_near_equal( - self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 13.4662, tol - # note: value came from running the GASP code on my own and printing it out (GASP output calculates this differently) - ) - assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 11.77, tol) - - # fixed mass values: - assert_near_equal( - self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 5219.3076, tol - # self.prob["fixed_mass.main_gear_mass"], 5219.3076, tol - ) # note: value came from running the GASP code on my own and printing it out - - assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 8007, tol) - assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1321/2, tol) - - # wing values: - assert_near_equal( - self.prob["wing_mass.isolated_wing_mass"], 13993, tol - ) # calculated as difference between wing mass and fold mass, not an actual GASP variable - - # fuel values: - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 63452.2, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 62427.2 - - assert_near_equal( - self.prob["fuel_mass.fus_mass_full"], 99396.7, tol - ) # note: value came from running the GASP code on my own and printing it out - assert_near_equal( - self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1472.6, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1426 - - assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 45373.4, tol) - assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 18859.9, tol) - - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS_REQUIRED], 32652.2, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 31627.2 - assert_near_equal( - self.prob[Aircraft.Propulsion.MASS], 10800.8, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 10755.0 - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS], 32652.2, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 31627.0 - assert_near_equal( - self.prob["fuel_mass.fuel_mass_min"], 16682.2, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 15657.2 - assert_near_equal( - self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 718.03, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 695.5 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1268.48, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1248.0 - assert_near_equal( - self.prob[Aircraft.Design.OPERATING_MASS], 81935.8, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 82961.0 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 30800.0039, tol - ) # note: value came from running the GASP code on my own and printing it out - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 33892.8, tol - ) - assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 33892.8, tol) - assert_near_equal(self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol) - assert_near_equal( - self.prob["fuel_mass.body_tank.extra_fuel_volume"], 40.4789, 0.005 - ) # note: higher tol because slightly different from GASP value, likely numerical issues, #modified from GASP value to account for updated crew mass. GASP value is 17.9 - assert_near_equal( - self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 2024.70, 0.003 - ) # note: higher tol because slightly different from GASP value, likely numerical issues, #modified from GASP value to account for updated crew mass. GASP value is 897.2 - - partial_data = self.prob.check_partials(out_stream=None, method="cs") - assert_check_partials(partial_data, atol=3e-9, rtol=6e-11) - - -class MassSummationTestCase8(unittest.TestCase): - """ - This is the Trans-sonic Truss-Braced Wing V3.6 test case - All values are from V3.6 output, hand calculated from the output, or were printed out after running the code manually. - Values not directly from the output are labeled as such. - """ - - def setUp(self): - - options = get_option_defaults() - options.set_val(Aircraft.Wing.HAS_FOLD, val=True, units='unitless') - options.set_val(Aircraft.Wing.HAS_STRUT, val=True, units='unitless') - options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, - val=False, units='unitless') - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') - options.set_val(Mission.Design.CRUISE_ALTITUDE, val=43000, units='ft') - options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') - options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.LandingGear.FIXED_GEAR, - val=False, units='unitless') - options.set_val(Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, - val=True, units='unitless') - options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, - val=200, units="lbm") - options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) - options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") - options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.Fuselage.SEAT_PITCH, 44.2, units="inch") - options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - - self.prob = om.Problem() - self.prob.model.add_subsystem( - "size", - SizeGroup( - aviary_options=options, - ), - promotes_inputs=["aircraft:*", "mission:*"], - promotes_outputs=[ - "aircraft:*", - ], - ) - self.prob.model.add_subsystem( - "GASP_mass", - MassPremission( - aviary_options=options, - ), - promotes=["*"], - ) - - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MOMENT_RATIO, val=0.13067, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.ASPECT_RATIO, val=4.025, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MOMENT_RATIO, 3.0496, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.REFERENCE_DIAMETER, 7.642, units="ft") - # self.prob.model.set_input_defaults( - # Aircraft.Engine.REFERENCE_SLS_THRUST, 28620.0, units="lbf" - # ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALE_FACTOR, 1.35255, units='unitless' - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.2095, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Nacelle.FINENESS, 1.660, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 6.85, units="ft" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.TAIL_FINENESS, 1.18, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.WETTED_AREA_SCALER, 1.0, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.LOADING, val=87.5, units="lbf/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" - ) - - self.prob.model.set_input_defaults( - Aircraft.APU.MASS, val=1014.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.085, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.105, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Avionics.MASS, val=1504.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.AntiIcing.MASS, val=126.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Furnishings.MASS, val=9114.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=0.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=10.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALED_SLS_THRUST, val=21160.0, units="lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALE_FACTOR, 0.73934, units='unitless' - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.WING_FUEL_FRACTION, 0.5625, units="unitless" - ) - self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=22.47, units="deg") - self.prob.model.set_input_defaults( - Aircraft.Wing.MOUNTING_TYPE, val=.1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.ASPECT_RATIO, val=19.565, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Strut.ATTACHMENT_LOCATION, val=118, units="ft" - ) - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CARGO_MASS, val=15970.0, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SPECIFIC, val=0.2470, units="lbm/lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.MASS_SPECIFIC, val=2.5, units="lbm/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.163, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Engine.WING_LOCATIONS, val=0.2143, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.ASPECT_RATIO, val=0.825, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.SWEEP, val=0, units='deg' - ) # not in file - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.2076, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.2587, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.11, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" - ) # Based onlarge single aisle 1for updated flaps mass model - self.prob.model.set_input_defaults( - Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" - ) # Based on large single aisle 1 for updated flaps mass model - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.5936, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=30, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" - ) # not in file - self.prob.model.set_input_defaults( - Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" - ) # not in file - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MASS_COEFFICIENT, val=0.03390, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_MARGIN, val=10.0, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.060, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_COEFFICIENT, val=89.66, units="unitless" - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' - ) # not in file - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Mission.Design.GROSS_MASS, val=143100.0, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_COEFFICIENT, val=78.94, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.TAPER_RATIO, val=0.346, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.11, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.43, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.066, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.FOLD_MASS_COEFFICIENT, val=0.2, units="unitless" - ) - # self.prob.model.set_input_defaults( - # Aircraft.Strut.AREA, 523.337, units="ft**2" - # ) # had to calculate by hand - self.prob.model.set_input_defaults( - Aircraft.Strut.MASS_COEFFICIENT, 0.238, units="unitless" - ) - - self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - - self.prob.setup(check=False, force_alloc_complex=True) - - def test_case1(self): - - self.prob.run_model() - - tol = 5e-4 - # size values: - assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) - assert_near_equal(self.prob["size.fuselage.cabin_len"], 93.9, tol) - assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - - assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 13.59, tol) - assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 13.15, tol) - assert_near_equal( - self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1068, tol - ) # note:precision came from running code on my own and printing it out - - assert_near_equal( - self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.381, tol - ) # note, printed out manually because calculated differently in output subroutine - assert_near_equal( - self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 20.056, tol - ) # note, printed out manually because calculated differently in output subroutine - assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 13.19, tol) - - # fixed mass values: - assert_near_equal( - self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 4123.4, tol - # self.prob["fixed_mass.main_gear_mass"], 4123.4, tol - ) # note:printed out from GASP code - - assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 10453.0, tol) - assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1704.0/2, tol) - - # wing values: - assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 14040, tol) - assert_near_equal(self.prob[Aircraft.Wing.MASS], 18031, tol) - - # fuel values: - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 60410.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 59372.3 - - assert_near_equal( - self.prob["fuel_mass.fus_mass_full"], 97697.5, tol - ) # note:printed out from GASP code - assert_near_equal( - self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1954.3, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1886.0 - - assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 43660.4, tol) - assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 14657.4, tol) - - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS_REQUIRED], 29610.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 28572.3 - assert_near_equal( - self.prob[Aircraft.Propulsion.MASS], 14111.2, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 14043.0 - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS], 29610.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 28572.0 - assert_near_equal( - self.prob["fuel_mass.fuel_mass_min"], 13640.9, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 12602.3 - assert_near_equal( - self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 651.15, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 628.3 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1207.68, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1186.9 - assert_near_equal( - self.prob[Aircraft.Design.OPERATING_MASS], 82689.1, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 83728.0 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 30800.0, tol - ) # note:printed out from GASP code - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 31051.6, tol - ) - assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 31051.6, tol) - assert_near_equal(self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol) - assert_near_equal( - self.prob["fuel_mass.body_tank.extra_fuel_volume"], 30.3942, 0.009 - ) # note: higher tol because slightly different from GASP value, likely numerical issues, printed out from the GASP code, #modified from GASP value to account for updated crew mass. GASP value is 7.5568 - assert_near_equal( - self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 1520.384, 0.009 - ) # note: higher tol because slightly different from GASP value, likely numerical issues, printed out from the GASP code, #modified from GASP value to account for updated crew mass. GASP value is 378.0062 - - partial_data = self.prob.check_partials(out_stream=None, method="cs") - assert_check_partials(partial_data, atol=3e-9, rtol=6e-11) - - -class MassSummationTestCase9(unittest.TestCase): - """ - This is the electrified Trans-sonic Truss-Braced Wing V3.6 test case - All values are from V3.6 output, hand calculated from the output, or were printed out after running the code manually. - Values not directly from the output are labeled as such. - """ - - def setUp(self): - - options = get_option_defaults() - options.set_val(Aircraft.Wing.HAS_FOLD, val=True, units='unitless') - options.set_val(Aircraft.Wing.HAS_STRUT, val=True, units='unitless') - options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') - options.set_val(Mission.Design.CRUISE_ALTITUDE, val=43000, units='ft') - options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') - options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, - val=True, units='unitless') - options.set_val(Aircraft.LandingGear.FIXED_GEAR, - val=False, units='unitless') - options.set_val(Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, - val=True, units='unitless') - options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, - val=200, units="lbm") - options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) - options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") - options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.Fuselage.SEAT_PITCH, 44.2, units="inch") - options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - - self.prob = om.Problem() - self.prob.model.add_subsystem( - "size", - SizeGroup( - aviary_options=options, - ), - promotes_inputs=["aircraft:*", "mission:*"], - promotes_outputs=[ - "aircraft:*", - ], - ) - self.prob.model.add_subsystem( - "GASP_mass", - MassPremission( - aviary_options=options, - ), - promotes=["*"], - ) - - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MOMENT_RATIO, val=0.13067, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.ASPECT_RATIO, val=4.025, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MOMENT_RATIO, 3.0496, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.REFERENCE_DIAMETER, 8.425, units="ft") - # self.prob.model.set_input_defaults( - # Aircraft.Engine.REFERENCE_SLS_THRUST, 28620, units="lbf" - # ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALE_FACTOR, 0.73934, units='unitless' - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.2095, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Nacelle.FINENESS, 1.569, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 6.85, units="ft" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.TAIL_FINENESS, 1.18, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.WETTED_AREA_SCALER, 1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.LOADING, val=96.10, units="lbf/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" - ) - - self.prob.model.set_input_defaults( - Aircraft.APU.MASS, val=1014.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.085, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.105, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Avionics.MASS, val=1504.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.AntiIcing.MASS, val=126.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Furnishings.MASS, val=9114.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=0.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=10.0, units="lbm") - self.prob.model.set_input_defaults( - Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - - self.prob.model.set_input_defaults( - Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALED_SLS_THRUST, val=23750.0, units="lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.SCALE_FACTOR, 0.82984, units='unitless' - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.WING_FUEL_FRACTION, 0.5936, units="unitless" - ) - self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=22.47, units="deg") - self.prob.model.set_input_defaults( - Aircraft.Wing.MOUNTING_TYPE, val=.1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.ASPECT_RATIO, val=19.565, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Strut.ATTACHMENT_LOCATION, val=118.0, units="ft" - ) - self.prob.model.set_input_defaults( - Aircraft.CrewPayload.CARGO_MASS, val=15970.0, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SPECIFIC, val=0.2744, units="lbm/lbf" - ) - self.prob.model.set_input_defaults( - Aircraft.Nacelle.MASS_SPECIFIC, val=2.5, units="lbm/ft**2" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.163, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Engine.WING_LOCATIONS, val=0.2143, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.ASPECT_RATIO, val=0.825, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.SWEEP, val=0, units='deg' - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.2076, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.2587, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.11, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" - ) # Based onlarge single aisle 1for updated flaps mass model - self.prob.model.set_input_defaults( - Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" - ) # Based on large single aisle 1 for updated flaps mass model - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.5936, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=30.0, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=1, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MASS_COEFFICIENT, val=0.03390, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_MARGIN, val=0.0, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.060, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_COEFFICIENT, val=96.94, units="unitless" - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' - ) - self.prob.model.set_input_defaults( - "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' - ) - self.prob.model.set_input_defaults( - Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") - self.prob.model.set_input_defaults( - Mission.Design.GROSS_MASS, val=166100.0, units="lbm" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.MASS_COEFFICIENT, val=78.94, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.TAPER_RATIO, val=0.346, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.11, units="unitless" - ) - - self.prob.model.set_input_defaults( - Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.43, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.066, units="unitless" - ) - self.prob.model.set_input_defaults( - Aircraft.Wing.FOLD_MASS_COEFFICIENT, val=0.2, units="unitless" - ) - # self.prob.model.set_input_defaults( - # Aircraft.Strut.AREA, 553.1, units="ft**2" - # ) - self.prob.model.set_input_defaults( - Aircraft.Strut.MASS_COEFFICIENT, 0.238, units="unitless" - ) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.motor_power", 830, units="kW" - ) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.motor_voltage", 850, units="V" - ) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.max_amp_per_wire", 260, units="A" - ) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.safety_factor", 1, units="unitless" - ) # (not in this GASP code) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.wire_area", 0.0015, units="ft**2" - ) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.rho_wire", 565, units="lbm/ft**3" - ) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.battery_energy", 6077, units="MJ" - ) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.motor_eff", 0.98, units="unitless" - ) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.inverter_eff", 0.99, units="unitless" - ) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.transmission_eff", 0.975, units="unitless" - ) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.battery_eff", 0.975, units="unitless" - ) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.rho_battery", 0.5, units="kW*h/kg" - ) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.motor_spec_mass", 4, units="hp/lbm" - ) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.inverter_spec_mass", 12, units="kW/kg" - ) - self.prob.model.set_input_defaults( - "fixed_mass.augmentation.TMS_spec_mass", 0.125, units="lbm/kW" - ) - - self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - - self.prob.setup(check=False, force_alloc_complex=True) - - def test_case1(self): - - self.prob.run_model() - - tol = 5e-4 - # size values: - assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) - assert_near_equal(self.prob["size.fuselage.cabin_len"], 93.9, tol) - assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - - assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 13.97, tol) - assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 13.53, tol) - assert_near_equal( - self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1068, tol - ) # (printed out from GASP code to get better precision) - - assert_near_equal( - self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.644, tol - ) # (printed out from GASP code) - assert_near_equal( - self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 20.618, tol - ) # (printed out from GASP code) - assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.56, tol) - - # fixed mass values: - assert_near_equal( - self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 4786.2, tol - ) # (printed out from GASP code) - - assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 13034.0, tol) - assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 2124.5/2, tol) - - # wing values: - assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15895, tol) - assert_near_equal(self.prob[Aircraft.Wing.MASS], 20461.7, tol) - - # fuel values: - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 64594.0, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 63707.6 - - assert_near_equal( - self.prob["fuel_mass.fus_mass_full"], 108803.9, tol - ) # (printed out from GASP code), #modified from GASP value to account for updated crew mass. GASP value is 108754.4 - assert_near_equal( - self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 2027.6, 0.00055 - ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 1974.5 - - assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 49582, tol) - assert_near_equal( - self.prob[Aircraft.Fuselage.MASS], 16313.0, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 16436.0 - - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS_REQUIRED], 33794.0, 0.00058 - ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 32907.6 - assert_near_equal( - self.prob[Aircraft.Propulsion.MASS], 26565.2, 0.00054 - ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 26527.0 - assert_near_equal( - self.prob[Mission.Design.FUEL_MASS], 33794.0, 0.00056 - ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 32908 - assert_near_equal( - self.prob["fuel_mass.fuel_mass_min"], 17824.0, 0.0012 - ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 16937.6 - assert_near_equal( - self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 675.58, 0.00051 - ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 657.9 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1291.31, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 1273.6 - assert_near_equal( - self.prob[Aircraft.Design.OPERATING_MASS], 101506.0, tol - ) # modified from GASP value to account for updated crew mass. GASP value is 102392.0 - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 30800.0, tol - ) # (printed out from GASP code) - assert_near_equal( - self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 35042.1, tol - ) - assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 35042.1, tol) - assert_near_equal(self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol) - assert_near_equal( - self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol - ) - assert_near_equal( - self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol - ) - - assert_near_equal(self.prob[Aircraft.Electrical.HYBRID_CABLE_LENGTH], 65.6, tol) - assert_near_equal( - self.prob["fixed_mass.aug_mass"], 9394.3, 0.0017 - ) # slightly above tol, due to non-integer number of wires - - partial_data = self.prob.check_partials(out_stream=None, method="cs") - assert_check_partials(partial_data, atol=3e-9, rtol=6e-11) +# class MassSummationTestCase2(unittest.TestCase): +# """ +# This is the large single aisle 1 V3.5 test case. +# All values are from V3.5 output (or hand calculated from the output, and these cases +# are specified). +# """ + +# def setUp(self): + +# options = get_option_defaults() +# options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, +# val=False, units='unitless') +# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') +# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') +# options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') +# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.LandingGear.FIXED_GEAR, +# val=False, units='unitless') +# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, +# val=200, units="lbm") +# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) +# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") +# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) +# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") +# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + +# self.prob = om.Problem() +# self.prob.model.add_subsystem( +# "size", +# SizeGroup( +# aviary_options=options, +# ), +# promotes_inputs=["aircraft:*", "mission:*"], +# promotes_outputs=[ +# "aircraft:*", +# ], +# ) +# self.prob.model.add_subsystem( +# "GASP_mass", +# MassPremission( +# aviary_options=options, +# ), +# promotes=["*"], +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" +# ) +# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Mission.Design.GROSS_MASS, val=175400, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.LOADING, val=128, units="lbf/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" +# ) +# # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") +# # self.prob.model.set_input_defaults( +# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" +# # ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless') +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.FINENESS, 2, units="unitless") + +# self.prob.model.set_input_defaults( +# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.SWEEP, val=0, units='deg' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" +# ) # Based onlarge single aisle 1for updated flaps mass model +# self.prob.model.set_input_defaults( +# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" +# ) # Based onlarge single aisle 1for updated flaps mass model +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.APU.MASS, val=928.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Avionics.MASS, val=1959.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.AntiIcing.MASS, val=551.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Furnishings.MASS, val=11192.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_MARGIN, val=0, units="unitless") + +# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + +# self.prob.setup(check=False, force_alloc_complex=True) + +# def test_case1(self): + +# self.prob.run_model() + +# tol = 5e-4 +# # size values: +# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) +# assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) +# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + +# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 17.49, tol) +# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.41, tol) +# assert_near_equal( +# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1397, tol +# ) # not exact GASP value from the output file, likely due to rounding error + +# # note: this is not the value in the GASP output, because the output calculates +# # them differently. This was calculated by hand. +# assert_near_equal( +# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.578314120156815, tol +# ) +# # note: this is not the value in the GASP output, because the output calculates +# # them differently. This was calculated by hand. +# assert_near_equal( +# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 16.828924591320984, tol +# ) +# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) + +# # fixed mass values: +# assert_near_equal( +# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.35, tol +# ) # calculated by hand + +# # note: fixed_mass.tail.loc_MAC_vtail not included in v3.5 + +# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) +# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) + +# # wing values: +# assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15653, tol) + +# # fuel values: +# # modified from GASP value to account for updated crew mass. GASP value is +# # 79147.2 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 79002.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 79147.2 + +# # calculated by hand, #modified from GASP value to account for updated crew +# # mass. GASP value is 102321.45695930265 +# assert_near_equal( +# self.prob["fuel_mass.fus_mass_full"], 102359.6, tol +# ) +# # modified from GASP value to account for updated crew mass. GASP value is +# # 1769 +# assert_near_equal( +# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1763.1, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1769 + +# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 50186, tol) +# assert_near_equal( +# self.prob[Aircraft.Fuselage.MASS], 18663, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 18787 + +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 43002.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 43147.2 +# assert_near_equal( +# self.prob[Aircraft.Propulsion.MASS], 16133.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 16140 +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS], 43002.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 43147 +# assert_near_equal( +# self.prob["fuel_mass.fuel_mass_min"], 32962.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 33107.2 +# assert_near_equal( +# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 859.68, tol +# ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 862.5603807559726 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1579.36, tol +# ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 1582.2403068511774 +# assert_near_equal( +# self.prob[Aircraft.Design.OPERATING_MASS], 96397.1, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 96253.0 +# # extra_fuel_mass calculated differently in this version, so fuel_mass.fuel_and_oem.payload_mass_max_fuel test not included +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 55725.1, tol +# ) +# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 55725.1, tol) +# assert_near_equal( +# self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol +# ) # always zero when no body tank +# assert_near_equal( +# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol +# ) # always zero when no body tank +# assert_near_equal( +# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol +# ) # always zero when no body tank + +# partial_data = self.prob.check_partials(out_stream=None, method="cs") +# assert_check_partials(partial_data, atol=2e-10, rtol=1e-12) + + +# class MassSummationTestCase3(unittest.TestCase): +# """ +# This is thelarge single aisle 1V3.6 test case with a fuel margin of 0%, a wing loading of 128 psf, and a SLS thrust of 29500 lbf +# All values are from V3.6 output (or hand calculated from the output, and these cases are specified). +# """ + +# def setUp(self): + +# options = get_option_defaults() +# options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, +# val=False, units='unitless') +# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') +# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') +# options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') +# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.LandingGear.FIXED_GEAR, +# val=False, units='unitless') +# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, +# val=200, units="lbm") +# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) +# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") +# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) +# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") +# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + +# self.prob = om.Problem() +# self.prob.model.add_subsystem( +# "size", +# SizeGroup( +# aviary_options=options, +# ), +# promotes_inputs=["aircraft:*", "mission:*"], +# promotes_outputs=[ +# "aircraft:*", +# ], +# ) +# self.prob.model.add_subsystem( +# "GASP_mass", +# MassPremission( +# aviary_options=options, +# ), +# promotes=["*"], +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" +# ) +# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Mission.Design.GROSS_MASS, val=175400, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.LOADING, val=128, units="lbf/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" +# ) +# # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") +# # self.prob.model.set_input_defaults( +# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" +# # ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.FINENESS, 2, units="unitless") + +# self.prob.model.set_input_defaults( +# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.SWEEP, val=0, units='deg' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" +# ) # Based onlarge single aisle 1for updated flaps mass model +# self.prob.model.set_input_defaults( +# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" +# ) # Based on large single aisle 1 for updated flaps mass model +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.APU.MASS, val=928.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Avionics.MASS, val=1959.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.AntiIcing.MASS, val=551.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Furnishings.MASS, val=11192.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_MARGIN, val=0, units="unitless") + +# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + +# self.prob.setup(check=False, force_alloc_complex=True) + +# def test_case1(self): + +# self.prob.run_model() + +# tol = 5e-4 +# # size values: +# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) +# assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) +# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + +# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 17.49, tol) +# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.41, tol) +# assert_near_equal( +# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1397, tol +# ) # not exact value, likely due to rounding error + +# assert_near_equal( +# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.578314120156815, tol +# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. +# assert_near_equal( +# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 16.828924591320984, tol +# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. +# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) + +# # fixed mass values: +# assert_near_equal( +# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol +# ) # calculated by hand + +# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) +# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) + +# # wing values: +# assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15653, tol) + +# # fuel values: +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 79002.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 79147.2 + +# assert_near_equal( +# self.prob["fuel_mass.fus_mass_full"], 102359.6, tol +# ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 102321.45695930265 +# assert_near_equal( +# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1763.1, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 102321.45695930265 + +# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 50186, tol) +# assert_near_equal( +# self.prob[Aircraft.Fuselage.MASS], 18663, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 18787 + +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 43002.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 43147.2 +# assert_near_equal( +# self.prob[Aircraft.Propulsion.MASS], 16133.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 16140 +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS], 43002.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 43147 +# assert_near_equal( +# self.prob["fuel_mass.fuel_mass_min"], 32962.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 33107.2 +# assert_near_equal( +# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 859.68, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 862.6 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1579.36, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1582.2 +# assert_near_equal( +# self.prob[Aircraft.Design.OPERATING_MASS], 96397.1, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 96253.0 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 36000, tol +# ) # note: value came from running the GASP code on my own and printing it out +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 55725.1, tol +# ) +# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 55725.1, tol) +# assert_near_equal( +# self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol +# ) # always zero when no body tank +# assert_near_equal( +# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol +# ) # always zero when no body tank +# assert_near_equal( +# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol +# ) # always zero when no body tank + +# partial_data = self.prob.check_partials(out_stream=None, method="cs") +# assert_check_partials(partial_data, atol=2e-10, rtol=1e-12) + + +# class MassSummationTestCase4(unittest.TestCase): +# """ +# This is the large single aisle 1V3.6 test case with a fuel margin of 10%, a wing loading of 128 psf, and a SLS thrust of 29500 lbf +# All values are from V3.6 output (or hand calculated from the output, and these cases are specified). +# """ + +# def setUp(self): + +# options = get_option_defaults() +# options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, +# val=False, units='unitless') +# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') +# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') +# options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') +# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.LandingGear.FIXED_GEAR, +# val=False, units='unitless') +# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, +# val=200, units="lbm") +# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) +# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") +# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) +# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") +# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + +# self.prob = om.Problem() +# self.prob.model.add_subsystem( +# "size", +# SizeGroup( +# aviary_options=options, +# ), +# promotes_inputs=["aircraft:*", "mission:*"], +# promotes_outputs=[ +# "aircraft:*", +# ], +# ) +# self.prob.model.add_subsystem( +# "GASP_mass", +# MassPremission( +# aviary_options=options, +# ), +# promotes=["*"], +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" +# ) +# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Mission.Design.GROSS_MASS, val=175400, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.LOADING, val=128, units="lbf/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" +# ) +# # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") +# # self.prob.model.set_input_defaults( +# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" +# # ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.FINENESS, 2, units="unitless") + +# self.prob.model.set_input_defaults( +# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.SWEEP, val=0, units='deg' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" +# ) # Based onlarge single aisle 1for updated flaps mass model +# self.prob.model.set_input_defaults( +# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" +# ) # Based on large single aisle 1 for updated flaps mass model +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.APU.MASS, val=928.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Avionics.MASS, val=1959.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.AntiIcing.MASS, val=551.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Furnishings.MASS, val=11192.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_MARGIN, val=10, units="unitless" +# ) + +# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + +# self.prob.setup(check=False, force_alloc_complex=True) + +# def test_case1(self): + +# self.prob.run_model() + +# tol = 5e-4 +# # size values: +# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) +# assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) +# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + +# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 17.49, tol) +# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.41, tol) +# assert_near_equal( +# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1397, tol +# ) # slightly different from GASP value, likely numerical error + +# assert_near_equal( +# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.578314120156815, tol +# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. +# assert_near_equal( +# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 16.828924591320984, tol +# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. +# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) + +# # fixed mass values: +# assert_near_equal( +# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol +# ) # calculated by hand + +# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) +# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) + +# # wing values: +# assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15653, tol) + +# # fuel values: +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 78823.0, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 78966.7 + +# assert_near_equal( +# self.prob["fuel_mass.fus_mass_full"], 102541.4, tol +# ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 102501.95695930265 +# assert_near_equal( +# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1931.3, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1938 + +# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 50198, tol) +# assert_near_equal( +# self.prob[Aircraft.Fuselage.MASS], 18675, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 18799 + +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 42823.0, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 42966.7 +# assert_near_equal( +# self.prob[Aircraft.Propulsion.MASS], 16302.1, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 16309 +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS], 42823.0, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 42967 +# assert_near_equal( +# self.prob["fuel_mass.fuel_mass_min"], 32783.0, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 32926.7 +# assert_near_equal( +# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 941.69, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 944.8 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1575.76, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1578.6 +# assert_near_equal( +# self.prob[Aircraft.Design.OPERATING_MASS], 96577.0, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 96433.0 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 36000, tol +# ) # note: value came from running the GASP code on my own and printing it out +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 55725.1, tol +# ) +# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 55725.1, tol) +# assert_near_equal( +# self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol +# ) # always zero when no body tank +# assert_near_equal( +# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol +# ) # always zero when no body tank +# assert_near_equal( +# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol +# ) # always zero when no body tank + +# partial_data = self.prob.check_partials(out_stream=None, method="cs") +# assert_check_partials(partial_data, atol=2e-10, rtol=1e-12) + + +# class MassSummationTestCase5(unittest.TestCase): +# """ +# This is thelarge single aisle 1V3.6 test case with a fuel margin of 0%, a wing loading of 150 psf, and a SLS thrust of 29500 lbf +# All values are from V3.6 output (or hand calculated from the output, and these cases are specified). +# """ + +# def setUp(self): + +# options = get_option_defaults() +# options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, +# val=False, units='unitless') +# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') +# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') +# options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') +# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.LandingGear.FIXED_GEAR, +# val=False, units='unitless') +# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, +# val=200, units="lbm") +# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) +# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") +# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) +# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") +# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + +# self.prob = om.Problem() +# self.prob.model.add_subsystem( +# "size", +# SizeGroup( +# aviary_options=options, +# ), +# promotes_inputs=["aircraft:*", "mission:*"], +# promotes_outputs=[ +# "aircraft:*", +# ], +# ) +# self.prob.model.add_subsystem( +# "GASP_mass", +# MassPremission( +# aviary_options=options, +# ), +# promotes=["*"], +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" +# ) +# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Mission.Design.GROSS_MASS, val=175400, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.LOADING, val=150, units="lbf/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" +# ) +# # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") +# # self.prob.model.set_input_defaults( +# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" +# # ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.FINENESS, 2, units="unitless") + +# self.prob.model.set_input_defaults( +# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.SWEEP, val=0, units='deg' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" +# ) # Based onlarge single aisle 1for updated flaps mass model +# self.prob.model.set_input_defaults( +# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" +# ) # Based on large single aisle 1 for updated flaps mass model +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.APU.MASS, val=928.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Avionics.MASS, val=1959.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.AntiIcing.MASS, val=551.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Furnishings.MASS, val=11192.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_MARGIN, val=0.0, units="unitless" +# ) + +# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + +# self.prob.setup(check=False, force_alloc_complex=True) + +# def test_case1(self): + +# self.prob.run_model() + +# tol = 5e-4 +# # size values: +# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) +# assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) +# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + +# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 16.16, tol) +# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 15.1, tol) +# assert_near_equal( +# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1394, tol +# ) # slightly different from GASP value, likely rounding error + +# assert_near_equal( +# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 8.848695928254141, tol +# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. +# assert_near_equal( +# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 15.550266681026597, tol +# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. +# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) + +# # fixed mass values: +# assert_near_equal( +# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol +# # self.prob["fixed_mass.main_gear_mass"], 6384.349999999999, tol +# ) # calculated by hand + +# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) +# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) + +# # wing values: +# assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 14631, tol) + +# # fuel values: +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 80475.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 81424.8 + +# assert_near_equal( +# self.prob["fuel_mass.fus_mass_full"], 102510.7, tol +# ) # calculated by hand +# assert_near_equal( +# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1823.4, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1862 + +# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 48941, tol) +# assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 18675, tol) + +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 44472.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 45424.8 +# assert_near_equal( +# self.prob[Aircraft.Propulsion.MASS], 16194.2, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 16233 +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS], 44472.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 45425 +# assert_near_equal( +# self.prob["fuel_mass.fuel_mass_min"], 34432.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 35384.8 +# assert_near_equal( +# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 889.06, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 908.1 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1608.74, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1627.8 +# assert_near_equal( +# self.prob[Aircraft.Design.OPERATING_MASS], 94927.1, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 93975 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 35380.5, tol +# ) # note: value came from running the GASP code on my own and printing it out, #modified from GASP value to account for updated crew mass. GASP value is 34427.4 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 43852.1, tol +# ) +# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 43852.1, tol) +# assert_near_equal( +# self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 620.739, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1572.6 +# assert_near_equal( +# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 12.4092, tol +# ) # slightly different from GASP value, likely a rounding error, #modified from GASP value to account for updated crew mass. GASP value is 31.43 +# assert_near_equal( +# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 620.736, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1572.6 + +# partial_data = self.prob.check_partials(out_stream=None, method="cs") +# assert_check_partials(partial_data, atol=3e-10, rtol=1e-12) + + +# class MassSummationTestCase6(unittest.TestCase): +# """ +# This is thelarge single aisle 1V3.6 test case with a fuel margin of 10%, a wing loading of 150 psf, and a SLS thrust of 29500 lbf +# All values are from V3.6 output (or hand calculated from the output, and these cases are specified). +# """ + +# def setUp(self): + +# options = get_option_defaults() +# options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, +# val=False, units='unitless') +# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') +# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') +# options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') +# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.LandingGear.FIXED_GEAR, +# val=False, units='unitless') +# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, +# val=200, units="lbm") +# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) +# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") +# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) +# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") +# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + +# self.prob = om.Problem() +# self.prob.model.add_subsystem( +# "size", +# SizeGroup( +# aviary_options=options, +# ), +# promotes_inputs=["aircraft:*", "mission:*"], +# promotes_outputs=[ +# "aircraft:*", +# ], +# ) +# self.prob.model.add_subsystem( +# "GASP_mass", +# MassPremission( +# aviary_options=options, +# ), +# promotes=["*"], +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" +# ) +# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Mission.Design.GROSS_MASS, val=175400, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.LOADING, val=150, units="lbf/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" +# ) +# # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") +# # self.prob.model.set_input_defaults( +# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" +# # ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.FINENESS, 2, units="unitless") + +# self.prob.model.set_input_defaults( +# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.SWEEP, val=0, units='deg' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" +# ) # Based onlarge single aisle 1for updated flaps mass model +# self.prob.model.set_input_defaults( +# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" +# ) # Based onlarge single aisle 1for updated flaps mass model +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.APU.MASS, val=928.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Avionics.MASS, val=1959.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.AntiIcing.MASS, val=551.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Furnishings.MASS, val=11192.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_MARGIN, val=10.0, units="unitless" +# ) + +# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + +# self.prob.setup(check=False, force_alloc_complex=True) + +# def test_case1(self): + +# self.prob.run_model() + +# tol = 5e-4 +# # size values: +# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) +# assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) +# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + +# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 16.16, tol) +# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 15.1, tol) +# assert_near_equal( +# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1394, tol +# ) # note: not exact GASP value, likely rounding error + +# assert_near_equal( +# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 8.848695928254141, tol +# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. +# assert_near_equal( +# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 15.550266681026597, tol +# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. +# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) + +# # fixed mass values: +# assert_near_equal( +# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol +# # self.prob["fixed_mass.main_gear_mass"], 6384.349999999999, tol +# ) # calculated by hand + +# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) +# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) + +# # wing values: +# assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 14631, tol) + +# # fuel values: +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 80029.2, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 80982.7 + +# assert_near_equal( +# self.prob["fuel_mass.fus_mass_full"], 106913.6, tol +# ) # calculated by hand +# assert_near_equal( +# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1985.7, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 2029 + +# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 49222, tol) +# assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 18956, tol) + +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 44029.2, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 44982.7 +# assert_near_equal( +# self.prob[Aircraft.Propulsion.MASS], 16356.5, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 16399 +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS], 44029.2, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 44982.7 +# assert_near_equal( +# self.prob["fuel_mass.fuel_mass_min"], 33989.2, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 34942.7 +# assert_near_equal( +# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 968.21, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 989.2 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1599.87, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1618.9 +# assert_near_equal( +# self.prob[Aircraft.Design.OPERATING_MASS], 95370.8, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 94417 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 35823.0, tol +# ) # note: value came from running the GASP code on my own and printing it out, #modified from GASP value to account for updated crew mass. GASP value is 34879.2 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 43852.1, tol +# ) +# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 43852.1, tol) +# assert_near_equal( +# self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 177.042, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1120.9 +# assert_near_equal( +# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 91.5585, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 112.3 +# assert_near_equal( +# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 4579.96, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 5618.2 + +# partial_data = self.prob.check_partials(out_stream=None, method="cs") +# assert_check_partials(partial_data, atol=3e-10, rtol=1e-12) + + +# class MassSummationTestCase7(unittest.TestCase): +# """ +# This is the Advanced Tube and Wing V3.6 test case +# All values are from V3.6 output, hand calculated from the output, or were printed out after running the code manually. +# Values not directly from the output are labeled as such. +# """ + +# def setUp(self): + +# options = get_option_defaults() +# options.set_val(Aircraft.Wing.HAS_FOLD, val=True, units='unitless') +# options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, +# val=False, units='unitless') +# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') +# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37100, units='ft') +# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.LandingGear.FIXED_GEAR, +# val=False, units='unitless') +# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, +# val=200, units="lbm") +# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) +# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") +# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) +# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") +# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + +# self.prob = om.Problem() +# self.prob.model.add_subsystem( +# "size", +# SizeGroup( +# aviary_options=options, +# ), +# promotes_inputs=["aircraft:*", "mission:*"], +# promotes_outputs=[ +# "aircraft:*", +# ], +# ) +# self.prob.model.add_subsystem( +# "GASP_mass", +# MassPremission( +# aviary_options=options, +# ), +# promotes=["*"], +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.Wing.ASPECT_RATIO, val=11, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" +# ) +# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Mission.Design.GROSS_MASS, val=145388.0, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.LOADING, val=104.50, units="lbf/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALED_SLS_THRUST, val=17000.0, units="lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.WING_FUEL_FRACTION, 0.475, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.09986, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.WETTED_AREA_SCALER, 1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MOMENT_RATIO, 2.1621, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.REFERENCE_DIAMETER, 7.36, units="ft") +# # self.prob.model.set_input_defaults( +# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28620.0, units="lbf" +# # ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALE_FACTOR, 0.594, units='unitless' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.2095, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.FINENESS, 1.715, units="unitless") +# self.prob.model.set_input_defaults(Aircraft.Wing.FOLDED_SPAN, 118, units="ft") + +# self.prob.model.set_input_defaults( +# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CARGO_MASS, val=15970.0, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.SWEEP, val=0, units='deg' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" +# ) # Based onlarge single aisle 1for updated flaps mass model +# self.prob.model.set_input_defaults( +# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" +# ) # Based on large single aisle 1 for updated flaps mass model +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SPECIFIC, val=0.2355, units="lbm/lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.165, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.APU.MASS, val=1014.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.085, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.105, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Avionics.MASS, val=1504.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.AntiIcing.MASS, val=126.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Furnishings.MASS, val=9114.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=0.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=10.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_COEFFICIENT, val=85, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.FOLD_MASS_COEFFICIENT, val=0.2, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' +# ) # note: not actually defined in program, likely an error +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_MARGIN, val=10.0, units="unitless" +# ) + +# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + +# self.prob.setup(check=False, force_alloc_complex=True) + +# def test_case1(self): + +# self.prob.run_model() + +# tol = 5e-4 +# # size values: +# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) +# assert_near_equal(self.prob["size.fuselage.cabin_len"], 61.6, tol) +# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + +# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 16.91, tol) +# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.01, tol) +# assert_near_equal( +# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1132, tol +# ) # slightly different from GASP value, likely a rounding error + +# assert_near_equal( +# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.6498, tol +# # note: value came from running the GASP code on my own and printing it out (GASP output calculates this differently) +# ) +# assert_near_equal( +# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 13.4662, tol +# # note: value came from running the GASP code on my own and printing it out (GASP output calculates this differently) +# ) +# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 11.77, tol) + +# # fixed mass values: +# assert_near_equal( +# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 5219.3076, tol +# # self.prob["fixed_mass.main_gear_mass"], 5219.3076, tol +# ) # note: value came from running the GASP code on my own and printing it out + +# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 8007, tol) +# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1321/2, tol) + +# # wing values: +# assert_near_equal( +# self.prob["wing_mass.isolated_wing_mass"], 13993, tol +# ) # calculated as difference between wing mass and fold mass, not an actual GASP variable + +# # fuel values: +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 63452.2, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 62427.2 + +# assert_near_equal( +# self.prob["fuel_mass.fus_mass_full"], 99396.7, tol +# ) # note: value came from running the GASP code on my own and printing it out +# assert_near_equal( +# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1472.6, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1426 + +# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 45373.4, tol) +# assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 18859.9, tol) + +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 32652.2, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 31627.2 +# assert_near_equal( +# self.prob[Aircraft.Propulsion.MASS], 10800.8, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 10755.0 +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS], 32652.2, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 31627.0 +# assert_near_equal( +# self.prob["fuel_mass.fuel_mass_min"], 16682.2, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 15657.2 +# assert_near_equal( +# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 718.03, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 695.5 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1268.48, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1248.0 +# assert_near_equal( +# self.prob[Aircraft.Design.OPERATING_MASS], 81935.8, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 82961.0 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 30800.0039, tol +# ) # note: value came from running the GASP code on my own and printing it out +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 33892.8, tol +# ) +# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 33892.8, tol) +# assert_near_equal(self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol) +# assert_near_equal( +# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 40.4789, 0.005 +# ) # note: higher tol because slightly different from GASP value, likely numerical issues, #modified from GASP value to account for updated crew mass. GASP value is 17.9 +# assert_near_equal( +# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 2024.70, 0.003 +# ) # note: higher tol because slightly different from GASP value, likely numerical issues, #modified from GASP value to account for updated crew mass. GASP value is 897.2 + +# partial_data = self.prob.check_partials(out_stream=None, method="cs") +# assert_check_partials(partial_data, atol=3e-9, rtol=6e-11) + + +# class MassSummationTestCase8(unittest.TestCase): +# """ +# This is the Trans-sonic Truss-Braced Wing V3.6 test case +# All values are from V3.6 output, hand calculated from the output, or were printed out after running the code manually. +# Values not directly from the output are labeled as such. +# """ + +# def setUp(self): + +# options = get_option_defaults() +# options.set_val(Aircraft.Wing.HAS_FOLD, val=True, units='unitless') +# options.set_val(Aircraft.Wing.HAS_STRUT, val=True, units='unitless') +# options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, +# val=False, units='unitless') +# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') +# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=43000, units='ft') +# options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') +# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.LandingGear.FIXED_GEAR, +# val=False, units='unitless') +# options.set_val(Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, +# val=True, units='unitless') +# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, +# val=200, units="lbm") +# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) +# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") +# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) +# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 44.2, units="inch") +# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + +# self.prob = om.Problem() +# self.prob.model.add_subsystem( +# "size", +# SizeGroup( +# aviary_options=options, +# ), +# promotes_inputs=["aircraft:*", "mission:*"], +# promotes_outputs=[ +# "aircraft:*", +# ], +# ) +# self.prob.model.add_subsystem( +# "GASP_mass", +# MassPremission( +# aviary_options=options, +# ), +# promotes=["*"], +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.13067, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.025, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MOMENT_RATIO, 3.0496, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.REFERENCE_DIAMETER, 7.642, units="ft") +# # self.prob.model.set_input_defaults( +# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28620.0, units="lbf" +# # ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALE_FACTOR, 1.35255, units='unitless' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.2095, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.FINENESS, 1.660, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 6.85, units="ft" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.TAIL_FINENESS, 1.18, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.WETTED_AREA_SCALER, 1.0, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.LOADING, val=87.5, units="lbf/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.APU.MASS, val=1014.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.085, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.105, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Avionics.MASS, val=1504.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.AntiIcing.MASS, val=126.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Furnishings.MASS, val=9114.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=0.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=10.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALED_SLS_THRUST, val=21160.0, units="lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALE_FACTOR, 0.73934, units='unitless' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.WING_FUEL_FRACTION, 0.5625, units="unitless" +# ) +# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=22.47, units="deg") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MOUNTING_TYPE, val=.1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.ASPECT_RATIO, val=19.565, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Strut.ATTACHMENT_LOCATION, val=118, units="ft" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CARGO_MASS, val=15970.0, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SPECIFIC, val=0.2470, units="lbm/lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.MASS_SPECIFIC, val=2.5, units="lbm/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.163, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Engine.WING_LOCATIONS, val=0.2143, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.ASPECT_RATIO, val=0.825, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.SWEEP, val=0, units='deg' +# ) # not in file +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.2076, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.2587, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.11, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" +# ) # Based onlarge single aisle 1for updated flaps mass model +# self.prob.model.set_input_defaults( +# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" +# ) # Based on large single aisle 1 for updated flaps mass model +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.5936, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=30, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" +# ) # not in file +# self.prob.model.set_input_defaults( +# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" +# ) # not in file +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.03390, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_MARGIN, val=10.0, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.060, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_COEFFICIENT, val=89.66, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' +# ) # not in file +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Mission.Design.GROSS_MASS, val=143100.0, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_COEFFICIENT, val=78.94, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.TAPER_RATIO, val=0.346, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.11, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.43, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.066, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.FOLD_MASS_COEFFICIENT, val=0.2, units="unitless" +# ) +# # self.prob.model.set_input_defaults( +# # Aircraft.Strut.AREA, 523.337, units="ft**2" +# # ) # had to calculate by hand +# self.prob.model.set_input_defaults( +# Aircraft.Strut.MASS_COEFFICIENT, 0.238, units="unitless" +# ) + +# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + +# self.prob.setup(check=False, force_alloc_complex=True) + +# def test_case1(self): + +# self.prob.run_model() + +# tol = 5e-4 +# # size values: +# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) +# assert_near_equal(self.prob["size.fuselage.cabin_len"], 93.9, tol) +# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + +# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 13.59, tol) +# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 13.15, tol) +# assert_near_equal( +# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1068, tol +# ) # note:precision came from running code on my own and printing it out + +# assert_near_equal( +# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.381, tol +# ) # note, printed out manually because calculated differently in output subroutine +# assert_near_equal( +# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 20.056, tol +# ) # note, printed out manually because calculated differently in output subroutine +# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 13.19, tol) + +# # fixed mass values: +# assert_near_equal( +# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 4123.4, tol +# # self.prob["fixed_mass.main_gear_mass"], 4123.4, tol +# ) # note:printed out from GASP code + +# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 10453.0, tol) +# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1704.0/2, tol) + +# # wing values: +# assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 14040, tol) +# assert_near_equal(self.prob[Aircraft.Wing.MASS], 18031, tol) + +# # fuel values: +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 60410.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 59372.3 + +# assert_near_equal( +# self.prob["fuel_mass.fus_mass_full"], 97697.5, tol +# ) # note:printed out from GASP code +# assert_near_equal( +# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1954.3, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1886.0 + +# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 43660.4, tol) +# assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 14657.4, tol) + +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 29610.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 28572.3 +# assert_near_equal( +# self.prob[Aircraft.Propulsion.MASS], 14111.2, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 14043.0 +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS], 29610.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 28572.0 +# assert_near_equal( +# self.prob["fuel_mass.fuel_mass_min"], 13640.9, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 12602.3 +# assert_near_equal( +# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 651.15, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 628.3 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1207.68, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1186.9 +# assert_near_equal( +# self.prob[Aircraft.Design.OPERATING_MASS], 82689.1, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 83728.0 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 30800.0, tol +# ) # note:printed out from GASP code +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 31051.6, tol +# ) +# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 31051.6, tol) +# assert_near_equal(self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol) +# assert_near_equal( +# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 30.3942, 0.009 +# ) # note: higher tol because slightly different from GASP value, likely numerical issues, printed out from the GASP code, #modified from GASP value to account for updated crew mass. GASP value is 7.5568 +# assert_near_equal( +# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 1520.384, 0.009 +# ) # note: higher tol because slightly different from GASP value, likely numerical issues, printed out from the GASP code, #modified from GASP value to account for updated crew mass. GASP value is 378.0062 + +# partial_data = self.prob.check_partials(out_stream=None, method="cs") +# assert_check_partials(partial_data, atol=3e-9, rtol=6e-11) + + +# class MassSummationTestCase9(unittest.TestCase): +# """ +# This is the electrified Trans-sonic Truss-Braced Wing V3.6 test case +# All values are from V3.6 output, hand calculated from the output, or were printed out after running the code manually. +# Values not directly from the output are labeled as such. +# """ + +# def setUp(self): + +# options = get_option_defaults() +# options.set_val(Aircraft.Wing.HAS_FOLD, val=True, units='unitless') +# options.set_val(Aircraft.Wing.HAS_STRUT, val=True, units='unitless') +# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') +# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=43000, units='ft') +# options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') +# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, +# val=True, units='unitless') +# options.set_val(Aircraft.LandingGear.FIXED_GEAR, +# val=False, units='unitless') +# options.set_val(Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, +# val=True, units='unitless') +# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, +# val=200, units="lbm") +# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) +# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") +# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) +# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 44.2, units="inch") +# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + +# self.prob = om.Problem() +# self.prob.model.add_subsystem( +# "size", +# SizeGroup( +# aviary_options=options, +# ), +# promotes_inputs=["aircraft:*", "mission:*"], +# promotes_outputs=[ +# "aircraft:*", +# ], +# ) +# self.prob.model.add_subsystem( +# "GASP_mass", +# MassPremission( +# aviary_options=options, +# ), +# promotes=["*"], +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.13067, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.025, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MOMENT_RATIO, 3.0496, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.REFERENCE_DIAMETER, 8.425, units="ft") +# # self.prob.model.set_input_defaults( +# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28620, units="lbf" +# # ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALE_FACTOR, 0.73934, units='unitless' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.2095, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.FINENESS, 1.569, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 6.85, units="ft" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.TAIL_FINENESS, 1.18, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.WETTED_AREA_SCALER, 1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.LOADING, val=96.10, units="lbf/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.APU.MASS, val=1014.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.085, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.105, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Avionics.MASS, val=1504.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.AntiIcing.MASS, val=126.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Furnishings.MASS, val=9114.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=0.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=10.0, units="lbm") +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALED_SLS_THRUST, val=23750.0, units="lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.SCALE_FACTOR, 0.82984, units='unitless' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.WING_FUEL_FRACTION, 0.5936, units="unitless" +# ) +# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=22.47, units="deg") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MOUNTING_TYPE, val=.1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.ASPECT_RATIO, val=19.565, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Strut.ATTACHMENT_LOCATION, val=118.0, units="ft" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.CrewPayload.CARGO_MASS, val=15970.0, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SPECIFIC, val=0.2744, units="lbm/lbf" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Nacelle.MASS_SPECIFIC, val=2.5, units="lbm/ft**2" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.163, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Engine.WING_LOCATIONS, val=0.2143, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.ASPECT_RATIO, val=0.825, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.SWEEP, val=0, units='deg' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.2076, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.2587, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.11, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" +# ) # Based onlarge single aisle 1for updated flaps mass model +# self.prob.model.set_input_defaults( +# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" +# ) # Based on large single aisle 1 for updated flaps mass model +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.5936, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=30.0, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=1, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.03390, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_MARGIN, val=0.0, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.060, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_COEFFICIENT, val=96.94, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' +# ) +# self.prob.model.set_input_defaults( +# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") +# self.prob.model.set_input_defaults( +# Mission.Design.GROSS_MASS, val=166100.0, units="lbm" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.MASS_COEFFICIENT, val=78.94, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.TAPER_RATIO, val=0.346, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.11, units="unitless" +# ) + +# self.prob.model.set_input_defaults( +# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.43, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.066, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# Aircraft.Wing.FOLD_MASS_COEFFICIENT, val=0.2, units="unitless" +# ) +# # self.prob.model.set_input_defaults( +# # Aircraft.Strut.AREA, 553.1, units="ft**2" +# # ) +# self.prob.model.set_input_defaults( +# Aircraft.Strut.MASS_COEFFICIENT, 0.238, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.motor_power", 830, units="kW" +# ) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.motor_voltage", 850, units="V" +# ) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.max_amp_per_wire", 260, units="A" +# ) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.safety_factor", 1, units="unitless" +# ) # (not in this GASP code) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.wire_area", 0.0015, units="ft**2" +# ) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.rho_wire", 565, units="lbm/ft**3" +# ) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.battery_energy", 6077, units="MJ" +# ) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.motor_eff", 0.98, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.inverter_eff", 0.99, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.transmission_eff", 0.975, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.battery_eff", 0.975, units="unitless" +# ) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.rho_battery", 0.5, units="kW*h/kg" +# ) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.motor_spec_mass", 4, units="hp/lbm" +# ) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.inverter_spec_mass", 12, units="kW/kg" +# ) +# self.prob.model.set_input_defaults( +# "fixed_mass.augmentation.TMS_spec_mass", 0.125, units="lbm/kW" +# ) + +# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + +# self.prob.setup(check=False, force_alloc_complex=True) + +# def test_case1(self): + +# self.prob.run_model() + +# tol = 5e-4 +# # size values: +# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) +# assert_near_equal(self.prob["size.fuselage.cabin_len"], 93.9, tol) +# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + +# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 13.97, tol) +# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 13.53, tol) +# assert_near_equal( +# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1068, tol +# ) # (printed out from GASP code to get better precision) + +# assert_near_equal( +# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.644, tol +# ) # (printed out from GASP code) +# assert_near_equal( +# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 20.618, tol +# ) # (printed out from GASP code) +# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.56, tol) + +# # fixed mass values: +# assert_near_equal( +# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 4786.2, tol +# ) # (printed out from GASP code) + +# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 13034.0, tol) +# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 2124.5/2, tol) + +# # wing values: +# assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15895, tol) +# assert_near_equal(self.prob[Aircraft.Wing.MASS], 20461.7, tol) + +# # fuel values: +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 64594.0, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 63707.6 + +# assert_near_equal( +# self.prob["fuel_mass.fus_mass_full"], 108803.9, tol +# ) # (printed out from GASP code), #modified from GASP value to account for updated crew mass. GASP value is 108754.4 +# assert_near_equal( +# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 2027.6, 0.00055 +# ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 1974.5 + +# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 49582, tol) +# assert_near_equal( +# self.prob[Aircraft.Fuselage.MASS], 16313.0, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 16436.0 + +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 33794.0, 0.00058 +# ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 32907.6 +# assert_near_equal( +# self.prob[Aircraft.Propulsion.MASS], 26565.2, 0.00054 +# ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 26527.0 +# assert_near_equal( +# self.prob[Mission.Design.FUEL_MASS], 33794.0, 0.00056 +# ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 32908 +# assert_near_equal( +# self.prob["fuel_mass.fuel_mass_min"], 17824.0, 0.0012 +# ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 16937.6 +# assert_near_equal( +# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 675.58, 0.00051 +# ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 657.9 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1291.31, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 1273.6 +# assert_near_equal( +# self.prob[Aircraft.Design.OPERATING_MASS], 101506.0, tol +# ) # modified from GASP value to account for updated crew mass. GASP value is 102392.0 +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 30800.0, tol +# ) # (printed out from GASP code) +# assert_near_equal( +# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 35042.1, tol +# ) +# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 35042.1, tol) +# assert_near_equal(self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol) +# assert_near_equal( +# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol +# ) +# assert_near_equal( +# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol +# ) + +# assert_near_equal(self.prob[Aircraft.Electrical.HYBRID_CABLE_LENGTH], 65.6, tol) +# assert_near_equal( +# self.prob["fixed_mass.aug_mass"], 9394.3, 0.0017 +# ) # slightly above tol, due to non-integer number of wires + +# partial_data = self.prob.check_partials(out_stream=None, method="cs") +# assert_check_partials(partial_data, atol=3e-9, rtol=6e-11) if __name__ == "__main__": From 265a5984deaea3c0d32fc98b9300dfeffc3dcd67 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 26 Sep 2024 09:33:57 -0400 Subject: [PATCH 073/113] assumed all old flops and leaps names with conflicts between design vs. as-flow were design values --- aviary/variable_info/variable_meta_data.py | 130 ++++++++++----------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index 8fcb0f326..be75473e2 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -621,64 +621,6 @@ # TODO: Set initial defaults better # from aviary.utils.aviary_values import AviaryValues -add_meta_data( - Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, - meta_data=_MetaData, - historical_name={"GASP": None, - "FLOPS": 'WTIN.NPB', # ['&DEFINE.WTIN.NPB', 'WTS.NPB'], - "LEAPS1": 'aircraft.inputs.L0_crew_and_payload.business_class_count' - }, - units='unitless', - desc='number of business class passengers that the aircraft is designed to accommodate', - types=int, - option=True, - default_value=0, # AviaryValues.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS), -) - -add_meta_data( - Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, - meta_data=_MetaData, - historical_name={"GASP": None, - "FLOPS": 'WTIN.NPF', # ['&DEFINE.WTIN.NPF', 'WTS.NPF'], - "LEAPS1": 'aircraft.inputs.L0_crew_and_payload.first_class_count' - }, - units='unitless', - desc='number of first class passengers that the aircraft is designed to accommodate', - types=int, - option=True, - default_value=0, -) - -# TODO rename to economy? -add_meta_data( - Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, - meta_data=_MetaData, - historical_name={"GASP": None, - "FLOPS": 'WTIN.NPT', # ['&DEFINE.WTIN.NPT', 'WTS.NPT'], - "LEAPS1": 'aircraft.inputs.L0_crew_and_payload.tourist_class_count' - }, - units='unitless', - desc='number of tourist class passengers that the aircraft is designed to accommodate', - types=int, - option=True, - default_value=0, -) - -add_meta_data( - Aircraft.CrewPayload.Design.NUM_PASSENGERS, - meta_data=_MetaData, - historical_name={"GASP": 'INGASP.PAX', - "FLOPS": None, # ['CSTDAT.NSV', '~WEIGHT.NPASS', '~WTSTAT.NPASS'], - "LEAPS1": 'aircraft.outputs.L0_crew_and_payload.passenger_count' - }, - units='unitless', - desc='total number of passengers that the aircraft is designed to accommodate', - option=True, - default_value=0, - types=int, -) - - add_meta_data( Aircraft.CrewPayload.BAGGAGE_MASS, meta_data=_MetaData, @@ -762,6 +704,64 @@ default_value=0.7, ) +add_meta_data( + Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, + meta_data=_MetaData, + historical_name={"GASP": None, + "FLOPS": 'WTIN.NPB', # ['&DEFINE.WTIN.NPB', 'WTS.NPB'], + "LEAPS1": 'aircraft.inputs.L0_crew_and_payload.business_class_count' + }, + units='unitless', + desc='number of business class passengers that the aircraft is designed to accommodate', + types=int, + option=True, + default_value=0, # AviaryValues.get_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS), +) + +add_meta_data( + Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, + meta_data=_MetaData, + historical_name={"GASP": None, + "FLOPS": 'WTIN.NPF', # ['&DEFINE.WTIN.NPF', 'WTS.NPF'], + "LEAPS1": 'aircraft.inputs.L0_crew_and_payload.first_class_count' + }, + units='unitless', + desc='number of first class passengers that the aircraft is designed to accommodate', + types=int, + option=True, + default_value=0, +) + +add_meta_data( + Aircraft.CrewPayload.Design.NUM_PASSENGERS, + meta_data=_MetaData, + historical_name={"GASP": 'INGASP.PAX', + "FLOPS": None, # ['CSTDAT.NSV', '~WEIGHT.NPASS', '~WTSTAT.NPASS'], + "LEAPS1": 'aircraft.outputs.L0_crew_and_payload.passenger_count' + }, + units='unitless', + desc='total number of passengers that the aircraft is designed to accommodate', + option=True, + default_value=0, + types=int, +) + + +# TODO rename to economy? +add_meta_data( + Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS, + meta_data=_MetaData, + historical_name={"GASP": None, + "FLOPS": 'WTIN.NPT', # ['&DEFINE.WTIN.NPT', 'WTS.NPT'], + "LEAPS1": 'aircraft.inputs.L0_crew_and_payload.tourist_class_count' + }, + units='unitless', + desc='number of tourist class passengers that the aircraft is designed to accommodate', + types=int, + option=True, + default_value=0, +) + add_meta_data( # Note user override # - see also: Aircraft.CrewPayload.FLIGHT_CREW_MASS_SCALER @@ -851,8 +851,8 @@ Aircraft.CrewPayload.NUM_BUSINESS_CLASS, meta_data=_MetaData, historical_name={"GASP": None, - "FLOPS": 'WTIN.NPB', # ['&DEFINE.WTIN.NPB', 'WTS.NPB'], - "LEAPS1": 'aircraft.inputs.L0_crew_and_payload.business_class_count' + "FLOPS": None, # ['&DEFINE.WTIN.NPB', 'WTS.NPB'], + "LEAPS1": None, # 'aircraft.inputs.L0_crew_and_payload.business_class_count' }, units='unitless', desc='number of business class passengers', @@ -865,8 +865,8 @@ Aircraft.CrewPayload.NUM_FIRST_CLASS, meta_data=_MetaData, historical_name={"GASP": None, - "FLOPS": 'WTIN.NPF', # ['&DEFINE.WTIN.NPF', 'WTS.NPF'], - "LEAPS1": 'aircraft.inputs.L0_crew_and_payload.first_class_count' + "FLOPS": None, # ['&DEFINE.WTIN.NPF', 'WTS.NPF'], + "LEAPS1": None, # 'aircraft.inputs.L0_crew_and_payload.first_class_count' }, units='unitless', desc='number of first class passengers', @@ -929,7 +929,7 @@ meta_data=_MetaData, historical_name={"GASP": 'INGASP.PAX', "FLOPS": None, # ['CSTDAT.NSV', '~WEIGHT.NPASS', '~WTSTAT.NPASS'], - "LEAPS1": 'aircraft.outputs.L0_crew_and_payload.passenger_count' + "LEAPS1": None, # 'aircraft.outputs.L0_crew_and_payload.passenger_count' }, units='unitless', desc='total number of passengers', @@ -943,8 +943,8 @@ Aircraft.CrewPayload.NUM_TOURIST_CLASS, meta_data=_MetaData, historical_name={"GASP": None, - "FLOPS": 'WTIN.NPT', # ['&DEFINE.WTIN.NPT', 'WTS.NPT'], - "LEAPS1": 'aircraft.inputs.L0_crew_and_payload.tourist_class_count' + "FLOPS": None, # ['&DEFINE.WTIN.NPT', 'WTS.NPT'], + "LEAPS1": None, # 'aircraft.inputs.L0_crew_and_payload.tourist_class_count' }, units='unitless', desc='number of tourist class passengers', From 8fbce594ba9c4c121711a1dcd7d2e845962b149b Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 26 Sep 2024 10:00:01 -0400 Subject: [PATCH 074/113] test_mass_summation.py working after CrewPayload.NUM_PAX added back into large_single_aisle/V3_bug_fixed_IO.py example aircraft --- .../large_single_aisle_1/V3_bug_fixed_IO.py | 4 + aviary/subsystems/mass/gasp_based/fuel.py | 9 - .../gasp_based/test/test_mass_summation.py | 6274 ++++++++--------- 3 files changed, 3141 insertions(+), 3146 deletions(-) diff --git a/aviary/models/large_single_aisle_1/V3_bug_fixed_IO.py b/aviary/models/large_single_aisle_1/V3_bug_fixed_IO.py index ac83b406e..229a932d0 100644 --- a/aviary/models/large_single_aisle_1/V3_bug_fixed_IO.py +++ b/aviary/models/large_single_aisle_1/V3_bug_fixed_IO.py @@ -14,6 +14,10 @@ val=False, units='unitless') V3_bug_fixed_options.set_val( Aircraft.CrewPayload.Design.NUM_PASSENGERS, val=180, units='unitless') +# we keep CrewPayload.NUM_PASSENGERS here because preprocess_crewpayload is often not run in these +# tests which prevents these values being assigned from Design.NUM_PASSENGERS as would normally happen +V3_bug_fixed_options.set_val( + Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') V3_bug_fixed_options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') V3_bug_fixed_options.set_val( Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') diff --git a/aviary/subsystems/mass/gasp_based/fuel.py b/aviary/subsystems/mass/gasp_based/fuel.py index 650717fb5..df1734897 100644 --- a/aviary/subsystems/mass/gasp_based/fuel.py +++ b/aviary/subsystems/mass/gasp_based/fuel.py @@ -502,15 +502,6 @@ def compute(self, inputs, outputs): - useful_wt ) - print('OEM_wingfuel_mass', OEM_wingfuel_wt / GRAV_ENGLISH_LBM) - print('supporting values') - print('gross_wt_initial', gross_wt_initial) - print('propulsion_wt', propulsion_wt) - print('control_wt', control_wt) - print('struct_wt', struct_wt) - print('fixed_equip_wt', fixed_equip_wt) - print('useful_wt', useful_wt) - OEM_fuel_vol = OEM_wingfuel_wt / rho_fuel design_fuel_vol = (1.0 + fuel_margin / 100.0) * req_fuel_wt / rho_fuel diff --git a/aviary/subsystems/mass/gasp_based/test/test_mass_summation.py b/aviary/subsystems/mass/gasp_based/test/test_mass_summation.py index b8dc00c63..4101e5325 100644 --- a/aviary/subsystems/mass/gasp_based/test/test_mass_summation.py +++ b/aviary/subsystems/mass/gasp_based/test/test_mass_summation.py @@ -162,3143 +162,3143 @@ def test_case1(self): assert_check_partials(partial_data, atol=3e-10, rtol=1e-12) -# class MassSummationTestCase2(unittest.TestCase): -# """ -# This is the large single aisle 1 V3.5 test case. -# All values are from V3.5 output (or hand calculated from the output, and these cases -# are specified). -# """ - -# def setUp(self): - -# options = get_option_defaults() -# options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, -# val=False, units='unitless') -# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') -# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') -# options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') -# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.LandingGear.FIXED_GEAR, -# val=False, units='unitless') -# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, -# val=200, units="lbm") -# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) -# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") -# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) -# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") -# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - -# self.prob = om.Problem() -# self.prob.model.add_subsystem( -# "size", -# SizeGroup( -# aviary_options=options, -# ), -# promotes_inputs=["aircraft:*", "mission:*"], -# promotes_outputs=[ -# "aircraft:*", -# ], -# ) -# self.prob.model.add_subsystem( -# "GASP_mass", -# MassPremission( -# aviary_options=options, -# ), -# promotes=["*"], -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" -# ) -# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Mission.Design.GROSS_MASS, val=175400, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.LOADING, val=128, units="lbf/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" -# ) -# # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") -# # self.prob.model.set_input_defaults( -# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" -# # ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless') -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.FINENESS, 2, units="unitless") - -# self.prob.model.set_input_defaults( -# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.SWEEP, val=0, units='deg' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" -# ) # Based onlarge single aisle 1for updated flaps mass model -# self.prob.model.set_input_defaults( -# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" -# ) # Based onlarge single aisle 1for updated flaps mass model -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.APU.MASS, val=928.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Avionics.MASS, val=1959.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.AntiIcing.MASS, val=551.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Furnishings.MASS, val=11192.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_MARGIN, val=0, units="unitless") - -# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - -# self.prob.setup(check=False, force_alloc_complex=True) - -# def test_case1(self): - -# self.prob.run_model() - -# tol = 5e-4 -# # size values: -# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) -# assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) -# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - -# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 17.49, tol) -# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.41, tol) -# assert_near_equal( -# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1397, tol -# ) # not exact GASP value from the output file, likely due to rounding error - -# # note: this is not the value in the GASP output, because the output calculates -# # them differently. This was calculated by hand. -# assert_near_equal( -# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.578314120156815, tol -# ) -# # note: this is not the value in the GASP output, because the output calculates -# # them differently. This was calculated by hand. -# assert_near_equal( -# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 16.828924591320984, tol -# ) -# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) - -# # fixed mass values: -# assert_near_equal( -# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.35, tol -# ) # calculated by hand - -# # note: fixed_mass.tail.loc_MAC_vtail not included in v3.5 - -# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) -# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) - -# # wing values: -# assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15653, tol) - -# # fuel values: -# # modified from GASP value to account for updated crew mass. GASP value is -# # 79147.2 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 79002.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 79147.2 - -# # calculated by hand, #modified from GASP value to account for updated crew -# # mass. GASP value is 102321.45695930265 -# assert_near_equal( -# self.prob["fuel_mass.fus_mass_full"], 102359.6, tol -# ) -# # modified from GASP value to account for updated crew mass. GASP value is -# # 1769 -# assert_near_equal( -# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1763.1, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1769 - -# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 50186, tol) -# assert_near_equal( -# self.prob[Aircraft.Fuselage.MASS], 18663, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 18787 - -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 43002.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 43147.2 -# assert_near_equal( -# self.prob[Aircraft.Propulsion.MASS], 16133.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 16140 -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS], 43002.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 43147 -# assert_near_equal( -# self.prob["fuel_mass.fuel_mass_min"], 32962.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 33107.2 -# assert_near_equal( -# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 859.68, tol -# ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 862.5603807559726 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1579.36, tol -# ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 1582.2403068511774 -# assert_near_equal( -# self.prob[Aircraft.Design.OPERATING_MASS], 96397.1, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 96253.0 -# # extra_fuel_mass calculated differently in this version, so fuel_mass.fuel_and_oem.payload_mass_max_fuel test not included -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 55725.1, tol -# ) -# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 55725.1, tol) -# assert_near_equal( -# self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol -# ) # always zero when no body tank -# assert_near_equal( -# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol -# ) # always zero when no body tank -# assert_near_equal( -# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol -# ) # always zero when no body tank - -# partial_data = self.prob.check_partials(out_stream=None, method="cs") -# assert_check_partials(partial_data, atol=2e-10, rtol=1e-12) - - -# class MassSummationTestCase3(unittest.TestCase): -# """ -# This is thelarge single aisle 1V3.6 test case with a fuel margin of 0%, a wing loading of 128 psf, and a SLS thrust of 29500 lbf -# All values are from V3.6 output (or hand calculated from the output, and these cases are specified). -# """ - -# def setUp(self): - -# options = get_option_defaults() -# options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, -# val=False, units='unitless') -# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') -# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') -# options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') -# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.LandingGear.FIXED_GEAR, -# val=False, units='unitless') -# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, -# val=200, units="lbm") -# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) -# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") -# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) -# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") -# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - -# self.prob = om.Problem() -# self.prob.model.add_subsystem( -# "size", -# SizeGroup( -# aviary_options=options, -# ), -# promotes_inputs=["aircraft:*", "mission:*"], -# promotes_outputs=[ -# "aircraft:*", -# ], -# ) -# self.prob.model.add_subsystem( -# "GASP_mass", -# MassPremission( -# aviary_options=options, -# ), -# promotes=["*"], -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" -# ) -# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Mission.Design.GROSS_MASS, val=175400, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.LOADING, val=128, units="lbf/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" -# ) -# # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") -# # self.prob.model.set_input_defaults( -# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" -# # ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.FINENESS, 2, units="unitless") - -# self.prob.model.set_input_defaults( -# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.SWEEP, val=0, units='deg' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" -# ) # Based onlarge single aisle 1for updated flaps mass model -# self.prob.model.set_input_defaults( -# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" -# ) # Based on large single aisle 1 for updated flaps mass model -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.APU.MASS, val=928.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Avionics.MASS, val=1959.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.AntiIcing.MASS, val=551.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Furnishings.MASS, val=11192.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_MARGIN, val=0, units="unitless") - -# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - -# self.prob.setup(check=False, force_alloc_complex=True) - -# def test_case1(self): - -# self.prob.run_model() - -# tol = 5e-4 -# # size values: -# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) -# assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) -# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - -# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 17.49, tol) -# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.41, tol) -# assert_near_equal( -# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1397, tol -# ) # not exact value, likely due to rounding error - -# assert_near_equal( -# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.578314120156815, tol -# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. -# assert_near_equal( -# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 16.828924591320984, tol -# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. -# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) - -# # fixed mass values: -# assert_near_equal( -# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol -# ) # calculated by hand - -# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) -# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) - -# # wing values: -# assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15653, tol) - -# # fuel values: -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 79002.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 79147.2 - -# assert_near_equal( -# self.prob["fuel_mass.fus_mass_full"], 102359.6, tol -# ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 102321.45695930265 -# assert_near_equal( -# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1763.1, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 102321.45695930265 - -# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 50186, tol) -# assert_near_equal( -# self.prob[Aircraft.Fuselage.MASS], 18663, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 18787 - -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 43002.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 43147.2 -# assert_near_equal( -# self.prob[Aircraft.Propulsion.MASS], 16133.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 16140 -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS], 43002.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 43147 -# assert_near_equal( -# self.prob["fuel_mass.fuel_mass_min"], 32962.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 33107.2 -# assert_near_equal( -# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 859.68, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 862.6 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1579.36, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1582.2 -# assert_near_equal( -# self.prob[Aircraft.Design.OPERATING_MASS], 96397.1, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 96253.0 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 36000, tol -# ) # note: value came from running the GASP code on my own and printing it out -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 55725.1, tol -# ) -# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 55725.1, tol) -# assert_near_equal( -# self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol -# ) # always zero when no body tank -# assert_near_equal( -# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol -# ) # always zero when no body tank -# assert_near_equal( -# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol -# ) # always zero when no body tank - -# partial_data = self.prob.check_partials(out_stream=None, method="cs") -# assert_check_partials(partial_data, atol=2e-10, rtol=1e-12) - - -# class MassSummationTestCase4(unittest.TestCase): -# """ -# This is the large single aisle 1V3.6 test case with a fuel margin of 10%, a wing loading of 128 psf, and a SLS thrust of 29500 lbf -# All values are from V3.6 output (or hand calculated from the output, and these cases are specified). -# """ - -# def setUp(self): - -# options = get_option_defaults() -# options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, -# val=False, units='unitless') -# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') -# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') -# options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') -# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.LandingGear.FIXED_GEAR, -# val=False, units='unitless') -# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, -# val=200, units="lbm") -# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) -# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") -# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) -# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") -# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - -# self.prob = om.Problem() -# self.prob.model.add_subsystem( -# "size", -# SizeGroup( -# aviary_options=options, -# ), -# promotes_inputs=["aircraft:*", "mission:*"], -# promotes_outputs=[ -# "aircraft:*", -# ], -# ) -# self.prob.model.add_subsystem( -# "GASP_mass", -# MassPremission( -# aviary_options=options, -# ), -# promotes=["*"], -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" -# ) -# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Mission.Design.GROSS_MASS, val=175400, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.LOADING, val=128, units="lbf/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" -# ) -# # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") -# # self.prob.model.set_input_defaults( -# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" -# # ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.FINENESS, 2, units="unitless") - -# self.prob.model.set_input_defaults( -# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.SWEEP, val=0, units='deg' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" -# ) # Based onlarge single aisle 1for updated flaps mass model -# self.prob.model.set_input_defaults( -# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" -# ) # Based on large single aisle 1 for updated flaps mass model -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.APU.MASS, val=928.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Avionics.MASS, val=1959.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.AntiIcing.MASS, val=551.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Furnishings.MASS, val=11192.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_MARGIN, val=10, units="unitless" -# ) - -# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - -# self.prob.setup(check=False, force_alloc_complex=True) - -# def test_case1(self): - -# self.prob.run_model() - -# tol = 5e-4 -# # size values: -# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) -# assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) -# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - -# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 17.49, tol) -# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.41, tol) -# assert_near_equal( -# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1397, tol -# ) # slightly different from GASP value, likely numerical error - -# assert_near_equal( -# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.578314120156815, tol -# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. -# assert_near_equal( -# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 16.828924591320984, tol -# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. -# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) - -# # fixed mass values: -# assert_near_equal( -# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol -# ) # calculated by hand - -# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) -# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) - -# # wing values: -# assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15653, tol) - -# # fuel values: -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 78823.0, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 78966.7 - -# assert_near_equal( -# self.prob["fuel_mass.fus_mass_full"], 102541.4, tol -# ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 102501.95695930265 -# assert_near_equal( -# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1931.3, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1938 - -# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 50198, tol) -# assert_near_equal( -# self.prob[Aircraft.Fuselage.MASS], 18675, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 18799 - -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 42823.0, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 42966.7 -# assert_near_equal( -# self.prob[Aircraft.Propulsion.MASS], 16302.1, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 16309 -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS], 42823.0, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 42967 -# assert_near_equal( -# self.prob["fuel_mass.fuel_mass_min"], 32783.0, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 32926.7 -# assert_near_equal( -# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 941.69, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 944.8 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1575.76, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1578.6 -# assert_near_equal( -# self.prob[Aircraft.Design.OPERATING_MASS], 96577.0, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 96433.0 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 36000, tol -# ) # note: value came from running the GASP code on my own and printing it out -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 55725.1, tol -# ) -# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 55725.1, tol) -# assert_near_equal( -# self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol -# ) # always zero when no body tank -# assert_near_equal( -# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol -# ) # always zero when no body tank -# assert_near_equal( -# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol -# ) # always zero when no body tank - -# partial_data = self.prob.check_partials(out_stream=None, method="cs") -# assert_check_partials(partial_data, atol=2e-10, rtol=1e-12) - - -# class MassSummationTestCase5(unittest.TestCase): -# """ -# This is thelarge single aisle 1V3.6 test case with a fuel margin of 0%, a wing loading of 150 psf, and a SLS thrust of 29500 lbf -# All values are from V3.6 output (or hand calculated from the output, and these cases are specified). -# """ - -# def setUp(self): - -# options = get_option_defaults() -# options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, -# val=False, units='unitless') -# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') -# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') -# options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') -# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.LandingGear.FIXED_GEAR, -# val=False, units='unitless') -# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, -# val=200, units="lbm") -# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) -# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") -# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) -# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") -# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - -# self.prob = om.Problem() -# self.prob.model.add_subsystem( -# "size", -# SizeGroup( -# aviary_options=options, -# ), -# promotes_inputs=["aircraft:*", "mission:*"], -# promotes_outputs=[ -# "aircraft:*", -# ], -# ) -# self.prob.model.add_subsystem( -# "GASP_mass", -# MassPremission( -# aviary_options=options, -# ), -# promotes=["*"], -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" -# ) -# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Mission.Design.GROSS_MASS, val=175400, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.LOADING, val=150, units="lbf/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" -# ) -# # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") -# # self.prob.model.set_input_defaults( -# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" -# # ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.FINENESS, 2, units="unitless") - -# self.prob.model.set_input_defaults( -# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.SWEEP, val=0, units='deg' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" -# ) # Based onlarge single aisle 1for updated flaps mass model -# self.prob.model.set_input_defaults( -# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" -# ) # Based on large single aisle 1 for updated flaps mass model -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.APU.MASS, val=928.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Avionics.MASS, val=1959.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.AntiIcing.MASS, val=551.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Furnishings.MASS, val=11192.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_MARGIN, val=0.0, units="unitless" -# ) - -# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - -# self.prob.setup(check=False, force_alloc_complex=True) - -# def test_case1(self): - -# self.prob.run_model() - -# tol = 5e-4 -# # size values: -# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) -# assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) -# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - -# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 16.16, tol) -# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 15.1, tol) -# assert_near_equal( -# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1394, tol -# ) # slightly different from GASP value, likely rounding error - -# assert_near_equal( -# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 8.848695928254141, tol -# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. -# assert_near_equal( -# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 15.550266681026597, tol -# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. -# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) - -# # fixed mass values: -# assert_near_equal( -# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol -# # self.prob["fixed_mass.main_gear_mass"], 6384.349999999999, tol -# ) # calculated by hand - -# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) -# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) - -# # wing values: -# assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 14631, tol) - -# # fuel values: -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 80475.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 81424.8 - -# assert_near_equal( -# self.prob["fuel_mass.fus_mass_full"], 102510.7, tol -# ) # calculated by hand -# assert_near_equal( -# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1823.4, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1862 - -# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 48941, tol) -# assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 18675, tol) - -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 44472.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 45424.8 -# assert_near_equal( -# self.prob[Aircraft.Propulsion.MASS], 16194.2, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 16233 -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS], 44472.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 45425 -# assert_near_equal( -# self.prob["fuel_mass.fuel_mass_min"], 34432.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 35384.8 -# assert_near_equal( -# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 889.06, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 908.1 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1608.74, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1627.8 -# assert_near_equal( -# self.prob[Aircraft.Design.OPERATING_MASS], 94927.1, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 93975 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 35380.5, tol -# ) # note: value came from running the GASP code on my own and printing it out, #modified from GASP value to account for updated crew mass. GASP value is 34427.4 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 43852.1, tol -# ) -# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 43852.1, tol) -# assert_near_equal( -# self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 620.739, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1572.6 -# assert_near_equal( -# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 12.4092, tol -# ) # slightly different from GASP value, likely a rounding error, #modified from GASP value to account for updated crew mass. GASP value is 31.43 -# assert_near_equal( -# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 620.736, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1572.6 - -# partial_data = self.prob.check_partials(out_stream=None, method="cs") -# assert_check_partials(partial_data, atol=3e-10, rtol=1e-12) - - -# class MassSummationTestCase6(unittest.TestCase): -# """ -# This is thelarge single aisle 1V3.6 test case with a fuel margin of 10%, a wing loading of 150 psf, and a SLS thrust of 29500 lbf -# All values are from V3.6 output (or hand calculated from the output, and these cases are specified). -# """ - -# def setUp(self): - -# options = get_option_defaults() -# options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, -# val=False, units='unitless') -# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') -# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') -# options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') -# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.LandingGear.FIXED_GEAR, -# val=False, units='unitless') -# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, -# val=200, units="lbm") -# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) -# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") -# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) -# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") -# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - -# self.prob = om.Problem() -# self.prob.model.add_subsystem( -# "size", -# SizeGroup( -# aviary_options=options, -# ), -# promotes_inputs=["aircraft:*", "mission:*"], -# promotes_outputs=[ -# "aircraft:*", -# ], -# ) -# self.prob.model.add_subsystem( -# "GASP_mass", -# MassPremission( -# aviary_options=options, -# ), -# promotes=["*"], -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" -# ) -# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Mission.Design.GROSS_MASS, val=175400, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.LOADING, val=150, units="lbf/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" -# ) -# # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") -# # self.prob.model.set_input_defaults( -# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" -# # ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.FINENESS, 2, units="unitless") - -# self.prob.model.set_input_defaults( -# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.SWEEP, val=0, units='deg' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" -# ) # Based onlarge single aisle 1for updated flaps mass model -# self.prob.model.set_input_defaults( -# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" -# ) # Based onlarge single aisle 1for updated flaps mass model -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.APU.MASS, val=928.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Avionics.MASS, val=1959.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.AntiIcing.MASS, val=551.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Furnishings.MASS, val=11192.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_MARGIN, val=10.0, units="unitless" -# ) - -# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - -# self.prob.setup(check=False, force_alloc_complex=True) - -# def test_case1(self): - -# self.prob.run_model() - -# tol = 5e-4 -# # size values: -# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) -# assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) -# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - -# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 16.16, tol) -# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 15.1, tol) -# assert_near_equal( -# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1394, tol -# ) # note: not exact GASP value, likely rounding error - -# assert_near_equal( -# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 8.848695928254141, tol -# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. -# assert_near_equal( -# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 15.550266681026597, tol -# ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. -# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) - -# # fixed mass values: -# assert_near_equal( -# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol -# # self.prob["fixed_mass.main_gear_mass"], 6384.349999999999, tol -# ) # calculated by hand - -# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) -# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) - -# # wing values: -# assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 14631, tol) - -# # fuel values: -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 80029.2, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 80982.7 - -# assert_near_equal( -# self.prob["fuel_mass.fus_mass_full"], 106913.6, tol -# ) # calculated by hand -# assert_near_equal( -# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1985.7, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 2029 - -# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 49222, tol) -# assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 18956, tol) - -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 44029.2, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 44982.7 -# assert_near_equal( -# self.prob[Aircraft.Propulsion.MASS], 16356.5, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 16399 -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS], 44029.2, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 44982.7 -# assert_near_equal( -# self.prob["fuel_mass.fuel_mass_min"], 33989.2, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 34942.7 -# assert_near_equal( -# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 968.21, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 989.2 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1599.87, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1618.9 -# assert_near_equal( -# self.prob[Aircraft.Design.OPERATING_MASS], 95370.8, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 94417 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 35823.0, tol -# ) # note: value came from running the GASP code on my own and printing it out, #modified from GASP value to account for updated crew mass. GASP value is 34879.2 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 43852.1, tol -# ) -# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 43852.1, tol) -# assert_near_equal( -# self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 177.042, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1120.9 -# assert_near_equal( -# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 91.5585, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 112.3 -# assert_near_equal( -# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 4579.96, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 5618.2 - -# partial_data = self.prob.check_partials(out_stream=None, method="cs") -# assert_check_partials(partial_data, atol=3e-10, rtol=1e-12) - - -# class MassSummationTestCase7(unittest.TestCase): -# """ -# This is the Advanced Tube and Wing V3.6 test case -# All values are from V3.6 output, hand calculated from the output, or were printed out after running the code manually. -# Values not directly from the output are labeled as such. -# """ - -# def setUp(self): - -# options = get_option_defaults() -# options.set_val(Aircraft.Wing.HAS_FOLD, val=True, units='unitless') -# options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, -# val=False, units='unitless') -# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') -# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37100, units='ft') -# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.LandingGear.FIXED_GEAR, -# val=False, units='unitless') -# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, -# val=200, units="lbm") -# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) -# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") -# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) -# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") -# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - -# self.prob = om.Problem() -# self.prob.model.add_subsystem( -# "size", -# SizeGroup( -# aviary_options=options, -# ), -# promotes_inputs=["aircraft:*", "mission:*"], -# promotes_outputs=[ -# "aircraft:*", -# ], -# ) -# self.prob.model.add_subsystem( -# "GASP_mass", -# MassPremission( -# aviary_options=options, -# ), -# promotes=["*"], -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.Wing.ASPECT_RATIO, val=11, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" -# ) -# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Mission.Design.GROSS_MASS, val=145388.0, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.LOADING, val=104.50, units="lbf/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALED_SLS_THRUST, val=17000.0, units="lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.WING_FUEL_FRACTION, 0.475, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.09986, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.WETTED_AREA_SCALER, 1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MOMENT_RATIO, 2.1621, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.REFERENCE_DIAMETER, 7.36, units="ft") -# # self.prob.model.set_input_defaults( -# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28620.0, units="lbf" -# # ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALE_FACTOR, 0.594, units='unitless' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.2095, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.FINENESS, 1.715, units="unitless") -# self.prob.model.set_input_defaults(Aircraft.Wing.FOLDED_SPAN, 118, units="ft") - -# self.prob.model.set_input_defaults( -# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CARGO_MASS, val=15970.0, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.SWEEP, val=0, units='deg' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" -# ) # Based onlarge single aisle 1for updated flaps mass model -# self.prob.model.set_input_defaults( -# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" -# ) # Based on large single aisle 1 for updated flaps mass model -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SPECIFIC, val=0.2355, units="lbm/lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.165, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.APU.MASS, val=1014.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.085, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.105, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Avionics.MASS, val=1504.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.AntiIcing.MASS, val=126.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Furnishings.MASS, val=9114.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=0.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=10.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_COEFFICIENT, val=85, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.FOLD_MASS_COEFFICIENT, val=0.2, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' -# ) # note: not actually defined in program, likely an error -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_MARGIN, val=10.0, units="unitless" -# ) - -# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - -# self.prob.setup(check=False, force_alloc_complex=True) - -# def test_case1(self): - -# self.prob.run_model() - -# tol = 5e-4 -# # size values: -# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) -# assert_near_equal(self.prob["size.fuselage.cabin_len"], 61.6, tol) -# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - -# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 16.91, tol) -# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.01, tol) -# assert_near_equal( -# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1132, tol -# ) # slightly different from GASP value, likely a rounding error - -# assert_near_equal( -# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.6498, tol -# # note: value came from running the GASP code on my own and printing it out (GASP output calculates this differently) -# ) -# assert_near_equal( -# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 13.4662, tol -# # note: value came from running the GASP code on my own and printing it out (GASP output calculates this differently) -# ) -# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 11.77, tol) - -# # fixed mass values: -# assert_near_equal( -# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 5219.3076, tol -# # self.prob["fixed_mass.main_gear_mass"], 5219.3076, tol -# ) # note: value came from running the GASP code on my own and printing it out - -# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 8007, tol) -# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1321/2, tol) - -# # wing values: -# assert_near_equal( -# self.prob["wing_mass.isolated_wing_mass"], 13993, tol -# ) # calculated as difference between wing mass and fold mass, not an actual GASP variable - -# # fuel values: -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 63452.2, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 62427.2 - -# assert_near_equal( -# self.prob["fuel_mass.fus_mass_full"], 99396.7, tol -# ) # note: value came from running the GASP code on my own and printing it out -# assert_near_equal( -# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1472.6, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1426 - -# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 45373.4, tol) -# assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 18859.9, tol) - -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 32652.2, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 31627.2 -# assert_near_equal( -# self.prob[Aircraft.Propulsion.MASS], 10800.8, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 10755.0 -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS], 32652.2, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 31627.0 -# assert_near_equal( -# self.prob["fuel_mass.fuel_mass_min"], 16682.2, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 15657.2 -# assert_near_equal( -# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 718.03, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 695.5 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1268.48, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1248.0 -# assert_near_equal( -# self.prob[Aircraft.Design.OPERATING_MASS], 81935.8, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 82961.0 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 30800.0039, tol -# ) # note: value came from running the GASP code on my own and printing it out -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 33892.8, tol -# ) -# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 33892.8, tol) -# assert_near_equal(self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol) -# assert_near_equal( -# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 40.4789, 0.005 -# ) # note: higher tol because slightly different from GASP value, likely numerical issues, #modified from GASP value to account for updated crew mass. GASP value is 17.9 -# assert_near_equal( -# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 2024.70, 0.003 -# ) # note: higher tol because slightly different from GASP value, likely numerical issues, #modified from GASP value to account for updated crew mass. GASP value is 897.2 - -# partial_data = self.prob.check_partials(out_stream=None, method="cs") -# assert_check_partials(partial_data, atol=3e-9, rtol=6e-11) - - -# class MassSummationTestCase8(unittest.TestCase): -# """ -# This is the Trans-sonic Truss-Braced Wing V3.6 test case -# All values are from V3.6 output, hand calculated from the output, or were printed out after running the code manually. -# Values not directly from the output are labeled as such. -# """ - -# def setUp(self): - -# options = get_option_defaults() -# options.set_val(Aircraft.Wing.HAS_FOLD, val=True, units='unitless') -# options.set_val(Aircraft.Wing.HAS_STRUT, val=True, units='unitless') -# options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, -# val=False, units='unitless') -# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') -# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=43000, units='ft') -# options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') -# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.LandingGear.FIXED_GEAR, -# val=False, units='unitless') -# options.set_val(Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, -# val=True, units='unitless') -# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, -# val=200, units="lbm") -# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) -# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") -# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) -# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 44.2, units="inch") -# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - -# self.prob = om.Problem() -# self.prob.model.add_subsystem( -# "size", -# SizeGroup( -# aviary_options=options, -# ), -# promotes_inputs=["aircraft:*", "mission:*"], -# promotes_outputs=[ -# "aircraft:*", -# ], -# ) -# self.prob.model.add_subsystem( -# "GASP_mass", -# MassPremission( -# aviary_options=options, -# ), -# promotes=["*"], -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.13067, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.025, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MOMENT_RATIO, 3.0496, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.REFERENCE_DIAMETER, 7.642, units="ft") -# # self.prob.model.set_input_defaults( -# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28620.0, units="lbf" -# # ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALE_FACTOR, 1.35255, units='unitless' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.2095, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.FINENESS, 1.660, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 6.85, units="ft" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.TAIL_FINENESS, 1.18, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.WETTED_AREA_SCALER, 1.0, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.LOADING, val=87.5, units="lbf/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.APU.MASS, val=1014.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.085, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.105, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Avionics.MASS, val=1504.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.AntiIcing.MASS, val=126.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Furnishings.MASS, val=9114.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=0.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=10.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALED_SLS_THRUST, val=21160.0, units="lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALE_FACTOR, 0.73934, units='unitless' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.WING_FUEL_FRACTION, 0.5625, units="unitless" -# ) -# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=22.47, units="deg") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MOUNTING_TYPE, val=.1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.ASPECT_RATIO, val=19.565, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Strut.ATTACHMENT_LOCATION, val=118, units="ft" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CARGO_MASS, val=15970.0, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SPECIFIC, val=0.2470, units="lbm/lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.MASS_SPECIFIC, val=2.5, units="lbm/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.163, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Engine.WING_LOCATIONS, val=0.2143, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.ASPECT_RATIO, val=0.825, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.SWEEP, val=0, units='deg' -# ) # not in file -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.2076, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.2587, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.11, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" -# ) # Based onlarge single aisle 1for updated flaps mass model -# self.prob.model.set_input_defaults( -# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" -# ) # Based on large single aisle 1 for updated flaps mass model -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.5936, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=30, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" -# ) # not in file -# self.prob.model.set_input_defaults( -# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" -# ) # not in file -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.03390, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_MARGIN, val=10.0, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.060, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_COEFFICIENT, val=89.66, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' -# ) # not in file -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Mission.Design.GROSS_MASS, val=143100.0, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_COEFFICIENT, val=78.94, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.TAPER_RATIO, val=0.346, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.11, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.43, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.066, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.FOLD_MASS_COEFFICIENT, val=0.2, units="unitless" -# ) -# # self.prob.model.set_input_defaults( -# # Aircraft.Strut.AREA, 523.337, units="ft**2" -# # ) # had to calculate by hand -# self.prob.model.set_input_defaults( -# Aircraft.Strut.MASS_COEFFICIENT, 0.238, units="unitless" -# ) - -# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - -# self.prob.setup(check=False, force_alloc_complex=True) - -# def test_case1(self): - -# self.prob.run_model() - -# tol = 5e-4 -# # size values: -# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) -# assert_near_equal(self.prob["size.fuselage.cabin_len"], 93.9, tol) -# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - -# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 13.59, tol) -# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 13.15, tol) -# assert_near_equal( -# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1068, tol -# ) # note:precision came from running code on my own and printing it out - -# assert_near_equal( -# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.381, tol -# ) # note, printed out manually because calculated differently in output subroutine -# assert_near_equal( -# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 20.056, tol -# ) # note, printed out manually because calculated differently in output subroutine -# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 13.19, tol) - -# # fixed mass values: -# assert_near_equal( -# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 4123.4, tol -# # self.prob["fixed_mass.main_gear_mass"], 4123.4, tol -# ) # note:printed out from GASP code - -# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 10453.0, tol) -# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1704.0/2, tol) - -# # wing values: -# assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 14040, tol) -# assert_near_equal(self.prob[Aircraft.Wing.MASS], 18031, tol) - -# # fuel values: -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 60410.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 59372.3 - -# assert_near_equal( -# self.prob["fuel_mass.fus_mass_full"], 97697.5, tol -# ) # note:printed out from GASP code -# assert_near_equal( -# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1954.3, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1886.0 - -# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 43660.4, tol) -# assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 14657.4, tol) - -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 29610.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 28572.3 -# assert_near_equal( -# self.prob[Aircraft.Propulsion.MASS], 14111.2, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 14043.0 -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS], 29610.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 28572.0 -# assert_near_equal( -# self.prob["fuel_mass.fuel_mass_min"], 13640.9, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 12602.3 -# assert_near_equal( -# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 651.15, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 628.3 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1207.68, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1186.9 -# assert_near_equal( -# self.prob[Aircraft.Design.OPERATING_MASS], 82689.1, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 83728.0 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 30800.0, tol -# ) # note:printed out from GASP code -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 31051.6, tol -# ) -# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 31051.6, tol) -# assert_near_equal(self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol) -# assert_near_equal( -# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 30.3942, 0.009 -# ) # note: higher tol because slightly different from GASP value, likely numerical issues, printed out from the GASP code, #modified from GASP value to account for updated crew mass. GASP value is 7.5568 -# assert_near_equal( -# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 1520.384, 0.009 -# ) # note: higher tol because slightly different from GASP value, likely numerical issues, printed out from the GASP code, #modified from GASP value to account for updated crew mass. GASP value is 378.0062 - -# partial_data = self.prob.check_partials(out_stream=None, method="cs") -# assert_check_partials(partial_data, atol=3e-9, rtol=6e-11) - - -# class MassSummationTestCase9(unittest.TestCase): -# """ -# This is the electrified Trans-sonic Truss-Braced Wing V3.6 test case -# All values are from V3.6 output, hand calculated from the output, or were printed out after running the code manually. -# Values not directly from the output are labeled as such. -# """ - -# def setUp(self): - -# options = get_option_defaults() -# options.set_val(Aircraft.Wing.HAS_FOLD, val=True, units='unitless') -# options.set_val(Aircraft.Wing.HAS_STRUT, val=True, units='unitless') -# options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') -# options.set_val(Mission.Design.CRUISE_ALTITUDE, val=43000, units='ft') -# options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') -# options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, -# val=True, units='unitless') -# options.set_val(Aircraft.LandingGear.FIXED_GEAR, -# val=False, units='unitless') -# options.set_val(Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, -# val=True, units='unitless') -# options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, -# val=200, units="lbm") -# options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) -# options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") -# options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) -# options.set_val(Aircraft.Fuselage.SEAT_PITCH, 44.2, units="inch") -# options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") - -# self.prob = om.Problem() -# self.prob.model.add_subsystem( -# "size", -# SizeGroup( -# aviary_options=options, -# ), -# promotes_inputs=["aircraft:*", "mission:*"], -# promotes_outputs=[ -# "aircraft:*", -# ], -# ) -# self.prob.model.add_subsystem( -# "GASP_mass", -# MassPremission( -# aviary_options=options, -# ), -# promotes=["*"], -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MOMENT_RATIO, val=0.13067, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.ASPECT_RATIO, val=4.025, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MOMENT_RATIO, 3.0496, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.REFERENCE_DIAMETER, 8.425, units="ft") -# # self.prob.model.set_input_defaults( -# # Aircraft.Engine.REFERENCE_SLS_THRUST, 28620, units="lbf" -# # ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALE_FACTOR, 0.73934, units='unitless' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.2095, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.FINENESS, 1.569, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 6.85, units="ft" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.TAIL_FINENESS, 1.18, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.WETTED_AREA_SCALER, 1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.LOADING, val=96.10, units="lbf/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.APU.MASS, val=1014.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.085, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.105, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Avionics.MASS, val=1504.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.AntiIcing.MASS, val=126.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Furnishings.MASS, val=9114.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=0.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=10.0, units="lbm") -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") - -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALED_SLS_THRUST, val=23750.0, units="lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.SCALE_FACTOR, 0.82984, units='unitless' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.WING_FUEL_FRACTION, 0.5936, units="unitless" -# ) -# self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=22.47, units="deg") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MOUNTING_TYPE, val=.1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.ASPECT_RATIO, val=19.565, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Strut.ATTACHMENT_LOCATION, val=118.0, units="ft" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.CrewPayload.CARGO_MASS, val=15970.0, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SPECIFIC, val=0.2744, units="lbm/lbf" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Nacelle.MASS_SPECIFIC, val=2.5, units="lbm/ft**2" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.163, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Engine.WING_LOCATIONS, val=0.2143, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.ASPECT_RATIO, val=0.825, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.SWEEP, val=0, units='deg' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.2076, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.2587, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.11, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" -# ) # Based onlarge single aisle 1for updated flaps mass model -# self.prob.model.set_input_defaults( -# Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" -# ) # Based on large single aisle 1 for updated flaps mass model -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.5936, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=30.0, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=1, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MASS_COEFFICIENT, val=0.03390, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_MARGIN, val=0.0, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.060, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_COEFFICIENT, val=96.94, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' -# ) -# self.prob.model.set_input_defaults( -# "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") -# self.prob.model.set_input_defaults( -# Mission.Design.GROSS_MASS, val=166100.0, units="lbm" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.MASS_COEFFICIENT, val=78.94, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.TAPER_RATIO, val=0.346, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.11, units="unitless" -# ) - -# self.prob.model.set_input_defaults( -# Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.43, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.066, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# Aircraft.Wing.FOLD_MASS_COEFFICIENT, val=0.2, units="unitless" -# ) -# # self.prob.model.set_input_defaults( -# # Aircraft.Strut.AREA, 553.1, units="ft**2" -# # ) -# self.prob.model.set_input_defaults( -# Aircraft.Strut.MASS_COEFFICIENT, 0.238, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.motor_power", 830, units="kW" -# ) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.motor_voltage", 850, units="V" -# ) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.max_amp_per_wire", 260, units="A" -# ) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.safety_factor", 1, units="unitless" -# ) # (not in this GASP code) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.wire_area", 0.0015, units="ft**2" -# ) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.rho_wire", 565, units="lbm/ft**3" -# ) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.battery_energy", 6077, units="MJ" -# ) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.motor_eff", 0.98, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.inverter_eff", 0.99, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.transmission_eff", 0.975, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.battery_eff", 0.975, units="unitless" -# ) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.rho_battery", 0.5, units="kW*h/kg" -# ) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.motor_spec_mass", 4, units="hp/lbm" -# ) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.inverter_spec_mass", 12, units="kW/kg" -# ) -# self.prob.model.set_input_defaults( -# "fixed_mass.augmentation.TMS_spec_mass", 0.125, units="lbm/kW" -# ) - -# self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") - -# self.prob.setup(check=False, force_alloc_complex=True) - -# def test_case1(self): - -# self.prob.run_model() - -# tol = 5e-4 -# # size values: -# assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) -# assert_near_equal(self.prob["size.fuselage.cabin_len"], 93.9, tol) -# assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) - -# assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 13.97, tol) -# assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 13.53, tol) -# assert_near_equal( -# self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1068, tol -# ) # (printed out from GASP code to get better precision) - -# assert_near_equal( -# self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.644, tol -# ) # (printed out from GASP code) -# assert_near_equal( -# self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 20.618, tol -# ) # (printed out from GASP code) -# assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.56, tol) - -# # fixed mass values: -# assert_near_equal( -# self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 4786.2, tol -# ) # (printed out from GASP code) - -# assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 13034.0, tol) -# assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 2124.5/2, tol) - -# # wing values: -# assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15895, tol) -# assert_near_equal(self.prob[Aircraft.Wing.MASS], 20461.7, tol) - -# # fuel values: -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 64594.0, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 63707.6 - -# assert_near_equal( -# self.prob["fuel_mass.fus_mass_full"], 108803.9, tol -# ) # (printed out from GASP code), #modified from GASP value to account for updated crew mass. GASP value is 108754.4 -# assert_near_equal( -# self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 2027.6, 0.00055 -# ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 1974.5 - -# assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 49582, tol) -# assert_near_equal( -# self.prob[Aircraft.Fuselage.MASS], 16313.0, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 16436.0 - -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS_REQUIRED], 33794.0, 0.00058 -# ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 32907.6 -# assert_near_equal( -# self.prob[Aircraft.Propulsion.MASS], 26565.2, 0.00054 -# ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 26527.0 -# assert_near_equal( -# self.prob[Mission.Design.FUEL_MASS], 33794.0, 0.00056 -# ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 32908 -# assert_near_equal( -# self.prob["fuel_mass.fuel_mass_min"], 17824.0, 0.0012 -# ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 16937.6 -# assert_near_equal( -# self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 675.58, 0.00051 -# ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 657.9 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1291.31, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 1273.6 -# assert_near_equal( -# self.prob[Aircraft.Design.OPERATING_MASS], 101506.0, tol -# ) # modified from GASP value to account for updated crew mass. GASP value is 102392.0 -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 30800.0, tol -# ) # (printed out from GASP code) -# assert_near_equal( -# self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 35042.1, tol -# ) -# assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 35042.1, tol) -# assert_near_equal(self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol) -# assert_near_equal( -# self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol -# ) -# assert_near_equal( -# self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol -# ) - -# assert_near_equal(self.prob[Aircraft.Electrical.HYBRID_CABLE_LENGTH], 65.6, tol) -# assert_near_equal( -# self.prob["fixed_mass.aug_mass"], 9394.3, 0.0017 -# ) # slightly above tol, due to non-integer number of wires - -# partial_data = self.prob.check_partials(out_stream=None, method="cs") -# assert_check_partials(partial_data, atol=3e-9, rtol=6e-11) +class MassSummationTestCase2(unittest.TestCase): + """ + This is the large single aisle 1 V3.5 test case. + All values are from V3.5 output (or hand calculated from the output, and these cases + are specified). + """ + + def setUp(self): + + options = get_option_defaults() + options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, + val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') + options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') + options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.LandingGear.FIXED_GEAR, + val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, + val=200, units="lbm") + options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) + options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") + options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) + options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") + options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + + self.prob = om.Problem() + self.prob.model.add_subsystem( + "size", + SizeGroup( + aviary_options=options, + ), + promotes_inputs=["aircraft:*", "mission:*"], + promotes_outputs=[ + "aircraft:*", + ], + ) + self.prob.model.add_subsystem( + "GASP_mass", + MassPremission( + aviary_options=options, + ), + promotes=["*"], + ) + + self.prob.model.set_input_defaults( + Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" + ) + self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" + ) + self.prob.model.set_input_defaults( + Mission.Design.GROSS_MASS, val=175400, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.LOADING, val=128, units="lbf/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") + self.prob.model.set_input_defaults( + Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") + self.prob.model.set_input_defaults( + Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" + ) + # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 + self.prob.model.set_input_defaults( + Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") + # self.prob.model.set_input_defaults( + # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" + # ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless') + self.prob.model.set_input_defaults( + Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Nacelle.FINENESS, 2, units="unitless") + + self.prob.model.set_input_defaults( + Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" + ) + + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.SWEEP, val=0, units='deg' + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" + ) # Based onlarge single aisle 1for updated flaps mass model + self.prob.model.set_input_defaults( + Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" + ) # Based onlarge single aisle 1for updated flaps mass model + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.APU.MASS, val=928.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Avionics.MASS, val=1959.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.AntiIcing.MASS, val=551.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Furnishings.MASS, val=11192.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_MARGIN, val=0, units="unitless") + + self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + + self.prob.setup(check=False, force_alloc_complex=True) + + def test_case1(self): + + self.prob.run_model() + + tol = 5e-4 + # size values: + assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) + assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) + assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + + assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 17.49, tol) + assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.41, tol) + assert_near_equal( + self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1397, tol + ) # not exact GASP value from the output file, likely due to rounding error + + # note: this is not the value in the GASP output, because the output calculates + # them differently. This was calculated by hand. + assert_near_equal( + self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.578314120156815, tol + ) + # note: this is not the value in the GASP output, because the output calculates + # them differently. This was calculated by hand. + assert_near_equal( + self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 16.828924591320984, tol + ) + assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) + + # fixed mass values: + assert_near_equal( + self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.35, tol + ) # calculated by hand + + # note: fixed_mass.tail.loc_MAC_vtail not included in v3.5 + + assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) + assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) + + # wing values: + assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15653, tol) + + # fuel values: + # modified from GASP value to account for updated crew mass. GASP value is + # 79147.2 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 79002.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 79147.2 + + # calculated by hand, #modified from GASP value to account for updated crew + # mass. GASP value is 102321.45695930265 + assert_near_equal( + self.prob["fuel_mass.fus_mass_full"], 102359.6, tol + ) + # modified from GASP value to account for updated crew mass. GASP value is + # 1769 + assert_near_equal( + self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1763.1, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1769 + + assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 50186, tol) + assert_near_equal( + self.prob[Aircraft.Fuselage.MASS], 18663, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 18787 + + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS_REQUIRED], 43002.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 43147.2 + assert_near_equal( + self.prob[Aircraft.Propulsion.MASS], 16133.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 16140 + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS], 43002.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 43147 + assert_near_equal( + self.prob["fuel_mass.fuel_mass_min"], 32962.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 33107.2 + assert_near_equal( + self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 859.68, tol + ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 862.5603807559726 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1579.36, tol + ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 1582.2403068511774 + assert_near_equal( + self.prob[Aircraft.Design.OPERATING_MASS], 96397.1, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 96253.0 + # extra_fuel_mass calculated differently in this version, so fuel_mass.fuel_and_oem.payload_mass_max_fuel test not included + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 55725.1, tol + ) + assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 55725.1, tol) + assert_near_equal( + self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol + ) # always zero when no body tank + assert_near_equal( + self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol + ) # always zero when no body tank + assert_near_equal( + self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol + ) # always zero when no body tank + + partial_data = self.prob.check_partials(out_stream=None, method="cs") + assert_check_partials(partial_data, atol=2e-10, rtol=1e-12) + + +class MassSummationTestCase3(unittest.TestCase): + """ + This is thelarge single aisle 1V3.6 test case with a fuel margin of 0%, a wing loading of 128 psf, and a SLS thrust of 29500 lbf + All values are from V3.6 output (or hand calculated from the output, and these cases are specified). + """ + + def setUp(self): + + options = get_option_defaults() + options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, + val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') + options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') + options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.LandingGear.FIXED_GEAR, + val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, + val=200, units="lbm") + options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) + options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") + options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) + options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") + options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + + self.prob = om.Problem() + self.prob.model.add_subsystem( + "size", + SizeGroup( + aviary_options=options, + ), + promotes_inputs=["aircraft:*", "mission:*"], + promotes_outputs=[ + "aircraft:*", + ], + ) + self.prob.model.add_subsystem( + "GASP_mass", + MassPremission( + aviary_options=options, + ), + promotes=["*"], + ) + + self.prob.model.set_input_defaults( + Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" + ) + self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" + ) + self.prob.model.set_input_defaults( + Mission.Design.GROSS_MASS, val=175400, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.LOADING, val=128, units="lbf/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") + self.prob.model.set_input_defaults( + Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") + self.prob.model.set_input_defaults( + Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" + ) + # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 + self.prob.model.set_input_defaults( + Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") + # self.prob.model.set_input_defaults( + # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" + # ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Nacelle.FINENESS, 2, units="unitless") + + self.prob.model.set_input_defaults( + Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" + ) + + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.SWEEP, val=0, units='deg' + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" + ) # Based onlarge single aisle 1for updated flaps mass model + self.prob.model.set_input_defaults( + Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" + ) # Based on large single aisle 1 for updated flaps mass model + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.APU.MASS, val=928.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Avionics.MASS, val=1959.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.AntiIcing.MASS, val=551.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Furnishings.MASS, val=11192.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_MARGIN, val=0, units="unitless") + + self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + + self.prob.setup(check=False, force_alloc_complex=True) + + def test_case1(self): + + self.prob.run_model() + + tol = 5e-4 + # size values: + assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) + assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) + assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + + assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 17.49, tol) + assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.41, tol) + assert_near_equal( + self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1397, tol + ) # not exact value, likely due to rounding error + + assert_near_equal( + self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.578314120156815, tol + ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. + assert_near_equal( + self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 16.828924591320984, tol + ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. + assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) + + # fixed mass values: + assert_near_equal( + self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol + ) # calculated by hand + + assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) + assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) + + # wing values: + assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15653, tol) + + # fuel values: + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 79002.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 79147.2 + + assert_near_equal( + self.prob["fuel_mass.fus_mass_full"], 102359.6, tol + ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 102321.45695930265 + assert_near_equal( + self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1763.1, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 102321.45695930265 + + assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 50186, tol) + assert_near_equal( + self.prob[Aircraft.Fuselage.MASS], 18663, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 18787 + + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS_REQUIRED], 43002.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 43147.2 + assert_near_equal( + self.prob[Aircraft.Propulsion.MASS], 16133.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 16140 + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS], 43002.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 43147 + assert_near_equal( + self.prob["fuel_mass.fuel_mass_min"], 32962.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 33107.2 + assert_near_equal( + self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 859.68, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 862.6 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1579.36, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1582.2 + assert_near_equal( + self.prob[Aircraft.Design.OPERATING_MASS], 96397.1, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 96253.0 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 36000, tol + ) # note: value came from running the GASP code on my own and printing it out + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 55725.1, tol + ) + assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 55725.1, tol) + assert_near_equal( + self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol + ) # always zero when no body tank + assert_near_equal( + self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol + ) # always zero when no body tank + assert_near_equal( + self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol + ) # always zero when no body tank + + partial_data = self.prob.check_partials(out_stream=None, method="cs") + assert_check_partials(partial_data, atol=2e-10, rtol=1e-12) + + +class MassSummationTestCase4(unittest.TestCase): + """ + This is the large single aisle 1V3.6 test case with a fuel margin of 10%, a wing loading of 128 psf, and a SLS thrust of 29500 lbf + All values are from V3.6 output (or hand calculated from the output, and these cases are specified). + """ + + def setUp(self): + + options = get_option_defaults() + options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, + val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') + options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') + options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.LandingGear.FIXED_GEAR, + val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, + val=200, units="lbm") + options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) + options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") + options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) + options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") + options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + + self.prob = om.Problem() + self.prob.model.add_subsystem( + "size", + SizeGroup( + aviary_options=options, + ), + promotes_inputs=["aircraft:*", "mission:*"], + promotes_outputs=[ + "aircraft:*", + ], + ) + self.prob.model.add_subsystem( + "GASP_mass", + MassPremission( + aviary_options=options, + ), + promotes=["*"], + ) + + self.prob.model.set_input_defaults( + Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" + ) + self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" + ) + self.prob.model.set_input_defaults( + Mission.Design.GROSS_MASS, val=175400, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.LOADING, val=128, units="lbf/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") + self.prob.model.set_input_defaults( + Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") + self.prob.model.set_input_defaults( + Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" + ) + # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 + self.prob.model.set_input_defaults( + Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") + # self.prob.model.set_input_defaults( + # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" + # ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Nacelle.FINENESS, 2, units="unitless") + + self.prob.model.set_input_defaults( + Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" + ) + + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.SWEEP, val=0, units='deg' + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" + ) # Based onlarge single aisle 1for updated flaps mass model + self.prob.model.set_input_defaults( + Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" + ) # Based on large single aisle 1 for updated flaps mass model + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.APU.MASS, val=928.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Avionics.MASS, val=1959.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.AntiIcing.MASS, val=551.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Furnishings.MASS, val=11192.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_MARGIN, val=10, units="unitless" + ) + + self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + + self.prob.setup(check=False, force_alloc_complex=True) + + def test_case1(self): + + self.prob.run_model() + + tol = 5e-4 + # size values: + assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) + assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) + assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + + assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 17.49, tol) + assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.41, tol) + assert_near_equal( + self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1397, tol + ) # slightly different from GASP value, likely numerical error + + assert_near_equal( + self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.578314120156815, tol + ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. + assert_near_equal( + self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 16.828924591320984, tol + ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. + assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) + + # fixed mass values: + assert_near_equal( + self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol + ) # calculated by hand + + assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) + assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) + + # wing values: + assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15653, tol) + + # fuel values: + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 78823.0, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 78966.7 + + assert_near_equal( + self.prob["fuel_mass.fus_mass_full"], 102541.4, tol + ) # calculated by hand, #modified from GASP value to account for updated crew mass. GASP value is 102501.95695930265 + assert_near_equal( + self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1931.3, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1938 + + assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 50198, tol) + assert_near_equal( + self.prob[Aircraft.Fuselage.MASS], 18675, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 18799 + + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS_REQUIRED], 42823.0, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 42966.7 + assert_near_equal( + self.prob[Aircraft.Propulsion.MASS], 16302.1, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 16309 + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS], 42823.0, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 42967 + assert_near_equal( + self.prob["fuel_mass.fuel_mass_min"], 32783.0, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 32926.7 + assert_near_equal( + self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 941.69, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 944.8 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1575.76, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1578.6 + assert_near_equal( + self.prob[Aircraft.Design.OPERATING_MASS], 96577.0, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 96433.0 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 36000, tol + ) # note: value came from running the GASP code on my own and printing it out + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 55725.1, tol + ) + assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 55725.1, tol) + assert_near_equal( + self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol + ) # always zero when no body tank + assert_near_equal( + self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol + ) # always zero when no body tank + assert_near_equal( + self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol + ) # always zero when no body tank + + partial_data = self.prob.check_partials(out_stream=None, method="cs") + assert_check_partials(partial_data, atol=2e-10, rtol=1e-12) + + +class MassSummationTestCase5(unittest.TestCase): + """ + This is thelarge single aisle 1V3.6 test case with a fuel margin of 0%, a wing loading of 150 psf, and a SLS thrust of 29500 lbf + All values are from V3.6 output (or hand calculated from the output, and these cases are specified). + """ + + def setUp(self): + + options = get_option_defaults() + options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, + val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') + options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') + options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.LandingGear.FIXED_GEAR, + val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, + val=200, units="lbm") + options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) + options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") + options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) + options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") + options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + + self.prob = om.Problem() + self.prob.model.add_subsystem( + "size", + SizeGroup( + aviary_options=options, + ), + promotes_inputs=["aircraft:*", "mission:*"], + promotes_outputs=[ + "aircraft:*", + ], + ) + self.prob.model.add_subsystem( + "GASP_mass", + MassPremission( + aviary_options=options, + ), + promotes=["*"], + ) + + self.prob.model.set_input_defaults( + Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" + ) + self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" + ) + self.prob.model.set_input_defaults( + Mission.Design.GROSS_MASS, val=175400, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.LOADING, val=150, units="lbf/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") + self.prob.model.set_input_defaults( + Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") + self.prob.model.set_input_defaults( + Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" + ) + # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 + self.prob.model.set_input_defaults( + Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") + # self.prob.model.set_input_defaults( + # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" + # ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Nacelle.FINENESS, 2, units="unitless") + + self.prob.model.set_input_defaults( + Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" + ) + + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.SWEEP, val=0, units='deg' + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" + ) # Based onlarge single aisle 1for updated flaps mass model + self.prob.model.set_input_defaults( + Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" + ) # Based on large single aisle 1 for updated flaps mass model + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.APU.MASS, val=928.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Avionics.MASS, val=1959.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.AntiIcing.MASS, val=551.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Furnishings.MASS, val=11192.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_MARGIN, val=0.0, units="unitless" + ) + + self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + + self.prob.setup(check=False, force_alloc_complex=True) + + def test_case1(self): + + self.prob.run_model() + + tol = 5e-4 + # size values: + assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) + assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) + assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + + assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 16.16, tol) + assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 15.1, tol) + assert_near_equal( + self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1394, tol + ) # slightly different from GASP value, likely rounding error + + assert_near_equal( + self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 8.848695928254141, tol + ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. + assert_near_equal( + self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 15.550266681026597, tol + ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. + assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) + + # fixed mass values: + assert_near_equal( + self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol + # self.prob["fixed_mass.main_gear_mass"], 6384.349999999999, tol + ) # calculated by hand + + assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) + assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) + + # wing values: + assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 14631, tol) + + # fuel values: + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 80475.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 81424.8 + + assert_near_equal( + self.prob["fuel_mass.fus_mass_full"], 102510.7, tol + ) # calculated by hand + assert_near_equal( + self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1823.4, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1862 + + assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 48941, tol) + assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 18675, tol) + + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS_REQUIRED], 44472.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 45424.8 + assert_near_equal( + self.prob[Aircraft.Propulsion.MASS], 16194.2, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 16233 + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS], 44472.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 45425 + assert_near_equal( + self.prob["fuel_mass.fuel_mass_min"], 34432.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 35384.8 + assert_near_equal( + self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 889.06, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 908.1 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1608.74, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1627.8 + assert_near_equal( + self.prob[Aircraft.Design.OPERATING_MASS], 94927.1, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 93975 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 35380.5, tol + ) # note: value came from running the GASP code on my own and printing it out, #modified from GASP value to account for updated crew mass. GASP value is 34427.4 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 43852.1, tol + ) + assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 43852.1, tol) + assert_near_equal( + self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 620.739, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1572.6 + assert_near_equal( + self.prob["fuel_mass.body_tank.extra_fuel_volume"], 12.4092, tol + ) # slightly different from GASP value, likely a rounding error, #modified from GASP value to account for updated crew mass. GASP value is 31.43 + assert_near_equal( + self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 620.736, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1572.6 + + partial_data = self.prob.check_partials(out_stream=None, method="cs") + assert_check_partials(partial_data, atol=3e-10, rtol=1e-12) + + +class MassSummationTestCase6(unittest.TestCase): + """ + This is thelarge single aisle 1V3.6 test case with a fuel margin of 10%, a wing loading of 150 psf, and a SLS thrust of 29500 lbf + All values are from V3.6 output (or hand calculated from the output, and these cases are specified). + """ + + def setUp(self): + + options = get_option_defaults() + options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, + val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') + options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') + options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') + options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.LandingGear.FIXED_GEAR, + val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, + val=200, units="lbm") + options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) + options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") + options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) + options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") + options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + + self.prob = om.Problem() + self.prob.model.add_subsystem( + "size", + SizeGroup( + aviary_options=options, + ), + promotes_inputs=["aircraft:*", "mission:*"], + promotes_outputs=[ + "aircraft:*", + ], + ) + self.prob.model.add_subsystem( + "GASP_mass", + MassPremission( + aviary_options=options, + ), + promotes=["*"], + ) + + self.prob.model.set_input_defaults( + Aircraft.Wing.ASPECT_RATIO, val=10.13, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" + ) + self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.15, units="unitless" + ) + self.prob.model.set_input_defaults( + Mission.Design.GROSS_MASS, val=175400, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.LOADING, val=150, units="lbf/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALED_SLS_THRUST, val=29500.0, units="lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") + self.prob.model.set_input_defaults( + Aircraft.Fuel.WING_FUEL_FRACTION, 0.6, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.145, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") + self.prob.model.set_input_defaults( + Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" + ) + # Adjust WETTED_AREA_SCALER such that WETTED_AREA = 4000.0 + self.prob.model.set_input_defaults( + Aircraft.Fuselage.WETTED_AREA_SCALER, val=0.86215, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MOMENT_RATIO, 2.362, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.REFERENCE_DIAMETER, 5.8, units="ft") + # self.prob.model.set_input_defaults( + # Aircraft.Engine.REFERENCE_SLS_THRUST, 28690, units="lbf" + # ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALE_FACTOR, 1.02823, units='unitless' + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.25, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Nacelle.FINENESS, 2, units="unitless") + + self.prob.model.set_input_defaults( + Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" + ) + + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CARGO_MASS, val=10040, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.SWEEP, val=0, units='deg' + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" + ) # Based onlarge single aisle 1for updated flaps mass model + self.prob.model.set_input_defaults( + Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" + ) # Based onlarge single aisle 1for updated flaps mass model + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units="lbm/lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.14, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.APU.MASS, val=928.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.112, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.14, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Avionics.MASS, val=1959.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.AntiIcing.MASS, val=551.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Furnishings.MASS, val=11192.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=50.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=7.6, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_COEFFICIENT, val=102.5, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_MARGIN, val=10.0, units="unitless" + ) + + self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + + self.prob.setup(check=False, force_alloc_complex=True) + + def test_case1(self): + + self.prob.run_model() + + tol = 5e-4 + # size values: + assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) + assert_near_equal(self.prob["size.fuselage.cabin_len"], 72.1, tol) + assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + + assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 16.16, tol) + assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 15.1, tol) + assert_near_equal( + self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1394, tol + ) # note: not exact GASP value, likely rounding error + + assert_near_equal( + self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 8.848695928254141, tol + ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. + assert_near_equal( + self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 15.550266681026597, tol + ) # note: this is not the value in the GASP output, because the output calculates them differently. This was calculated by hand. + assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.7, tol) + + # fixed mass values: + assert_near_equal( + self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 6384.349999999999, tol + # self.prob["fixed_mass.main_gear_mass"], 6384.349999999999, tol + ) # calculated by hand + + assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 12606, tol) + assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1765/2, tol) + + # wing values: + assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 14631, tol) + + # fuel values: + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 80029.2, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 80982.7 + + assert_near_equal( + self.prob["fuel_mass.fus_mass_full"], 106913.6, tol + ) # calculated by hand + assert_near_equal( + self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1985.7, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 2029 + + assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 49222, tol) + assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 18956, tol) + + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS_REQUIRED], 44029.2, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 44982.7 + assert_near_equal( + self.prob[Aircraft.Propulsion.MASS], 16356.5, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 16399 + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS], 44029.2, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 44982.7 + assert_near_equal( + self.prob["fuel_mass.fuel_mass_min"], 33989.2, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 34942.7 + assert_near_equal( + self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 968.21, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 989.2 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1599.87, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1618.9 + assert_near_equal( + self.prob[Aircraft.Design.OPERATING_MASS], 95370.8, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 94417 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 35823.0, tol + ) # note: value came from running the GASP code on my own and printing it out, #modified from GASP value to account for updated crew mass. GASP value is 34879.2 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 43852.1, tol + ) + assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 43852.1, tol) + assert_near_equal( + self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 177.042, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1120.9 + assert_near_equal( + self.prob["fuel_mass.body_tank.extra_fuel_volume"], 91.5585, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 112.3 + assert_near_equal( + self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 4579.96, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 5618.2 + + partial_data = self.prob.check_partials(out_stream=None, method="cs") + assert_check_partials(partial_data, atol=3e-10, rtol=1e-12) + + +class MassSummationTestCase7(unittest.TestCase): + """ + This is the Advanced Tube and Wing V3.6 test case + All values are from V3.6 output, hand calculated from the output, or were printed out after running the code manually. + Values not directly from the output are labeled as such. + """ + + def setUp(self): + + options = get_option_defaults() + options.set_val(Aircraft.Wing.HAS_FOLD, val=True, units='unitless') + options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, + val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') + options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37100, units='ft') + options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.LandingGear.FIXED_GEAR, + val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, + val=200, units="lbm") + options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) + options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") + options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) + options.set_val(Aircraft.Fuselage.SEAT_PITCH, 29, units="inch") + options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + + self.prob = om.Problem() + self.prob.model.add_subsystem( + "size", + SizeGroup( + aviary_options=options, + ), + promotes_inputs=["aircraft:*", "mission:*"], + promotes_outputs=[ + "aircraft:*", + ], + ) + self.prob.model.add_subsystem( + "GASP_mass", + MassPremission( + aviary_options=options, + ), + promotes=["*"], + ) + + self.prob.model.set_input_defaults( + Aircraft.Wing.ASPECT_RATIO, val=11, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.TAPER_RATIO, val=0.33, units="unitless" + ) + self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=25, units="deg") + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Mission.Design.GROSS_MASS, val=145388.0, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.LOADING, val=104.50, units="lbf/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=0, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.ASPECT_RATIO, val=1.67, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALED_SLS_THRUST, val=17000.0, units="lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.WING_LOCATIONS, val=0.35, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") + self.prob.model.set_input_defaults( + Aircraft.Fuel.WING_FUEL_FRACTION, 0.475, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.189, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.09986, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 9.5, units="ft") + self.prob.model.set_input_defaults( + Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.TAIL_FINENESS, 3, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.WETTED_AREA_SCALER, 1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MOMENT_RATIO, val=0.2307, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MOMENT_RATIO, 2.1621, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.ASPECT_RATIO, val=4.75, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.REFERENCE_DIAMETER, 7.36, units="ft") + # self.prob.model.set_input_defaults( + # Aircraft.Engine.REFERENCE_SLS_THRUST, 28620.0, units="lbf" + # ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALE_FACTOR, 0.594, units='unitless' + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.2095, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Nacelle.FINENESS, 1.715, units="unitless") + self.prob.model.set_input_defaults(Aircraft.Wing.FOLDED_SPAN, 118, units="ft") + + self.prob.model.set_input_defaults( + Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" + ) + + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CARGO_MASS, val=15970.0, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.SWEEP, val=0, units='deg' + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.232, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.289, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.12, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" + ) # Based onlarge single aisle 1for updated flaps mass model + self.prob.model.set_input_defaults( + Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" + ) # Based on large single aisle 1 for updated flaps mass model + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.95, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=16.5, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SPECIFIC, val=0.2355, units="lbm/lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.MASS_SPECIFIC, val=3, units="lbm/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.165, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0.15, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.APU.MASS, val=1014.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.085, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.105, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Avionics.MASS, val=1504.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.AntiIcing.MASS, val=126.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Furnishings.MASS, val=9114.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=0.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=10.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_COEFFICIENT, val=85, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.FOLD_MASS_COEFFICIENT, val=0.2, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_COEFFICIENT, val=128, units="unitless" + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' + ) # note: not actually defined in program, likely an error + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.041, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_MARGIN, val=10.0, units="unitless" + ) + + self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + + self.prob.setup(check=False, force_alloc_complex=True) + + def test_case1(self): + + self.prob.run_model() + + tol = 5e-4 + # size values: + assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) + assert_near_equal(self.prob["size.fuselage.cabin_len"], 61.6, tol) + assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + + assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 16.91, tol) + assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 16.01, tol) + assert_near_equal( + self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1132, tol + ) # slightly different from GASP value, likely a rounding error + + assert_near_equal( + self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.6498, tol + # note: value came from running the GASP code on my own and printing it out (GASP output calculates this differently) + ) + assert_near_equal( + self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 13.4662, tol + # note: value came from running the GASP code on my own and printing it out (GASP output calculates this differently) + ) + assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 11.77, tol) + + # fixed mass values: + assert_near_equal( + self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 5219.3076, tol + # self.prob["fixed_mass.main_gear_mass"], 5219.3076, tol + ) # note: value came from running the GASP code on my own and printing it out + + assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 8007, tol) + assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1321/2, tol) + + # wing values: + assert_near_equal( + self.prob["wing_mass.isolated_wing_mass"], 13993, tol + ) # calculated as difference between wing mass and fold mass, not an actual GASP variable + + # fuel values: + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 63452.2, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 62427.2 + + assert_near_equal( + self.prob["fuel_mass.fus_mass_full"], 99396.7, tol + ) # note: value came from running the GASP code on my own and printing it out + assert_near_equal( + self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1472.6, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1426 + + assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 45373.4, tol) + assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 18859.9, tol) + + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS_REQUIRED], 32652.2, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 31627.2 + assert_near_equal( + self.prob[Aircraft.Propulsion.MASS], 10800.8, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 10755.0 + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS], 32652.2, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 31627.0 + assert_near_equal( + self.prob["fuel_mass.fuel_mass_min"], 16682.2, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 15657.2 + assert_near_equal( + self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 718.03, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 695.5 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1268.48, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1248.0 + assert_near_equal( + self.prob[Aircraft.Design.OPERATING_MASS], 81935.8, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 82961.0 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 30800.0039, tol + ) # note: value came from running the GASP code on my own and printing it out + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 33892.8, tol + ) + assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 33892.8, tol) + assert_near_equal(self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol) + assert_near_equal( + self.prob["fuel_mass.body_tank.extra_fuel_volume"], 40.4789, 0.005 + ) # note: higher tol because slightly different from GASP value, likely numerical issues, #modified from GASP value to account for updated crew mass. GASP value is 17.9 + assert_near_equal( + self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 2024.70, 0.003 + ) # note: higher tol because slightly different from GASP value, likely numerical issues, #modified from GASP value to account for updated crew mass. GASP value is 897.2 + + partial_data = self.prob.check_partials(out_stream=None, method="cs") + assert_check_partials(partial_data, atol=3e-9, rtol=6e-11) + + +class MassSummationTestCase8(unittest.TestCase): + """ + This is the Trans-sonic Truss-Braced Wing V3.6 test case + All values are from V3.6 output, hand calculated from the output, or were printed out after running the code manually. + Values not directly from the output are labeled as such. + """ + + def setUp(self): + + options = get_option_defaults() + options.set_val(Aircraft.Wing.HAS_FOLD, val=True, units='unitless') + options.set_val(Aircraft.Wing.HAS_STRUT, val=True, units='unitless') + options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, + val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') + options.set_val(Mission.Design.CRUISE_ALTITUDE, val=43000, units='ft') + options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') + options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.LandingGear.FIXED_GEAR, + val=False, units='unitless') + options.set_val(Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, + val=True, units='unitless') + options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, + val=200, units="lbm") + options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) + options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") + options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) + options.set_val(Aircraft.Fuselage.SEAT_PITCH, 44.2, units="inch") + options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + + self.prob = om.Problem() + self.prob.model.add_subsystem( + "size", + SizeGroup( + aviary_options=options, + ), + promotes_inputs=["aircraft:*", "mission:*"], + promotes_outputs=[ + "aircraft:*", + ], + ) + self.prob.model.add_subsystem( + "GASP_mass", + MassPremission( + aviary_options=options, + ), + promotes=["*"], + ) + + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MOMENT_RATIO, val=0.13067, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.ASPECT_RATIO, val=4.025, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MOMENT_RATIO, 3.0496, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.REFERENCE_DIAMETER, 7.642, units="ft") + # self.prob.model.set_input_defaults( + # Aircraft.Engine.REFERENCE_SLS_THRUST, 28620.0, units="lbf" + # ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALE_FACTOR, 1.35255, units='unitless' + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.2095, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Nacelle.FINENESS, 1.660, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 6.85, units="ft" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.TAIL_FINENESS, 1.18, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.WETTED_AREA_SCALER, 1.0, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.LOADING, val=87.5, units="lbf/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" + ) + + self.prob.model.set_input_defaults( + Aircraft.APU.MASS, val=1014.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.085, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.105, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Avionics.MASS, val=1504.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.AntiIcing.MASS, val=126.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Furnishings.MASS, val=9114.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=0.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=10.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALED_SLS_THRUST, val=21160.0, units="lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALE_FACTOR, 0.73934, units='unitless' + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.WING_FUEL_FRACTION, 0.5625, units="unitless" + ) + self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=22.47, units="deg") + self.prob.model.set_input_defaults( + Aircraft.Wing.MOUNTING_TYPE, val=.1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.ASPECT_RATIO, val=19.565, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Strut.ATTACHMENT_LOCATION, val=118, units="ft" + ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CARGO_MASS, val=15970.0, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SPECIFIC, val=0.2470, units="lbm/lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.MASS_SPECIFIC, val=2.5, units="lbm/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.163, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Engine.WING_LOCATIONS, val=0.2143, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.ASPECT_RATIO, val=0.825, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.SWEEP, val=0, units='deg' + ) # not in file + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.2076, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.2587, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.11, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" + ) # Based onlarge single aisle 1for updated flaps mass model + self.prob.model.set_input_defaults( + Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" + ) # Based on large single aisle 1 for updated flaps mass model + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.5936, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=30, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=0, units="lbm" + ) # not in file + self.prob.model.set_input_defaults( + Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" + ) # not in file + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MASS_COEFFICIENT, val=0.03390, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_MARGIN, val=10.0, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.060, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_COEFFICIENT, val=89.66, units="unitless" + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' + ) # not in file + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Mission.Design.GROSS_MASS, val=143100.0, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_COEFFICIENT, val=78.94, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.TAPER_RATIO, val=0.346, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.11, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.43, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.066, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.FOLD_MASS_COEFFICIENT, val=0.2, units="unitless" + ) + # self.prob.model.set_input_defaults( + # Aircraft.Strut.AREA, 523.337, units="ft**2" + # ) # had to calculate by hand + self.prob.model.set_input_defaults( + Aircraft.Strut.MASS_COEFFICIENT, 0.238, units="unitless" + ) + + self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + + self.prob.setup(check=False, force_alloc_complex=True) + + def test_case1(self): + + self.prob.run_model() + + tol = 5e-4 + # size values: + assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) + assert_near_equal(self.prob["size.fuselage.cabin_len"], 93.9, tol) + assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + + assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 13.59, tol) + assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 13.15, tol) + assert_near_equal( + self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1068, tol + ) # note:precision came from running code on my own and printing it out + + assert_near_equal( + self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.381, tol + ) # note, printed out manually because calculated differently in output subroutine + assert_near_equal( + self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 20.056, tol + ) # note, printed out manually because calculated differently in output subroutine + assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 13.19, tol) + + # fixed mass values: + assert_near_equal( + self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 4123.4, tol + # self.prob["fixed_mass.main_gear_mass"], 4123.4, tol + ) # note:printed out from GASP code + + assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 10453.0, tol) + assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 1704.0/2, tol) + + # wing values: + assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 14040, tol) + assert_near_equal(self.prob[Aircraft.Wing.MASS], 18031, tol) + + # fuel values: + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 60410.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 59372.3 + + assert_near_equal( + self.prob["fuel_mass.fus_mass_full"], 97697.5, tol + ) # note:printed out from GASP code + assert_near_equal( + self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 1954.3, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1886.0 + + assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 43660.4, tol) + assert_near_equal(self.prob[Aircraft.Fuselage.MASS], 14657.4, tol) + + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS_REQUIRED], 29610.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 28572.3 + assert_near_equal( + self.prob[Aircraft.Propulsion.MASS], 14111.2, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 14043.0 + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS], 29610.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 28572.0 + assert_near_equal( + self.prob["fuel_mass.fuel_mass_min"], 13640.9, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 12602.3 + assert_near_equal( + self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 651.15, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 628.3 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1207.68, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1186.9 + assert_near_equal( + self.prob[Aircraft.Design.OPERATING_MASS], 82689.1, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 83728.0 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 30800.0, tol + ) # note:printed out from GASP code + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 31051.6, tol + ) + assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 31051.6, tol) + assert_near_equal(self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol) + assert_near_equal( + self.prob["fuel_mass.body_tank.extra_fuel_volume"], 30.3942, 0.009 + ) # note: higher tol because slightly different from GASP value, likely numerical issues, printed out from the GASP code, #modified from GASP value to account for updated crew mass. GASP value is 7.5568 + assert_near_equal( + self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 1520.384, 0.009 + ) # note: higher tol because slightly different from GASP value, likely numerical issues, printed out from the GASP code, #modified from GASP value to account for updated crew mass. GASP value is 378.0062 + + partial_data = self.prob.check_partials(out_stream=None, method="cs") + assert_check_partials(partial_data, atol=3e-9, rtol=6e-11) + + +class MassSummationTestCase9(unittest.TestCase): + """ + This is the electrified Trans-sonic Truss-Braced Wing V3.6 test case + All values are from V3.6 output, hand calculated from the output, or were printed out after running the code manually. + Values not directly from the output are labeled as such. + """ + + def setUp(self): + + options = get_option_defaults() + options.set_val(Aircraft.Wing.HAS_FOLD, val=True, units='unitless') + options.set_val(Aircraft.Wing.HAS_STRUT, val=True, units='unitless') + options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') + options.set_val(Mission.Design.CRUISE_ALTITUDE, val=43000, units='ft') + options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') + options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, + val=True, units='unitless') + options.set_val(Aircraft.LandingGear.FIXED_GEAR, + val=False, units='unitless') + options.set_val(Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, + val=True, units='unitless') + options.set_val(Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, + val=200, units="lbm") + options.set_val(Aircraft.Fuselage.NUM_SEATS_ABREAST, 6) + options.set_val(Aircraft.Fuselage.AISLE_WIDTH, 24, units="inch") + options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) + options.set_val(Aircraft.Fuselage.SEAT_PITCH, 44.2, units="inch") + options.set_val(Aircraft.Fuselage.SEAT_WIDTH, 20.2, units="inch") + + self.prob = om.Problem() + self.prob.model.add_subsystem( + "size", + SizeGroup( + aviary_options=options, + ), + promotes_inputs=["aircraft:*", "mission:*"], + promotes_outputs=[ + "aircraft:*", + ], + ) + self.prob.model.add_subsystem( + "GASP_mass", + MassPremission( + aviary_options=options, + ), + promotes=["*"], + ) + + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.TAPER_RATIO, val=0.352, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MOMENT_RATIO, val=0.13067, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.ASPECT_RATIO, val=4.025, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MOMENT_RATIO, 3.0496, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.TAPER_RATIO, val=0.801, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.REFERENCE_DIAMETER, 8.425, units="ft") + # self.prob.model.set_input_defaults( + # Aircraft.Engine.REFERENCE_SLS_THRUST, 28620, units="lbf" + # ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALE_FACTOR, 0.73934, units='unitless' + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.CORE_DIAMETER_RATIO, 1.2095, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Nacelle.FINENESS, 1.569, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units="ft" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.NOSE_FINENESS, 1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PILOT_COMPARTMENT_LENGTH, 6.85, units="ft" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.TAIL_FINENESS, 1.18, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.WETTED_AREA_SCALER, 1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.LOADING, val=96.10, units="lbf/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_TIP, 0.1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.MAX_STRUCTURAL_SPEED, val=402.5, units="mi/h" + ) + + self.prob.model.set_input_defaults( + Aircraft.APU.MASS, val=1014.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Instruments.MASS_COEFFICIENT, val=0.0736, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.FLIGHT_CONTROL_MASS_COEFFICIENT, val=0.085, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Hydraulics.GEAR_MASS_COEFFICIENT, val=0.105, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Avionics.MASS, val=1504.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.AirConditioning.MASS_COEFFICIENT, val=1.65, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.AntiIcing.MASS, val=126.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Furnishings.MASS, val=9114.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.PASSENGER_SERVICE_MASS_PER_PASSENGER, val=5.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.WATER_MASS_PER_OCCUPANT, val=3.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Design.EMERGENCY_EQUIPMENT_MASS, val=0.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CATERING_ITEMS_MASS_PER_PASSENGER, val=10.0, units="lbm") + self.prob.model.set_input_defaults( + Aircraft.Fuel.UNUSABLE_FUEL_MASS_COEFFICIENT, val=12.0, units="unitless") + + self.prob.model.set_input_defaults( + Aircraft.Fuselage.PRESSURE_DIFFERENTIAL, val=7.5, units="psi") + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALED_SLS_THRUST, val=23750.0, units="lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.SCALE_FACTOR, 0.82984, units='unitless' + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.WING_FUEL_FRACTION, 0.5936, units="unitless" + ) + self.prob.model.set_input_defaults(Aircraft.Wing.SWEEP, val=22.47, units="deg") + self.prob.model.set_input_defaults( + Aircraft.Wing.MOUNTING_TYPE, val=.1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.ASPECT_RATIO, val=19.565, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Strut.ATTACHMENT_LOCATION, val=118.0, units="ft" + ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.CARGO_MASS, val=15970.0, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SPECIFIC, val=0.2744, units="lbm/lbf" + ) + self.prob.model.set_input_defaults( + Aircraft.Nacelle.MASS_SPECIFIC, val=2.5, units="lbm/ft**2" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.PYLON_FACTOR, val=1.25, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.ADDITIONAL_MASS_FRACTION, val=0.163, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Propulsion.MISC_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Engine.WING_LOCATIONS, val=0.2143, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_LOCATION, val=0, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.ASPECT_RATIO, val=0.825, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.SWEEP, val=0, units='deg' + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_COEFFICIENT, val=0.2076, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TAIL_HOOK_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_COEFFICIENT, val=0.2587, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.THICKNESS_TO_CHORD, val=0.11, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.THICKNESS_TO_CHORD, val=0.1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.HIGH_LIFT_MASS_COEFFICIENT, val=1.9, units="unitless" + ) # Based onlarge single aisle 1for updated flaps mass model + self.prob.model.set_input_defaults( + Mission.Landing.LIFT_COEFFICIENT_MAX, val=2.817, units="unitless" + ) # Based on large single aisle 1 for updated flaps mass model + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_COEFFICIENT, val=0.5936, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.COCKPIT_CONTROL_MASS_COEFFICIENT, val=30.0, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS, val=1, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.Controls.COCKPIT_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Wing.SURFACE_CONTROL_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.STABILITY_AUGMENTATION_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Aircraft.Controls.TOTAL_MASS, val=0, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MASS_COEFFICIENT, val=0.03390, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.DENSITY, val=6.687, units="lbm/galUS" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_MARGIN, val=0.0, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, val=0.060, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_COEFFICIENT, val=96.94, units="unitless" + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.pylon_len", val=0, units='ft' + ) + self.prob.model.set_input_defaults( + "fuel_mass.fus_and_struct.MAT", val=0, units='lbm' + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Fuselage.MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.LandingGear.TOTAL_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Engine.POD_MASS_SCALER, val=1, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Design.STRUCTURAL_MASS_INCREMENT, val=0, units='lbm' + ) + self.prob.model.set_input_defaults( + Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, val=1, units="unitless") + self.prob.model.set_input_defaults( + Mission.Design.GROSS_MASS, val=166100.0, units="lbm" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.MASS_COEFFICIENT, val=78.94, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.TAPER_RATIO, val=0.346, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.THICKNESS_TO_CHORD_ROOT, val=0.11, units="unitless" + ) + + self.prob.model.set_input_defaults( + Aircraft.HorizontalTail.VOLUME_COEFFICIENT, val=1.43, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.VerticalTail.VOLUME_COEFFICIENT, 0.066, units="unitless" + ) + self.prob.model.set_input_defaults( + Aircraft.Wing.FOLD_MASS_COEFFICIENT, val=0.2, units="unitless" + ) + # self.prob.model.set_input_defaults( + # Aircraft.Strut.AREA, 553.1, units="ft**2" + # ) + self.prob.model.set_input_defaults( + Aircraft.Strut.MASS_COEFFICIENT, 0.238, units="unitless" + ) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.motor_power", 830, units="kW" + ) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.motor_voltage", 850, units="V" + ) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.max_amp_per_wire", 260, units="A" + ) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.safety_factor", 1, units="unitless" + ) # (not in this GASP code) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.wire_area", 0.0015, units="ft**2" + ) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.rho_wire", 565, units="lbm/ft**3" + ) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.battery_energy", 6077, units="MJ" + ) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.motor_eff", 0.98, units="unitless" + ) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.inverter_eff", 0.99, units="unitless" + ) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.transmission_eff", 0.975, units="unitless" + ) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.battery_eff", 0.975, units="unitless" + ) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.rho_battery", 0.5, units="kW*h/kg" + ) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.motor_spec_mass", 4, units="hp/lbm" + ) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.inverter_spec_mass", 12, units="kW/kg" + ) + self.prob.model.set_input_defaults( + "fixed_mass.augmentation.TMS_spec_mass", 0.125, units="lbm/kW" + ) + + self.prob.model.set_input_defaults(Aircraft.Wing.SPAN, val=0.0, units="ft") + + self.prob.setup(check=False, force_alloc_complex=True) + + def test_case1(self): + + self.prob.run_model() + + tol = 5e-4 + # size values: + assert_near_equal(self.prob["size.fuselage.cabin_height"], 13.1, tol) + assert_near_equal(self.prob["size.fuselage.cabin_len"], 93.9, tol) + assert_near_equal(self.prob["size.fuselage.nose_height"], 8.6, tol) + + assert_near_equal(self.prob[Aircraft.Wing.CENTER_CHORD], 13.97, tol) + assert_near_equal(self.prob[Aircraft.Wing.ROOT_CHORD], 13.53, tol) + assert_near_equal( + self.prob[Aircraft.Wing.THICKNESS_TO_CHORD_UNWEIGHTED], 0.1068, tol + ) # (printed out from GASP code to get better precision) + + assert_near_equal( + self.prob[Aircraft.HorizontalTail.AVERAGE_CHORD], 9.644, tol + ) # (printed out from GASP code) + assert_near_equal( + self.prob[Aircraft.VerticalTail.AVERAGE_CHORD], 20.618, tol + ) # (printed out from GASP code) + assert_near_equal(self.prob[Aircraft.Nacelle.AVG_LENGTH], 14.56, tol) + + # fixed mass values: + assert_near_equal( + self.prob[Aircraft.LandingGear.MAIN_GEAR_MASS], 4786.2, tol + ) # (printed out from GASP code) + + assert_near_equal(self.prob[Aircraft.Propulsion.TOTAL_ENGINE_MASS], 13034.0, tol) + assert_near_equal(self.prob[Aircraft.Engine.ADDITIONAL_MASS], 2124.5/2, tol) + + # wing values: + assert_near_equal(self.prob["wing_mass.isolated_wing_mass"], 15895, tol) + assert_near_equal(self.prob[Aircraft.Wing.MASS], 20461.7, tol) + + # fuel values: + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_wingfuel_mass"], 64594.0, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 63707.6 + + assert_near_equal( + self.prob["fuel_mass.fus_mass_full"], 108803.9, tol + ) # (printed out from GASP code), #modified from GASP value to account for updated crew mass. GASP value is 108754.4 + assert_near_equal( + self.prob[Aircraft.Fuel.FUEL_SYSTEM_MASS], 2027.6, 0.00055 + ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 1974.5 + + assert_near_equal(self.prob[Aircraft.Design.STRUCTURE_MASS], 49582, tol) + assert_near_equal( + self.prob[Aircraft.Fuselage.MASS], 16313.0, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 16436.0 + + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS_REQUIRED], 33794.0, 0.00058 + ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 32907.6 + assert_near_equal( + self.prob[Aircraft.Propulsion.MASS], 26565.2, 0.00054 + ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 26527.0 + assert_near_equal( + self.prob[Mission.Design.FUEL_MASS], 33794.0, 0.00056 + ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 32908 + assert_near_equal( + self.prob["fuel_mass.fuel_mass_min"], 17824.0, 0.0012 + ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 16937.6 + assert_near_equal( + self.prob[Aircraft.Fuel.WING_VOLUME_DESIGN], 675.58, 0.00051 + ) # slightly above tol, due to non-integer number of wires, #modified from GASP value to account for updated crew mass. GASP value is 657.9 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.OEM_fuel_vol"], 1291.31, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 1273.6 + assert_near_equal( + self.prob[Aircraft.Design.OPERATING_MASS], 101506.0, tol + ) # modified from GASP value to account for updated crew mass. GASP value is 102392.0 + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.payload_mass_max_fuel"], 30800.0, tol + ) # (printed out from GASP code) + assert_near_equal( + self.prob["fuel_mass.fuel_and_oem.volume_wingfuel_mass"], 35042.1, tol + ) + assert_near_equal(self.prob["fuel_mass.max_wingfuel_mass"], 35042.1, tol) + assert_near_equal(self.prob[Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY], 0, tol) + assert_near_equal( + self.prob["fuel_mass.body_tank.extra_fuel_volume"], 0, tol + ) + assert_near_equal( + self.prob["fuel_mass.body_tank.max_extra_fuel_mass"], 0, tol + ) + + assert_near_equal(self.prob[Aircraft.Electrical.HYBRID_CABLE_LENGTH], 65.6, tol) + assert_near_equal( + self.prob["fixed_mass.aug_mass"], 9394.3, 0.0017 + ) # slightly above tol, due to non-integer number of wires + + partial_data = self.prob.check_partials(out_stream=None, method="cs") + assert_check_partials(partial_data, atol=3e-9, rtol=6e-11) if __name__ == "__main__": From 2107ea5151d47f495e0422163210574c07fd12bc Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 26 Sep 2024 10:24:32 -0400 Subject: [PATCH 075/113] added Design.NUM_PASSENGERS for many test_mass_summation.py tests --- .../mass/gasp_based/test/test_mass_summation.py | 16 ++++++++++++++++ aviary/utils/preprocessors.py | 4 ++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/aviary/subsystems/mass/gasp_based/test/test_mass_summation.py b/aviary/subsystems/mass/gasp_based/test/test_mass_summation.py index 4101e5325..b1924dac6 100644 --- a/aviary/subsystems/mass/gasp_based/test/test_mass_summation.py +++ b/aviary/subsystems/mass/gasp_based/test/test_mass_summation.py @@ -174,6 +174,8 @@ def setUp(self): options = get_option_defaults() options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') @@ -563,6 +565,8 @@ def setUp(self): options = get_option_defaults() options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') @@ -943,6 +947,8 @@ def setUp(self): options = get_option_defaults() options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') @@ -1324,6 +1330,8 @@ def setUp(self): options = get_option_defaults() options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') @@ -1704,6 +1712,8 @@ def setUp(self): options = get_option_defaults() options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=180, units='unitless') options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=180, units='unitless') options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37500, units='ft') options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') @@ -2086,6 +2096,8 @@ def setUp(self): options.set_val(Aircraft.Wing.HAS_FOLD, val=True, units='unitless') options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=154, units='unitless') options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') options.set_val(Mission.Design.CRUISE_ALTITUDE, val=37100, units='ft') options.set_val(Aircraft.Wing.FOLD_DIMENSIONAL_LOCATION_SPECIFIED, @@ -2474,6 +2486,8 @@ def setUp(self): options.set_val(Aircraft.Wing.HAS_STRUT, val=True, units='unitless') options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, val=False, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=154, units='unitless') options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') options.set_val(Mission.Design.CRUISE_ALTITUDE, val=43000, units='ft') options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') @@ -2868,6 +2882,8 @@ def setUp(self): options = get_option_defaults() options.set_val(Aircraft.Wing.HAS_FOLD, val=True, units='unitless') options.set_val(Aircraft.Wing.HAS_STRUT, val=True, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, + val=154, units='unitless') options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, val=154, units='unitless') options.set_val(Mission.Design.CRUISE_ALTITUDE, val=43000, units='ft') options.set_val(Aircraft.Wing.CHOOSE_FOLD_LOCATION, val=False, units='unitless') diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 3e6e1413c..29481c3f2 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -139,8 +139,8 @@ def preprocess_crewpayload(aviary_options: AviaryValues): raise om.AnalysisError( f"ERROR: In preprocesssors.py: NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)}) is larger than the number of seats set by Design.NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS)}) .") - dnp = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) - print(f"INFO: In preprocessor.py: Aircraft has been designed for {dnp} passengers.") + # dnp = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) + # print(f"INFO: In preprocessor.py: Aircraft has been designed for {dnp} passengers.") if Aircraft.CrewPayload.NUM_FLIGHT_ATTENDANTS not in aviary_options: flight_attendants_count = 0 # assume no passengers From ab89254172bc7092fbe0c47183b300ba2fdf6f51 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 26 Sep 2024 11:25:58 -0400 Subject: [PATCH 076/113] fortran_to_aviary fixes --- .../models/large_single_aisle_1/large_single_aisle_1_GwGm.csv | 2 +- aviary/variable_info/variable_meta_data.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aviary/models/large_single_aisle_1/large_single_aisle_1_GwGm.csv b/aviary/models/large_single_aisle_1/large_single_aisle_1_GwGm.csv index bcdd6d0a0..7a0a23fd2 100644 --- a/aviary/models/large_single_aisle_1/large_single_aisle_1_GwGm.csv +++ b/aviary/models/large_single_aisle_1/large_single_aisle_1_GwGm.csv @@ -9,7 +9,7 @@ aircraft:controls:stability_augmentation_system_mass,0,lbm aircraft:controls:stability_augmentation_system_mass_scaler,1,unitless aircraft:crew_and_payload:cargo_mass,10040,lbm aircraft:crew_and_payload:catering_items_mass_per_passenger,7.6,lbm -aircraft:crew_and_payload:num_passengers,180,unitless +aircraft:crew_and_payload:design:num_passengers,180,unitless aircraft:crew_and_payload:passenger_mass_with_bags,200,lbm aircraft:crew_and_payload:passenger_service_mass_per_passenger,5,lbm aircraft:crew_and_payload:water_mass_per_occupant,3,lbm diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index be75473e2..d8af7858c 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -927,7 +927,7 @@ add_meta_data( Aircraft.CrewPayload.NUM_PASSENGERS, meta_data=_MetaData, - historical_name={"GASP": 'INGASP.PAX', + historical_name={"GASP": None, # 'INGASP.PAX' here we assume previous studies were changing Design.num_pax not as-flown "FLOPS": None, # ['CSTDAT.NSV', '~WEIGHT.NPASS', '~WTSTAT.NPASS'], "LEAPS1": None, # 'aircraft.outputs.L0_crew_and_payload.passenger_count' }, From 38ba1933729efeba95de240a03c7b416c209c0a8 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 26 Sep 2024 11:27:40 -0400 Subject: [PATCH 077/113] fortran to aviary fixes --- aviary/models/small_single_aisle/small_single_aisle_GwGm.csv | 2 +- aviary/variable_info/variable_meta_data.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aviary/models/small_single_aisle/small_single_aisle_GwGm.csv b/aviary/models/small_single_aisle/small_single_aisle_GwGm.csv index df8ea4f96..505465acd 100644 --- a/aviary/models/small_single_aisle/small_single_aisle_GwGm.csv +++ b/aviary/models/small_single_aisle/small_single_aisle_GwGm.csv @@ -9,7 +9,7 @@ aircraft:controls:stability_augmentation_system_mass,0,lbm aircraft:controls:stability_augmentation_system_mass_scaler,1,unitless aircraft:crew_and_payload:cargo_mass,8598,lbm aircraft:crew_and_payload:catering_items_mass_per_passenger,6,lbm -aircraft:crew_and_payload:num_passengers,96,unitless +aircraft:crew_and_payload:design:num_passengers,96,unitless aircraft:crew_and_payload:passenger_mass_with_bags,210,lbm aircraft:crew_and_payload:passenger_service_mass_per_passenger,7.6,lbm aircraft:crew_and_payload:water_mass_per_occupant,3,lbm diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index d8af7858c..21c920c2f 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -735,7 +735,7 @@ add_meta_data( Aircraft.CrewPayload.Design.NUM_PASSENGERS, meta_data=_MetaData, - historical_name={"GASP": 'INGASP.PAX', + historical_name={"GASP": 'INGASP.PAX', # number of passenger seats excluding crew "FLOPS": None, # ['CSTDAT.NSV', '~WEIGHT.NPASS', '~WTSTAT.NPASS'], "LEAPS1": 'aircraft.outputs.L0_crew_and_payload.passenger_count' }, From b3357a0499ff4cb0b8811051e4e0e562f0b75387 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 26 Sep 2024 11:40:51 -0400 Subject: [PATCH 078/113] resolved test_fortran_to_aviary alphabetical ordering required in .csv --- .../models/N3CC/N3CC_generic_low_speed_polars_FLOPSinp.csv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/aviary/models/N3CC/N3CC_generic_low_speed_polars_FLOPSinp.csv b/aviary/models/N3CC/N3CC_generic_low_speed_polars_FLOPSinp.csv index e48a34fdc..6244f4015 100644 --- a/aviary/models/N3CC/N3CC_generic_low_speed_polars_FLOPSinp.csv +++ b/aviary/models/N3CC/N3CC_generic_low_speed_polars_FLOPSinp.csv @@ -7,16 +7,16 @@ aircraft:canard:laminar_flow_lower,0,unitless aircraft:canard:laminar_flow_upper,0,unitless aircraft:canard:mass_scaler,1,unitless aircraft:crew_and_payload:baggage_mass_per_passenger,35,lbm +aircraft:crew_and_payload:design:num_business_class,20,unitless +aircraft:crew_and_payload:design:num_first_class,16,unitless +aircraft:crew_and_payload:design:num_tourist_class,118,unitless aircraft:crew_and_payload:flight_crew_mass_scaler,1,unitless aircraft:crew_and_payload:mass_per_passenger,165,lbm aircraft:crew_and_payload:misc_cargo,0,lbm aircraft:crew_and_payload:non_flight_crew_mass_scaler,1,unitless -aircraft:crew_and_payload:num_business_class,20,unitless -aircraft:crew_and_payload:num_first_class,16,unitless aircraft:crew_and_payload:num_flight_attendants,-1,unitless aircraft:crew_and_payload:num_flight_crew,-1,unitless aircraft:crew_and_payload:num_galley_crew,-1,unitless -aircraft:crew_and_payload:num_tourist_class,118,unitless aircraft:crew_and_payload:passenger_service_mass_scaler,1,unitless aircraft:crew_and_payload:wing_cargo,0,lbm aircraft:design:base_area,0,ft**2 From 62bceeace8d5d249373cbe91af361a6d4bc9eb27 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 26 Sep 2024 11:44:29 -0400 Subject: [PATCH 079/113] pep8 --- aviary/subsystems/mass/flops_based/electrical.py | 6 ++++-- aviary/subsystems/mass/flops_based/furnishings.py | 12 ++++++++---- .../subsystems/mass/flops_based/passenger_service.py | 6 ++++-- .../mass/gasp_based/equipment_and_useful_load.py | 6 ++++-- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/aviary/subsystems/mass/flops_based/electrical.py b/aviary/subsystems/mass/flops_based/electrical.py index 90f050cbc..1430945f7 100644 --- a/aviary/subsystems/mass/flops_based/electrical.py +++ b/aviary/subsystems/mass/flops_based/electrical.py @@ -33,7 +33,8 @@ def compute(self, inputs, outputs): options: AviaryValues = self.options['aviary_options'] nfuse = options.get_val(Aircraft.Fuselage.NUM_FUSELAGES) ncrew = options.get_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW) - npass = options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') + npass = options.get_val( + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') length = inputs[Aircraft.Fuselage.LENGTH] width = inputs[Aircraft.Fuselage.MAX_WIDTH] num_eng = options.get_val(Aircraft.Propulsion.TOTAL_NUM_ENGINES) @@ -48,7 +49,8 @@ def compute_partials(self, inputs, J): options: AviaryValues = self.options['aviary_options'] nfuse = options.get_val(Aircraft.Fuselage.NUM_FUSELAGES) ncrew = options.get_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW) - npass = options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') + npass = options.get_val( + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') length = inputs[Aircraft.Fuselage.LENGTH] width = inputs[Aircraft.Fuselage.MAX_WIDTH] num_eng = options.get_val(Aircraft.Propulsion.TOTAL_NUM_ENGINES) diff --git a/aviary/subsystems/mass/flops_based/furnishings.py b/aviary/subsystems/mass/flops_based/furnishings.py index 6146caffa..3dfa8416b 100644 --- a/aviary/subsystems/mass/flops_based/furnishings.py +++ b/aviary/subsystems/mass/flops_based/furnishings.py @@ -38,7 +38,8 @@ def compute( aviary_options: AviaryValues = self.options['aviary_options'] flight_crew_count = aviary_options.get_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW) - first_class_count = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) + first_class_count = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) business_class_count = aviary_options.get_val( Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) @@ -67,7 +68,8 @@ def compute_partials(self, inputs, J): aviary_options: AviaryValues = self.options['aviary_options'] flight_crew_count = aviary_options.get_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW) - first_class_count = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) + first_class_count = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) business_class_count = aviary_options.get_val( Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) @@ -135,7 +137,8 @@ def compute( aviary_options: AviaryValues = self.options['aviary_options'] flight_crew_count = aviary_options.get_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW) - first_class_count = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) + first_class_count = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) business_class_count = aviary_options.get_val( Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) @@ -173,7 +176,8 @@ def compute_partials(self, inputs, J): aviary_options: AviaryValues = self.options['aviary_options'] flight_crew_count = aviary_options.get_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW) - first_class_count = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) + first_class_count = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) business_class_count = aviary_options.get_val( Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) diff --git a/aviary/subsystems/mass/flops_based/passenger_service.py b/aviary/subsystems/mass/flops_based/passenger_service.py index 0559c6276..7d1688085 100644 --- a/aviary/subsystems/mass/flops_based/passenger_service.py +++ b/aviary/subsystems/mass/flops_based/passenger_service.py @@ -46,7 +46,8 @@ def setup_partials(self): def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): aviary_options: AviaryValues = self.options['aviary_options'] - first_class_count = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) + first_class_count = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) business_class_count = \ aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) @@ -72,7 +73,8 @@ def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): def compute_partials(self, inputs, J, discrete_inputs=None): aviary_options: AviaryValues = self.options['aviary_options'] - first_class_count = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) + first_class_count = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_FIRST_CLASS) business_class_count = \ aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) diff --git a/aviary/subsystems/mass/gasp_based/equipment_and_useful_load.py b/aviary/subsystems/mass/gasp_based/equipment_and_useful_load.py index 2749e2cb5..3d4f1972d 100644 --- a/aviary/subsystems/mass/gasp_based/equipment_and_useful_load.py +++ b/aviary/subsystems/mass/gasp_based/equipment_and_useful_load.py @@ -77,7 +77,8 @@ def setup(self): def compute(self, inputs, outputs): options: AviaryValues = self.options["aviary_options"] - PAX = options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') + PAX = options.get_val( + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') smooth = options.get_val( Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, units='unitless') @@ -388,7 +389,8 @@ def compute(self, inputs, outputs): def compute_partials(self, inputs, partials): options = self.options['aviary_options'] - PAX = options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') + PAX = options.get_val( + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') smooth = options.get_val( Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, units='unitless') gross_wt_initial = inputs[Mission.Design.GROSS_MASS] * GRAV_ENGLISH_LBM From 6af83b6a059d25629356ec517deb4cdb374b7063 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 26 Sep 2024 11:48:36 -0400 Subject: [PATCH 080/113] pep8 2! --- aviary/variable_info/variables.py | 1 + 1 file changed, 1 insertion(+) diff --git a/aviary/variable_info/variables.py b/aviary/variable_info/variables.py index 87e6ece12..15350cfa4 100644 --- a/aviary/variable_info/variables.py +++ b/aviary/variable_info/variables.py @@ -127,6 +127,7 @@ class CrewPayload: TOTAL_PAYLOAD_MASS = 'aircraft:crew_and_payload:total_payload_mass' WATER_MASS_PER_OCCUPANT = 'aircraft:crew_and_payload:water_mass_per_occupant' WING_CARGO = 'aircraft:crew_and_payload:wing_cargo' + class Design: NUM_BUSINESS_CLASS = 'aircraft:crew_and_payload:design:num_business_class' NUM_FIRST_CLASS = 'aircraft:crew_and_payload:design:num_first_class' From 8312d5e752989e85a400bfa8bf1a543c69ee2aed Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 26 Sep 2024 12:22:28 -0400 Subject: [PATCH 081/113] better error messages in preprocessor.py --- aviary/models/test_aircraft/aircraft_for_bench_FwGm.csv | 8 ++++---- aviary/utils/preprocessors.py | 8 ++++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/aviary/models/test_aircraft/aircraft_for_bench_FwGm.csv b/aviary/models/test_aircraft/aircraft_for_bench_FwGm.csv index fdd379976..64f8adbfa 100644 --- a/aviary/models/test_aircraft/aircraft_for_bench_FwGm.csv +++ b/aviary/models/test_aircraft/aircraft_for_bench_FwGm.csv @@ -2,7 +2,6 @@ aircraft:controls:cockpit_control_mass_scaler,1,unitless aircraft:controls:control_mass_increment,0,lbm aircraft:controls:stability_augmentation_system_mass,0,lbm aircraft:controls:stability_augmentation_system_mass_scaler,1,unitless -aircraft:crew_and_payload:num_passengers,169,unitless aircraft:crew_and_payload:passenger_mass_with_bags,200,lbm aircraft:design:cg_delta,0.25,unitless aircraft:design:cockpit_control_mass_coefficient,16.5,unitless @@ -163,16 +162,17 @@ aircraft:canard:area,0.0,ft**2 aircraft:canard:aspect_ratio,0.0,unitless aircraft:canard:thickness_to_chord,0.0,unitless aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless +aircraft:crew_and_payload:design:num_business_class,0,unitless +aircraft:crew_and_payload:design:num_first_class,11,unitless +aircraft:crew_and_payload:design:num_passengers,169,unitless +aircraft:crew_and_payload:design:num_tourist_class,158,unitless aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:mass_per_passenger,180.0,lbm aircraft:crew_and_payload:misc_cargo,0.0,lbm aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:num_business_class,0,unitless -aircraft:crew_and_payload:num_first_class,11,unitless aircraft:crew_and_payload:num_flight_attendants,3,unitless aircraft:crew_and_payload:num_flight_crew,2,unitless aircraft:crew_and_payload:num_galley_crew,0,unitless -aircraft:crew_and_payload:num_tourist_class,158,unitless aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless aircraft:crew_and_payload:wing_cargo,0.0,lbm aircraft:design:base_area,0.0,ft**2 diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 29481c3f2..df1b4c05d 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -87,11 +87,15 @@ def preprocess_crewpayload(aviary_options: AviaryValues): # have you give us enough info to determine where people were sitting vs. designed seats if num_pax != 0 and design_passenger_count != 0 and passenger_count == 0: raise om.AnalysisError( - f"ERROR: In preprocessor.py: User must specify CrewPayload.FIRST_CLASS, CrewPayload.NUM_BUSINESS_CLASS, Design.NUM_TOURIST_CLASS in aviary_values.") + f"ERROR: In preprocessor.py: The user has specified CrewPayload.NUM_PASSENGERS, and how many of what types of seats are on the aircraft." + f"However, the user has not specified where those passengers are sitting." + f"User must specify CrewPayload.FIRST_CLASS, CrewPayload.NUM_BUSINESS_CLASS, NUM_TOURIST_CLASS in aviary_values.") # where are the people sitting? is first class full? We know how many seats are in each class. if design_num_pax != 0 and passenger_count != 0 and design_passenger_count == 0: raise om.AnalysisError( - f"ERROR: In preprocessor.py: User must specify Design.FIRST_CLASS, Design.NUM_BUSINESS_CLASS, Design.NUM_TOURIST_CLASS in aviary_values.") + f"ERROR: In preprocessor.py: The user has specified Design.NUM_PASSENGERS, and has specified how many people are sitting in each class of seats." + f"However, the user has not specified how many seats of each class exist in the aircraft." + f"User must specify Design.FIRST_CLASS, Design.NUM_BUSINESS_CLASS, Design.NUM_TOURIST_CLASS in aviary_values.") # we don't know which classes this aircraft has been design for. How many 1st class seats are there? # Copy data over if only one set of data exists From dfd19e8074d5a8c6651dcd0ccdc6b914fbbcc602 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 26 Sep 2024 12:35:36 -0400 Subject: [PATCH 082/113] upd GwGm.csv to have design.num_pax because some tests using this file dont use check_and_preprocess_inputs --- aviary/models/test_aircraft/aircraft_for_bench_GwGm.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aviary/models/test_aircraft/aircraft_for_bench_GwGm.csv b/aviary/models/test_aircraft/aircraft_for_bench_GwGm.csv index cf6ab17bc..2f3c32e0d 100644 --- a/aviary/models/test_aircraft/aircraft_for_bench_GwGm.csv +++ b/aviary/models/test_aircraft/aircraft_for_bench_GwGm.csv @@ -8,7 +8,7 @@ aircraft:controls:stability_augmentation_system_mass,0,lbm aircraft:controls:stability_augmentation_system_mass_scaler,1,unitless aircraft:crew_and_payload:cargo_mass,10040,lbm aircraft:crew_and_payload:catering_items_mass_per_passenger,7.6,lbm -aircraft:crew_and_payload:num_passengers,180,unitless +aircraft:crew_and_payload:design:num_passengers,180,unitless aircraft:crew_and_payload:passenger_mass_with_bags,200,lbm aircraft:crew_and_payload:passenger_service_mass_per_passenger,5,lbm aircraft:crew_and_payload:water_mass_per_occupant,3,lbm From a5dc79149767e7384f43ed34aced6dc4db400fc0 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 26 Sep 2024 13:45:19 -0400 Subject: [PATCH 083/113] added design.pax values to all .csv in test_aircraft --- aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv | 8 ++++---- .../aircraft_for_bench_FwFm_with_electric.csv | 8 ++++---- aviary/models/test_aircraft/aircraft_for_bench_GwFm.csv | 8 ++++---- .../test_aircraft/aircraft_for_bench_GwGm_lbm_s.csv | 2 +- .../test_aircraft/aircraft_for_bench_solved2dof.csv | 8 ++++---- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv b/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv index c2fa1d8a1..bd9fa3412 100644 --- a/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv +++ b/aviary/models/test_aircraft/aircraft_for_bench_FwFm.csv @@ -7,17 +7,17 @@ aircraft:canard:aspect_ratio,0.0,unitless aircraft:canard:thickness_to_chord,0.0,unitless aircraft:crew_and_payload:baggage_mass_per_passenger,45.0,lbm aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless +aircraft:crew_and_payload:design:num_business_class,0,unitless +aircraft:crew_and_payload:design:num_first_class,11,unitless +aircraft:crew_and_payload:design:num_passengers,169,unitless +aircraft:crew_and_payload:design:num_tourist_class,158,unitless aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:mass_per_passenger,180.0,lbm aircraft:crew_and_payload:misc_cargo,0.0,lbm aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:num_business_class,0,unitless -aircraft:crew_and_payload:num_first_class,11,unitless aircraft:crew_and_payload:num_flight_attendants,3,unitless aircraft:crew_and_payload:num_flight_crew,2,unitless aircraft:crew_and_payload:num_galley_crew,0,unitless -aircraft:crew_and_payload:num_passengers,169,unitless -aircraft:crew_and_payload:num_tourist_class,158,unitless aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless aircraft:crew_and_payload:wing_cargo,0.0,lbm aircraft:design:base_area,0.0,ft**2 diff --git a/aviary/models/test_aircraft/aircraft_for_bench_FwFm_with_electric.csv b/aviary/models/test_aircraft/aircraft_for_bench_FwFm_with_electric.csv index 1f408f98b..7dcd99288 100644 --- a/aviary/models/test_aircraft/aircraft_for_bench_FwFm_with_electric.csv +++ b/aviary/models/test_aircraft/aircraft_for_bench_FwFm_with_electric.csv @@ -7,17 +7,17 @@ aircraft:canard:aspect_ratio,0.0,unitless aircraft:canard:thickness_to_chord,0.0,unitless aircraft:crew_and_payload:baggage_mass_per_passenger,45.0,lbm aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless +aircraft:crew_and_payload:design:num_business_class,0,unitless +aircraft:crew_and_payload:design:num_first_class,11,unitless +aircraft:crew_and_payload:design:num_passengers,169,unitless +aircraft:crew_and_payload:design:num_tourist_class,158,unitless aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:mass_per_passenger,180.0,lbm aircraft:crew_and_payload:misc_cargo,0.0,lbm aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:num_business_class,0,unitless -aircraft:crew_and_payload:num_first_class,11,unitless aircraft:crew_and_payload:num_flight_attendants,3,unitless aircraft:crew_and_payload:num_flight_crew,2,unitless aircraft:crew_and_payload:num_galley_crew,0,unitless -aircraft:crew_and_payload:num_passengers,169,unitless -aircraft:crew_and_payload:num_tourist_class,158,unitless aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless aircraft:crew_and_payload:wing_cargo,0.0,lbm aircraft:design:base_area,0.0,ft**2 diff --git a/aviary/models/test_aircraft/aircraft_for_bench_GwFm.csv b/aviary/models/test_aircraft/aircraft_for_bench_GwFm.csv index d27a939e6..703c223d2 100644 --- a/aviary/models/test_aircraft/aircraft_for_bench_GwFm.csv +++ b/aviary/models/test_aircraft/aircraft_for_bench_GwFm.csv @@ -16,17 +16,17 @@ aircraft:controls:stability_augmentation_system_mass,0,lbm aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless aircraft:crew_and_payload:cargo_mass,10040,lbm aircraft:crew_and_payload:catering_items_mass_per_passenger,7.6,lbm +aircraft:crew_and_payload:design:num_business_class,0,unitless +aircraft:crew_and_payload:design:num_first_class,11,unitless +aircraft:crew_and_payload:design:num_passengers,180,unitless +aircraft:crew_and_payload:design:num_tourist_class,169,unitless aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:mass_per_passenger,180.0,lbm aircraft:crew_and_payload:misc_cargo,0.0,lbm aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:num_business_class,0,unitless -aircraft:crew_and_payload:num_first_class,11,unitless aircraft:crew_and_payload:num_flight_attendants,3,unitless aircraft:crew_and_payload:num_flight_crew,2,unitless aircraft:crew_and_payload:num_galley_crew,0,unitless -aircraft:crew_and_payload:num_passengers,180,unitless -aircraft:crew_and_payload:num_tourist_class,169,unitless aircraft:crew_and_payload:passenger_mass_with_bags,200,lbm aircraft:crew_and_payload:passenger_service_mass_per_passenger,5,lbm aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless diff --git a/aviary/models/test_aircraft/aircraft_for_bench_GwGm_lbm_s.csv b/aviary/models/test_aircraft/aircraft_for_bench_GwGm_lbm_s.csv index b9f818cbd..50a63d10d 100644 --- a/aviary/models/test_aircraft/aircraft_for_bench_GwGm_lbm_s.csv +++ b/aviary/models/test_aircraft/aircraft_for_bench_GwGm_lbm_s.csv @@ -8,7 +8,7 @@ aircraft:controls:stability_augmentation_system_mass,0,lbm aircraft:controls:stability_augmentation_system_mass_scaler,1,unitless aircraft:crew_and_payload:cargo_mass,10040,lbm aircraft:crew_and_payload:catering_items_mass_per_passenger,7.6,lbm -aircraft:crew_and_payload:num_passengers,180,unitless +aircraft:crew_and_payload:design:num_passengers,180,unitless aircraft:crew_and_payload:passenger_mass_with_bags,200,lbm aircraft:crew_and_payload:passenger_service_mass_per_passenger,5,lbm aircraft:crew_and_payload:water_mass_per_occupant,3,lbm diff --git a/aviary/models/test_aircraft/aircraft_for_bench_solved2dof.csv b/aviary/models/test_aircraft/aircraft_for_bench_solved2dof.csv index 1d2c97329..b6848994f 100644 --- a/aviary/models/test_aircraft/aircraft_for_bench_solved2dof.csv +++ b/aviary/models/test_aircraft/aircraft_for_bench_solved2dof.csv @@ -7,17 +7,17 @@ aircraft:canard:aspect_ratio,0.0,unitless aircraft:canard:thickness_to_chord,0.0,unitless aircraft:crew_and_payload:baggage_mass_per_passenger,45.0,lbm aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless +aircraft:crew_and_payload:design:num_business_class,0,unitless +aircraft:crew_and_payload:design:num_first_class,11,unitless +aircraft:crew_and_payload:design:num_passengers,169,unitless +aircraft:crew_and_payload:design:num_tourist_class,158,unitless aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:mass_per_passenger,180.0,lbm aircraft:crew_and_payload:misc_cargo,0.0,lbm aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless -aircraft:crew_and_payload:num_business_class,0,unitless -aircraft:crew_and_payload:num_first_class,11,unitless aircraft:crew_and_payload:num_flight_attendants,3,unitless aircraft:crew_and_payload:num_flight_crew,2,unitless aircraft:crew_and_payload:num_galley_crew,0,unitless -aircraft:crew_and_payload:num_passengers,169,unitless -aircraft:crew_and_payload:num_tourist_class,158,unitless aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless aircraft:crew_and_payload:wing_cargo,0.0,lbm aircraft:design:base_area,0.0,ft**2 From dc50de671fd95d2937ffaacbb6fd8296ac0b462a Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Fri, 27 Sep 2024 09:21:26 -0400 Subject: [PATCH 084/113] added mission.Summary.Range assignment to 2DOF execution path (not 2DOF solved just 2DOF) --- aviary/interface/methods_for_level2.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index faad9e9d7..d1b967583 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -358,13 +358,17 @@ def load_inputs( self.cruise_mass_final = aviary_inputs.get_val( Mission.Summary.CRUISE_MASS_FINAL, units='lbm') - # if 'target_range' in self.post_mission_info: - # self.target_range = wrapped_convert_units( - # phase_info['post_mission']['target_range'], 'NM') - # else: - print('WARNING: In methods_for_level2: user has not specified target_range in phase_info. This will be required in future release.') - self.target_range = aviary_inputs.get_val( - Mission.Design.RANGE, units='NM') + if self.post_mission_info is True and 'target_range' in self.post_mission_info: + self.target_range = wrapped_convert_units( + phase_info['post_mission']['target_range'], 'NM') + aviary_inputs.set_val(Mission.Summary.RANGE, + self.target_range, units='NM') + else: + print('WARNING: In methods_for_level2: user has not specified target_range in phase_info. This will be required in future releases.') + self.target_range = aviary_inputs.get_val( + Mission.Design.RANGE, units='NM') + aviary_inputs.set_val(Mission.Summary.RANGE, aviary_inputs.get_val( + Mission.Design.RANGE, units='NM'), units='NM') self.cruise_mach = aviary_inputs.get_val(Mission.Design.MACH) self.require_range_residual = True @@ -379,7 +383,7 @@ def load_inputs( self.target_range = wrapped_convert_units( phase_info['post_mission']['target_range'], 'NM') else: - print('WARNING: In methods_for_level2: user has not specified target_range in phase_info. This will be required in future release.') + print('WARNING: In methods_for_level2: user has not specified target_range in phase_info. This will be required in future releases.') self.require_range_residual = False # still instantiate target_range because used for default guesses for phase comps self.target_range = aviary_inputs.get_val( From a7df3feadad1683fcc4752225f6c80e1026a7ac0 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Mon, 7 Oct 2024 13:55:19 -0400 Subject: [PATCH 085/113] changed target range on test_bench_GwGm_shooting to correctly reflect the value set by Mission.Design.Range --- aviary/validation_cases/benchmark_tests/test_bench_GwGm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aviary/validation_cases/benchmark_tests/test_bench_GwGm.py b/aviary/validation_cases/benchmark_tests/test_bench_GwGm.py index 34b883d7f..1c10dc162 100644 --- a/aviary/validation_cases/benchmark_tests/test_bench_GwGm.py +++ b/aviary/validation_cases/benchmark_tests/test_bench_GwGm.py @@ -212,7 +212,7 @@ def test_bench_GwGm_shooting(self): ) assert_near_equal( - prob.get_val(Mission.Summary.RANGE, units='NM'), 3774.3, tolerance=rtol + prob.get_val(Mission.Summary.RANGE, units='NM'), 3675.0, tolerance=rtol ) assert_near_equal( From 661b01ea7272cc49385096855dcecd05a3356476 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Tue, 8 Oct 2024 09:44:17 -0400 Subject: [PATCH 086/113] restored link_{first_flight_phase_name}_mass.lhs:mass in methods for level2 --- aviary/interface/methods_for_level2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index 7c962094a..e242f02b4 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -1510,7 +1510,7 @@ def link_phases(self): ref=10000., add_constraint=True) self.model.connect( f'traj.{first_flight_phase_name}.states:mass', - 'link_climb_mass.lhs:mass', + f'link_{first_flight_phase_name}_mass.lhs:mass', src_indices=[0], flat_src_indices=True, ) From 329aa4327dfc5422dcf9765de2c12b7899e9f9f3 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 10 Oct 2024 14:09:00 -0400 Subject: [PATCH 087/113] moved HE mass connections to post_mission --- aviary/interface/methods_for_level2.py | 34 ++++++++++--------- .../test_battery_in_a_mission.py | 4 +-- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index e242f02b4..2cd4b806b 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -401,7 +401,7 @@ def load_inputs( else: print('WARNING: In methods_for_level2: user has not specified target_range in phase_info. This will be required in future releases.') self.require_range_residual = False - # still instantiate target_range because used for default guesses for phase comps + # still instantiate target_range because it is used for default guesses for phase comps self.target_range = aviary_inputs.get_val( Mission.Design.RANGE, units='NM') @@ -1380,6 +1380,23 @@ def add_post_mission_systems(self, include_landing=True): self.post_mission.add_constraint( Mission.Constraints.MASS_RESIDUAL, equals=0.0, ref=1.e5) + if self.mission_method is HEIGHT_ENERGY: + # connect summary mass to the initial guess of mass in the first phase + if not self.pre_mission_info['include_takeoff']: + first_flight_phase_name = list(self.phase_info.keys())[0] + eq = self.model.add_subsystem(f'link_{first_flight_phase_name}_mass', + om.EQConstraintComp(), + promotes_inputs=[('rhs:mass', + Mission.Summary.GROSS_MASS)]) + eq.add_eq_output('mass', eq_units='lbm', normalize=False, + ref=10000., add_constraint=True) + self.model.connect( + f'traj.{first_flight_phase_name}.states:mass', + f'link_{first_flight_phase_name}_mass.lhs:mass', + src_indices=[0], + flat_src_indices=True, + ) + def _link_phases_helper_with_options(self, phases, option_name, var, **kwargs): # Initialize a list to keep track of indices where option_name is True true_option_indices = [] @@ -1500,21 +1517,6 @@ def link_phases(self): 'actual_range', src_indices=[-1], flat_src_indices=True) - if not self.pre_mission_info['include_takeoff']: - first_flight_phase_name = list(self.phase_info.keys())[0] - eq = self.model.add_subsystem(f'link_{first_flight_phase_name}_mass', - om.EQConstraintComp(), - promotes_inputs=[('rhs:mass', - Mission.Summary.GROSS_MASS)]) - eq.add_eq_output('mass', eq_units='lbm', normalize=False, - ref=10000., add_constraint=True) - self.model.connect( - f'traj.{first_flight_phase_name}.states:mass', - f'link_{first_flight_phase_name}_mass.lhs:mass', - src_indices=[0], - flat_src_indices=True, - ) - elif self.mission_method is SOLVED_2DOF: self.traj.link_phases(phases, [Dynamic.Mission.MASS], connected=True) self.traj.link_phases( diff --git a/aviary/validation_cases/benchmark_tests/test_battery_in_a_mission.py b/aviary/validation_cases/benchmark_tests/test_battery_in_a_mission.py index 640507b70..756932e0d 100644 --- a/aviary/validation_cases/benchmark_tests/test_battery_in_a_mission.py +++ b/aviary/validation_cases/benchmark_tests/test_battery_in_a_mission.py @@ -89,8 +89,8 @@ def test_subsystems_in_a_mission(self): prob.run_aviary_problem() electric_energy_used = prob.get_val( - f'traj.cruise.timeseries.{ - av.Dynamic.Mission.CUMULATIVE_ELECTRIC_ENERGY_USED}', + f'traj.cruise.timeseries.' + + f'{av.Dynamic.Mission.CUMULATIVE_ELECTRIC_ENERGY_USED}', units='kW*h', ) fuel_burned = prob.get_val(av.Mission.Summary.FUEL_BURNED, units='lbm') From debc6f2057f90b906491f33a25d8cb2fa53674ed Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 10 Oct 2024 14:20:32 -0400 Subject: [PATCH 088/113] removed target_range warnings because unnecessary in cases where goal is to fly as far as possible --- aviary/interface/methods_for_level2.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index 2cd4b806b..b42ceef15 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -380,7 +380,6 @@ def load_inputs( aviary_inputs.set_val(Mission.Summary.RANGE, self.target_range, units='NM') else: - print('WARNING: In methods_for_level2: user has not specified target_range in phase_info. This will be required in future releases.') self.target_range = aviary_inputs.get_val( Mission.Design.RANGE, units='NM') aviary_inputs.set_val(Mission.Summary.RANGE, aviary_inputs.get_val( @@ -399,7 +398,6 @@ def load_inputs( self.target_range = wrapped_convert_units( phase_info['post_mission']['target_range'], 'NM') else: - print('WARNING: In methods_for_level2: user has not specified target_range in phase_info. This will be required in future releases.') self.require_range_residual = False # still instantiate target_range because it is used for default guesses for phase comps self.target_range = aviary_inputs.get_val( From 6ae3b46b76aed56771bdc2d455bde000821dab76 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 10 Oct 2024 14:25:07 -0400 Subject: [PATCH 089/113] removed duplicate code --- aviary/interface/methods_for_level2.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index b42ceef15..9c1294312 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -1158,13 +1158,6 @@ def add_subsystem_timeseries_outputs(phase, phase_name): first_flight_phase.set_state_options(Dynamic.Mission.MASS, fix_initial=False) - if self.mission_method is HEIGHT_ENERGY: - if not self.pre_mission_info['include_takeoff']: - first_flight_phase_name = list(phase_info.keys())[0] - first_flight_phase = traj._phases[first_flight_phase_name] - first_flight_phase.set_state_options(Dynamic.Mission.MASS, - fix_initial=False) - self.traj = traj return traj From b0cf08f7791e825f251315d5a0bc417a643516ac Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 10 Oct 2024 14:55:27 -0400 Subject: [PATCH 090/113] added comments back into methods for level2 --- aviary/interface/methods_for_level2.py | 69 +++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index 9c1294312..c4290d82b 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -1380,7 +1380,7 @@ def add_post_mission_systems(self, include_landing=True): promotes_inputs=[('rhs:mass', Mission.Summary.GROSS_MASS)]) eq.add_eq_output('mass', eq_units='lbm', normalize=False, - ref=10000., add_constraint=True) + ref=100000., add_constraint=True) self.model.connect( f'traj.{first_flight_phase_name}.states:mass', f'link_{first_flight_phase_name}_mass.lhs:mass', @@ -2031,6 +2031,19 @@ def setup(self, **kwargs): super().setup(**kwargs) def set_initial_guesses(self, parent_prob=None, parent_prefix=""): + """ + Call `set_val` on the trajectory for states and controls to seed + the problem with reasonable initial guesses. This is especially + important for collocation methods. + This method first identifies all phases in the trajectory then + loops over each phase. Specific initial guesses + are added depending on the phase and mission method. Cruise is treated + as a special phase for GASP-based missions because it is an AnalyticPhase + in Dymos. For this phase, we handle the initial guesses first separately + and continue to the next phase after that. For other phases, we set the initial + guesses for states and controls according to the information available + in the 'initial_guesses' attribute of the phase. + """ setvalprob = self if parent_prob is not None and parent_prefix != "": setvalprob = parent_prob @@ -2092,6 +2105,28 @@ def set_initial_guesses(self, parent_prob=None, parent_prefix=""): self._add_guesses(phase_name, phase, guesses, setvalprob, parent_prefix) def _process_guess_var(self, val, key, phase): + """ + Process the guess variable, which can either be a float or an array of floats. + This method is responsible for interpolating initial guesses when the user + provides a list or array of values rather than a single float. It interpolates + the guess values across the phase's domain for a given variable, be it a control + or a state variable. The interpolation is performed between -1 and 1 (representing + the normalized phase time domain), using the numpy linspace function. + The result of this method is a single value or an array of interpolated values + that can be used to seed the optimization problem with initial guesses. + Parameters + ---------- + val : float or list/array of floats + The initial guess value(s) for a particular variable. + key : str + The key identifying the variable for which the initial guess is provided. + phase : Phase + The phase for which the variable is being set. + Returns + ------- + val : float or array of floats + The processed guess value(s) to be used in the optimization problem. + """ # Check if val is not a single float if not isinstance(val, float): # If val is an array of values @@ -2118,6 +2153,21 @@ def _process_guess_var(self, val, key, phase): return val def _add_subsystem_guesses(self, phase_name, phase, setvalprob, parent_prefix): + """ + Adds the initial guesses for each subsystem of a given phase to the problem. + This method first fetches all subsystems associated with the given phase. + It then loops over each subsystem and fetches its initial guesses. For each + guess, it identifies whether the guess corresponds to a state or a control + variable and then processes the guess variable. After this, the initial + guess is set in the problem using the `set_val` method. + Parameters + ---------- + phase_name : str + The name of the phase for which the subsystem guesses are being added. + phase : Phase + The phase object for which the subsystem guesses are being added. + """ + # Get all subsystems associated with the phase all_subsystems = self._get_all_subsystems( self.phase_info[phase_name]['external_subsystems']) @@ -2144,6 +2194,23 @@ def _add_subsystem_guesses(self, phase_name, phase, setvalprob, parent_prefix): parent_prefix+f'traj.{phase_name}.{path_string}:{key}', **val) def _add_guesses(self, phase_name, phase, guesses, setvalprob, parent_prefix): + """ + Adds the initial guesses for each variable of a given phase to the problem. + This method sets the initial guesses for time, control, state, and problem-specific + variables for a given phase. If using the GASP model, it also handles some special + cases that are not covered in the `phase_info` object. These include initial guesses + for mass, time, and distance, which are determined based on the phase name and other + mission-related variables. + Parameters + ---------- + phase_name : str + The name of the phase for which the guesses are being added. + phase : Phase + The phase object for which the guesses are being added. + guesses : dict + A dictionary containing the initial guesses for the phase. + """ + # If using the GASP model, set initial guesses for the rotation mass and flight duration if self.mission_method is TWO_DEGREES_OF_FREEDOM: rotation_mass = self.initialization_guesses['rotation_mass'] From 83b31370e78899292605863dea4373f39781482d Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Fri, 11 Oct 2024 09:38:49 -0400 Subject: [PATCH 091/113] language and comments changes --- .../run_multimission_example_large_single_aisle.py | 10 +++++++++- aviary/interface/methods_for_level2.py | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py index 5cc253dbb..7aa845820 100644 --- a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py @@ -2,6 +2,13 @@ authors: Jatin Soni, Eliot Aretskin Multi Mission Optimization Example using Aviary +In this example, Two seperate aviary problems are instantiated using the typical aviaryProblem calls like load_inputs, +check_and_preprocess_payload, etc.. Once those problems are setup and all of their phases are linked together, +we copy those problems as group into a super_problem. We then promote GROSS_MASS, RANGE, SPAN, and wing AREA from each +of those sub-groups (group1 and group2) up to the super_probem so the optimizer can control them. The fuel_burn results +from each of the group1 and group2 dymos missions are summed and weighted to create the objective function the +optimizer sees. + For the deadhead mission: aircraft:crew_and_payload:num_passengers,0,unitless aircraft:crew_and_payload:num_tourist_class,0,unitless @@ -319,5 +326,6 @@ def createN2(fileref, prob): super_prob = large_single_aisle_example(makeN2=makeN2) + # Uncomment the following lines to see further details on each mission. # super_prob.model.group_1.list_vars(val=True, units=True, print_arrays=False) - # https://openmdao.org/newdocs/versions/latest/features/debugging/listing_variables.html?highlight=list_driver_vars + # super_prob.model.group_2.list_vars(val=True, units=True, print_arrays=False) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index e99db361a..5d17e4518 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -2183,7 +2183,7 @@ def _add_subsystem_guesses(self, phase_name, phase, setvalprob, parent_prefix): parent_prefix+f'traj.{phase_name}.{path_string}:{key}', **val) def _add_guesses(self, phase_name, phase, guesses, setvalprob, parent_prefix): - """ + """ Adds the initial guesses for each variable of a given phase to the problem. This method sets the initial guesses for time, control, state, and problem-specific variables for a given phase. If using the GASP model, it also handles some special @@ -2199,7 +2199,7 @@ def _add_guesses(self, phase_name, phase, guesses, setvalprob, parent_prefix): guesses : dict A dictionary containing the initial guesses for the phase. """ - + # If using the GASP model, set initial guesses for the rotation mass and flight duration if self.mission_method is TWO_DEGREES_OF_FREEDOM: rotation_mass = self.initialization_guesses['rotation_mass'] From c32b57b30528d6ba357658493a72a940185752e8 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Fri, 11 Oct 2024 09:47:31 -0400 Subject: [PATCH 092/113] removed unneeded print statement --- .../run_multimission_example_large_single_aisle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py index 7aa845820..0b3539a0b 100644 --- a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py @@ -30,7 +30,7 @@ from aviary.subsystems.mass.flops_based.furnishings import TransportFurnishingsGroupMass from aviary.api import SubsystemBuilderBase from aviary.validation_cases.validation_tests import get_flops_inputs -print("========== Starting Run ===============") + # fly the same mission twice with two different passenger loads phase_info_primary = copy.deepcopy(phase_info) phase_info_deadhead = copy.deepcopy(phase_info) From 92080a9971151acd49ea2966273bc244f0fd76db Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Fri, 11 Oct 2024 10:00:09 -0400 Subject: [PATCH 093/113] comments changes --- aviary/interface/methods_for_level2.py | 1 - 1 file changed, 1 deletion(-) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index 5d17e4518..ac7ed46c7 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -2199,7 +2199,6 @@ def _add_guesses(self, phase_name, phase, guesses, setvalprob, parent_prefix): guesses : dict A dictionary containing the initial guesses for the phase. """ - # If using the GASP model, set initial guesses for the rotation mass and flight duration if self.mission_method is TWO_DEGREES_OF_FREEDOM: rotation_mass = self.initialization_guesses['rotation_mass'] From cb880066748fe022ca9690e1250cf3d4026e9d2c Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Fri, 11 Oct 2024 12:57:55 -0400 Subject: [PATCH 094/113] reverted two files related to battery that should not have been changed, removed unneeded comments --- aviary/subsystems/energy/battery_builder.py | 49 +++++-------------- .../test_battery_in_a_mission.py | 26 ++-------- aviary/variable_info/variable_meta_data.py | 3 -- 3 files changed, 16 insertions(+), 62 deletions(-) diff --git a/aviary/subsystems/energy/battery_builder.py b/aviary/subsystems/energy/battery_builder.py index 03583ea77..173c28a88 100644 --- a/aviary/subsystems/energy/battery_builder.py +++ b/aviary/subsystems/energy/battery_builder.py @@ -58,48 +58,23 @@ def build_mission(self, num_nodes, aviary_inputs=None) -> om.Group: return battery_group def get_states(self): - # need to add subsystem name to target name ('battery.') for state due - # to issue where non aircraft or mission variables are not fully promoted - # TODO fix this by not promoting only 'aircraft:*' and 'mission:*' - state_dict = { - Dynamic.Mission.CUMULATIVE_ELECTRIC_ENERGY_USED: { - 'fix_initial': True, - 'fix_final': False, - 'lower': 0.0, - 'ref': 1e4, - 'defect_ref': 1e6, - 'units': 'kJ', - 'rate_source': Dynamic.Mission.ELECTRIC_POWER_IN_TOTAL, - 'input_initial': 0.0, - 'targets': f'{self.name}.{Dynamic.Mission.CUMULATIVE_ELECTRIC_ENERGY_USED}', - } - } + state_dict = {Dynamic.Mission.CUMULATIVE_ELECTRIC_ENERGY_USED: {'fix_initial': True, + 'fix_final': False, + 'lower': 0.0, + 'ref': 1e4, + 'defect_ref': 1e6, + 'units': 'kJ', + 'rate_source': Dynamic.Mission.ELECTRIC_POWER_IN_TOTAL, + 'input_initial': 0.0}} return state_dict def get_constraints(self): constraint_dict = { # Can add constraints here; state of charge is a common one in many battery applications - f'{self.name}.{Dynamic.Mission.BATTERY_STATE_OF_CHARGE}': { - 'type': 'boundary', - 'loc': 'final', - 'lower': 0.2, - }, + f'battery.{Dynamic.Mission.BATTERY_STATE_OF_CHARGE}': + {'type': 'boundary', + 'loc': 'final', + 'lower': 0.2}, } return constraint_dict - - def get_parameters(self, aviary_inputs=None, phase_info=None): - params = { - Aircraft.Battery.ENERGY_CAPACITY: { - 'val': 0.0, - 'units': 'kJ', - 'static_target': True, - }, - Aircraft.Battery.EFFICIENCY: { - 'val': 0.0, - 'units': 'unitless', - 'static_target': True, - }, - } - - return params diff --git a/aviary/validation_cases/benchmark_tests/test_battery_in_a_mission.py b/aviary/validation_cases/benchmark_tests/test_battery_in_a_mission.py index 756932e0d..ce3552174 100644 --- a/aviary/validation_cases/benchmark_tests/test_battery_in_a_mission.py +++ b/aviary/validation_cases/benchmark_tests/test_battery_in_a_mission.py @@ -41,13 +41,13 @@ def setUp(self): "constrain_final": False, "fix_duration": False, "initial_bounds": ((0.0, 0.0), "min"), - "duration_bounds": ((10.0, 30.0), "min"), + "duration_bounds": ((10., 30.), "min"), }, }, 'post_mission': { 'include_landing': False, 'external_subsystems': [], - }, + } } def test_subsystems_in_a_mission(self): @@ -56,8 +56,7 @@ def test_subsystems_in_a_mission(self): prob = av.AviaryProblem() prob.load_inputs( - "models/test_aircraft/aircraft_for_bench_FwFm_with_electric.csv", phase_info - ) + "models/test_aircraft/aircraft_for_bench_FwFm_with_electric.csv", phase_info) # Preprocess inputs prob.check_and_preprocess_inputs() @@ -84,33 +83,16 @@ def test_subsystems_in_a_mission(self): prob.set_val(av.Aircraft.Battery.PACK_ENERGY_DENSITY, 550, units='kJ/kg') prob.set_val(av.Aircraft.Battery.PACK_MASS, 1000, units='lbm') prob.set_val(av.Aircraft.Battery.ADDITIONAL_MASS, 115, units='lbm') - prob.set_val(av.Aircraft.Battery.EFFICIENCY, 0.95, units='unitless') prob.run_aviary_problem() electric_energy_used = prob.get_val( - f'traj.cruise.timeseries.' + - f'{av.Dynamic.Mission.CUMULATIVE_ELECTRIC_ENERGY_USED}', - units='kW*h', - ) + f'traj.cruise.timeseries.{av.Dynamic.Mission.CUMULATIVE_ELECTRIC_ENERGY_USED}', units='kW*h') fuel_burned = prob.get_val(av.Mission.Summary.FUEL_BURNED, units='lbm') - soc = prob.get_val( - 'traj.cruise.rhs_all.battery.battery_state_of_charge', units='unitless' - ) # Check outputs - # indirectly check mission trajectory by checking total fuel/electric split assert_near_equal(electric_energy_used[-1], 38.60538132, 1.e-7) assert_near_equal(fuel_burned, 676.87235486, 1.e-7) - # check battery state-of-charge over mission - assert_near_equal( - soc, - [0.99999578, 0.97551324, 0.94173584, 0.93104625, 0.93104625, - 0.8810605, 0.81210498, 0.79028433, 0.79028433, 0.73088701, - 0.64895148, 0.62302415, 0.62302415, 0.57309323, 0.50421334, - 0.48241661, 0.48241661, 0.45797918, 0.42426402, 0.41359413], - 1e-7, - ) if __name__ == "__main__": diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index 4d99c69db..e8fdd205e 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -616,9 +616,6 @@ # |___/ # ====================================================================================== -# TODO: Set initial defaults better -# from aviary.utils.aviary_values import AviaryValues - add_meta_data( Aircraft.CrewPayload.BAGGAGE_MASS, meta_data=_MetaData, From 3c29bbe1e2fd0b09757e64a7a28ea6f381ad6adc Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Tue, 15 Oct 2024 15:07:26 -0400 Subject: [PATCH 095/113] first cut at docs and examples for multi-mission --- aviary/docs/examples/images/multi_mission.png | Bin 0 -> 1224707 bytes aviary/docs/examples/multi-missions.ipynb | 147 ++++++++++++++++++ aviary/docs/user_guide/multi-mission.ipynb | 81 ++++++++++ ...multimission_example_large_single_aisle.py | 4 +- 4 files changed, 230 insertions(+), 2 deletions(-) create mode 100644 aviary/docs/examples/images/multi_mission.png create mode 100644 aviary/docs/examples/multi-missions.ipynb create mode 100644 aviary/docs/user_guide/multi-mission.ipynb diff --git a/aviary/docs/examples/images/multi_mission.png b/aviary/docs/examples/images/multi_mission.png new file mode 100644 index 0000000000000000000000000000000000000000..e4dc73b49a762e1ba0ebeb7e2a6859cc0680f3df GIT binary patch literal 1224707 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

dq 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¡|-fiykSAlzpKLBbEFng+Y;YfPUa^h8<*xjgN^ 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

%3`|8#7#?{Br@C4t@lq6{**8nY;$$(7sm%-W0 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�y2974@MTK;se@ydi^uEE0NFv)7eXRRSR&9b}%1 z>cHEot^{!oL6bEy1+`>>ut|zza#v1uS>f0UaRnmfC=mwS8^;?^Cdh~c_i_1#_Xss5C<{nE zfNK@&j2pa@F8E*`8~2x^^7BLvLdw=J2Miy;2>`ix`bR!w0G}T0d!kFgFDr~_68Bd# zd^js|QTMsh$l}#cY>5U>8AiBpiWxgxa87e}!%-dVjrDr_d)37a0ux zjQq1Ax;sTnS=Fkg^RS|kzs68aj2pP$YPG3RQj<4`{>0_fQs6s2O|5nSYuK0i+}u^S zXl~KI^qchJvQX={ZH5_i(Q4VFf(A0bWxhYo_*Kw+9PJ@DLda*i|C`h5}A*l_7!4Mai$P zR!4r@oBz3D>m)JYa072WG!dwn;oiC@!sko zS%F~{KnV1b`}b^L+|rp>I!GB+NV$J7ljR;Js_?8s64Q8f+$~%S$X|)xpjg6vlO-8 z=a$N;11ifCe(3(1>x2sPkGKlvjfaM`QGxuZDq&l(q+ddVQrs9h17xG`7sAAZqtW*v zifB(BzK())-c#0FW0=G>cxE5LRMv6p0beq`I@kfz9l6Ro+ z!-75`pG!5Yr@x(b z+0xH`kWTYZSL7xQc!h0Lda+O>V}0mvS;mZ1{-~w&(NAQWG>EB#0)6IB9GWv^n9wS# zP9C^QC_R0OXO#-y|7U@n{-&B=eoKR6rn&cVQV_Py&hZla>t5lWE9<@;Y_le*=B03Y zLhP8Rt-Ln}tJca-)*Jt|*1=+WA7<@3D^G@{2}N?X{y;@pS<(C*^xYQfE*?PyD z1*S|xxX*B9E{Bwlmc-CLdT}t_kKUkUvV17iCzTARn!cfqvQ`oZ@Zk@^V+S`SN2Nq* zU?4{71-PU%)EPKAf?L}WO*s<4M|%tkusOh92Nc^MHrRvWArcpCAOk?#2<9|oXa7(p zUNR^I^9Q($!rEESxbU6j54;sG>{=SsJKjq&FM&FnKp?E$gt7m)dWZZUdjwR%cta=? zdULvh+>9dia2Gpoz%apuo39iHsLAX#)}{f);F8L3fmGaKUI!vCCsB_49+Ue-b8|># zd!BcLidyQTcgZu<@E2wc4uMOsbWi-*vd*;vo_r7;G$fk@@LJWsb{1

  • 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

    k5vYdW38QQQ)PQ4R&02kX1jrJ7egSn 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

      &gkzC$^!2 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

      qRU?pD?4k`Yoq{@2)(xqVw| zypo1ehOgz^#}76y9rbWY+Cde0kv$)Zl;0Z}8KFclZ~Ie|EN^{!O3j@!Xb-ds<6RV7 z>CjC;2wDO@p3y4X?j2~sc6?Cc`_b*kNFf1f@SklRG{n;iOFP+H-l?NvB|JD|EUlL= z65q$C!kfT!^uNCU0NT1eYcD^B;TyvlB;F&gV2Z2!(L5{&CTxJBx1t@QSWZ~y4DnZ! zRXM&;T*JMOV9xN%Iu9lh_}eYoQIFWtvw8^gY2H!SD7m)6#^%G2g)(Y7M#+Fo=K1Om z=vrVvB~&tR$JS8aMHuO#=g4ltINKp^<-gKYSB*#bqg#t&+vU32YasU*8k*rBAMk3h zbC4UWtRgbL^Cagcwp3kF@#r9cEgOoE*eGIwuB$=1WokRl7VMCf4gr9XbaD|{fiyHV z;S9l`&mCqzLGh*(=g~!*t|fMo55r88VYJd5X5gGjC?8AaO3)fjD+LtCV!Y^zTrvD0 zH#^#0hO(hEjq+Cv)}AV2j4n`OyR*xSy1m~3wfclTzSxa6syxCAT3b3)8sCJ$KjM{U z5)H~XqBV;S06x+-li!6Z%PugG#92c^05ss9_y>{w758{zKB32Afhkb-d@@zWWbtYYmy5V~cOo7)*bd*&BzHzOS3`Q!M`6;0w>w=P6*G+5W}0`x>fPv~lLyvqNP^tl-d} zIrhs3_j0}`5hjxH8xbed->Ulg(4DbXZQ&-CWzHV&VKo+>|I;~A6lXZz+&TaZu*}hl zGeAq5tt7V=TcAPPB9L^=Aq(BrMPjhNR}91>^# zcFpbHNiVHEg&rg@F^V#0I&`#1pX!N?NYaW}M6bAj%RGWl1fY*27k2x(HmIIdAe;Mc z*v}Nop*jcqdM)cK?If?E<-ZQ6B>Pa@I$&Iyd>z1c^?( zTMVH`d)LSeB8gFMtQa{1%JaRoF z1I8hWlbS{E@jxiF2!M z>RiuR&)K)zBHOsMrg;9HIrgk%9o=}on?2ks=dP7MDvl!N&251@%2!e5_)i4)#jH%W zJl705`ZO9cDjR)hPVVfmgWz){`MW9rG;qT)P^wS)J)!q*!l-c^v3w8Wpt%aMxNFaB zi-n?$Az_m1dG>M2CI~CiFg32k-IFvnDtGGM`K$C7@oQj?ttVIPA%@$pXXs!T=$J_4 z6)%*=mP%e?rFY^$gZZO*c zDV+0d>K$ZFgBWl%QHXjS;WPqfBRUfC_vYs2oP7qhtQUUT47RbMg?+B}GsFfM>1}tv zM>&v%gLq>Xanlwb=X(Ag#PI+ZJVRGRj?*^_xoE%Z=&)WJfSRHT3h4hM;5#~%<%|yv zYb{6>ReX`+hE3Tz^R(fQgH!36{LP2>_^s1z@KZpAI77^vt_eLjWw!=30kq+|KZzNB zem=OuvUoQ6w4s`JxRCCu&(H|q0ccZd>An4qg4ugtUpXWOCh3U5`)DOk?&XlLAQ3NZ z`53P9_VER->Vu{#KzpY#(B+F4~H)A*}*h_!h!dU~(NQqkj~huC`^`pa}Si+DLFjM$t7y_1n?FzX~OdbX?+~JSF z1l!-Q1rQN|$GrhWNOP3Zcl@vvwO#DKP<+r@d02gKPA|zlROrH4N z_!6gNXA8l#LAfhe=I!9Lk;bMFfA|~{Ex2#=(B*zeA+G!#dGB4!rS2`zNHP<#m6nkz z;ySP@D-6O5x~zr?Cr}=s75EkZ}EIC#Vz5P~HX(!ta`;l2yIfMU>(-1X=>fqN{ zce7&MH)A*k8(oq)E4z)hX!lpY4V8IoJ^r?t%OH>Xar0WKEOlSemqKL=VoaLoPkk-1 z&*6IR@U5F|Aa!C;7zp6iRs`ayDogBs`__ToLS6tUvi zt1FMU!QF2e;N1GvVf4wH*hnwn#26O8Mr;p)A(6XsmF7ux0aALfWvyIA%giLX9G|!7 ztNn80FlYc{Vq$Ro((^nd82vB49<>WA#d zTL8HX!!h0xNfX>+Y`S9rsHnrK2`KAMhx5E4y*(yEJhT7!SnX1c;4T<0(VZ}0lMVAX z2+~d?Nl9Y5lr2awQ<~Wsw_!c)DL6lfjh)8E?Gw&UNUOWY^XiNl;TxF3C>j6g|GE+@ zoo*|U^b}sxl50mb{i%kTEGxt?9K0ru%)W4#5D%AJrD}yPnlm}+{M0dIyv%9!2{=7Y z<|_c;6tyuK3oQ`VS027HhLER5sWXI@%*IZ}+HzQ9eI}P-Yz93sfTE0eI5A?vv>hQJ z>595bT?d=q{xDz=m_sNmK7E(#T-#4KeTOLeyI(>#B?VDo({fDt4+WXDD9P|Zq&ia> zebWchsvvL)aET*P5}06-WQ4R;etONM?ek}UL%A=Wi(8`9>zG7Xxy8fP^Bq#s8p-(` zD$%$d-&Vyti9f)WTvI!)5GD4u*w`^s6{M?^v_0andg zm_^#DFcpEo>ueXo{$aSYw_T6;IWmO}F;6X7Z7n z(NB?GYl_TFi}0ZMm`P}pmVBT(E>IAV==uAS5|>+5F!)m@egY47MwCUjCvFz9`+Jw# zV*KmsId3FJorgN0=RuC1V!6jbFi(AmC6uW9xbGNKwvb)MzHN_i7^-CJOmg8%L7I4> zXr+O(JI5@HbUjP(o%FINaXuDe_edKPcXGsP4gd_APulsLmGq93)b7O{#zpAwd=Y#x zY^~+ni1;fVYpl4Cn&ro+5Q#@Z++Wmw3ill8`OJTEZ2;CmT~2^$Or1-ZDe~ej$PXoH zse*})@*WxCzlY#S+NLl&hWW>UJa2@d$BClsVz*cc6$7srPlAN_R&hk7?u-==6{D*` z^-bwEcvI4MUQx!``ts*`*tYLb1z1(xXFdW2s1M2z#mN}5F4psBM{6lSjQ;BBX2WdY zSN2c*{iE$QUM5zwH=Qm@6yNbumDHE+60Z)D)k!*l9&TkCRoH9q8?bFN7bJY7tlcyG z60c~oAU={T8Dt|M!0K+qAZ3sxJ~D=IsBQr5SFqnpylNKjWg%WM>cG9&xduk(U%0k6nDRuRTut)uP-5 z+AFzJ=}W}BtFnWp(#*+}vapb336G2TsINM(kU2$RV;>Ie>1i7>a|-qk1oDMRH%x3u z;zdWf><235V>GXVt_`F}AiSc?WAf09+y{Xy+7t`~72v#gVnUB^ueSnVS^s%g=&R?! z0Js!hGQ_ua$+?2#qea+Gv08vR86tX4OqGM>t6}cZiLyHXa$}Ru0=o>Jg?!Yohvlg2 zoX?Jp{e$#O+&7WZiTMRXnq{$mea2D6n5~6G!A610w;M@U^yrPDVE6yK9B6GouPF1` zB%U#`4s+xq0E-2c>I?CEChIi^MzHkKo(S(Z3TBvndWrW*b*h@Po7B^5Uqi1*tSv zutJT2BOhjyDpDUzZ$nkD`Bwg+{Er#~4tO}aCx{fgLIpfU?}e;X4p`9Q>P|45&6{Oh z^Y?oU9*v#&5TNW_2|xVaR3@*9DE|D1i1j5K6TXHfApu@iI$h7<2YBo~b=i`1xnCbX z29MF9Ppsi%A7m3F0D`Y{g9;N=cL0Sm0w_3^W^+X_$ADN40AJ&3RcebMjfS-wZk_hn zVox56G2oqETl`^v>#Fr1YrGv?d3>x+5Uatq!jsv4)PDCmmV815Bs=ZD{!J|*zO6t_ z(Mfvk+4{347+dI6>oGCA?wL~PD8`EO$m1(^09ufLse0fQ(XR;Qa(VNP}LFAnzxNMV>kCctYf zIa|_Eg+wRV0|L&l$iTSD#-q4Lhtv|@L;QqJE}UzT0z(1+fR%?LXuC#`8XuEY#Y6+s zH25WcmnRk*Xo8w9F~(CWvEJuor#Tsw;l01gN?J2GyJrsI!ySdPu{8+=yjg7qW`aGV zKM!%T?g15Zmvo*Eet$!2R(9GhIk5qP8Djtrl3~$#5#HrDoYs9GQ?l<74-e#xSI>zS zlFTvsRX@EMHqhaR@T<-tG(=N0wU5=2XBa32>jVVzkd*qh(0MqpuDBXeu@M@UK2VRm z9;|=I>1h=Hny>UTTZ|Q<9a0uJw&Oa2*JT4W3GC5Mppc88;{&R&NWfi47|!t@ut}swe~1-LP(~KJhR4Te2Yeo4?NB z)`yLH1xr#<%WTgQ=6|!XFE{e%E@!6bvvPp_=~6}}!0$pN1JJ%24c5;wi&)gP3j>>8 zQp_Q2Lkf{^e%@nWfJ22eQem12u7jHQE%6dcLmK%6VVNdXix#r9IAlX~)JsKN@L{@t z-#d%>theX>#~kMx4m+PDKj)1|=X9JJ^lVUUws2;e;6r3r4336IR19ExMay{*l*Fgl z85Am^Qk4`+a}leKFRSt7s_Bd2XgyV}9E#PoH`_t)uJ-@UB~=U@N&MGMtNx@p<4_T- z7-(|duX%(19xJphjl;R7ie(@h=Tf$@a)I9^NhTMa5I^f-Ki5S3I+cNgWN=SSIx4pK zAY-{l>bvIK#p&;|us}S+nQ?fl3Fa3ew2%4i)6+*hX`sxcHN;K}*nUMCqm=yXF%730 zz%VjvOubaERNvQ2~+ltG{nr;uR!e z+Aej3-CZBmIPv7=Y_9{n$Psof$heODkn1ws<6|2K(n%5NVOJxyRJ}s8C$GfBje=&MT{SMP2HhFWfNb;FVmV?d_3^K%xRyTfEldmPfcV$E{x1Fd~NM-fy$E z)3sk)4XYHOYJ3s@Jd}S8OFf@0FwT?7GCjLdfS8fa?M6^W$8RrFh`z3a_HgAq#Yzs6 zsal)CAA)}X-Q=*V-xD{nPcu$k!vO&SLt&uS)imcP+Jwp$+SD(MzzZ{enVg;V(Iu9= zt(5@G4Wy4>YJ=P*|3S<&B^0@OXd5vwadYi%x~WH*nygq`30Ag zmWv*|jqXQRIKpJz9L{3CjN4l6=k2sWMx9phZH%1a@Reh+%|&mk#-2}A8ibTETh>gp zvQp~;k1H&^=c!+N52qOr-#*F43G*+%ewo^0vP={bErJBY!V5=G`qKey7Wl<7D^P?7 zi?Mx-(kHFQ>ihvQ#sKJAzQQ|yW14kzgDa6V{0f-Szl&sRHxCv0bRFZ*;sayAi`V-% zS3=k}<{P&*rRvXPj*Pl#@SH>W&ObI{MoCU6A@G^iXiu6tecpS`g%#y|_(Vf6uMi-k z3BWD_FYw7*pvQauBv#|IG>zr*v(wY}9u_CP!b9g_lz6lcHgrD)q6+y4XVX`rr(Gok zAT%y>k?g3vh9NQfC=0{}M;#_^x|_pTcUpwBLFhSGS9HP%z;3do_Z?cr zuALrA!P^><@m=}ylMJti3oqP#eNoC~D^-fxpINoebF=hh-yYW!9=QEny~XU!5~M?O z4GQb)%gUYR)Xaa7NE_R)Lj8i|PowdUfcOx-emNvhJT)d(wQ1j`L~oxVAhS zejhaQ2U3JsR^1<>{qZP&P6}0$ecUKtO&^sDs;a%)?DYQ~SUK0zrl6<9bAmcle2UFV z{|rlNLmuPX0o;~&w~V|~mp!Hg96vbLh!Sdj#0UWl7VQ=Wp-gLi1Q*a%hhYMQ?tdOL z=a7_uryuHk*-xDTF`anC6Jt~>El%5`=7uURISXYHb$-n3B!g^XbR4>c)>KzMkfg(j z1#Ix1jyAFV#v#$mIw!+gqa0j+AW1={+a=Nz>F;HN4!ED0$&cuGd=pFG?twIp`X5Kt zyO`n86^+=oASID({9C0YGZOsPso1PR4=Znu2>zQdA9;dp77JM|xQ9#%6Yc09K3@I* z*!%N$sNePv99N2ptc4IM(IQKcZR~Bz(xxO!jUvf1*_W{-*{M`yn?kfPsq732lPpts z8QF#rgTY`h%oy`I=YGHM_x=6l{(k;}&m4~9^*WAbc|M=ld0p3eo#$iG5X z8c)p=JQN~!i0$`HcwtBdI8EQRYWGwn-8~V9A`(2cFGR}ogzpqncw{P8Q&n~LUe_f+ z3iH{S{<_^o1i~FlO7|cwA%drJL#AZapy#2u4e}P^QzrL#zUBX+?U4ym!^YV1Q((^m zvLKC-ijYQ1B)M(&5Iqu{ln%vjyy;OrT}$ZZHrN>l*8c+dj;k(7_{0G8M*YM~M1N<% zr}jP-*}mssi30x(VfC$hMT3-GkKI6(_xs&Xei>x3-|6y5_4yhxBi?*nBO~jGYmcdI zZKHad!1u*uyRqb^Q_0E6S)085{Ko374~XTG_isxUagECZsq(fq+E!%BHe)w*l_S>S zmpCcR{B6vUESI`eM;^<#$yf$tpvniH@EYgxJRYkYuD;=Xr|8PLdyYvO%b9L7Cp*p* zgUSWFS_wBmBC#I5_3kG@-JGRi#$MTzxhyqwenTmj+8@rLaddlyZgjZFFI?br>TJBB z(KxuLaZhhS$q5t3So1910pX7AJH>`y=8c=iCR-8_UH3WxsJmS8^osMmiXj4_SjL2u zUisKl%F}S4<8!rlQetsp4{lCHot^%6Sr7|oNEeAmH@^0q$l4@-Lh}}2SG<$6c-P5AT`KV7YwZW;4-mA&&JH$JLQQk`fZC32z+o1X zan}knJO5C#_1YRJg0g>dOKkh@3>K16hh$HB0x$gegzIo#_cQ3#Vq+Rai!pXK)FW#q zn-?o6eMZsKW)_N+{TM|<(Y&_}HaEWX&jdT2LN73xeZZl5_HEDIcV~V8R6b{C;|$~` z42(%Ml%5zT$$M{U%tmdyHTBr)tCvjfDlH?`2cP?;a`NvO=q0UVzf!f5o5vY3X`wz5X|{UFTahE&5=hQ|K8n=hMp9^ z`y%~fh)IX`F;axNU8);=75A1_lFw;hzR3 zp?3(&Ey{oA<@1rAyT!5ylrT^A^v#@2ZPw*!?(&UoSurjyax}Ou#^?y2`b1-{zzNZb ztDhD5!=w>e5J#-Jk?&tj4S-d)q(oB!8|qg|DH|!LV-_YN5r&3(>+dU^p@}d= zRK2I%M{s-nDRNtwI%2!(Nlwbil-K7O#l)+K6CqTf-329OF%DH=c~ckNL{}pPHrAa? zyBc}vrgZA%MJ~E|bSwJIQ0fY}djixY=p{^cZrP0k2v&HC`%kPrPY}xyh7Rp)%3@R; z8l>J8j*4zuO2j)u?x&j7^mNmsQzMV=mz}Da#a}ycDni7jydQmZt<98YWp9-tzr_n8 zPXIq9s`ZD@^VYG@hCPIi8|vO!2{%L4m5{pyZq;uViD|iYbgSnZBpQL8qNt2Td|8+u zJ&oUfIXw~~9ckXEK0Na2z=nI$)8{3}Cd8bVZmWk>?7i^_F4pz<4|gCu(|6U+v|t3gAz~PIwNUwu!q0!AoRZkRvY@65~GUeKvY}%28D378k2#T=%K8w-5Gxi+*~z- zlu<%ff=idBF*{%H$|(e$u5aRr-QiP{;-;^o^er#S93GenXZ<<>Pg(i1N;GBiTr~6h4M}qte@HST zD=kBq^N`mJV^$Y1=JNj4F?1KmSeJmIYcH^V01!dn8mfANZ7Y(vXA2|h&9T4!!P{>- zwg9790`$E0ySx(F^6*lw;SaL6Oa2cZGt`x_rNKEn;Ze0>NoPPQN2xGsvR`WG_FpFO$pmWtp z$9^#sNa>W11MWMqZ}_gv>ji7fbzXj}jF4=@jlKW7bukU_C(d?I-QmCMLtOcLG;^_qOCy_}Zu=+yJEO~W4$E-UOmMRYsz#7=meM@D4{SgXACSrC`EjkTZ?Aj+&Ewq_ zk<-7R_qSKK(JEB((*k%(EVruF^>StUjgM!d7luL|8#h7jKQoF?iQ`kJh+P*4#3RY* zn2&rYpa%g1&Zy%qZSaWU+jUG1?zj}Y?2{qn#dR(C;heYA3>WL2|75fOE)7d(v9J{N zc3(Zqq$qotFzfFCUs+Ll27(+Bt>F0ph6uEKKkpm#{fK^e8LTw;MespI3#Z7Lc! zs_az(R~k%T0*$(5Dz>f6b$nP(SYo|b*$Dy#m&<06z}V4&Kj zWg55=p>Q5|&00f&?T1Ohpr^k1BUe-E(c{`Yr=ZFDFP929Prv`??t_Qv%lE#t48s$$ zlKOe;C;)LCykA4V2k?^^$}!#-k7Nq4SS-8plvhM6s3p8 z{EUqw^bOdDM|A_O#! zWw;X(WIclJL2&j~wnr15fba31;WVeP5^w;zUMQO9eC#5~5u0uz8mAmcZK+tP2SvNu zp35db=hzB7dp82!nj1)lQX4KLvK|QEEizAxd6p=$)$j~v+b;udq095BOUVBImtb(q zk-N2pPdZKja0=)`Fgn(Ktn>PtR-?)B($4F{EWBjrqXU6_uz;j8ml=%Oo?F%9kc+dK zRBT+}V}GGz56x7ZQ{e=BMjj{@TkWPY5ebM705O&mhc%q*z=b{<8s4s}Ae93~B6aIa zYP8otoa1E0?xBu5EI4-XttW>V(qr$=ZqQXT4cnptr4e~PphMtLsUh(ZB0=J= z5RRA{{-y}49oT-4Loecmx!n}7^?<|4D(wRQUUJ@bNrhiu`#rGVR~)sJK#3qk_1&p^ zN`@NVx)_2u*%09b#SubZxzLdhXAa>Sl~`bB{#M_NT-%dv=OvmjZ-CspvB~ZGN6pUkL0_iP zh3PCvHE}V0wF+4QtpUDaLB&n?Kdf)Y7R+jh?3pml0^9u3kz>{xr%a&i6>hzbx)ixHNG638`Zz=L`Nj1aXOFyxTd zfGY<^#d$cU;Vm~Bxlh-K*HKh;`W5kq!9j@xe-!E_yo+TQs=RnOq}DO_${Xvm4nK?o zKrlq*nc@DW-s_KobJ4j-64L<~N`v^@P<2)4xB@?GyUG>-;p%UR9aza!`1vSX(i~ z3p_vjtWmJvqf2a3`+R+UjPyuACN6EPJhz&1@zP)7}?1tvLw z%63-@d^{&6s%RU$=&#COem>Mtabj%hvy^)aFXzUii?ZI_NL#oGIxyh9)vZUOWy=#Ch(-P z6)_Df%Dw)R4oa22Lzf_yxJrfK8`n-R__2Za}Gt*)AA1c36-d4G%b zfJAY$59EJ$Got9bwk;i47rr_UHfpfbKsf2*h`=a?b-szOZ^nNwW7vKp@5ztAAh{0l z3ZbSWym4BiCxfJ7eD-eg=X zop+0_I^yc0-PayL4Cp1mAyZPs6{Udmg&L&exmhs_Fy8PV08?jcvpe@eR{Ngk@yxAG z4-P+wumLg#jGpc|+zuQS-i%jH@p`*KO?AeJ!%Q=xtF$WC+06S@7*9nlx*LV9O&A4l z&vKVe8$s`jg(K3q>tU^mm#YDmG+UOz;!d>_x)`_{tAc-1C$gTkXzStq*rMlLbmgFeXfs8#9F zml3HkKMvMhJr>eQ+wQ6{7Y+G`(AEAot4oKo)@GgpbXA ze}}h;=a--v=X28R^#bL-%_i(5e~JBb>FVEiY{7U{cK`Hdg#p&ccYd&V=-5TEIPch3 zd^$o?q19LeMWG9-oOC({({HT*1c^$1i6g{aLO)j6r5MO*O`tMpBkz4l@V^z zFw0##Vy3u~{r;b$dm`^1*)#8RXnf1k95Cn`U_Io199Me>A*a6@^B{YJ@MZr$>C14K z;`h39g6Hyw3y=35|5R7!1?T*P&=Zlsa1)L_|Ij(usP~a?aBv1sl<2`osa=_ujj+G> zIIG7gX({fKZc*s1KW03-?bnr2{_my=HzGdqg%iRv*h5=fz5pC*fg+4) zDpdZPMd5oUvXkty!GAdFfQ_1jfP5^Oy}`yewef$wy7*7|<-L?%=jNX>XQbxzKpo8{`<`% z<1rGYyht{keYLG5&8s$`jqG@557@Z!GEZg!dI_e1to5=>*kOP2432z9dsK2 zeWWl}`#OWOP6D)-eQaE)@N2y@| zQHIxNzlRj*jfYFYi?|X)tzJMn=Ghfh+42t;y)y>F z-s=_tk`*~X>{Gw3WYqNfT8T)!^?sl_{-oQhIo6y>=$v);1;eJb8|r7Gtz=0WWwjed z%J!;-pF)jvHGK|S9g}3wc!hUi>(<|Edksy1Y4yA8`Moo6qxm+ntP`oW_jHED*X`}+ zlnM0i0H6Eh4_C1ljgGc{_O)xx)b?7W6O0NKYiBpQq)BSPJn#3NDy1F6=yp0^FafA{1fmmDy}sxOKQ;N4pMg4YG@|?Xs%2BY(MhYT>0i`?oC# ztB`~O%e z+5wseKvc{z3NOZlF%OouC&%Cd7qwP)El>aX@@xlfHG>q+G1!@q|Ekd*SB>6ky3Vrtyues8kHtFHcFKpZJ&ErQKK9T^5}&56xLP?(er6Rr$G3ai z(xMMC+1e8l3a2G3hlyqOlh$8sdwTY4i@B#+?YjlgO*+^xfGK5Vl@xgk0$rfEeYB}$ z9NIYXrzNN6?MziB7XP-SK6|#TVE#wr;6aJ0RRG^y%#_0LmN-qXDq*h$4ms;(7i=Ht3-x-LoLbt$eI6xLXnIGtMPF4V45+R@yEHn`#ANH%E!KA9k zQ?SZOaJ@gPMK~n7^sk>!uUT?tK`?Iq}&)RG?trL-+`r}N`W*(lDNS2qX?6BcA z8=Ie>RkCYlljI%oK1Ln%&49=%8qs|>=u?FHzSX_A!WuQbv@mv#JJH>Wo2WABUAyy6M9K>&LgOPZAnj%kjF_YIB%eB>zoB=Sv z6N&x2n`IgSm^R*a7ht}(pu;`SltDCK-x z_ykLKZEgP47+`qVV`|~Qoz@r9N>_Vv_Qs)q$Vy`sk@UZRZ+W!8Kd=o_JIBM_K53MD z_qwuVrk3Kk!wK;|`I07;7)~T?C@<=0^_3Y;_wAq9sD-X^B$gHB7=*mYImoSJKn>Ti zCh&<+S-yBWrd*X-*VQ1}@p|1X93DZK z4f2u~o7Sp;B;;%Hct|_-nxl^);0h}Xa4}^2@GPekpS7@JuS4CV$UrEm{`_nsYC!q0 zVh7-&#f7ofZd_Bz>;6ew-w9YttSfauUfntfIp`is74#&)JjF?5!s>M0E<8Y{f98^& zYcv0=Ko2dspHts=G4JyrFNjD+LGjGZtc($tg~3qQ)(|t|aV66X)X|suM21g$&=%;0 zH&fcHg4{aXS7CXvX5+)xPFE=-a46CJk{$O^5|aDoGMrR8f+0~i+$SkB&z}7rSKCbe z=7qDaEuKhP97G}0eBJ^jW}U)W!?=;6IlJi2p+-R;0lWIN?`gX8?tWWNZN;+oON&lh zNS^2Vf{9Q)p>{mMlF+BjnJ}H6Q7QpR))_)G+f}QqSo~5?E{i@pP*Jxwrp5%H->#b9 zsmj*D!d?mUBaEiisC8V4I))@k5?c|^;K0hs!;w7;eXIpuxNlviB4kGvSun!tpw zU*jx$aS9-twy9fZy6f5g(p6LK6T_Rr*<;ecUohCAFC+>u5>xm}okW36e#C&$u!M>Z z8HU};(m-9Jli^#{WG$9q0Bx1dp4PzRKf{PKkQTv0h7wr`~h}VcfyrtFc^@O}~H;UY+{qFnf(o;I5Me9B4&( zO(`>TR9cUY3A5yCYicZ3`@+_R_@XXbbgqhi`J*yer*ZYLq2z$J?`t_m(%N)@esx`4 zIMp#PbLE~Bd_OZQn{-79BepWr7jbf>=w*Ec1tTuc~x;jg}ppH-ZTVhzigQ&C#mF2_+7;C zN25kGte&lA*w6nX{?$s*d!X@d5jyi&o48HRGrD=ZoNrE6)*W~EbM#fjPK&q}QO7L_ zss9Y+lebaP$|`4Q@k=YKBkhjsLF`>C>;*-e0nO2tZ?>hRoips|*tpvkJHmsI_g^MV zuM7n=EmlN+uD;Vb*eE0E$xR8q#{ER?5@`DBQSJXeLh@j?Adq#lC4|wOCil5-uLZg* z&Zp7p(q+FMp^H!bk-}Hsv|Qpl2a%45jLrxhErq}KF&wSR($<>V@z@@{6q^aMjQ+fuw~Fho_NVeXNG`Q+E+iaR?b z6Un)kEq*01NWk&33mK@TAv0$mD3%yUI1y)c!{7yvXnNqG>Vt zJ20w;$Ynhm6AUdw;db@|koR+^MPhiv#bLyqAVw1uJ$(wgCi@;_VH!&A zasG+q-2Q2Y%XFdDLZsqfeTa+6SAs+85T-pupyyP%`V)#cfahX(-5Q#u;o^yktSARG**+8??Q5Fe3gt` zD8UaeGq1QmDvUKvdxiv2=fA3r`^hB`}f_rt$@+DVv1^{uam z>3JM${XA4s;Ji=imd@6OIC(i&zf_*%O*bs!0~h|b^ts5JALPppq&5~+oTrN4LS7gM z%&>6Mz@@KHsq-xlXT4bH1;VhaaZMP*r*`Y!<{M68hR*GoO@v&mT19nrrr0w@2mKPf z`RS4s*R=(<+^C|`$I4Hm++>4efFJSy#je-sxvx)dlvRG)q>+Yq&pd9^Z0LuWC-|sn zj5M6QOMZ6>Cz-uCys^ouBf(q-jU{=c*(3IcDXoWCb;fSqTOF;Cy=Mn&aNf7o^TE?q z%JSAq)hx0Bj}lVC7n zC#yg^d!i?83$-$_!0jspvzSRWfyrRok2b3?z7LkIZZc55=_hcxsci4EfPuf?gO37l zyv~B!>vUMLwJo)I7_gjG#eu&fF_Fm)xXLu!`V#%LnaZBP+#2yx#W#!}qnlE~2c4!Q zek7Y`$|-wi$n)?7-Ww41c~HSRCHEyrWlF22qNI1TsKE=mPV?pps10=8l((94aooUY z8Qn#QgZ(+cZT*PnC)+u$b(!MxJ7x|>K!fIr|t0c7dO<>6?C`6 zIL4;|!3RHb>!>-M2c4OJD(}J}B}x#k;l?YV3jwX9@c5CA4Z*6QFOdIjLx+G40%1WX zYme2X_tyuWf8+$}5cx^@8p`!0l%)(?MLfL(vVqCkN=W@WA~h}Z;8m*IY#Zz9?tXZz zp;1?g;1?v~Ps&!F6nxW{yn?h~?YT(88xD^atlO`ZvLqd;3H15Vd9b-u z*_|xHNlaJ^44vZD7${tnOUm4~p|SK-oiKO#A&6mxb@}&5B*uDt>0kBSV9GdF)nrt1 z&B@WuzU#i+Q~Kjk7qmH1h_r~76HZ77ax*;flK`zFjC)9k{+K3n2-V-&?p`^0Y$;uN zym4`+c8-x8#0OoncWm$LGCo#s0-AWq!D*y@VtOP!szmB~u*fM)K zwCX0YFO*{qMfNv;w~XdNvNCR83szkTk|8NGYT0e^{O9%k9nyb|wxy>@&{aPbXUa$? z7|%>kgJq`Ln4rG4Z+LikQTk=syhhY5ZN5Jw!Kv-pxDgpf*XIQpC1yLRR^7_)vUKBV}-u zn~rlAo#n+NJy3GT$JMJj>M#*+KAp|eRd%`5@OH(Wkhi>K1BxL~RmJYaF0p1qZORi2 zPpHb-g!0`Vrq)`6MsU}S4*o!oTDD;6$F_?2}I#SKZ}p7%lxiEzHOTY}A< zQD*t$3I8M29i4-(L?n|CaZsDi|8wt!m3?gH4sFXFA;0%Zw17c}Mbt=U{GxA=vEECI zp7+1beTZCuh41Xyg%d?2ap5V0pb7Ez>>XtD&z7lQHCiCkz5~PPA=Z|<&pHQTp4r6Q zwgjiB!mU2xL83>59tAxLy~cbhM}GKKIiIZ5pi{Y9Qh>bG6!oA$U!yB~PkeN4P2kkY zPAGnISCNXEcjr^Ar%}i($+NSc&xlIiLmZrS_kP+vIXP+f?TW=XRbng3gxC57{^UTW zVU(?6V`2Pi6}fTH5>8tpLrD$kQfCCi9LRr*#DC#9>mko?SNc~GzPJ*G+>bey6M8k1 zpbxb){pXnZ*-WL;M=gOrFJu`9prn;2m^-4Ct#k4>J(zvqg_(6ZS(ofYA09U5Mx!mH z0Z!*0$7hzK*@h*DB_{vuh|(wksYci+&r1tPL1F`tT{XuhWSXKzsNG=5Ama!0ocvIz zC)*k-4@A;@)Sfa!e8u|*ISaM&tO&z{^$fJiaTGlN_wReeHaNUhR;~9HSPJ~z6iuty z`sbvGHcEeQ5mH}CG4WKM@BKbFc3SEAesi!u;AWmZPX8*IDmXA}sg(M4kF2;BQsc#n zA!}7kTOmMzXL*n}jBoYYq1x-Qeyl07!feb6Ef}RPk-tcpS#S4{QC@GWYB}S$7`nbz z`RM!2Lz`}D@KqP?3`lh&OZ{LxVmVqFdK>ki+i|p2LktH0X+7S<;=&F$Q4*1;X(??6 zE9kQuJ6Jv?2R`g`A^Mue-0g1oPEpB;saMUmmvo*~4b?O0M9+Ad zE?Q#M4%X&CDkNkiJm{~_H(Kz@_Un(WqRA#Hm2OTX>n!1yR)uc#OExx8lROjNF_T*- zdlglzRF-P^=7)?nnH+dw$H8^L2uPDwa;S&5$>1}R1Iqd5ADS!g9oT>K8)r~M`C#_M zu6`F~5qywv-6L^6C^vLAKkGeCDl^%mbhX*gU**B1;yXy}t&skl6*vvsZK$;z#jV)) z!W7$jebBTA73E%j-g=tF^3l=JskrhhI(=Hw`ImE`a-#k_yI{$v^+cpe7fxrfCaeDh zp~;t(IM^tqTx$@%j;NjO>A51kuleD$@Tz^ak(UaOA)Ez|)weuee_0(JJfOYoR_&QO zpq3czuDt|`vvW%;K_Ylx)yG{|-@3xSNO^31k3Mj&JbWNv_h6->m&+V8iE?AqEqTz? zVEx$8t%;4Lo|)#a;FytOIc*jsJ6d`_WvnJ_80QBUtl~e>ZZ-5PG%d(#*ep!pa|L)$FW6 z$!lD~_HVo07(|9u(HEWLbzf8gyOSG~ml7!FYK5c{`~s89tYw9n(&U07Tl?b@UXzEr z#eE*sNJt6SQYG9QD5HcP1~@AafsFyH+@)EYfK=ar-2*;ihUb+#cmrjJJj{^m&#|M! z!+SjV7PB4-ELH5m!@MQmL_sn@D^+NrZ=ZKu*5WQ}55`cQ%|_=2?Bxhfri znq+L*eU5qbwPb-u)#po%c)jeG>?h#p>lF4yXag*(#mpgFT0@M9LRP z3LlR}+Yto(6YdUNxnofLCkXw6u-WS|cS)8>=N2@ySe}k{+S+O9p*kA;&F*8c)xT4> z%5rDWNz~B6?~pgCcTM_wu<@B)&etLF&*)!Xk3tYGT_2InvVE)U*~l=MHq!-6{3XYq zuzNDY{7GpYbZ;kUGkFz>IJA97;mU_6A*`@f#HGwFG=IC1u6wbht*EXtl z+C_H^n$Mq+5dV2vij3x3AN#zs1%$?Omk z(Ofzqm9idY`0I!JMOC|zfoCeMi)nRhC%^o$fHIR?Xh4@Oy^L^dJWiK(bk-==WAKjV z*`}RYUb7ft<+!78qHf@Z>b0YS&Mj|2eydDQqGEDBU`@lZU z+(IxF+~%VW>!3sYNCm6;ZG}Ld%2Ew zHydx8KMVDrom2CO$4y!4lwB1OS**%{!Ei-458-FwF0>CiKmgE?f{4c9S2J;Zj8bR8 zp>EZ)RQ@Y7uwOBnH9#Y$`~|OwQAl|bsu+*z9TaE|CCnfNbs2vub5&)B+Fwq0q%Dud zyIgzGmsnw~-qGSmxlPuRm6tE{Z`I(Iql=TYjQ*+`CF;l--1jEi>ajzbsxM#OdGPV9k&}c z+|j{#zOGz+j7!pbJhkNCeRCi&Gl+O=+7mJ-=C*7TVA$0KUd#dc+U6m zZ&Kqtg(feV3jIM}6sqL7$=^#4KdYQGH_N$^XcIVkYpK8->0}03a!Qxfqp~=C8+3TMkwb#D!ob&S+c8(|>*=?iDI;qR9`F=gP<*#Id!j_gyxYMzE_%rG zki=+jV)Xr*h^f6BQ6uWALluMZ42*c5=k=OInn_LBN=OIu3x|Yo*G>A-5+U)jG#z;Ss~ph~y6q~&O{8?Zix(k+zS1)i55$zb-8Ps~D$YfNl) zSIcQy9!NM8hW3(3eokjO64wOp*ZmxC~nQud+b z?O#~CzCwC>g=e;`teq&Gs!3J~DaXpmG@BaCVp;1c9v>yMyrwAr&WDxW>dV!p&mcqR zpY_?EXe3B6Xl%dh8aQ0oBZ0!kjS5zaphtQAx?qA#guQxGOPwc8JA2^a^YmwbH?LOA zO{V@Gy6Qyg+Ip6|L^!|CJ)oIwMH{2cr?0Sm@-!RgWnO)6ecV{9X^AeTO&)e$fFNZJ!%fnHhRi080>$e8=3x54*wvBcOmqRfSJF5Z)3hdd7PYA zr9rH-5u?A#TpCUMbL8$*%7?B-z9^Fnv-^lPmoM&{<9CbCGW0Ge=g5-K5{>S0qqx9@ z9M*F3R=l&to@Bx$Jo285^WOCW!l5w7^*;kfap)l(?QudgA-R_kaPd*9;_+F?449RPW{oC;|sl+PGNqhcScHPX3hxyqV>iqn?-P2YFBO=cKhet#>p{W)z zJKfRHob-5*5`ob|4NPv=$Yj2m&uAWKu9?`ghKA_YorRLvF+@7WbZ4c_m9xB-KR{>V_O-GylS6Vt5&}z&e%@ZvzVr9Om*vv* zt@kB2jG~7t7zf95%#xx%Q|PO9ITi!Arb=BYUcuRO#hLgTLpe&nfwCw?o;g0gTQa$F zmdWz)DG4)jM)_f}!RY$UyU8v+I{e}kcXH?_qKj=FtEy>f8{xDel+&)g0EyT)>4EEO zL46UEek;{GsLO2SgY9|dXM=2JwVQ)hDl{}b(-)QQmPeHwiPd$>93Mr>_ZXE^)&}@0 zZ)6KJuTtXNZ?lH7}lZ{CKXO5;*PC);G= zM%D3eMsI0KPvYgnFJIW<9`eBO8EvfP*5@l94;LFW5no)4)O@^*R+~c1zI{y^!+fa)#r*p`;G}KW;ie)+u1M6SX&8B>1|H#-wsmJpVttTE zp@{s_(qB45u`~C|y*GJG>(wcTm1$X~Zj;tiYog23Sm^AS-K>Z($7ZsI>gCe9y1L^% z)8h`+?E9EQvwspQZK01ECEyjmnMC yksO40gAWIL*l1oo!rxZpdiD;QV@+Hk5T_ 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®KKtKtk!D|Hid$E7zmeN7qUNYVn~~jh zru&P_^cJb*+XVCUge&|`j=vj9@*d*MgZ|Z%O*+@3@ia3XS3M z9@2fqHlDNvKM|r;-#Qu?7ZmOYF(~*TwpDgBndI{sIlgz8|6D&#h&)#M`>^KP-Ed<) zs^P~!5^QAYt`b<2?q0lmG_%9W%PJXuKsSwd89=Y?H2S zl%Z^h2F(w5zELT_NI0WyaA0^^@&X%|jy6T|eljyoV8?yM>gr${23!}yEpQqp-1>?i zxglP_Ne0ISm+uH~EY3#=XVVF9uC~q~-M~zXy{|?r)hFw*BtXyo_ZB(eAwx+n7SyBz z;}o3lK*fz5PVcg>nsk~;S8$9%q*r=QWqPnT?k9i#qeo;_jLVLA8U^E;nCgJtIf=qsX>SF3elPuFGudkFxosmS29FJpb<-$@5tv z9tDg@T#5{wbfo%-vTm8b@}C>HM{KoMZ{MMuihODmd|i1(uuw&BRIGatl~;svp+w^s zk7>Q4&Gg&sv27{ z{-i{kM+dR(C^j7(@QG7et@iDr3_6?IGRVbhYB-VsHlOUF=LBHDzXF}Rku z@5MEje?Q58Ug!X>fYMG8A!IZ^7=I7Dfe=bZ2SFLm#RJ0@PC+dsnC6UATmhU*a9V{c znxE>4Q&ABf3(nP@9c2a@UA2C$4z!Ol?T+6<4Al}auufb~!KrJk3V0xJU*Py`tUWF; zwbhL~|075PZ4h(;sV-pE4<+p%;w~gK0OTd!^DNt{i1r^z0?t`!d>k-Ku$8fU0OZiw z*^q3`vLOk*c|LNmVFf_06nODIz!VjclmyN9XTIEJQJ|GZWRuvy8eU^~3(#o+3ivpj zrPhhb+@4ql2!(*=04ZVc!SHRvy(1hT?)Xkb`{?%MZxj-$FG@7Y&VR-G*~p z!a4*AqV*X2-Ui4!x4 zkd>MQX>BQ}prm%U*8D3K_|b$Gsu$3S!sHP$Y7AC*c_f?RZ^d~Rk5KRxuG8T5;oOAM zeDtU2GGO%IGsAv9qb9954?^6M^zg&oB|3$zHxDX2i(9P3|{ou zk;(+eDF|X03T59N{?p|L=ef>fEs*M4H&A$sxZ%Bk2*bBH=K8n5@ zP(4*C9akH|Z23TKIi59lSY^>T%J;j3ba`8DTyWh}(PEoZsINBp2IoSHpqY2rweIgx z_aD!t3_fbERnpJpw?U?j@Jwh5RRjWz5UcAv} zcXu59i-_7h4u}^yVPu2tAw_KODGJMZ?x9657FOmlF*2GUT-g{9LsCL|OCae{bpO_o z&&1hJ0*gxpuJC!iajW5^kp0K((_T0%<@;-erV|Fq% zO*8TK$2zl=tEWyfR&g#+^68k2UELkGf@SYoKiFG`d*gHs@ZOj*fM8P3hQHmU7|0sH z6-J=3F3TXjFuwpDD!8UOfoCS=R_c6EqL$|xFa@jZddiuK1!sf-K=7*T7dZUwC08s6 zL7^C&EuItN#9aiuy-JpWQPQy1W17#dtkh4JHy|=0pw_?JIAfjv9FT-iud8id>T3W7yf40FpFxSpsA3N%?we0~*T~_b{`g3#sXwmwRj`E7%=}{W}^& z=4J`P(+m%m*v*w__BhSnXe-cbtMlhgYN|cx>!k?~3PJVx2wX=}pu()5Fc@|TlUMku z_lZrPPLluPtg>#}U_WFfKvul7liOlka|A`bwfe3Ma{4WB>Xd2VXutk8FK)5{iO%2# z

      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�Il;zSX z>VyaQcO8(fls6yF*uMKWLG}E*k-ExG|Mb2Si!<@}{jS}uWm~jU)_r!Xce2Q$zFzii zBp-dD_P}ney~ovfeqD@UJNtRED$x9U>v;GfXlMNIA`C;e#^MD>Zwz(?x z@Kn3U`)+8)n$S^Qqs%j`HZ8tKd5yAW+3e#Nu|vZ^1*+)n5DS3hkc1=us#_`4Rf$ zQzfnOZKdWhSXMF}&Z7w)ZOyEcl^FHvh$HsI?tPQG(iDUWlR-&IDw zcG0&zwdYaHGBC0Ro~0fe@z>ncmc-mYeR4;sEI;;~R103GlC5RGm-_6d+V!5qYpC&B z^4Wrxcm0QqR9O8~PJxYdB+f(Orb0YMUtfP^djm|WIBJ%sc4S%-X;07k@4QSqfAVC& zBUljdKTPOkPX2d6^d+qt5p>-nk)eAcdUoo>_|EtVv}^+dxuv|+xp6&aYW75nD63Nq znXEQ?4JD29Bv-XfwxwHi0!)lmnqvvP5}bZ%sU`@OJ$gkx8ys!MEa=Q)_v`+)f5o|X z$!YQ<4zYo$>_w zG7hvpb;7dp54~7lO@VJZ1W%uGskhYY-D=ItA3RY%8DU<)-Y&ex&U&f}^m^y04)s0T zjN(8tBW22iNhLO4hX*Yyi$k1=*Vp6DpWMrT$%MtP_@pD4hSc*X{~IgT*a=z!is?`- zo@m+t+*H+(DJ5f{6|)t#6>6KprVk|pp6xdliRTEey42kj^}RE7bDW%jSd`msJTC5I z`#^bwPr4HwRV3#tW~w=vSF@%SCNFJ>BA4YoOE8TpRE4Sp@eXyYzjd3A>Q2W5GdYY? zddAn4>WG{-fKqL5H}!Egx_q|^+1b~ny}gVQEWckkw8>*?1%MrOxfL(<`XVdV2~4hGA51PR zL%fso|l6aL4=@fX9}3T=R#f9Q(YwD>GWNYLviO){QSP5x{3Sj0xYFUi%2FvlvJ zppRk$4<1YAu6`jMb$Gg3;-1@jnenEd`Pa(}`pv!<2Py(PqYE79kw_6R)qR7U*LKW_ zPGYX)%>#+ZJB`07>|>AfJbQG9!7({Fr)Ot8?HT*|D3rr^%#k!v_usz873D@OGuE5; zU4Y?wLLA2=#qT~>M8YewNS=zDM80#YuAH4Aw(J$CNRe<~%K)R{}{%yG{#Ujd+?+wtFm_H*;73wVV&jNc`jZU;663#m*WUcTU(mex!klZf5x)GRgA< zjg=&GQT|SL`|}m19p}ev>pcDsR~G-Ccfm$nCC1l5ZM^jcjRP>43Ei(9-wI}C^2U|( zO_n(qK)VRrh?nvnYsFU)Z75=O_oq_5^1bmpt?lRPW zT_(aD^0N`l!{mFeWcC8H)mu$|wquoN?4!_RbyT`!lIVC*si2anx>qpOcEc8ki<|DHgX9<=1$(@(wX(sE~ zT$x^x*9ed6@{o~p0C>@x*sNQl-{q67@*ShYA#Ar_Obx8t ze2KrqkgqCtSEY`1RksBR+=?=~zbOC2cNe*zjX3(IiHR~sHqZ%>^l_K8f) zQA%G5QyYS2>gC=DCR*yxu&aPKVrpt?G;ZrtM;cD!@>U7j_{jFr~!=9`>w0QY>N%5cGAJkt`YkM8ty}2^l|I?rI z(_yT5-sAtMPr)kXHWM^_bXqH-z}+|SN&LV%%59A;_eb3-S!8KqBk$-$e0~|5lbid9 zf17hEnHQOSQ(7XUp!M0|g6VjU%S(ZhZgQd|w|P;hZ!gUB#Kl^J-70sCA-owsC)A&& zr1fahJ?j`Bgr<#_V1{EzT1#91hx!5IcBYkM># zx(5A}!7L6auqDjO%1TX3TWchjMUMC*Jt967il!fZ;xV?#!NB;etTd}O)ZCokK(b6k z0tL|bfO;O=?DcwckrmD#9y9P}^Yr}kK|Aly-p(>`NJKP_o@`thjMv^XMUjw6Y|6aL z3Xz|`KNp@WK_POk>UaFRYR>s(oeIXMs{<9OqH3zksY1JC{QHr;MNWlyExvf-4?L_- zj~&~W`J`%qI&_L`C4*X!g70%DJ5Q;u8qqE~vHg7k5^}@So6SmQM`Md!ll`rC_y26j zdbVUZh`#{;YNi}Oz4w~ohWXASj5`xzN^_V*+*HtM1Tz8*`+d1-C`oy@JO znNfS-{?V(d#_}ZNy)mx5xy$cDV&%u|f2m#9?{s|E2KH_t%bvgG8@r0X$;kUEulxbK%x0hf}r00go<*EBD614Bf8u&Ah~T z&2RJKdlRW_8olpZ%-6+-mP>58!UHxuJAuyz<9Fn>16ta((ud+3_#69-Y05ri;`=mW z2W*LNF4Esya_)ZM%D2o}ObQ|W+;7dZ?1~oJ{9wKiL>9K(gw?JhoY@{HwDp=b-)q3?fKO zFhw1d`e+>d4E!_(TNnXxzHouu2&u6D-?gRCa)hacLEtPQa}K%haj<uvElC+h`B>M0tN!LdQ35f7 z9T{1j={&awDC)JPk;?akEp+n9nF=@8pAdhL!orV%du$pGII-}e`}2%6spaX-GF5V9 zE@x!SOB|Riz^lG?6RJ;p<|ea`93+kJbAk2rB;6_kjK=_ZedK^VyfqQRoO%BBmXMyc ztaZ{)EOvq}_02q^t>2gu*HEPVh~v8lJr(C?#mq;7y$51RPDJ`QG^46cxY&Q8Ff=VX z-OwyPYue0;MXRv&2%JA9<&8D{=m};z|GL&TKy)|MJGS6u7Q%x}v>-b75dJQj=G)H4 z)sIT4#8R{hw*QR99U?asZQ%YvM1ITTr1yGSc9t2piO2{V~@zs z-Cgf{zF7Q!a^kfti={@-j-9%rSQGt|=m=T?_sv(*VxbNE~wyH^i; zuJ4`{HsygqO9k!NW|qp!A0;pB%#5)hWU;(s)sTHLJamd~ylCEJrd_IUMnr?)3dQk2 zlTbm6Qzw$g0GpVdZ8bPwk;$XhH;?EO0!o|WxO>{BanhM@cvAar@@{gdzkZ};(?9lP zh%Gs9*Kar;Mns4@AxKmSwK`qT>8gbQV~6X>c{=9wA4FK!mmd@PSQn(z-#$#c zUb95%)a<807tF4zBxm;KXv2FsUjJC`jK_VFB8M)G6N=Yv+IxAmcXoC@zL5fi9^YC& zp?8+MReqk;ow$E|^Or#qmEivfpPT>S1>Rkq6=@Dyr3rv85ti zfaEjY`yQkgCmZdznbtPuMtrVl4!Xu^sOk3Kc2Uu0w%tJwC~?&b!W=`@x}Ev~hw^Z+JXNd%RW0jMzYahLLVN zKKBE9{Y=QHnJ}tso}4FyfJ@YWet?YEt6z{r+Q3NbJ0%gn`8?5a-#S+09I^ChdbM4U##i%TY)uZD?Bxp1%wMb8B7L0L5a+^g*Y2F7_bGjY};VZUc0G2A(fDj zpl@jC=;{hX6i5$&3p6tm{14gc{d_W*nJzAZwC?rm*Y#`sYyS@mP*zpNj&*|81z2f+ zvYf&<`-w{YQNSj#h9fqd5WJjmGKloQ19k(h3k4 z2XQ(n?9Rf^=d!gX_96zFgX?iF?FHHIKg8zpy&R=3V@w)~bvXa3;d11QuyV6&=k!fu z)dHGN%udGHcr*xMm8U`lR`OenpUNHf>zJN@d$7w*1Wo7)?|pRtyA4LtPLOIfH-nSV zK5GuBOYcvlrZm{JBo+V98hanqq+kocaRlxpAcbC$i$nuCGh@htAa{dQ2yf7TRQ;L? z;vep@I@Va`?K1`zGZ@{%e^_c+>AsWDSO=uG#ibm_E^w>09fB_h22dPE`~>Nt1gg!b zX@Ma_kZIh1!~d7>`EsXm!qj>C-ILTAbh7n$GaHJj-6P)Q*`%4$lgVsWL(fVXRlL|U zIUG1Bc_~SgxChJFR->JMnUOVpw~+XBsZ}GHae|$RFA}HlE=k)9l31`hqR5 zBoni|A}w#s+c)>41ZV)?MG!6$@J{~GLPEq}`$dna#M=Lpi6YMm76nk*;xWJkvbrUJ zLqS>rW_pPEoV13s3;Y~}zyh6d4<-kcri%y=!liwqc-oIZ9|vh*L`Y$?emycm8m zz&Lrpra*@xm<3MoO-RUMAXPia%wj+r1r{T4TEIT^&YfO!z4W4vHQX9Zt<=eX5w=28 z_c>{E!L+?p_jAbr&&I-94ofw~tLj0PjE`5j76Xc_1Aj@btp{9`Wz$QwkHzuyB%)89 zl#&d>|9W^BLsoMa`f+*5#qmhgNktS3(75|Uu9xm^LC&qxOM^5hHBTIiiZBs_zYp?2 zFouQKxC?ZUaYU^bN~%n&%$F}5EOH^4!d6%@AnZ=izh6;eB`Ws;`w^c z3v|{FCIM>N`DKA?we~+5-1Miuh?Wdf$DOd!4R{|G%=Z3+xRaMFA7=iR7^m6P*__XV zFT2=s3+D zfFu!T=mWE=12gr2^Wz)y{Z+nylbL=0_#*~HMMc8UtqNz&Db`Z%LQ{U9upfs&r}ei3 z6gwdYaC8*<&W6zqF8=Mt?-a`pfn;)L@3x zdr6HG0^g6HL41MWFli6~VMXjci!CQ7vbhpVublE9jDrt17fP)=CX%20w)7sgZ;6jP zW&KiAusGq?@dTRssN=KbsphoPPdJ|N{A7RH#+Gh>_CLhJHBnG}^8OC#NVvuxu%ezo zcSC?gD^VROe*S31&GWwsvvVG~AFKt&j(N%;A z4C@>?8;$V#fl&uCSi`iEPp{oIV>x8@9P0hCV<(@9oSNO(M?F!lu)#&tnd1{j<3yy% zKAG#o)!*93N6*BcdtGDv)kfUK>mJU*{wqzNQ!|%#PMITju7Tz<3Fb8BA=)|8_WJ~_ zjFrx_Aej#$|k;d5Zlo!6cKDi10KNLd8IE^C{@j09>|@a8qF_3ez3 z-8*R4Llp{5wcZS^n=~5KkDr1oGE_~Au97~>pxOo6K^|!!)Y~ZF-6xb~6)qV3KWEyg zV%K|oSUi)ujOgf*fb-x(RLDcHWNiV=6FWE#fCqX3v8% zUTMCJJQPPmz1fgszS=?YgNVke6gh7A_B)|2&bQHNS-=vya|gJW5M`hugk%g9j=IEQ z%@yd_ySlcxjrp{~t)qjONgD;u;F}!O>4IT|)9(Tg379Y<&juh1DjHN@CT(2N^`pff zdks}sy3aoy0bp9gA%7!HL?f#|%I^X`fb-BnzopudxBs;N%+qr6SwX^_W?kkfrS4V= z3!QW05!JPuX1fCQiuAsz!t8E=2n+hS^q&_Tza-U-DAozScE|QaSH?DAP{9#Dnm@@a zjD?WMw-r2D2|f9dZH=^5B4d_lyIzoltoZ_f(<)j`guBEc6uC=Xe|>j>hhe0ARf!Ea5GTQBAb3yDyn7~0^m=_&!z>&1v-$C74%&f<$~4^L|}vdbVg6% z;Nu=?tpX&yP1;jJy4HR-dxdH*w?wlOJD{jrS4ENr(P4eiGO)wa_u#*6GNkXsr3>@* z(%tyB`S(+V=19x(&Nuv+5bmWL%-B9vzgZ-5ZH_T3c*DD7AELLrmYh+J5wy{9eA(DT zadYrQ$asXAbJ%A-ooO78=3Sn(2$8T*g7og9O_l(u-Rij_+O0B&bGxq=zfai?P2m)# zJ*2-Yd1Obe{@I9Pe$uv#FYw*f^7-3}ebR>C{#KG{W*?KVYHd3&zte&xC87QQsQMFl zDA@0P94BjKNvVX!8tPG0b~7Y|%9f@gYql&CvSef@`>x0?Sx44Fwn3f@Nt1O%p+?qZ z8IrO6&v-uH*Z=o^zvk8BU5uHz@B5tVT-SBZomk{IgIqPL$Y|M7uQ-x8K1C{LiH#R% z@!IiEY-!*$bGPIlnCCDl9tzTFL{GPxp#D<0KW+BeZUpKh6gg>70GF?p@V|# zld%P=28-?DRNZPF-}zHlQVAV_FsZ^Dd6;nCkeePR8?;Mbr@sUP9U+6j4}<)U9Shl4 zG(DM_VJF=Ped`OOb+lfHZx2{5ack1NzA6$by!OJcZ(UUVpDpcsI%YywRCIRFD;(^%+|K%;?k@0ZCj<98^_5);liengdn zjNRJWaspv5Oi1kzK!T3vEZ+}Nh%*ISBNHPX5!UHg^krBuWPNp5y4wX!b=%j3vVe~NuleT_WwL1l{dTNt*DJ4RQ za~V-v=l###Tv36=IVxIi7;zo&eA73}h{RH_R zFfc@Uk|#uk?CH#`EZWl3Si0Yhi-kY3&vU~~QxNOefTw_Q1P8{~1w!e{NKO!2VOW{y zek-0In>lq@pSfInHqH^41T;1V%!aZ*bygf2EY|&wMKkRQp|pD|7DB#s4xIlVHgqE@ zmXt~eV4sjQIupm&s+b9j;4Kt-`rm`vw+*t?Yu+oD&vH6B*S}9;!rz{_En8LEsoUNs zn_15QB(f(H{DF8lG|6xJ$!f+;WwlIyRFiF+PT}LG?ZsVVZKyhrQtrJ!uMOk1VGbPT zE|MrhbpJ10i0WMC*8Gd#wG1wC`%xsw8j*MZz%K|RFp+d|)5A>OZx`;t8U6D*T9lyE z>A%=O6j$8*ydKci^=T?+m*)*d!F5_ar}uAq`TR^n+}@QrF<-{7^Rs_ zY-)}b%4!+nK#xkTJVewHHbjT@YjoDon%Sf#cK_m&pNLhl3kI8-5HxP)tXlgGy0sL` zonAp^E1CO#Jx2I5jm`e_t@HM*+wM|{N}lft8Yjoedobe9<~H{O82^V~q=BC&tF+q5 z-~SV6{@K&tv4~HKKNPa<*rW3zswJ_MDRzf+J*KOGDuG4->;S@*={cRG$uF0mb;RAG z)s_GYjb=VWEe5fM(@x2W1~m~MAIP;F0yF3TSBL4Wo7$GW>@F~3-E=6Af1c@(Sc2pW zRQMEY5B+UZ>mLA^j;S^=?Q#%D6Q9R5EhwCbyQ$t&TQSVRGNj(|?qru~*U7VZ_X*#7 z!k7EG?r6=N@TIYFRUcqJ{04V?^kgHAkDF`AerN7Gp0n>!M^^!qWtIwY=b4EV5UNFW zU;xzndqL;J@QV(kUg^WQ`35NyenqzSH%KzZ)P<(M=_kAF75y#B+%xJ3(n8D&Wz49G zgz)y~m3Yk}n05NaSt2T!HZR4?r{{0Iye`EuWgwLmLH)<=w~AxsZ{|2%;)~yJ&pMVz zr#rs3mH53BPx^O_-K|b+_Ta1enI#F`cVpR=>v|5sMyB2$&U{kr5x!NWH5WppQ`aXc zF>fyTe-dsXkPp?njVe6gBw$8;GZY0pHqN??YGjWZy)J)bwjSMf&N{&QSG#w15iB;F zN&)+)kohT$E7Hr5j~i>QzlNTsH=*F?yd_l-At59Aozv-cZ2fxmvZiE*0_XvBCki@$I-NlIb+T zk@|S|0*%QN7+8nv_~1fY$P`e60SpBR_~%1KrnM%YwW$9xw}A6ULTmuHX1>E!LvBzQ zfP`@sVDwPn2UP<4{2ta%{`hfkMA5f=HcWe-Wn8^}i*4t$x%btC$;?77@krS0NamT7Wfu<|;@&vf zG4ik5U4@FYtvy7<4F7+l>Xf9yiRxTGujXRn-m08 zRq*~uB2G@iBAP(Do&!awl)4&9cpvimMrL^b$Ab|xl$miSdwQ?b7S*|MbpB&Y_<67_ zf|ecj{bueP({n{f_O(kJppQb;0RXyRrhk9v^qr#f&i7${6Oaygyj`<7L?e)-80n2u z-2DCZXt&>L(ndYWmc=XC{0}2GUMyaIG=0|MQNZE}Y496eR1q_?`WCpnkJU(9PdfUV zGq&5{!TCW1jzQyt#Woo3ztVa5Bj`P04KI{dV zu9-lOqNEj0d!Ejo24T#Q8^wyln*MWPcUOT919Vrr>w%xxEq8o=LpgMV{{Q(PsFAFA zK%fxSDa?HVj6rVRG%oo>bm4r1UCX$Bjq>P%7w!lzL!8R$4)*&j6rKS)(*fR4t-+fm zoYzUZo*Ww6asJ_J?aeIjJWck+A_ zrp&4erLbjK3Rp9D>)ki=N^=djit{@!X4JJ+Wes|wvL3yf=Y16vG<9~-kD+}OGteywtwnSuPwj8=G}EV-vo`GJ82}d3ko)_lzKdQ*@`E8004%yjK;*$>k^WCs zlAWi!SJZrFrg@{w0LT6}oQ^gq7_cjW%mopjCi~{(fYkzifKd%DLhg_IpV7P;DxY{< zkG-O|rwfTqvGg;2uI6=MZT-1Vc*(kJ)5~#-wjJKxN}=W2;gw5B?pM^5e=mw=>mSiz zG}Pn1-4yj0VmD&r@7Q*$w^MJfH&e2+n{W6S>D3Nhr=N9@sKs4YX`Y~*Ck>ux+-SAQ+j~xV91)Z7N1~BOihTOvRI0A6- zMYboRwF%NuMPsUCob8wTWoY^ybl)Fh?7whav(2YDTkHtMFMxW|uaqBz21SKhhDMzA zT~E`6GY`CucKh^bx@&#Kux>KEaFW>n*8QNIq~h>J#{hbN-`%?3J`Ggus`=TgoK9>* z&%x9s)m$wcU}bH!{Wgb}MKzw@&W!XOJ9aapBL}J-zb^qUxl14k6(2X`C60M zp3w;&whIDA(ugBB(FM7ZiK?AjnO8}kMuBFdwRA?7@l>3!l(lmR`R&`H5x4@YA1hs> zmY6E5dd@k0>NtQF-(O?{9e}mgeEbzhVN+P8^hGy5zs*RtYwYTYkzvBX$rGMs&$CpRUH?Pq}6ZR6I&bcHR`lCwCrtHHNFD#5Rn3-ET3{R z7PV^hA+*Mi{#aDByV=OSv7J2^?|+qVYoH>s(`EhfXzrg#Vp||qVE9Pk9jR8P{T|n5 z9IxNLeD@wl-E-HVWh39+9nT>9uBMtE!#eg)SVAecrMzy?5T%ZI8E`tw~C zw&vDP*mI39(qZHi(lLJ>4tj^nHfgZgM6N7g*Kxx>XQYrn{8F>afE$j(xo6l;ee-vX~hXE3(v36R^I(Qd@W}4 zJ(iC@=Xj#(CnG=Z0!w;=z;E&f8819@07r!c6jj?`)(s-jjxn zEuKHR(=qy%o->$^NTJmY4JYimHxrfxtuvoU##w);{?|nL)L6W77*=gy@x1Ey+bO32 z76Y*a$^dQ31MUpm8qTJkBr2q9WZvxa9&9Rx+=l4Ekawk0vqmfmA6w*9zg%e9y)*OC zmoC|>b9cEUCt5`{QMH5Y^~Wh59V)fbgjifetQ%!h8~#KKOU+wj+;;9@ZcN(x-f#I^ zH61v6?^OgchqI=R^Q3@di^NJ(wxe}?PQcteW%`W^fWMrF$iD-m!Q0!{r)m&E6nV50AdsU|R3nhR zXj2xC)z?`us&-aOvCDV3%*&J1`eSq*Gkvfkr;}v)%9CIGCVvQP2WI-ME+0du#^le~ zkVb?)+i}LWn-|N1QX!gsJ#OMuv_B}^>N$0rB3JAsv9i*EpF=*kXFH3C?;5;)6st(7 z@@r)ooyf7;%IK`K{CZqY_hM|&$uKKkdu7fx65eofBbE@Z+iw|@_U>uy`A{oup0GPk zo_^Z+tMMT|4do)BC!MEW6riy!@i-wV0?%X)TRZx zjw5r{fuG14z2mPr%t+uC*wdRbdhF7LoPRn0#L`MMkTqx^d(iR8`LOoyOGP7!e$JP+ z!p)WS&*mIYM6F$xAj`$ z^!i<9^SF4;$qir0O#2<)laTV8#`_Vpx2*#3vE}DhE$lXngOVG=8@I4}$6hhb2OVsU zx16z@X=COgTW_&SeGoFfhcmif6XZjDr^@7_c|6Oi+Q_*9BqA-;=BpCWmjcx6_L9Ru? z=8x(=9m%8CR?*YgmIk35;$=C!|4#ODtIdwPfAq#Y!KM%FZxEj$y@4+E-?Tm$1>64= zNvv;bnuI%(`9Ki1F_!DOLOB&X4}t)9!s=f+wsw|rWzIR6YOw9EdQ>)6XNpXM7y5ww zp3U>}BI?`?m(f3Mi`Gp`7k9Ed^ia7+dW5Ac$HWK=qsXu9JMM;F=B=xL8B<3JI~U~_ z?U5W0`CTZv1UIiL?D%D1var6dDwH^9GmC8FkB3bW?1Wb~kq<(wl^=hlRiCvO0k+i} zw7QjYZ)0P}#W|Ub&BSK-enkwP)AVm4OxtykJK`6P4>D_-cWn85AyWz{^DdO2Tx-K- zDo(0XvGv=ya_foA{XAQ2#~H*JRiC&uxiahpQ;=M@@UO?Jx^U3WQ zqQlqmn1FS%?B@+n6w}`b-$oT#gXy}^YdaA>45M#AA7)BXOIcxDI~fnEka zMp09MD-21H7>Mr2qTh3mQOby>zuqqTvvK^W6?gV|hqGRC%CzVYMGY-Vlohz}HPjZ0 z#(>{~T4Y18JAU40!w^u*nlxrju2>G4M(WA^MrWy_xszj3|)W*d}vze?~E z%idd>s<2gI=(J9fMQCWT8Lgxz*jh_Z`?9t3d`h$ZBC~V@mgVQi`M$kDDY+HAnp`wn z&oXyz0Up;$Nn>fOrLm;_cj}kD-JAogC4xqBJG;G2rA$a`9^c&9*iJB9hMpr$?TC?r z&S|XU*ME5`k>)VKXi*Ii92b1IFA71@UiZ^aFWkctADI3I(`W-uWKCQ4@c~ti(T%e# ztCZETWyTF}A*Zc0O3vEjl;*|9z}-Z})5M)z7(f@17a_5a%2p0VLZ7%qZ`Fb>G_cJy~s)+?AgC{KP_qv-#?vOi%LrU-2xdF&K?3ZwPe* zx!qXrFG!nmhjfcKS~b@ai9K6~Zv8(m0L9z&=de^7r++qQFxGVIl^mqjDZfF&izETZ zlaCLrTF}HAymu@6yno0p#yE#1WhmBynOpd!vT8{Uq0(*Rx)7%S^^sI z_O3n0%~Ms2;+fXA#+-=4E1p;!r_#8buY~I~33+sgqV?y|G)cb{cdupqHOPKo(Se~v zEwulFDFGrVPZ&TsND=|No8ucW-^>LZ`mkkXboU2Od`W!-CgV-sJpxZ)pw;*OJ6usP zRz3s7|A*lD@o&jtR)YWx!b-jAVaSmQ)UtJ#-|qWPIw&W+LAiZXzhm8=Ze}UL#?K0_ zijkq!PcQ4Z{GT5xIJn~5=2$=Bky!oVNYm-36W1!zIxWV1`EH|+qR}W;F_6@ueW?Gb zsE&63&FLE&=AC4E3$o`LR<&U9G0lFnzh=l$`c3CWA74{2sYr<>^D+EN>HayuEW30A zc4|B8Tmy414#yJIWbF+XI~^b%#@bQbu6vqUmt|dkO(Xk$^~q#i{^jveV&%dVAqMD% zl%F992%62145o*phlN*S5Ws@fSETX~bm9pK4F{RWtwwFbI4Gx`vT_`mu1Kw5#$ zDAB!39Lw^mb2GimFoueM-e#!I|3xP=V|Ul0`qt26jAovO8)L+aUdm?M`qP8Df%*S3 zpEBGujuz|D;r=%SSFTd?4_NG%kepe1EZhD9?cWc*?A117>|ze8&_RUfNkEwcwISG5 z;LjvcL;0yXKg?^L+3n4BXhtD;C}}2%&OHWEQ&eYQ-OhlBp^}ZcnQoO1nn=*oJ<~fI z|Bnm)@Io9S;gl89I0dd|qB9_OJJy&y*0a|=T%$hjeVVU6pSgg89>h;koxEc?#vvMw zRSxCpg(Z##Nlq_ibO+ahoWm@252MBkGb*aY|ptzdf*l>B=A==I${;Siob_Jd*nyci#&70}r zhO^<Dy|LP(wWiV|qm);{m%T-S|s4Vl#!$1sr#H z=Z^~raWOL^xpp7$GH-LcHju*5y*zP8jICY6%BT3&=@pwN4LHlT(D`9j1_3u7K@J9w zJXLe~&E|-iZdnF3o9!Emgr_~J_(c)cJMfwInO^JNOu&rZLY^ocE zyZO>~H(?s<)UvqhDP0^Mkk$Q|u>z19&^#DJ=fjJ#p~|A5LHC%V(? zlg`K=f$qvzYI%P!N(;C4Rh;s^RL&KhXTW|n*i&a!A;ZxixXR`vdhQkO4D1EE30aZe zIGJgjreU$*ZN&)K@W8vkHCen&^h4y^M$ayp(W8SJ&IC2kS-z0F-YQMszb|I@?xGxz zTxBf&#f@MevE)dqS?cBsja6%hu+`4DMdPEX{&dFU4q^BQc`ky_DxS#-Ve!3>S-m#C znxT)vffY;M43S#Pu$CRl%-oZbkvDKR{mQG2|{`{$#eB zxzeoLZ+ftRu5!&Sr6mVhPB+ByqEB8x)*^rR2}*kR5f2}m_uB3gqqab&yR5Hxs~A=p zSh{VV*d_^HGvdZ_FvvEP2erygm@qq^U5$u8ZK%xFZeWG$nXa7LT%9=o;GB?Sj*3(w zgF<>uEe78Pdj{FeO#jvRZpNI!n7+nBy;J!}X2l$7od0;_NPlLk++x|dtm>&euP$Ho z+{01oeTq_|J37y6h7|KC_EFDrf~+<%Rz>xzN6u3`f_d#w?<0MeKv*D1OlOLxK{tku zbru#D1qFrH@85;u;^L$c@mz#u`BZ+%o|mPA2f*I&cj-F=?byPFBXG|SSB{F`yDwk9 zgy1>pYEGXfQfhP$Q#SbfXK(7>TDv0Fpv%deNNUX~>UXn>o|&D=z~>tt`%C^|oNoE^ zrnazS&X`P@d}+7oRXvk$ve7Ald>VbnCW5dH+a)G%kD;pdix#1 z&RydPiV3Qo>hKXAIa#7!Z~nAWlFo5ETWG(Az80tH1Lmx2M}($v%|j2M%M(5>fm5XSt)_@55%d*DffB2u93oB&`|FvL{-)8(;he@P|BYMugv) zz)0@;dqxQ5Blx-escq!XhmkONAM}wQ5XouG@EG1Nnihf}0l))3G4G9)Q|5Tz$dC|* z!HX{i=HAT9+SI46CIljcc8}dN($=SJzCOPuH!5SP!0g-|Y;7Fj%U5Op;<&a4FGxZe=o4ij0N5!LNEku%Y?9_YIJJ+9el*s6U9PH}u z9s-p=u<0dJ*9dNw#wkkZ$4XhyPI!IW7*-nGJ%9f$i@;s!5#8O_Ae;;~`C_sAiIkh< zTWB;iNm=o{Ti>p^Qc7TZxbjyyj$wQq`f(e+ol6o0YZj;ftNDfwUloF{%55tYHoH_z zhBhwcoGHoHfQXuWWZu~lBs09cEaIa?_0HREk-VUa?*FGZ{%VeW=k9#$)eF=2*bk#l zmZ+swT#cO*m+O{2$yK92Bq~~|r(c>nuUT&=n)fZ)%|K3jU%*)CAc-aNzC0w*5_3+k z8p(rk6LB|Q;e%Uk@@vy5p)I(OQ=bKAb&LeO1RPMmA|ZT_D% z&lB}>9%jdlQ`%@v`;nqL(m6zs2;e$)`bQ1A^i`#USJ!MibABptAc;oXr!Xj%S?k8t z0PUP^80885H&O5rK^VJ}Qn1fw(x7yE+b`ydh)1K@Ah~*;y_~u}ppV?ntVrGHo(?s3 z-aO%NGqh{Fdm?Oqshs72EZaaOTkDk#!nL2Roo6RcO+5cAl1q5I&9id;6l4ZhyebkTC2+-BAxYClk^f}iyE>@$F@_Bw;mlX9%E6>ZftBnC-@wbF} zToe0O)Rl*4pB0<=u+ROztNv{jt1 z*zE1?!H_#QT_fqVAX>BG8wcU^*W%(!(!3CxI-^>y+=RJ0!R$rbksuJ~N!+{?zqq;NC!lud71M=YrS0`@8Qn>2x&L@Un;z%9 zP~NwsY5Dyk3A$p{TqB-lpv2B45}h;_`tX>E_l1Oj4;Gg;t{d0%8HGNA?X0dK%eDcL=LV%(xczj^0vIgBy zyZP#&tU<>D>LmyOcCSysnSe`_DThuqhhO5H>z!`Oo-UEjtnD1mwoRLh1_iDIs7lZp z!eJAE3@f5@7~1OE+tmRlk^lbX2@enFi6`)|F@qTnzZkG4{W^TBKI5{t%KE(agpHIN5x>J%6 zN@KwxE;`33oR+oy^zNtlsyHPUo81WKG$X^gTliF4KW7#sXqqGDsPF!up^U>gVD;hm$Sf}Ei>#nr_u+Y{B2U~AD%(r8wQ zd-=}0u>W+hpn>iUVO^t-b{AnsSzbt^J!(u!dS*P$N*A*VPftv3sm| z57)*@v-Qre(QR?D9?|4t4hd3<#PDrkOL6aJXHWAJ42z;q>Fk4uf<*)iUg8OhAU{__ z-JMZ0fPFcFdC3@0A@}-E-s~@Pb zuj;Vb;nHkqZPw{hjfGw(1J3Tg3>Gtz<{?H$-E0WncQ1(988ZXCR*K`F5p+k_s}kzZ z_${Wdzl_dYLsvj@jM3&frWZ<~Uj?oe+);SRRQj_Tyw1ep~wI zPO64QIhK7z@w*_E#AWyxFZxz*%nk*G%5-Rh+Zt zj@id`-J5l*-jKC~HM8>zPH4#`%?gRO=45=XmK+_)9LUd+NGU9#^0rG`j@FJ`as;(X z_UhG(Psg^T_&OkFKsd6wV5o+wHbkp7OA_6W{sNs5Isy`G)2P{fpEIZHsix!Wy^HI; zvmO(hDj%wEvYT669#;^hSF+-{C(R?MbNJ|C4-#22-qVnK#;ehhVwhg|{JNN{8isGYRwP^ZbM}^ZQZi!H(dd$C4T9T5!?}0T8b$ra z%JfOHIs+VOoLxxu%dc%hQZb{BaYEmp&?0hTy`v#FFe+yQt6Gq*qE_>p`Q4jq9Nz!c=4ruMC@d8L8W+ zWpNV%g4&@o3k>(2YhzP;l8c4KM)G9`LMO+#DVqZSPK%qM>Wr zrekLC+`V#{YV#XE>y|f7l&0&Jfhvx_I~23CoHs3hqC-IHf9&iUZ{pyLctp#bkyH0c zS3@1X<8EOPKXyn`jfN%)1r%+~-?<}3*uEl9-%U@ST!e^yKu;%$v2<|mlToLrwzfG0 zA>))eB9IKT{ zVKWjsgIOG^jIqNuP#-`T8faNAJksy4LDliviAf4nktFAN9%% zl2~O@HV~Nz@vI6MKo6ypM|V1OEi@K}J%no*kMFB%ul60c;5$OA7<;F2o@OH57tl@@ zuFR>S)D9I}-u#4)9C;ZZU7cdc{lw&P0&h$nD}J#8Gxy^yoFBVO5&qxqkZMds*n%(h zpnv)#l43OC>m0Jo-#vp$%W19pgi=)AT~ajcGq2e-33^&rO}!~@GeGT-V3e?DPbV$> ztZw8Y297WWHCSBI5Zyj)#UmVN4WMPv=zKP^ zcQpMXgpxawL+>(PO56zF(UyoC3%`+4!27r$zTMM|&Y)TG^6$hC&2Y}5U@J5Q>>{9> zsU6y6J`st7Jd0Qa)UZp??PQHayc}J?O_&fV1MYbr$tQ*=))&|rq}g+K0Ps|?-ASSE zm*)BOzqcKEaMG$7-sahkYRRL%aFBh+S?IVmtB&1CE-X3F$>n1Zi|9)h-47fPa5Mne z##{PlU&&ro$=}d&;jP8+mCwW5j3HQiDitqo!ree${;oSEiP>&6LXiw*r{2Y6b}wLj zp!9PVJYrD$(v|a~|cFM?DJ3b`X``fwUQ(uMJ zq~@Gw|1c~G06I6f{xxBz1gN0+4ra_d(#Z{phWJE`ymt6TEw8G=Hg{IhwpZBW6T9hr zOKa(qrq8k&wsVgt-n8vc-_NyuM{clrz5zlNzyomJ<5X=fq(NZwoJd4`5)o3;NwQSQ zAp>V1E-p?h@6Jg{kuLj8R_6P+#6PGjeRnUln?@o4-4G(9iynS$YwT)vyxE-d+k@Lo z3o}+IhxB_YIo5kc0UNCz1T(}kjE4K(U!)K9BycKm)^Mf(>Xil}X4?}hbMqt~^c-BB z{xG$60TmD?B*h%lvH3sFz{(M*x>=TtY{I_{E+2f~2 z1yKG+Mad24ki@&ny#~C&0@T+ZN`?>recjT+*aKSD&UuuK4(Ei!1HC?Z zi7K@65@Z6!)IG>)lrafM2XQ>d7 z6M3JHNcp_rb)Gl&=I#e5jchKc8K=|*``~bwdBUKef(jP69R+3O_Qpqxt`8s5O!#pA z20Y8~>z2~3meQ9hNYEPz*Z4ree*E}x8qWss5)Lg}dmvc>o&liZoc)`HH7~qm_f2gg z4OX@U#MA28mhC@$u=?luInML2LGAD6>KX_T6V8Q(AtT8XcE#!?RXV4j+7;80E5w8U z(~7{=>)rvlZ{L!ANI8E0UA^B2g6XVy^7?0Cr$Mm<>j&#agLQHlLOO@@9U6vKCFte5 ze;$T<9B>Qd7@&z{|0u+TNJM>JT;~e=Zjx+}VhcM6jm99ijmB?U8>cv0;^ukF=iyl` zkqD9QY8DhT{5Vt=z^{gr6^iG1_qa6peZBWXp%`!SUfx$>(b553v9ufyPfIv&NviK zgvGcI>gEs>ReK+FBG+E18NX7``_|xe4i^x&Q{S_Gq?i0veh4)=k{B^U`RvL22|Zi? zcD^AdLi=rb^n<$S@2(LWzU7yF^6PAsvT)g4?a~R;&?ch6tqHr6wxA#isQ6Js0pJ6> z%aN1>vshZ<%`3tc;sC*3?}xb>&-IF6J(HC#!CirC6z%wE{@j9Vd;AUU=Lzuw%fQRf zVk;bFh+;w0SUB=?g6Bw{hUjN=i(ih(okb~+nlt8T{qK2;7&;FuV{NtMLHy#&{@L8| zMQa8AdrDb(xHCY`{_6&_gTVNgCjqwYN(^5u=4H7Pc(oaQR)%w15XDEmmfSQQ0ai z&GYW7Bv>-TO$2Xt!LDlWdRz-Z!$W}N2|I*2gdXUL6kC8{fNUUcgxMO;B^1f%f^Dt9 z$7qi$j8yuJle`8kFF;j8A$DBK+|tE`6JD?(H}vNX{}Cv|Y8ujlti+Iq(i4Yt5Dmht zigOAiyYITsOLo($SXgIpUyz|R26P3h)poC{6*K~#Fu-z5t2CSr5!A^~vXx57w>6H) zV+F=LTVNvq?zlG|>fdgsjokbH{LfE|XFy%!u8sjT$DYZA9(TYpP@6NV(UCmS&*L+h zr?3bZ(g=tc9*}p>ojXTcIAC{R;f^}LWLfi2%BsoDhRVCkCU2j+WOp!TbjCwzPSeE{ zHU_+UBZ6pt5q4x)4q`gdeQlaqEf6G!^@u!erZs?W5GLN1H})rF6RQ?9mUI^z7s(!c z0s?szi+H1e6;J`;wkb?wh(E|K>Ec%I(!d0pnoGnmh z1WRzZA%DC5bM-)+1B3B@XAwR|h_7%AJd2Vk;IVs23LNT6x))DRMqiyzqLmxM*rs5T~Ci;iU3u|Fs!>ehT15%tNmTfq3--3jO)rC~*s2h!P}-x77W=6m_ZbfH_4 zyHVaZ>euwAbxc5?x&7wdP0uN684A(36Rxq)u&7kEQO|#Tw*Jc-yRLDJ@ZnmF2@Hq0O2Swx1pTG zLGiht(^EHt-{9Q-{$hP(%E(?$)E{Hyn9{lr)aHvDx zJcGRuOb6m%NE@9_5}bZG#1Pp;b%MKWfQJ~=u>?5HrVgJ4)I^XG0SF%*N*0YgFdRvS z&1u23_7~4dq`>wbTvtJ%-b03muhH6Zh`#;>FZ!)73X(n7`o69z9x0LR9)e6FbQK?- znKVViK#=pDVsDI(Uh3#bU-+Go?~?JELR-~vNd_u7kLH>rV{(q?#m~kGCa9B+U5o@1kSYXi# z_Ia3+ARYpQge77qk^4phf3mGHE(8boWWE8u)30UkghPXY-RraiObt@STEB~w;__F7 zlK!6;AOv`y1usMH_m9@Lx;D`kcKw-E8*ZOYM0(keuBGo(>B{0N$_^PStJwP)1z1q# z0iab{R z^B|ycFQRtsH$6N6=JzDgHjvW*A6cb~^~t=4J{wwuKoa590lkDq1G`Df7}v$%0bc_G zgLD8p;bku?JRtUD>1oNz(i;@{>53hJUN5VvJ3tmd%Dn79Y2SC8f_Pmi{vAn;v|YJ@ zes*9tk(ijXcDJS^@``!4j?0Q%h~$HQaj6yW*?7Ld8balU_hG|Exxu_9=gq(C{DoIm z%N*h&dpcTmYr23L$O5R+=y;>!`jAL38Po8hpI@LZHdbQ*-`Js9(u{Gk$}ELEh`-f< z;W(31SH^*5NGmpbWcJSkUby)#6#N&P1Tmkdx=yL1`${J%kuwAvsFGPq=6T^nZj`L% z!yb6&?mPlD#>l^G)D|EnBX5(;BGVb948peA6{)yuld=4N?rdCT@jmiPe$&)Z~x;5w3=*n+j zHVYklP_9UJLzIUM6R4X0EPwyibj=z6p0-=*_b11-m~G?+UnO@%ZQ*C7!mM7Q!XEM> z#FsT1g@{HyCQp@~)fJp$Z@=RtY70mu4j)lKT%3gARcp1rrgMiZfp)#@ZeGzcw(7rM z&=w-HddC$%)2|*25{s!$SIi$BsnK`Q7`Yh|49MpjaE?=XD|zv0)CP9a4LBP{-!SQ= zbBm?8C^*#Rv${Gx;|rMZj6=QgJupC*Ce8qj0r!Fg3ql=1lK_F5-pi(Qikka;_o(=} zz!Jc*59$tr#51Gop3SGp1*GAG0!K=Bfzr$eH-4b+0eiPu21>J8jm|Ily7AK@I-o`Z zf#6MtxAukt8zbd}1^c%mX z3#WRdsKP<6;!C>IKP%_456C753^&t-gho5w*|nVA?28!bebv@DRgmE`M&nHyoXQ&< zvOnNu^8UFWvt(&~lssu@;5Dk$U5C^@Dca{OLTb zMTJCEO=Y%j&Ncmz|BL6)1c4EwAUWwE;ox^3Ou%v8i_#=M#%h_7vu0PPaMF3giyzKsoAtero-3xscCo(b=-WS%NZiOK5MAxY#W2$8I@~;TI)@X2te3sx9 z4aTkB$3GO}=3pozO}unS#~sR?a*u?*63J^PefG2~NF}(sE2_CykB13CZ47(Dfcwc@ zBV0hem&zex1^atImZP0?s5jFK&mgt4*AWyR5LwKjyb8!!v^B3h?R;gZO}BrNvU~Ek z$+a(U@Lh@`hK=b?>7(V}R_nf`0v_y%O?|{f>O#iw;Uh-+zj|ZG`Jch(-dJ<-CP>t_QyN`CaW_zdd& zmfx-tEowhXGO7l&N}9I;=*63!Uoty0!>XmF^`CA+0~|;f zOx4$FN!Y@W!mkh>3#pllF^H;s^5jV?8Qzkd zjk^Wm%QI4azhtxY+#WvMH@*(O3s*O{sv6^8TH?uI@dQB?C^Gmtu*X{QFw>Bozkhl9 zkX%-b7KjPaPFOv?er~Anle-w{Zi+Y;^{ds5qSt8RZalu#l$+*J0G%W%FAy^d7!L@T zo@X?_N`bsa=l+lX71Ch1x{x-pvT_4cJuwW0tnpIH{J-!31QeN)AG)cj!0(+W3!EhZM(5Ch0CP!3@l2L&&* zOAiq7vx_TbAK7bBkEXG4qB_tE5BJLk!cDrWQ2)2AEvk)nSvQ)L(fkADKjE{2(+6qj z5M$=W!wZ4PoU&X0)dWro0-is-mA-7PRwe0QKyofdJfeU`y z|Li%md}>b;3_T@e?;9U;O1K}sT9146^3$|CRJuqayjf5)2TY$mmWdn@U%yx_*$y$q zS4Atm5E@--G0@B5xPahtO32Qb!jHgb{b+IQ`;Q;{fG7d`0;Q>D6Zh*0mY1gIm)Tqp zj@2o2$dfn#H5lA!1n3BMC_l$w@LT`O&tz6$L&IM!uK%Bjg(f*amC6_l#f$>n%DQF8 z!wjhkVA*^F?JUF-;4HYB)z!3AFfy+Bpw^~2!qq)rVvq=H8QvG9dB0>e6!nRP`=w{O z*-**CeyVdB2V-qbTDH7oZF1NcRFI-N|K&d@QVyCv#GO3;Hp1&#z=LiIKNM`RQGozY zIJ7@J*~bQ)ZAJAPSYQxUa-bDXb}^aPhKIhlKOr`?PeaOmsG)q&6s_kqW%{hx@4~qc zo_Wr}pD6rp{J<(6?Gq7y@tPyjORL51>HK?;V8jR#QHM0SAQUR+SzNrDkpJp6U)YOu z#`^l?8HX9&s}AWf4iko$Us~M6H`p;M+%8zm@ejUZoI*?OK!ibE)(|g9c@LRAU5qa| z!ryfTDY$+1g1?-4)9Unol*bLu-}O>4ebtgRdIP?{6Bnz>T-0|*YBSEPsTz&#q`bq( zW!;jDSIeG0gWLo^4OIP5w8tK5`u#R%>l_TQk?bBIgY;~om8ke~)qeT>DaUvuL5IEk z)<2${=0k>}64!i=(p-H7;h|8K19>95&Ki6PZvMr9e~*(HdgMVcHDl=XRb^|hnHLux zVNWZ)N*DAIeLR{8^7A3aGyGZWI}sz|vJ&An_Qr+f$8F=Y2XYrT!6B3#h)+4gqWs}I z0g!k78TC_ zE2M@33>9W2 z$huF~;UT|PR#RhlE&_%(1uR^-3!x1jdsJoFc73B@$hp9~N4g=Zz^HPV0wKscr1$kZ zqeoV@%=5yMt51m4Y;*&Wnm!|9t%a<4W^nKhLK!%4Wd=&Tci&f;?1w}QmD6KCS1;e- z6}C~k_JHc^R8)2trA0MGPZeLVe|Dt}p7Qc3dYXcgN7P^AH7&a(5q0lulV14=dZ2C3 z&4K`HE*W(ha{-)>z&`35-fC;Lfm)sjZKtB22=UY`-o4|hlV zaLAQe=oJ~kpfQlDg$l?Q3n@nz~OTc7N@V<}8D{Z3N= z`hxiD*Ud??;4k@Z{Og(sD1emL120}tfOr|Ae4<$rK{kSPSC9J|^2qG=6P*vH&qxyh z3?8eW3cd8-ZpfQ&_)5@NWn4`-lveryd|u?@`ZJ^=*kF#85(jGRMBLF|j-0bHruvBv z38Icu@l3`oO+bl&{~{`nj;^Mq87slQa14<0jG9fb@aY_Q0_l_crMf7ls9uHuIo_@? z8NWo+bOq7VH^tRZDYoG6pecK}7cxVgKe98A^)shEO)CVG5V$=PK!M%t%n=XRsVgsc zdR__x$bPSR{2kxlbTa8hX>jTPm57E!f%B1 zGEyfPgkGut75(KbO=Jn_{E?RVlv}fRBze_Lf0+93m4IH= z!sOg+X*QRvsG5b%H)`XiV+&q`p9pFE@XQ(c0MO{>Y01q;X*AeJG|-gObT0#B1pD-X3u7*^DiJ=#$JD}O4#x)I zEhB942VBdq65~Izv(sb_M@j^IPV0eRp6@LbUZ`ID7Z%|>dMg|airy!Cm1KOq##D@t zfj&a{3({xf>z17#FrVE2zzeV3Y2LDMt3z2AuOr#V9B_!0WBxU<{{aCS1fRrP`%) z&mVB?g5F+<;ZZS_yi%T%-!k;RbKRdyRJGChX&r_STpYlifHfGRXOwV_qRwukKQUm@ zY}n(+6f`o@EWKHJ@Bk1AA{WRsx#x;c625DM-PfA@0asNY?Sm%1Cj<5Z1!5$invel167U8A?<2glc|>gvM5hXwF$ik}WJ%5fX#>-{wN2_TflN;foI zMx%ki0ZZs5egdEcOoUy#prNu&P@}{F&n$1?fIxo&LJROQC`CZEdiK1H{%j>obuTwT zKTEIpK*NhiQ)>Pb_`w-5bcp6-BgzMBbeIDc=qqCIZwF2UBu=F;tO=t3PSllTt zF2B1rx}(*Sz()zP(k$gL9uMZ|fC>pp{H9QES^2Y3cEdM|dx_th}($b#rw?vPa(k5o9*suCoER^_dtQ3qi3O;tK z54c}PE1On7Lb?@82C@o`1|0*!HaMQ=ZYljEo>e!yf8b&NG_9EdW)OmR2*yRgB~LJ| zXlcHp1*bVB$U4w*MA$J^(z)y2kj;fQn1JX4sl1__21a?y3dPRnS!S2&2D0Q!SQYNHhH6L4_V(QO6t^aWwh~gfC73m5KIn&c86~Fj}(P zAmvnCeEc%};(Gu~!KV`?44K^|kLJmv`Afi%TI^VfJHyY>#Swo5E`&r&{>8 zEiYF!*wIw^gY^V)msHzG0JYQt#y@Y%OFKk%ejnlTYg`3n^q)3M7YK&{HX4lot|9ie zq|_$QzXcFtv`L#03GfyE3CK1W{>dz5-qZ?A+m)BSBjk^S)EPG$ICDpVpmcL{3xaY1 z?%4*K5%v>VDq!OvjNprfXNFIt5{NLZ)f(>oD*n)wv_r|+otT_tG){rMgkQbutO05za4BwkikF}wg}ihs=B*%5z2ihWq?M1X32T{9=@PQ z<8ZXY0;ecd%Hju{Ng5Nfyu4iY7!JzMRo=`VI~spdq@Qz>^LhoTeR=u(|Bt=DjEb_0 z{>NbzrKAPv8W6C+VrY<3LO@ZZ8%4S#hm;yXKuVNU1d;A82?-HKxpB-&()_yJtPT@%DC@>$=W$&OUp8VjsM68VIysfSlmfEKSc@Y05q^_QJ6OctL&x zbW3!D`vfppNBMYX$Z(@mpy4aNuxxNKBBu7LTG*L^n1~naAMK9W0r(2rk~H)L#!n@f zAYgZft`fd99&fk38Gd0lI?8Q;kA?VAe~x4+3VUai6#_oB1lO$>-%l~M-2^U(>MXFP zmYh!-q}xdrZEjga^*w}$3%cZg^qD%ZG&{^Ha8$Pfzyo?1(d6z{!W#$=@v1LxySRaj zhQb+^h_wC?d<|Yp|8K@%4gab$e{`P>{=(`}lAqKKK*0K+K3=HS0BeAN2A0KHeCLru zXz1+nioxp57q4g9P|*SL6ktr;cLy)V_Vxz)2tE)Djz<4Yl%p{UIn#pp6>5pS?w?zah=d z&1H}TwxZeYGo9Nhyk^m_&mX^3T8Muwu;Ro{pl5AUxs5G9*C?k2&4cK(Al`x2765a@ zllnc=1{e>ofrn0%{MUGH4{|)z3p=L9PcnfFW!ac^p|dh||giQATja#)~_z zW`#liB?}yX=qso90vxkuuy+5m7vKj6EL)IR!Qj9b;%7VX`1N$vN)S2{m0>-C!V_Qo z7hl_$ZYF|JgqRJp`)IpQ4c}N6CVO3ZiVUczggpNYy@8?=lm;M(z)Q44Phj;1L%|{* z$;l~q{bzG=I$;f7k=_Wq4ZxVB?0^4crmjQRW$fUB`5?!mnr(*-K>py(0;Ug&_d*-p zE)7FiPOztZLHVf1zz(4958EYPg#hxQ%1Ylwci?OPM=AuZIq|V?O7zz|^ynvyMp)Wc z(1XLlDG>DF=wHIZachfRxI#AjND!kkyfMVIcyEGE=O>qgG{GZys=}XbP%a0Bs6n30)f4>ZgJu z*d2V(UBltUFd=LTpv!`FG!V|J-M{;^9{X3_oCxVIi#FdcP`fjppOtdyxj4E+DGOy)KdLBBOB;*> z;AGjHz?=h;Bpji^a9UOdJ<4UQ4a;f5J}$9f6CwD;ZawA^Xw8 zh3s3;m9|#@%UZUy5C@JP*UJJ#mQok&4k(`SPBF2{n5p4Y>0Nv^F581XVeM$eJ zasLxF{_(g4wP*uLm;SsIwbY9heVz6KQfp=xfXs%%U`c}`DVs;=+|F+&4cqF^i!%9R zbCa;5EW0!9Y!}wVsC#g-4KDGA--@-f^08&)l%C!`3=$k>$VB5??{jTjU=ABIOp2!a z<5{KOejHukC(0I3nL5fX$fSCN+OEIzhi+xZW9i|2_lE6IfWheco3YAiZDX`=GuWTT zEs7Lh)2$hz5BgY5)c9|1$X-e$n*U9t*m>F!3O@&c>pd9!wr!LtU-y3iE$C@S2bO{r zQxn+WWGUlf!AhXC6s-A&sNGqV^}j{@hAQoTFFqn=2;{l@Cc*EVOagL2;m+YUErsRnU67Rn>>#Z4uas!H^#IL*4YC^*JN^jzbh4cIVvk%96?|dp>;ENe{9W zxOZ};E!h&n`B`miN z&6WNadip<2qCOX7*)lWlR9ykThCpVpy40M3p_ATOz{hQRWU12gwX_Xt1bV~`^V*4&Cpu`u*+#@i~7lW9ndR%{v@UGz&FG*fG_LK-{r z{B_bFFVzlwC?-PDm8;!GrOiFq%Tw?_dQ%%>U>xolyRE zz}?@>cQbY&y)I=|w}W-3V-*qN+NB|a1cI;s-5vQmi%DHyuN?>C-@zxt+qR-#rP-N9 zG&2?z8eFU<+2_|pU>;-Zv2K!WK9a|yx%{P{9@nI6-EdN(BP%{fA@2C>b-@*aZ9zy%&O!>I(Xssn4}3+A@OaM9vL$>FSjzUY z^s-`M)z8{I_Yin(Rlmmd#w}A~habE)S0L`0RaiM)so`@9$!~9ytpTXU>>uV%fWZ4x z+!XX_dKRq+r)xyos~);UtAaNR0UzJspW|JUcD)qIC2 z=u`PyxA|+?u3+em53c{K1sD=a-1=IRKPwFNTJSg)^;=?31$Q>&3+otC?@XmeJXsN! zW&97tor*OkdiO}b-xhapkHt%Q5|6Fqw)c^FBX`zzCI;BEeJH3UB3=i7T_IpiJWd-s z=n>Yu1kp+%(jvjixU);tdT>g=ZbDAZW=28n|3m8Y|K+bQiSS9~|M6$S58nCz`N!1= zLihjir-ya9;Ftie>V*Z^y+Eb!iNK~e!ovfUTM1|FbNJ_H<$wge`DiK9`Tq8H`ffV^ z^-ienVYqpDcAjfrgkmN~8ca-meQm7^o^gVTrQkD-1g%d&rgqFNP2i*97NWfESbY-& zkWknDwivHSY4YIq5OvLS04fstXy^|yPhnDQ(hAfX450nex<}M+i$8TA0jWGV*cQn) zh>dQY>HV6=*7_p4r0Rf)} zl^?b``vlgQA-ohzy=`&I&ldRge0Dog0^HWs{GL<6@Cm{Y5K22~y#Iv%w{0`YY{T25 zmdo($^{2c8*iD*6}5P(PNiBvIEjyfc}WnOBNh+{;j_#`L6~Ql4 zd(#W%X_*z5pQt16IX&PWty3YVPFcM9#`pKtpUjRK_}#R)C{V~0ENe>-7cy`0ED5$d zKS|3hvB=N1s|I`w-^kThO3l}{n=ui0BJ2tPfs@4JL3J1xFq0c=%Wao#r@Vt;8))wE z0BUPVekA4hC=_`Yli76|JY2_C#{;?AXkN`hZ>9OG-+u&g5AVpzxYYsF<^jG6cFVEd zJR?m+S|;$X2t*noG;sheS% z1~-Tk8})(+nenyF;q`_a*^o2dKLOfYdFp0qbP8IMAG}V$)-r|Tv7R(O$RVkMrbo#+ z09$w+p0Wt(Fu(%M4BV1#phf8hRQ%i zb}>>?P~eGMsJx&a;UI=dx)>@ah7kOHCa`D48Ikmfn>~L%r zXn;Wd^N7|MjBEyv>I6XY-yiWDQx1asm!fz>&8t&j*kWS{qM?#tZNBm3of+_tZsM(B z^aA~Qf)S? zY=Lyuy=$E`LB=0I$qP1zbGuO9(*27^HXk!5lpgnD@aOnT6?|y4a=K?>EhQ;=PeVgkTwD%#YK9=o z?slv&0ECIk@Rk8Y0I3ST=`{;5@i!R0bYXHOU~GgQCVU2@W%}?$r{G1xXTSzwtlvI! zfL0C^zqeFG?%4YHumes5FNTc)ZYF^T)rWR@u=MDlH=XD2W_-gh&CR5jMF}KLB7UmpY2!6!7LdD$ZLP{GaEsXfSXr&{S>ot>K`fLqK)DM)~-Ei}B{j|)FL^M!dsE+*DVu76E0+Tq#6wTU0@gK4B z&p-gWC1A0oCF<9<0tnN1(}DvO+}pQn~LfS(BlRbrMZS#FsA{Zy=36Y)sBqo}z zzu5zn8EkLoVS4ZD43&u*moWCj><3yd-x93yg3s*i)bzQOex_rqt-yDs3`Itw7CZ#V zMfx&S`f8z^D2jSfVU~Xd`x(SI0KtVK@WVZ}f*?KvD<41H4-cG^l7z)rD5AJYU~dBM zV}}-6Cm1scscD1fS`@!=Iabn|tt0L^)YE#53ptEA$C`?K{w)`%1RrU3n3 zE{6yi!S!rgltgO-%oTm#t{pDTA;4H+naZZX!JOP#ESItfViq6~<)8E0QcI9$bpZXR z5ogJin{BxQAFbuKG~9a9rJ6}_3RI&|awbP31ltn}fF&PF|4*VGt3pCLtrz#gHT?vD z3yTE2aGD?yW+h||=;X6IvCl|4ivfrLXA6u0)mcAMJsxOToW>prUbi4l5d5ElDUOdF zK=yF5%JoxZUH&6~74JQ1bk>K}jwdz>B7t(!J@_opcSpnRt<4xn%wggEGz|)X>a{;^ z(H-P$fY-=Bf^IIr5(q~?csnc$NkOyGAnMY3xj@7La*tU=kF5gv_qzJJy1Fu1QD~X> zhP&rNOxcq^bX~V%$;DZf@P~|YSs`Ii*xm_8fD{&#FhG_=c4L?*2&ogkR*;iR zP>Hes$LT3GfEELAn?p$$nsrxM29YOM@<+x`fqZpZU_o4dOrb9k)Q2+I4jW45Bt`t`_zr*gn*{gT0 zb9!&+>%w)5TIj(0cHZ%_fPg@8O${?Ok89#f;d+5wl^(aMsw({dzG6ln`b>l+LW*)w z6Y$RObQ2>ZJ+~dq&3V-iOQaUe{f@ww7mQe!Xyorg4)KOIDE0lw0u~b2? zp(PL8z$k~JK=(ajYR+*&)`+$9)=pJ=O93jOk_eg&4cX}Eu}{q#D}_jg)-ZT7OMeGB z=?dxK*+b55O*(3K507ZjDg9+#aFD6g7iBSw6c*z)fKDB7oUirkB=R#Z7j6A1+Hiqo z%FF^L@c_2SJS;Z<1Ye22U5YjzqFl_2t;BxDrlZe?ui=C8FZ_o;+VD3LHXqcCeQ4hB zq8_?ujFA(*wQEhb@^htkde0-*%0DUm&o;Z$_qvl+`y+Q^FO5oz{$EA+g~!Tw7k7W# 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 E0ek=C#sB~S literal 0 HcmV?d00001 diff --git a/aviary/docs/examples/multi-missions.ipynb b/aviary/docs/examples/multi-missions.ipynb new file mode 100644 index 000000000..ebc83354f --- /dev/null +++ b/aviary/docs/examples/multi-missions.ipynb @@ -0,0 +1,147 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "# Testing Cell\n", + "from aviary.docs.tests.utils import glue_variable\n", + "from aviary.api import Aircraft, Mission, AviaryProblem\n", + "from aviary.examples.multi_missions import run_multimission_example_large_single_aisle\n", + "\n", + "glue_variable('Design.RANGE',f'{Mission.Design.RANGE=}'.split('=')[0], md_code=True)\n", + "glue_variable('Design.NUM_PASSENGERS', f'{Aircraft.CrewPayload.Design.NUM_PASSENGERS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.CrewPayload.NUM_PASSENGERS=}'.split('=')[0], md_code=True)\n", + "\n", + "glue_variable('capi',AviaryProblem.check_and_preprocess_inputs.__name__+'()',md_code=True)\n", + "glue_variable(Aircraft.CrewPayload.NUM_BUSINESS_CLASS.split(':')[-1])\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Multi-Mission Example\n", + "\n", + "The [Multi-mission Example](\n", + "https://github.com/OpenMDAO/Aviary/tree/main/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py) demonstrates the capability to optimize an aircraft design considering two missions that the aircraft will perform. For a background on this example see [Multi-Mission Overview](../user_guide/multi-mission).\n", + "\n", + "## Implementation\n", + "The user must supply the following inputs for a multi-mission:\n", + "* 2 aircraft configuration examples (i.e. .csv files)\n", + "* 2 `phase_info` describing the different aircraft missions\n", + "* a weighting of the relative importance of each mission\n", + "* {glue:md}`Design.RANGE`\n", + "* {glue:md}`Design.NUM_PASSENGERS`\n", + "* `LANDING_TO_TAKEOFF_MASS_RATIO` or `Summary.CRUISE_MACH`\n", + "\n", + "### Aircraft Configuration\n", + "In the example, we import a single aircraft configuration (LargeSingleAisle2FLOPS) and then modify it to create a primary mission which carries 162 passengers and a deadhead mission. The deadhead mission is a mission without passengers, but it still has the same number of seats in the aircraft, even though those seats are empty. The number of seats for passenters in the aircraft, as well as some other systems like passenger airconditioning mass, is set by `Aircraft.CrewPayload.Design` values of {glue:md}`Design.NUM_PASSENGERS`, `num_tourist_class`, `num_business_class`, and `num_first_class`. Whereas the actual number of passengers on the flight is specified by those same variables but in `Aircraft.CrewPayload` i.e. `AircraftCrewPayload.NUM_PASSENGERS`. \n", + "\n", + "### Phase Info\n", + "The same mission distance and profile (takeoff, climb, cruise, descent, landing) is being flown for both missions. To enable this, a single phase_info is imported and then copied. The user could modify the deadhead mission to be different from the primary mission by changing the target_range of the deadhead mission to a different value. \n", + "I.E. `phase_info_deadhead['post_mission']['target_range'] = [1500, \"nmi\"]` \n", + "\n", + "### Weighting\n", + "The `weights` input value describes the relative importance or frequence of one mission over the other. In the example, the the weigting is [9,1] indicating that for every nine times the aircraft flies a full passenger load, it flies a single deadhead leg. These weightings are based on user input and are converted into fractions. This weighting can be estimated from examining historical passenger loads on a typical aircraf route of interest. The objective function is based on combining the fuel-burn values from both missions and multiplying that by the weights. Other objectives, like max range, have not been tested yet.\n", + "\n", + "### Setting Values\n", + "The {glue:md}`Mission.Design.RANGE` value must be set to size some of Aviary's subsystems. These subsystems, such as avionics, have increasing mass as {glue:md}`Mission.Design.RANGE` increases. These are first order approximations that come with aviary. But because of these, we must ensure that both pre-missions have the same {glue:md}`Mission.Design.RANGE`, even if the actual range flown buy each mission (target_rage) is different. Without this, the avoinics mass calculated in pre-mission would be different for the two missions, resulting in a different aircraft design, which is counter to what is intended with the multi-mission feature. \n", + "\n", + "The total number of passengers (`Aircraft.CrewPayload.Design.NUM_PASENGERS`) and the design number of passengers of each type (business, tourist, first class), help to define the passenger air conditioning subsystems and the passenger support mass (seats) respectively. Thus when these values are set equal in the primary and deadhead missions, we ensure the aircraft will be designed similarly. \n", + "\n", + "It is good practice, but not required, to set `LANDING_TO_TAKEOFF_MASS_RATIO` in Aviary Values to ensure consistent design of the landing gear for both missions. This combined with Design.GROSS_MASS helps to ensure that `MAIN_GEAR_MASS` and `NOSE_GEAR_MASSES` are the same for both missions. If `LANDING_TO_TAKEOFF_MASS_RATIO` is not set, it will be caluclated based on `Summary.CRUISE_MACH` and {glue:md}`Mission.Design.RANGE`. This is potentially problematic because `Summary.CRUISE_MACH` may not be set, and instead cruse mach may be optimized. In that case, `Summary.CRUISE_MACH` could vary between the Primary and Deadhead missions, which would then cascade into differeing `MAIN_GEAR_MASS` which causes the aircraft designs to diverge.\n", + "\n", + "## Theory\n", + "Each of the two missions in the example are instantiated as aviary problems, so there are two pre-missions, two missions run in parallel. Two get the pre-missions to have the same aircraft design, `Mission.Design.GROSS_MASS`, {glue:md}`Mission.Design.RANGE`, `Aircraft.Wing.SPAN`, and `Aircraft.Wing.AREA`, are promoted out of the pre-missions to a single values. This ensures that the aircrafts in both pre-missions have the same design even though their passenger count and fuel mass are different. There is no post-mission for the example, but if one was required for calculating cost or acoustic constraints, there would need to be two post-mission systems as well.\n", + "\n", + "To impact the structure of aviary problems as little as possible, after instantiation of the pre-mission, mission, and post-mission systems, the connections between those systems are created. Then those groups are then copied over into a regular openmdao problem called `super_prob`. This enables the use all the basic aviary connection and checking functions with minimal modification. \n", + "\n", + "Initialization of states and variables is conducted last through `prob.set_initial_guesses()`. This has to be completed after the aviary groups are added to `super_prob`. Setting initial guesses and then copying over a group into `super_prob` will not work in this case because initial guesses is set on the problem, not the group. \n", + "\n", + "Some custom graphing and print functions were added to this example because the basic aviary graphing programs have not yet been modified to handle two database file from two separate missions. The user can see detailed info of each mission result using the `super_prob.model.group_1.list_vars()` commands listed in the comments at the bottom of the example.\n", + "\n", + "## Best Pratices\n", + "The user should be cognizant of the implications of having two pre-mission systems, one for each mission. Both of the pre-mission systems should be nearly identical in setup, save fuel-mass, passenger, and payload calculations. There are numerous opportunities for the user to get this wrong, and accidentally create two different aircraft as a result. For example, in a previous iteration of this example, `LANDING_TO_TAKEOFF_MASS_RATIO` was not specified, which resulted in two different landing gears being designed, one for the Primary mission, one for the Deadhead mission.\n", + "\n", + "If you are having trouble getting your `Aircraft.Design.EMPTY_MASS` (the final drymass mass summation from pre-mission) to be equal for both pre-missions, use the following OpenMDAO commends at the end of the example to list out and compare the mass from each subsystem.\n", + "\n", + "```\n", + "super_prob.model.group_1.list_vars(val=True, units=True, print_arrays=False)\n", + "super_prob.model.group_2.list_vars(val=True, units=True, print_arrays=False)\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Results\n", + "The results of the [Multi-mission Example](\n", + "https://github.com/OpenMDAO/Aviary/tree/main/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py) are included in the data table and plots below.\n", + "\n", + "From the table results we can see that the Primary mission have the same `Design.EMPTY_MASS` and `Design.GROSS_MASS`. However, the `Summary.GROSS_MASS` varies as expected because these represent \"as-flown\" values. The Primary mission has the higher `Summary.GROSS_MASS` which corresponds to the full passenger load and bags. Consequently, the `Summary.FUEL_BURNED` for each mission is different, higher for the Primary mission, as expected because this mission is carrying more mass for the same mission. `Design.FUEL_MASS` is automatically calculated, it is higher for the Deadhead mission, indicating that the aircraft could hold more fuel, however, that fuel is not needed for the mission. `Wing.SPAN` and `Wing.AERA` are the same for both missions, indicating that the aircraft has been designed similarly in both cases. We do not want to see different values for the wing design because it would mean that the two pre-mission systems are not mirroring eachother. If they were not the same it would mean we are designing two different aircraft. \n", + "\n", + "The Landing_gear masses were also displayed because they are sensitive to `LANDING_TO_TAKEOFF_MASS_RATIO` and `Summary.CRUISE_MACH`, which the user may or may not have specified in Aviary_values. We expect these landing gear masses to be the same and they are which is good news for us and indicates that both pre-mission designs are mirroring eachother.\n", + "\n", + "Lastly the `Furnishings.MASS` and `CREW_AND_PAYLOAD.PASSENGER_SERVICE_MASS` are displayed. These values represent the weight of the seats and the air conditioning system for the passengers. They are both the same which is what we expect to see.\n", + "\n", + "A summary colum called 'Expectations' is included as a summary of what we want to see when evaluating this data. \n", + "\n", + "| Variable | Primary | Deadhead | Expectations |\n", + "|:-------------------------------------------------|:-----------------------------:|:--------------------:|---:|\n", + "|MISSION.DESIGN.GROSS_MASS | 174200.00 (lbm) | 174200.00 (lbm) | Equal |\n", + "|AIRCRAFT.DESIGN.EMPTY_MASS | 88183.64 (lbm) | 88183.64 (lbm) | Equal |\n", + "|MISSION.SUMMARY.GROSS_MASS | 158666.39 (lbm) | 152894.30 (lbm) | Different |\n", + "|MISSION.SUMMARY.FUEL_BURNED | 27508.15 (lbm) | 26679.17 (lbm) | Different |\n", + "|MISSION.DESIGN.FUEL_MASS | 43041.75 (lbm) | 47984.87 (lbm) | Different |\n", + "|MISSION.SUMMARY.TOTAL_FUEL_MASS | 27508.15 (lbm) | 26679.17 (lbm) | Different |\n", + "|AIRCRAFT.WING.SPAN | 112.58 (ft) | 112.58 (ft) | Equal |\n", + "|AIRCRAFT.WING.AREA | 1340.98 (ft**2) | 1340.98(ft**2) | Equal |\n", + "|AIRCRAFT.LANDING_GEAR.MAIN_GEAR_MASS | 6348.73 (lbm) | 6348.73 (lbm) | Equal |\n", + "|AIRCRAFT.LANDING_GEAR.NOSE_GEAR_MASS | 799.54 (lbm) | 799.54 (lbm) | Equal |\n", + "|AIRCRAFT.DESIGN.LANDING_TO_TAKEOFF_MASS_RATIO | 0.84 (unitless) | 0.84 (unitless) | Equal |\n", + "|MISSION.SUMMARY.CRUISE_MACH | 0.785 (unitless) | 0.785 (unitless) | Equal |\n", + "|AIRCRAFT.FURNISHINGS.MASS | 14690.34 (lbm) | 14690.34 (lbm) | Equal |\n", + "|AIRCRAFT.CREW_AND_PAYLOAD.PASSENGER_SERVICE_MASS | 2524.48 (lbm) | 2524.48 (lbm) | Equal |\n", + "\n", + "In the graph below The Altitude, Drag force, Throttle command, Mass, Distance, and Mach number of the Primary and Deadhead missions are displayed. The Deadhead mission shows a characteristic smaller mass throughout the flight as expected since we have fewer passengers, and a slightly lower throttle profile to match, indicating the engine is not being pushed as hard to meet the demands of a lighter plane. Otherwise the missions themselves match, showing Mach, Distance, and Altitude all identical for every part of the mission. We did not allow the mach or altitude to be optimized for this mission so these results are not surprising. \n", + "\n", + "![Results](images/multi_mission.png \"Primary vs. Deadhead mission results\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "latest_env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/aviary/docs/user_guide/multi-mission.ipynb b/aviary/docs/user_guide/multi-mission.ipynb new file mode 100644 index 000000000..ebb649b0e --- /dev/null +++ b/aviary/docs/user_guide/multi-mission.ipynb @@ -0,0 +1,81 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mRunning cells with 'base (Python 3.12.5)' requires the ipykernel package.\n", + "\u001b[1;31mRun the following command to install 'ipykernel' into the Python environment. \n", + "\u001b[1;31mCommand: 'conda install -n base ipykernel --update-deps --force-reinstall'" + ] + } + ], + "source": [ + "# Testing Cell\n", + "\n", + "from aviary.docs.tests.utils import glue_variable\n", + "from aviary.api import Aircraft, AviaryProblem\n", + "\n", + "glue_variable(f'{Aircraft.CrewPayload.Design.NUM_PASSENGERS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.CrewPayload.NUM_PASSENGERS=}'.split('=')[0], md_code=True)\n", + "\n", + "glue_variable('capi',AviaryProblem.check_and_preprocess_inputs.__name__+'()',md_code=True)\n", + "glue_variable(Aircraft.CrewPayload.NUM_BUSINESS_CLASS.split(':')[-1])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Multi-Mission Optimization\n", + "\n", + "## Overview\n", + "\n", + "Multi-missions adds the capability to optimize an aircraft design considering two or more missions that the aircraft will perform. This is in contrast to designing an aircraft for a single mission, and hopefully helps to represent the conditions the aircraft will be flying in better. In the example provided, a large single aisle passenger aircraft is designed based on a mission with every seat filled, and a second 'deadhead' mission where there are no passengers. A weighting is provided by the user to determine how often the missions are full of passengers vs. how often the flights are empty. A cargo example could be constructed where one mission is designed for maximum range and a second mission designed for maximum payload. \n", + "\n", + "To impact the structure of aviaryproblems as little as possible, after instantiation of the pre-mission, mission, and post-mission systems, the connections between those systems are created. Then those groups are then copied over into a regular openmdao problem. This enables the use all the basic aviary connection and checking functions with minimal modification. \n", + "\n", + "The objective function is based on combining the fuel-burn values from both missions and the optimizers objective is to minimize the weighted fuel-burn. Other objectives, like max range, have not been tested yet.\n", + "\n", + "## Design vs. As-Flown\n", + "To support the need to design an aircraft with a certain number of seats, but then possibly fly missions with unfilled seats, a distinction in the metadata was introduced between {glue:md}`Aircraft.CrewPayload.Design.NUM_PASSENGERS` and {glue:md}`Aircraft.CrewPayload.NUM_PASSENGERS`. The individual passenger classes (num_first_class, {glue:md}`num_buisness_class`, num_tourist_class) also have these distinctions. The Design values represent how many seats are available in the aircraft. Whereas the non-design values represent an as-flow value of how many passengers are on a particular flight. \n", + "\n", + "A number of checks exist in {glue:md}`capi` to help the user in the case that incomplete as-flow or design passenger information is provided. This was done to provide backward compatability for older aircraft models.\n", + "\n", + "## Example\n", + "An example of a multi-mission as well as Setup, Theory, and Results, is presented in [Multi-Mission Examples](../examples/multi-mission)." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py index 0b3539a0b..98515f70e 100644 --- a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py @@ -57,7 +57,7 @@ 'aircraft:crew_and_payload:num_first_class', 0, 'unitless') aviary_inputs_deadhead.set_val(Aircraft.CrewPayload.MISC_CARGO, 0.0, 'lbm') - +# Use this to change the target range of the deadhead mission # phase_info_deadhead['post_mission']['target_range'] = [1500, "nmi"] @@ -326,6 +326,6 @@ def createN2(fileref, prob): super_prob = large_single_aisle_example(makeN2=makeN2) - # Uncomment the following lines to see further details on each mission. + # Uncomment the following lines to see mass breakdown details for each mission. # super_prob.model.group_1.list_vars(val=True, units=True, print_arrays=False) # super_prob.model.group_2.list_vars(val=True, units=True, print_arrays=False) From f89276ec19eb04bdd9eb4f2308c89d08aee79db8 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Thu, 17 Oct 2024 11:33:28 -0400 Subject: [PATCH 096/113] added ProblemType.MULTI_MISSION, and modified multi-mission problem to have 1 passenger --- ...multimission_example_large_single_aisle.py | 21 +++-------- aviary/interface/methods_for_level2.py | 36 +++++++++++++++++++ aviary/variable_info/enums.py | 8 +++++ 3 files changed, 48 insertions(+), 17 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py index 98515f70e..19f069add 100644 --- a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py @@ -34,31 +34,18 @@ # fly the same mission twice with two different passenger loads phase_info_primary = copy.deepcopy(phase_info) phase_info_deadhead = copy.deepcopy(phase_info) -# phase_info_deadhead['post_mission']['target_range'] = [500, "nmi"] - # get large single aisle values aviary_inputs_primary = get_flops_inputs('LargeSingleAisle2FLOPS') -aviary_inputs_primary.set_val( - Aircraft.CrewPayload.Design.NUM_PASSENGERS, 162, 'unitless') -aviary_inputs_primary.set_val( - 'aircraft:crew_and_payload:design:num_tourist_class', 150, 'unitless') -aviary_inputs_primary.set_val( - 'aircraft:crew_and_payload:design:num_business_class', 0, 'unitless') -aviary_inputs_primary.set_val( - 'aircraft:crew_and_payload:design:num_first_class', 12, 'unitless') +aviary_inputs_primary.set_val(Mission.Design.GROSS_MASS, val=100000, units='lbm') aviary_inputs_deadhead = copy.deepcopy(aviary_inputs_primary) -aviary_inputs_deadhead.set_val('aircraft:crew_and_payload:num_passengers', 0, 'unitless') +aviary_inputs_deadhead.set_val('aircraft:crew_and_payload:num_passengers', 1, 'unitless') aviary_inputs_deadhead.set_val( - 'aircraft:crew_and_payload:num_tourist_class', 0, 'unitless') + 'aircraft:crew_and_payload:num_tourist_class', 1, 'unitless') aviary_inputs_deadhead.set_val( 'aircraft:crew_and_payload:num_business_class', 0, 'unitless') aviary_inputs_deadhead.set_val( 'aircraft:crew_and_payload:num_first_class', 0, 'unitless') -aviary_inputs_deadhead.set_val(Aircraft.CrewPayload.MISC_CARGO, 0.0, 'lbm') - -# Use this to change the target range of the deadhead mission -# phase_info_deadhead['post_mission']['target_range'] = [1500, "nmi"] class MultiMissionProblem(om.Problem): @@ -95,7 +82,7 @@ def __init__(self, aviary_values, phase_infos, weights): prob.link_phases() # alternate prevents use of equality constraint b/w design and summary gross mass - prob.problem_type = ProblemType.ALTERNATE + prob.problem_type = ProblemType.MULTI_MISSION prob.add_design_variables() self.probs.append(prob) # phase names for each traj (can be used later to make plots/print outputs) diff --git a/aviary/interface/methods_for_level2.py b/aviary/interface/methods_for_level2.py index 4306a05cb..7613d612b 100644 --- a/aviary/interface/methods_for_level2.py +++ b/aviary/interface/methods_for_level2.py @@ -1863,6 +1863,42 @@ def add_design_variables(self): elif self.problem_type is ProblemType.FALLOUT: print('No design variables for Fallout missions') + elif self.problem_type is ProblemType.MULTI_MISSION: + self.model.add_design_var( + Mission.Summary.GROSS_MASS, + lower=10., + upper=900e3, + units='lbm', + ref=175e3, + ) + + self.model.add_constraint( + Mission.Constraints.RANGE_RESIDUAL, equals=0, ref=10 + ) + + # We must ensure that design.gross_mass is greater than mission.summary.gross_mass + # and this must hold true for each of the different missions that is flown + # the result will be the design.gross_mass should be equal to the mission.summary.gross_mass + # of the heaviest mission + self.model.add_subsystem( + "GROSS_MASS_constraint", + om.ExecComp( + "gross_mass_resid = design_mass - actual_mass", + design_mass={"val": 1, "units": "kg"}, + actual_mass={"val": 0, "units": "kg"}, + gross_mass_resid={"val": 30, "units": "kg"}, + ), + promotes_inputs=[ + ("design_mass", Mission.Design.GROSS_MASS), + ("actual_mass", Mission.Summary.GROSS_MASS), + ], + promotes_outputs=["gross_mass_resid"], + ) + + self.model.add_constraint( + "gross_mass_resid", lower=0 + ) + if self.mission_method is TWO_DEGREES_OF_FREEDOM and self.analysis_scheme is AnalysisScheme.COLLOCATION: # problem formulation to make the trajectory work self.model.add_design_var(Mission.Takeoff.ASCENT_T_INTIIAL, diff --git a/aviary/variable_info/enums.py b/aviary/variable_info/enums.py index e4583609f..75d7392b7 100644 --- a/aviary/variable_info/enums.py +++ b/aviary/variable_info/enums.py @@ -151,10 +151,18 @@ class ProblemType(Enum): weight and empty weight constant. Using the specified actual gross weight, it will then find the maximum distance the off-design aircraft can fly. + + MULTI_MISSION: Similar to a SIZING mission, however it varies the + design gross weight and actual gross weight across multiple missions + to and closes design range for each mission. This causes the empty + weight and the fuel weight to change. The final result will be a + single empty weight, for all the different missions, and multiple + values for fuel weight, unique to each mission. """ SIZING = 'sizing' ALTERNATE = 'alternate' FALLOUT = 'fallout' + MULTI_MISSION = 'multimission' class SpeedType(Enum): From 78a2320c7c91f43024aaa45decdf610b135e9816 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Tue, 29 Oct 2024 11:34:18 -0400 Subject: [PATCH 097/113] Correctly connected inputs to objectiv from group0 and group1. Changed to sweep a design variable. added SNOPT option. Faster convergance with SLSQP but SNOPT returns the same answer --- ...multimission_example_large_single_aisle.py | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py index 19f069add..a18a6ba24 100644 --- a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py @@ -4,7 +4,7 @@ In this example, Two seperate aviary problems are instantiated using the typical aviaryProblem calls like load_inputs, check_and_preprocess_payload, etc.. Once those problems are setup and all of their phases are linked together, -we copy those problems as group into a super_problem. We then promote GROSS_MASS, RANGE, SPAN, and wing AREA from each +we copy those problems as group into a super_problem. We then promote GROSS_MASS, RANGE, and wing SWEEP from each of those sub-groups (group1 and group2) up to the super_probem so the optimizer can control them. The fuel_burn results from each of the group1 and group2 dymos missions are summed and weighted to create the objective function the optimizer sees. @@ -47,6 +47,8 @@ aviary_inputs_deadhead.set_val( 'aircraft:crew_and_payload:num_first_class', 0, 'unitless') +Optimizer = 'SLSQP' # SLSQP or SNOPT + class MultiMissionProblem(om.Problem): def __init__(self, aviary_values, phase_infos, weights): @@ -98,20 +100,27 @@ def __init__(self, aviary_values, phase_infos, weights): self.group_prefix + f'_{i}', prob.model, promotes_inputs=[Mission.Design.GROSS_MASS, Mission.Design.RANGE, - Aircraft.Wing.SPAN, - Aircraft.Wing.AREA], + Aircraft.Wing.SWEEP], promotes_outputs=[(Mission.Objectives.FUEL, promoted_name)]) def add_design_variables(self): self.model.add_design_var(Mission.Design.GROSS_MASS, lower=10., upper=900e3, units='lbm') - self.model.add_design_var(Aircraft.Wing.SPAN, lower=100., upper=500., units='ft') - self.model.add_design_var(Aircraft.Wing.AREA, lower=10., - upper=1e6, units='ft**2') + self.model.add_design_var(Aircraft.Wing.SWEEP, lower=20., upper=35., units='deg') def add_driver(self): self.driver = om.pyOptSparseDriver() - self.driver.options["optimizer"] = "SLSQP" + if Optimizer == "SLSQP": + self.driver.options["optimizer"] = "SLSQP" + elif Optimizer == "SNOPT": + self.driver.options["optimizer"] = "SNOPT" + self.driver.opt_settings["Major optimality tolerance"] = 1e-7 + self.driver.opt_settings["Major feasibility tolerance"] = 1e-7 + # self.driver.opt_settings["Major iterations"] = 0 + self.driver.opt_settings["iSumm"] = 6 + self.driver.opt_settings["iPrint"] = 9 + self.driver.opt_settings['Verify level'] = -1 + self.driver.opt_settings["Nonderivative linesearch"] = None self.driver.declare_coloring() # linear solver causes nan entry error for landing to takeoff mass ratio param # self.model.linear_solver = om.DirectSolver() @@ -128,7 +137,9 @@ def add_objective(self): # adding compound execComp to super problem self.model.add_subsystem('compound_fuel_burn_objective', om.ExecComp( - "compound = "+weighted_str, has_diag_partials=True), promotes=["compound"]) + "compound = "+weighted_str, has_diag_partials=True), + promotes_inputs=self.fuel_vars, + promotes_outputs=["compound"]) self.model.add_objective('compound') def setup_wrapper(self): @@ -291,7 +302,8 @@ def createN2(fileref, prob): (Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 'unitless'), (Mission.Summary.CRUISE_MACH, 'unitless'), (Aircraft.Furnishings.MASS, 'lbm'), - (Aircraft.CrewPayload.PASSENGER_SERVICE_MASS, 'lbm')] + (Aircraft.CrewPayload.PASSENGER_SERVICE_MASS, 'lbm'), + (Aircraft.Wing.SWEEP, 'deg')] super_prob.print_vars(vars=printoutputs) plotvars = [('altitude', 'ft'), From a745cf5004befec097e510c9141dca7b9a5994a9 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Tue, 29 Oct 2024 14:27:22 -0400 Subject: [PATCH 098/113] completed changes from 1st round of reviews except for changing detection method of user input suggested by jason --- ...multimission_example_large_single_aisle.py | 2 +- aviary/utils/preprocessors.py | 25 ++++++++++++------- aviary/variable_info/variable_meta_data.py | 6 +++++ 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py index a18a6ba24..9a0c465e4 100644 --- a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py @@ -198,7 +198,7 @@ def create_timeseries_plots(self, plotvars=[], show=True): plt.xlabel("Time (s)") plt.ylabel(f"{var.title()} ({unit})") plt.grid() - plt.figlegend([f"Plane {i}" for i in range(self.num_missions)]) + plt.figlegend([f"Mission {i}" for i in range(self.num_missions)]) if show: plt.show() diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 42e4f962d..0a10312ed 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -1,3 +1,4 @@ +from aviary.variable_info.enums import Verbosity import warnings import numpy as np @@ -66,11 +67,13 @@ def preprocess_crewpayload(aviary_options: AviaryValues): # or if it was set to it's default value of zero if passenger_count != 0 and aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) == 0: aviary_options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, passenger_count) - print("INFO: In preprocessor.py: User has specified supporting values for NUM_PASSENGERS but has left NUM_PASSENGERS=0. Replacing NUM_PASSENGERS with passenger_count.") + if Verbosity >= 2: + print("User has specified supporting values for NUM_PASSENGERS but has left NUM_PASSENGERS=0. Replacing NUM_PASSENGERS with passenger_count.") if design_passenger_count != 0 and aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) == 0: aviary_options.set_val( Aircraft.CrewPayload.Design.NUM_PASSENGERS, design_passenger_count) - print("INFO: In preprocessor.py: User has specified supporting values for Design.NUM_PASSENGERS but has left Design.NUM_PASSENGERS=0. Replacing Design.NUM_PASSENGERS with design_passenger_count.") + if Verbosity >= 2: + print("User has specified supporting values for Design.NUM_PASSENGERS but has left Design.NUM_PASSENGERS=0. Replacing Design.NUM_PASSENGERS with design_passenger_count.") num_pax = aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) design_num_pax = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) @@ -101,7 +104,9 @@ def preprocess_crewpayload(aviary_options: AviaryValues): # Copy data over if only one set of data exists # User has given detailed values for 1TB as flow and NO design values at all if passenger_count != 0 and design_num_pax == 0 and design_passenger_count == 0: - print("INFO: In preprocessor.py: User has not input design passengers data. Assuming design is equal to as-flow passenger data.") + if Verbosity >= 2: + print( + "User has not input design passengers data. Assuming design is equal to as-flow passenger data.") aviary_options.set_val( Aircraft.CrewPayload.Design.NUM_PASSENGERS, passenger_count) aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, @@ -112,10 +117,13 @@ def preprocess_crewpayload(aviary_options: AviaryValues): aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS)) # user has not supplied detailed information on design but has supplied summary information on passengers elif num_pax != 0 and design_num_pax == 0: - print("INFO: In preprocessor.py: User has specified as-flown NUM_PASSENGERS but not how many passengers the aircraft was designed for in Design.NUM_PASSENGERS. Assuming they are equal.") + if Verbosity >= 2: + print("User has specified as-flown NUM_PASSENGERS but not how many passengers the aircraft was designed for in Design.NUM_PASSENGERS. Assuming they are equal.") aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, num_pax) elif design_passenger_count != 0 and num_pax == 0 and passenger_count == 0: - print("INFO: In preprocessor.py: User has not input as-flown passengers data. Assuming as-flow is equal to design passenger data.") + if Verbosity >= 1: + print("User has not input as-flown passengers data. Assuming as-flow is equal to design passenger data.") + print("If you intended to have no passengers on this flight, please set Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS to zero in aviary_values.") aviary_options.set_val( Aircraft.CrewPayload.NUM_PASSENGERS, design_passenger_count) aviary_options.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, @@ -126,7 +134,9 @@ def preprocess_crewpayload(aviary_options: AviaryValues): aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS)) # user has not supplied detailed information on design but has supplied summary information on passengers elif design_num_pax != 0 and num_pax == 0: - print("INFO: In preprocessor.py: User has specified Design.NUM_PASSENGERS but not how many passengers are on the flight in NUM_PASSENGERS. Assuming they are equal.") + if Verbosity >= 1: + print("User has specified Design.NUM_PASSENGERS but not how many passengers are on the flight in NUM_PASSENGERS. Assuming they are equal.") + print("If you intended to have no passengers on this flight, please set Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS to zero in aviary_values.") aviary_options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, design_num_pax) # Performe checks on the final data tables to ensure Design is always large then As-Flow @@ -143,9 +153,6 @@ def preprocess_crewpayload(aviary_options: AviaryValues): raise om.AnalysisError( f"ERROR: In preprocesssors.py: NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS)}) is larger than the number of seats set by Design.NUM_PASSENGERS ({aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS)}) .") - # dnp = aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) - # print(f"INFO: In preprocessor.py: Aircraft has been designed for {dnp} passengers.") - if Aircraft.CrewPayload.NUM_FLIGHT_ATTENDANTS not in aviary_options: flight_attendants_count = 0 # assume no passengers diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index e8fdd205e..4830653e3 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -699,6 +699,12 @@ default_value=0.7, ) +# ___ _ +# | \ ___ ___ (_) __ _ _ _ +# | |) | / -_) (_-< | | / _` | | ' \ +# |___/ \___| /__/ |_| \__, | |_||_| +# ====================== |___/ ====== + add_meta_data( Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, meta_data=_MetaData, From 48b6a050477de803a5d8c27228f255c48d8d7943 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Tue, 29 Oct 2024 14:47:13 -0400 Subject: [PATCH 099/113] small tweak to verbosity code call --- aviary/utils/preprocessors.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 0a10312ed..02c52353f 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -1,4 +1,3 @@ -from aviary.variable_info.enums import Verbosity import warnings import numpy as np @@ -7,9 +6,8 @@ from aviary.utils.aviary_values import AviaryValues from aviary.utils.named_values import get_keys from aviary.variable_info.variable_meta_data import _MetaData -from aviary.variable_info.variables import Aircraft, Mission +from aviary.variable_info.variables import Aircraft, Mission, Settings from aviary.utils.test_utils.variable_test import get_names_from_hierarchy -from aviary.variable_info.variable_meta_data import _MetaData as BaseMetaData def preprocess_options(aviary_options: AviaryValues, **kwargs): @@ -37,6 +35,8 @@ def preprocess_crewpayload(aviary_options: AviaryValues): returns the modified collection. """ + verbosity = aviary_options.get_val(Settings.VERBOSITY) + # Grab Default all values for num_pax and 1TB (1st class, Tourist Class, Business Class Passengers) to make # sure they are accessible so we don't have to run checks if they exist again for key in ( @@ -49,7 +49,7 @@ def preprocess_crewpayload(aviary_options: AviaryValues): Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS,): if key not in aviary_options: - aviary_options.set_val(key, BaseMetaData[key]['default_value']) + aviary_options.set_val(key, _MetaData[key]['default_value']) # Sum passenger Counts for later checks and assignments passenger_count = 0 @@ -67,12 +67,12 @@ def preprocess_crewpayload(aviary_options: AviaryValues): # or if it was set to it's default value of zero if passenger_count != 0 and aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) == 0: aviary_options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, passenger_count) - if Verbosity >= 2: + if verbosity >= 2: print("User has specified supporting values for NUM_PASSENGERS but has left NUM_PASSENGERS=0. Replacing NUM_PASSENGERS with passenger_count.") if design_passenger_count != 0 and aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS) == 0: aviary_options.set_val( Aircraft.CrewPayload.Design.NUM_PASSENGERS, design_passenger_count) - if Verbosity >= 2: + if verbosity >= 2: print("User has specified supporting values for Design.NUM_PASSENGERS but has left Design.NUM_PASSENGERS=0. Replacing Design.NUM_PASSENGERS with design_passenger_count.") num_pax = aviary_options.get_val(Aircraft.CrewPayload.NUM_PASSENGERS) @@ -104,7 +104,7 @@ def preprocess_crewpayload(aviary_options: AviaryValues): # Copy data over if only one set of data exists # User has given detailed values for 1TB as flow and NO design values at all if passenger_count != 0 and design_num_pax == 0 and design_passenger_count == 0: - if Verbosity >= 2: + if verbosity >= 2: print( "User has not input design passengers data. Assuming design is equal to as-flow passenger data.") aviary_options.set_val( @@ -117,11 +117,11 @@ def preprocess_crewpayload(aviary_options: AviaryValues): aviary_options.get_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS)) # user has not supplied detailed information on design but has supplied summary information on passengers elif num_pax != 0 and design_num_pax == 0: - if Verbosity >= 2: + if verbosity >= 2: print("User has specified as-flown NUM_PASSENGERS but not how many passengers the aircraft was designed for in Design.NUM_PASSENGERS. Assuming they are equal.") aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, num_pax) elif design_passenger_count != 0 and num_pax == 0 and passenger_count == 0: - if Verbosity >= 1: + if verbosity >= 1: print("User has not input as-flown passengers data. Assuming as-flow is equal to design passenger data.") print("If you intended to have no passengers on this flight, please set Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS to zero in aviary_values.") aviary_options.set_val( @@ -134,7 +134,7 @@ def preprocess_crewpayload(aviary_options: AviaryValues): aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS)) # user has not supplied detailed information on design but has supplied summary information on passengers elif design_num_pax != 0 and num_pax == 0: - if Verbosity >= 1: + if verbosity >= 1: print("User has specified Design.NUM_PASSENGERS but not how many passengers are on the flight in NUM_PASSENGERS. Assuming they are equal.") print("If you intended to have no passengers on this flight, please set Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS to zero in aviary_values.") aviary_options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, design_num_pax) From 096e77ed6cc9b97a45d16b4233f12edd3196c64e Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Tue, 29 Oct 2024 15:15:33 -0400 Subject: [PATCH 100/113] fixed settings verbosity and removed proprocess_options() from N3CC model --- .../run_multimission_example_large_single_aisle.py | 1 + aviary/models/N3CC/N3CC_data.py | 4 ++-- aviary/utils/preprocessors.py | 4 ++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py index 9a0c465e4..44527e823 100644 --- a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py @@ -78,6 +78,7 @@ def __init__(self, aviary_values, phase_infos, weights): prob = av.AviaryProblem() prob.load_inputs(aviary_values, phase_info) prob.check_and_preprocess_inputs() + exit() prob.add_pre_mission_systems() prob.add_phases() prob.add_post_mission_systems() diff --git a/aviary/models/N3CC/N3CC_data.py b/aviary/models/N3CC/N3CC_data.py index cfffe854e..3c90ae261 100644 --- a/aviary/models/N3CC/N3CC_data.py +++ b/aviary/models/N3CC/N3CC_data.py @@ -20,7 +20,6 @@ from aviary.subsystems.propulsion.utils import build_engine_deck from aviary.utils.aviary_values import AviaryValues from aviary.utils.test_utils.default_subsystems import get_default_premission_subsystems, get_default_mission_subsystems -from aviary.utils.preprocessors import preprocess_options from aviary.utils.functions import get_path from aviary.variable_info.variables import Aircraft, Dynamic, Mission, Settings from aviary.variable_info.enums import EquationsOfMotion, LegacyCode @@ -447,7 +446,8 @@ # Create engine model engine = build_engine_deck(aviary_options=inputs) -preprocess_options(inputs, engine_models=engine) +# Calls to preprocess_options() in this location should be avoided because they +# # will trigger when get_flops_inputs() is imported # build subsystems default_premission_subsystems = get_default_premission_subsystems('FLOPS', engine) diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 02c52353f..5b7e20b5f 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -24,6 +24,10 @@ def preprocess_options(aviary_options: AviaryValues, **kwargs): except KeyError: engine_models = None + if Settings.VERBOSITY not in aviary_options: + aviary_options.set_val( + Settings.VERBOSITY, _MetaData[Settings.VERBOSITY]['default_value']) + preprocess_crewpayload(aviary_options) preprocess_propulsion(aviary_options, engine_models) From 631c4b4296e93110b75357a0e455af3039747a3b Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Wed, 30 Oct 2024 12:36:34 -0400 Subject: [PATCH 101/113] fixed preprocess_options inports for multiple N3CC related tests. removed exit from multimission --- .../run_multimission_example_large_single_aisle.py | 1 - aviary/mission/flops_based/ode/test/test_landing_eom.py | 4 ++++ aviary/mission/flops_based/ode/test/test_landing_ode.py | 7 ++++++- aviary/mission/flops_based/ode/test/test_takeoff_ode.py | 6 +++++- aviary/models/N3CC/N3CC_data.py | 2 ++ .../subsystems/mass/flops_based/test/test_landing_gear.py | 4 ++++ 6 files changed, 21 insertions(+), 3 deletions(-) diff --git a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py index 44527e823..9a0c465e4 100644 --- a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py @@ -78,7 +78,6 @@ def __init__(self, aviary_values, phase_infos, weights): prob = av.AviaryProblem() prob.load_inputs(aviary_values, phase_info) prob.check_and_preprocess_inputs() - exit() prob.add_pre_mission_systems() prob.add_phases() prob.add_post_mission_systems() diff --git a/aviary/mission/flops_based/ode/test/test_landing_eom.py b/aviary/mission/flops_based/ode/test/test_landing_eom.py index 1b0a58be7..220effc62 100644 --- a/aviary/mission/flops_based/ode/test/test_landing_eom.py +++ b/aviary/mission/flops_based/ode/test/test_landing_eom.py @@ -12,6 +12,8 @@ from aviary.utils.test_utils.variable_test import assert_match_varnames from aviary.validation_cases.validation_tests import do_validation_test from aviary.variable_info.variables import Dynamic +from aviary.subsystems.propulsion.utils import build_engine_deck +from aviary.utils.preprocessors import preprocess_options class FlareEOMTest(unittest.TestCase): @@ -25,6 +27,8 @@ def setUp(self): time, _ = detailed_landing_flare.get_item('time') nn = len(time) aviary_options = inputs + engine = build_engine_deck(aviary_options) + preprocess_options(aviary_options, engine_models=engine) prob.model.add_subsystem( "landing_flare_eom", diff --git a/aviary/mission/flops_based/ode/test/test_landing_ode.py b/aviary/mission/flops_based/ode/test/test_landing_ode.py index 0c863e6d5..00310a904 100644 --- a/aviary/mission/flops_based/ode/test/test_landing_ode.py +++ b/aviary/mission/flops_based/ode/test/test_landing_ode.py @@ -11,6 +11,7 @@ detailed_landing_flare, inputs, landing_subsystem_options) from aviary.validation_cases.validation_tests import do_validation_test from aviary.variable_info.variables import Dynamic, Aircraft +from aviary.utils.preprocessors import preprocess_options class FlareODETest(unittest.TestCase): @@ -24,8 +25,12 @@ def test_case(self): nn = len(time) aviary_options = inputs + engine = build_engine_deck(aviary_options) + + preprocess_options(aviary_options, engine_models=engine) + default_mission_subsystems = get_default_mission_subsystems( - 'FLOPS', build_engine_deck(aviary_options)) + 'FLOPS', engine) prob.model.add_subsystem( "landing_flare_ode", diff --git a/aviary/mission/flops_based/ode/test/test_takeoff_ode.py b/aviary/mission/flops_based/ode/test/test_takeoff_ode.py index daecf73cb..460680614 100644 --- a/aviary/mission/flops_based/ode/test/test_takeoff_ode.py +++ b/aviary/mission/flops_based/ode/test/test_takeoff_ode.py @@ -11,6 +11,7 @@ detailed_takeoff_climbing, detailed_takeoff_ground, takeoff_subsystem_options, inputs) from aviary.validation_cases.validation_tests import do_validation_test from aviary.variable_info.variables import Dynamic, Mission, Aircraft +from aviary.utils.preprocessors import preprocess_options takeoff_subsystem_options = deepcopy(takeoff_subsystem_options) @@ -75,9 +76,12 @@ def _make_prob(climbing): time, _ = detailed_takeoff_climbing.get_item('time') nn = len(time) aviary_options = inputs + engine = build_engine_deck(aviary_options) + + preprocess_options(aviary_options, engine_models=engine) default_mission_subsystems = get_default_mission_subsystems( - 'FLOPS', build_engine_deck(aviary_options)) + 'FLOPS', engine) prob.model.add_subsystem( "takeoff_ode", diff --git a/aviary/models/N3CC/N3CC_data.py b/aviary/models/N3CC/N3CC_data.py index 3c90ae261..ccea7fb00 100644 --- a/aviary/models/N3CC/N3CC_data.py +++ b/aviary/models/N3CC/N3CC_data.py @@ -23,6 +23,7 @@ from aviary.utils.functions import get_path from aviary.variable_info.variables import Aircraft, Dynamic, Mission, Settings from aviary.variable_info.enums import EquationsOfMotion, LegacyCode +# from aviary.utils.preprocessors import preprocess_options N3CC = {} inputs = N3CC['inputs'] = AviaryValues() @@ -448,6 +449,7 @@ engine = build_engine_deck(aviary_options=inputs) # Calls to preprocess_options() in this location should be avoided because they # # will trigger when get_flops_inputs() is imported +# preprocess_options(inputs, engine_models=engine) # build subsystems default_premission_subsystems = get_default_premission_subsystems('FLOPS', engine) diff --git a/aviary/subsystems/mass/flops_based/test/test_landing_gear.py b/aviary/subsystems/mass/flops_based/test/test_landing_gear.py index a02d8b923..59a056984 100644 --- a/aviary/subsystems/mass/flops_based/test/test_landing_gear.py +++ b/aviary/subsystems/mass/flops_based/test/test_landing_gear.py @@ -1,3 +1,5 @@ +from aviary.subsystems.propulsion.utils import build_engine_deck +from aviary.utils.preprocessors import preprocess_options import unittest import openmdao.api as om @@ -157,6 +159,8 @@ def test_derivs(self, case_name): prob = self.prob model = prob.model flops_inputs = get_flops_inputs(case_name) + engine = build_engine_deck(flops_inputs) + preprocess_options(flops_inputs, engine_models=engine) model.add_subsystem( 'main', MainGearLength(aviary_options=flops_inputs), promotes=['*']) From 1021d6388d2ba2739f124f0b0a57686ff39bc72a Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Wed, 30 Oct 2024 14:56:24 -0400 Subject: [PATCH 102/113] glue updates and variable_meta_data spaces removed --- aviary/docs/examples/multi-missions.ipynb | 45 ++++++++++++++-------- aviary/docs/user_guide/multi-mission.ipynb | 6 ++- aviary/variable_info/variable_meta_data.py | 8 ++-- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/aviary/docs/examples/multi-missions.ipynb b/aviary/docs/examples/multi-missions.ipynb index ebc83354f..be48f5cc0 100644 --- a/aviary/docs/examples/multi-missions.ipynb +++ b/aviary/docs/examples/multi-missions.ipynb @@ -15,12 +15,26 @@ "from aviary.api import Aircraft, Mission, AviaryProblem\n", "from aviary.examples.multi_missions import run_multimission_example_large_single_aisle\n", "\n", - "glue_variable('Design.RANGE',f'{Mission.Design.RANGE=}'.split('=')[0], md_code=True)\n", - "glue_variable('Design.NUM_PASSENGERS', f'{Aircraft.CrewPayload.Design.NUM_PASSENGERS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Mission.Design.RANGE=}'.split('=')[0], md_code=True)\n", + "\n", "glue_variable(f'{Aircraft.CrewPayload.NUM_PASSENGERS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.CrewPayload.NUM_BUSINESS_CLASS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.CrewPayload.NUM_FIRST_CLASS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.CrewPayload.NUM_TOURIST_CLASS=}'.split('=')[0], md_code=True)\n", + "\n", + "glue_variable(f'{Aircraft.CrewPayload.Design.NUM_PASSENGERS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.CrewPayload.Design.NUM_FIRST_CLASS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS=}'.split('=')[0], md_code=True)\n", "\n", "glue_variable('capi',AviaryProblem.check_and_preprocess_inputs.__name__+'()',md_code=True)\n", - "glue_variable(Aircraft.CrewPayload.NUM_BUSINESS_CLASS.split(':')[-1])\n", + "glue_variable(f'{Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Mission.Summary.CRUISE_MACH=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.LandingGear.MAIN_GEAR_MASS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.LandingGear.NOSE_GEAR_MASS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.Wing.SWEEP=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Mission.Design.GROSS_MASS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.Design.EMPTY_MASS=}'.split('=')[0], md_code=True)\n", "\n" ] }, @@ -34,20 +48,19 @@ "https://github.com/OpenMDAO/Aviary/tree/main/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py) demonstrates the capability to optimize an aircraft design considering two missions that the aircraft will perform. For a background on this example see [Multi-Mission Overview](../user_guide/multi-mission).\n", "\n", "## Implementation\n", - "The user must supply the following inputs for a multi-mission:\n", + "At a minimum, the user must supply the following inputs for a multi-mission:\n", "* 2 aircraft configuration examples (i.e. .csv files)\n", "* 2 `phase_info` describing the different aircraft missions\n", "* a weighting of the relative importance of each mission\n", - "* {glue:md}`Design.RANGE`\n", - "* {glue:md}`Design.NUM_PASSENGERS`\n", - "* `LANDING_TO_TAKEOFF_MASS_RATIO` or `Summary.CRUISE_MACH`\n", + "* {glue:md}`Mission.Design.RANGE`\n", + "* {glue:md}`Aircraft.CrewPayload.Design.NUM_PASSENGERS`\n", + "* {glue:md}`Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO`\n", "\n", "### Aircraft Configuration\n", - "In the example, we import a single aircraft configuration (LargeSingleAisle2FLOPS) and then modify it to create a primary mission which carries 162 passengers and a deadhead mission. The deadhead mission is a mission without passengers, but it still has the same number of seats in the aircraft, even though those seats are empty. The number of seats for passenters in the aircraft, as well as some other systems like passenger airconditioning mass, is set by `Aircraft.CrewPayload.Design` values of {glue:md}`Design.NUM_PASSENGERS`, `num_tourist_class`, `num_business_class`, and `num_first_class`. Whereas the actual number of passengers on the flight is specified by those same variables but in `Aircraft.CrewPayload` i.e. `AircraftCrewPayload.NUM_PASSENGERS`. \n", + "In the example, we import a single aircraft configuration (LargeSingleAisle2FLOPS) and then modify it to create a primary mission which carries 162 passengers and a deadhead mission. The deadhead mission is a mission without passengers, but it still has the same number of seats in the aircraft, even though those seats are empty. The number of seats for passenters in the aircraft, as well as some other systems like passenger airconditioning mass, is set by values of {glue:md}`Aircraft.CrewPayload.Design.NUM_PASSENGERS`, {glue:md}`Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS`, {glue:md}`Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS`, and {glue:md}`Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS`. Whereas the actual number of passengers on the flight is specified by variables of {glue:md}`Aircraft.CrewPayload.NUM_PASSENGERS`, {glue:md}`Aircraft.CrewPayload.NUM_TOURIST_CLASS`, {glue:md}`Aircraft.CrewPayload.NUM_BUSINESS_CLASS`, and {glue:md}`Aircraft.CrewPayload.NUM_BUSINESS_CLASS`.\n", "\n", "### Phase Info\n", - "The same mission distance and profile (takeoff, climb, cruise, descent, landing) is being flown for both missions. To enable this, a single phase_info is imported and then copied. The user could modify the deadhead mission to be different from the primary mission by changing the target_range of the deadhead mission to a different value. \n", - "I.E. `phase_info_deadhead['post_mission']['target_range'] = [1500, \"nmi\"]` \n", + "The same mission distance and profile (takeoff, climb, cruise, descent, landing) is being flown for both missions. To enable this, a single phase_info is imported and then deepcopied. The user could modify the deadhead mission to be different from the primary mission by changing the target_range of the deadhead mission to a different value, for example by changing `phase_info_deadhead['post_mission']['target_range'] = [1500, \"nmi\"]` \n", "\n", "### Weighting\n", "The `weights` input value describes the relative importance or frequence of one mission over the other. In the example, the the weigting is [9,1] indicating that for every nine times the aircraft flies a full passenger load, it flies a single deadhead leg. These weightings are based on user input and are converted into fractions. This weighting can be estimated from examining historical passenger loads on a typical aircraf route of interest. The objective function is based on combining the fuel-burn values from both missions and multiplying that by the weights. Other objectives, like max range, have not been tested yet.\n", @@ -55,23 +68,23 @@ "### Setting Values\n", "The {glue:md}`Mission.Design.RANGE` value must be set to size some of Aviary's subsystems. These subsystems, such as avionics, have increasing mass as {glue:md}`Mission.Design.RANGE` increases. These are first order approximations that come with aviary. But because of these, we must ensure that both pre-missions have the same {glue:md}`Mission.Design.RANGE`, even if the actual range flown buy each mission (target_rage) is different. Without this, the avoinics mass calculated in pre-mission would be different for the two missions, resulting in a different aircraft design, which is counter to what is intended with the multi-mission feature. \n", "\n", - "The total number of passengers (`Aircraft.CrewPayload.Design.NUM_PASENGERS`) and the design number of passengers of each type (business, tourist, first class), help to define the passenger air conditioning subsystems and the passenger support mass (seats) respectively. Thus when these values are set equal in the primary and deadhead missions, we ensure the aircraft will be designed similarly. \n", + "The total number of passengers ({glue:md}`Aircraft.CrewPayload.Design.NUM_PASENGERS`) and the design number of passengers of each type (business, tourist, first class), help to define the passenger air conditioning subsystems and the passenger support mass (seats) respectively. Thus when these values are set equal in the primary and deadhead missions, we ensure the aircraft will be designed similarly. \n", "\n", - "It is good practice, but not required, to set `LANDING_TO_TAKEOFF_MASS_RATIO` in Aviary Values to ensure consistent design of the landing gear for both missions. This combined with Design.GROSS_MASS helps to ensure that `MAIN_GEAR_MASS` and `NOSE_GEAR_MASSES` are the same for both missions. If `LANDING_TO_TAKEOFF_MASS_RATIO` is not set, it will be caluclated based on `Summary.CRUISE_MACH` and {glue:md}`Mission.Design.RANGE`. This is potentially problematic because `Summary.CRUISE_MACH` may not be set, and instead cruse mach may be optimized. In that case, `Summary.CRUISE_MACH` could vary between the Primary and Deadhead missions, which would then cascade into differeing `MAIN_GEAR_MASS` which causes the aircraft designs to diverge.\n", + "It is good practice, but not required, to set {glue:md}`Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO` in Aviary Values to ensure consistent design of the landing gear for both missions. This combined with Design.GROSS_MASS helps to ensure that {glue:md}`Aircraft.LandingGear.MAIN_GEAR_MASS` and {glue:md}`Aircraft.LandingGear.NOSE_GEAR_MASS` are the same for both missions. If {glue:md}`Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO` is not set, Landing Gear Masses will be caluclated based on {glue:md}`Mission.Summary.CRUISE_MACH` and {glue:md}`Mission.Design.RANGE`. This is potentially problematic because {glue:md}`Mission.Summary.CRUISE_MACH` may not be set, and instead cruse mach may be optimized. In that case, {glue:md}`Mission.Summary.CRUISE_MACH` could vary between the Primary and Deadhead missions, which would then cascade into differeing {glue:md}`Aircraft.LandingGear.MAIN_GEAR_MASS` which causes the aircraft designs to diverge.\n", "\n", "## Theory\n", - "Each of the two missions in the example are instantiated as aviary problems, so there are two pre-missions, two missions run in parallel. Two get the pre-missions to have the same aircraft design, `Mission.Design.GROSS_MASS`, {glue:md}`Mission.Design.RANGE`, `Aircraft.Wing.SPAN`, and `Aircraft.Wing.AREA`, are promoted out of the pre-missions to a single values. This ensures that the aircrafts in both pre-missions have the same design even though their passenger count and fuel mass are different. There is no post-mission for the example, but if one was required for calculating cost or acoustic constraints, there would need to be two post-mission systems as well.\n", + "Each of the two missions in the example are instantiated as separate aviary problems before copying those two groups over to a single `super_prob`. This means there are two pre-missions, two missions run in parallel. Two get the pre-missions to have the same aircraft design, {glue:md}`Mission.Design.GROSS_MASS`, {glue:md}`Mission.Design.RANGE`, {glue:md}`Aircraft.Wing.SWEEP`, are promoted out of the pre-missions to a single values. This ensures that the aircrafts in both pre-missions have the same design even though their passenger count and fuel mass are different. There is no post-mission for the example, but if one was required for calculating cost or acoustic constraints, there would need to be two post-mission systems as well.\n", "\n", - "To impact the structure of aviary problems as little as possible, after instantiation of the pre-mission, mission, and post-mission systems, the connections between those systems are created. Then those groups are then copied over into a regular openmdao problem called `super_prob`. This enables the use all the basic aviary connection and checking functions with minimal modification. \n", + "To impact the structure of aviary problems as little as possible, after instantiation of the pre-mission, mission, and post-mission systems, the connections between those systems are created. Then those groups are then copied over into a regular openmdao problem called `super_prob`. This enables the use all the basic aviary connection and checking functions with minimal modification. There originally was a desire to use openmdao subproblems for this implementation but derivatives through subproblems were not available at that time.\n", "\n", "Initialization of states and variables is conducted last through `prob.set_initial_guesses()`. This has to be completed after the aviary groups are added to `super_prob`. Setting initial guesses and then copying over a group into `super_prob` will not work in this case because initial guesses is set on the problem, not the group. \n", "\n", "Some custom graphing and print functions were added to this example because the basic aviary graphing programs have not yet been modified to handle two database file from two separate missions. The user can see detailed info of each mission result using the `super_prob.model.group_1.list_vars()` commands listed in the comments at the bottom of the example.\n", "\n", "## Best Pratices\n", - "The user should be cognizant of the implications of having two pre-mission systems, one for each mission. Both of the pre-mission systems should be nearly identical in setup, save fuel-mass, passenger, and payload calculations. There are numerous opportunities for the user to get this wrong, and accidentally create two different aircraft as a result. For example, in a previous iteration of this example, `LANDING_TO_TAKEOFF_MASS_RATIO` was not specified, which resulted in two different landing gears being designed, one for the Primary mission, one for the Deadhead mission.\n", + "The user should be cognizant of the implications of having two pre-mission systems, one for each mission. Both of the pre-mission systems should be nearly identical in setup, save fuel-mass, passenger, and payload calculations. There are numerous opportunities for the user to get this wrong, and accidentally create two different aircraft as a result. For example, in a previous iteration of this example, {glue:md}`Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO` was not specified, which resulted in two different landing gears being designed, one for the Primary mission, one for the Deadhead mission.\n", "\n", - "If you are having trouble getting your `Aircraft.Design.EMPTY_MASS` (the final drymass mass summation from pre-mission) to be equal for both pre-missions, use the following OpenMDAO commends at the end of the example to list out and compare the mass from each subsystem.\n", + "If you are having trouble getting your {glue:md}`Aircraft.Design.EMPTY_MASS` (the final drymass mass summation from pre-mission) to be equal for both pre-missions, use the following OpenMDAO commends at the end of the example to list out and compare the mass from each subsystem.\n", "\n", "```\n", "super_prob.model.group_1.list_vars(val=True, units=True, print_arrays=False)\n", diff --git a/aviary/docs/user_guide/multi-mission.ipynb b/aviary/docs/user_guide/multi-mission.ipynb index ebb649b0e..ac2126ac0 100644 --- a/aviary/docs/user_guide/multi-mission.ipynb +++ b/aviary/docs/user_guide/multi-mission.ipynb @@ -30,7 +30,9 @@ "glue_variable(f'{Aircraft.CrewPayload.NUM_PASSENGERS=}'.split('=')[0], md_code=True)\n", "\n", "glue_variable('capi',AviaryProblem.check_and_preprocess_inputs.__name__+'()',md_code=True)\n", - "glue_variable(Aircraft.CrewPayload.NUM_BUSINESS_CLASS.split(':')[-1])\n" + "glue_variable(f'{Aircraft.CrewPayload.NUM_BUSINESS_CLASS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.CrewPayload.NUM_FIRST_CLASS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.CrewPayload.NUM_TOURIST_CLASS=}'.split('=')[0], md_code=True)\n" ] }, { @@ -48,7 +50,7 @@ "The objective function is based on combining the fuel-burn values from both missions and the optimizers objective is to minimize the weighted fuel-burn. Other objectives, like max range, have not been tested yet.\n", "\n", "## Design vs. As-Flown\n", - "To support the need to design an aircraft with a certain number of seats, but then possibly fly missions with unfilled seats, a distinction in the metadata was introduced between {glue:md}`Aircraft.CrewPayload.Design.NUM_PASSENGERS` and {glue:md}`Aircraft.CrewPayload.NUM_PASSENGERS`. The individual passenger classes (num_first_class, {glue:md}`num_buisness_class`, num_tourist_class) also have these distinctions. The Design values represent how many seats are available in the aircraft. Whereas the non-design values represent an as-flow value of how many passengers are on a particular flight. \n", + "To support the need to design an aircraft with a certain number of seats, but then possibly fly missions with unfilled seats, a distinction in the metadata was introduced between {glue:md}`Aircraft.CrewPayload.Design.NUM_PASSENGERS` and {glue:md}`Aircraft.CrewPayload.NUM_PASSENGERS`. The individual passenger classes ({glue:md}`Aircraft.CrewPayload.NUM_FIRST_CLASS`, {glue:md}`Aircraft.CrewPayload.NUM_BUSINESS_CLASS`, {glue:md}`Aircraft.CrewPayload.NUM_TOURIST_CLASS`) also have these distinctions. The Design values represent how many seats are available in the aircraft. Whereas the non-design values represent an as-flow value of how many passengers are on a particular flight. \n", "\n", "A number of checks exist in {glue:md}`capi` to help the user in the case that incomplete as-flow or design passenger information is provided. This was done to provide backward compatability for older aircraft models.\n", "\n", diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index 4830653e3..673383eb3 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -699,11 +699,11 @@ default_value=0.7, ) -# ___ _ -# | \ ___ ___ (_) __ _ _ _ -# | |) | / -_) (_-< | | / _` | | ' \ +# ___ _ +# | \ ___ ___ (_) __ _ _ _ +# | |) | / -_) (_-< | | / _` | | ' \ # |___/ \___| /__/ |_| \__, | |_||_| -# ====================== |___/ ====== +# ====================== |___/ ====== add_meta_data( Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, From 98ccb21eab68a9052c1eee02f8393fcc668dca98 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Wed, 30 Oct 2024 15:22:42 -0400 Subject: [PATCH 103/113] added more glue, removed printing of span and area and Design.Fuel_mass from multi_mission example because not useful outputs. --- aviary/docs/examples/images/multi_mission.png | Bin 1224707 -> 1074814 bytes aviary/docs/examples/multi-missions.ipynb | 41 ++++++++++-------- ...multimission_example_large_single_aisle.py | 3 -- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/aviary/docs/examples/images/multi_mission.png b/aviary/docs/examples/images/multi_mission.png index e4dc73b49a762e1ba0ebeb7e2a6859cc0680f3df..1aab73d2ff1e81f5d3f8f4e1081775875fe2df5b 100644 GIT binary patch literal 1074814 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


      ppgLu)7hy#cNnv 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

      yxPoEGoR1nIb*e8D?%JRhdt$zP&cjw_p zpMrd-!a=U1t!)P!k-!CwkBf^2)E_C$S-9Wx!scr%>v{fFCp;3#j5wfjWzL%%=dv?+-c%q}~MZ=}PffD2rn{ z2&X`!qd0e-Q7D2<{hxnC&zx>q&$%bnE(3l$a>fdueI1ecBz2a#WCUK{=(EoziW^FvAZVa~bO57$ms zRB1lX_nXtczZ`i=QtN`|^8<^d13H22PeRn)yk0O*v2OlIPLp54+mH|Z^S-ioKWg4x zY53{JdGRkNFF(-P;T<{tDfdEeX?C)MxU%sE^_=X(V=-|%jpbtM!pg$(Z+eg1p%Zu@ zpUdUHZd$F4HKZF~o6mmrErKmXOg7f-cHby^8xXQ~lw8X?Ts_F~5EfuGACKX3UL+8Y z04u0R4~30<=)$()8I`#3ZLZ=@s8nRLB}glwFrS?2YHGlrtK9T?u#X^>;^wBiJY9v0 zI_%%#{pM*t%X*DVBQoz;0swzy64kY}P!YkX9Eu(gTZ6MjcYrE4x8J*o|N;Dn4#W+kcG|GRNK11jUHXokFRN`iw9xKK>{#}9sVIqx~^vwQzpA;;X_FixXO=VtsI?w3U@$G6h=;yaah`BN^nd>Huvouz+-{puby9e9Q=HxQ zp_KEBr4UXq9S6;?Pb8?GkhQSAbkrx=sv34@&m`L3n?s~4&9NX`p^IotgZvEL${ zd`B4X!RZb=zF;gr;tbaq%>+_DpWQ-;ydZdwC^SJ|$Yoqf5==RNq(20XMeu!e8AX-} zpI-!frSW2LlYD*=atXYD$T%ssw{XNF>?@@G11nsx8+9G~;H^7aA^r&90+?`ptY|~E z!sA5QP1nnwalHphnG{ub0REAXGCP6~$^kzo5FCSax$o$ex(P^4@IPEy5@OP50du}K z&^d$p|A<6LNC+;51qi>zL!&#%kk*kM_L>@+TyTX1)3J?>>cg_`etu{9;7xENU{1ax zU@3q?5*j37Q)fk?e1z!{2QcXU$KAGWaW-;eP8bq{TXOGM>-~doXGdA+$mi6qJ>c~-wcM3QLBHolcr*^~5H!-Ev zb$aqW5^Tt_ijDj1p0shed25;Ka98^JrAYr_SrkzC024E=eWRHhKXC_){`SYswo!ZJ zzRmIH;Qk$kj6y2B3mR!R)+)jd9SzM_|DbTiaBm-$-E~pk`SP)S=ZGpV-%g7?l!~eQ zFdYY+?v!@-#zWLkE^BZ&oc2(ga1_QK*rl}8lq{dhHmNVdq;b7|Tn`meZ3ZQe#(*@% zdkwA-fK&z?pZx_$!6Bnpq)`1h#F#MF<3PH-Nu*SJoVwc?A@V1y>HUmLN(tgI-yjX5 zTs20J!PkZ!iu`n&&RjOO_@&Q-r$gQgi#6|t(HPiXM#S;JGp^10WUB22qc1VS zN}TPiH=tl>f}9B8Jp$<=B8CD9V*!>LYYn&+kS+&%baNqE-d6y#fJ$T5#s}{npwj$2 z`T@83=|P7WA_5Wu`3r2;YuFb@D}Z(Y*%KhPzqiCkD*)o-LVgPjH%BYTk@_#z7f`u7 zOgSXqybx#Fwc?)h?^BiEp`qp%7XT9A`XiB8^1YGMmoGmjfBP1Vq2BlJO*lZ{eViS5Z)D5`0qt|oMUI))dmw3u zxyxCxrTu#Fnd-DX#l^Q)oF=d8z5jaQjeTCEL>=bMk65q3H|~M2Eah$Ph>3WpO@mq| zM;QA*&qQC^8Wn3lTY{SZlM_+-bOVz^3N~^~-(xVG((MoWV|1MU94mX9Ubp%*Hvg(j z#{K3OqPyhJYP4&G;v8x8_im<3|5$o?S~a5Vq4`-x{25THfb<16@qmW=XM4h0Jwg

      e3C8D-NJlm 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

      0G{7OkQRXJd+_t~uEX_**r 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�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

      ~FFW?4g8z#~ob3-ehggkmB@0C5_kPjm)37>F~s^ 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�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

      &YBPP zvG=T}17Usq)$xOyE9}2fT1Tdena5RoHXy$-^QmqS7L!BG>=BQ$xf#l(f^odGMdY{I zE~q@FU$xdD!+F=ezBbaHHmPIt+ti3YS&s3wJcl=`Ly}HWi=qF^d}V z;9ksAAeJjRw~tq~i`TVA91)`UjokW4->D`W6|gHolRxn|mi?QTS(mz#{@rK({x$Rd zs%8J1U-r-UZ4dyp<==lb|I>p1_c!XGUH<=X^xx0u{~ytRKSo%_|L?5PQ$M06#sBk} zxK1bmqR}xflmrk-;>|c6#mC6%Uaji=6H6kuMpO6%D(?c2b=M;wzHELzA2VY?i3Wik zJwOqe3j^R=cREV*`@S-{|Fu!srj}(XH;+3QCT`3^F5-i4)Cw*O@oMmM0xzBTnC^vh z98aeRy(VW?#t>(eued1w&+pjuUoAw1l&nkMp4E`H19Jdy4(Y(14`tBakdL7G9v@I2 zR8kAT13;zFcS5U$!-YEU&7ioBOE!L;`Wc=q{a~@n-+e4S^Bwsl3S%pXTkE7=JNLhB zTZJ~*FzDQZp1?q>;(hNi`S-puj1Z-tCnnQmqvBop@+7Kyn?~-7pxkUbRF&-jO414R1R-y4@wc}CkQScq_=QMCqcmm#d>7- zPLYrP%6A-0D<@T~=4PzC#i4tdla|WHFGin+v?f6KmdeaUI2+OG$;A{P>ka-k#P@N1 zJRBQhmWV!|5T2o13Qhb^1ADGwiCclsrr!Z`PPPMc3gu2<$~F$SU4*1R*lelU@c}Ws zT)B85s3773CJ-0&6!ncf%xjCd=DstuAdvZ|3kbl$^UiMoa|*O6G^e<<<(|~VjYCsg z8|41}Qh`-<|GYy?>Ml0-!8EPtY;6~Y6J3@;^n~OLpB4`?AEwQ_pb8-Cr=9*!ewd`% zPWRKTiKmZFLU4nxbqzHnz#@>*#05q=4xkGvqP7yw;9>FLz*Ry(61j3b59lViz^dn? zXFl<6)Cv600T5x34it2vIU!n23bGCACXvT@{uQlR!4(0%$!U8e)&%sXAeOmoKEQfx zlzl?pU~NGI9^^sLA<%RAPj_cMXi#Fh*58r(@bkA}gerCc)(P_NK;Ku7jTJ7S(wL#B zRp5e3187?c`v2^@p#SQ6rgz|9r5WInd>R-Fh`e~rC;=Cq1&@X{%n-NYlUiQ_hA@DG z+v-_+7f%;K-2~cTAZmiH*$Y7*zCH``f4Cdm6Iy?QA_rC=cpERi3>gyg-SgV{8U&E2 zf`S@|eL%1Rn}!Qh$nV9`&}aMgUsLrT9{yZ~A~yBhJ6H<_X-xrc3HDY~o0mo7!e9Yp z2?2-9?xR`VN6{GRwxb5}6q$}1kqf>J`-!qRXS;FJ741g#q|7?FeF@1E~L zY*z0dhBo z8)JrRbixdl1ik8)Tz+G?`t@w{g$5AR06hYUJG=oUEj$2_0rW71=G~R`Kc4W`P?G;w z^uTp9g0vpS?%}RqX_2aWej;%-kQ_rY7aAMTV#C#OvOe;Tqt0jFy!VAcGt!>^_NxBd9q{lZw-MXYt~UfvXiSIgs)c^*be&X&^wmhd#t zwSs;Z`g?(?-lRA6~VIFYcPFcBD6{!B*L zE3E)G87vP>eh6z=8NBR#=Nze|dI;EpBA$=V=bip~8~?ejv;WOX@5d$sXOTjuLYM$D zDwPoMc*zQeDCC??%s^`o%!z;evz0!hzoE_dsL(72`z+ zvq!tzdpj^klu|Z_-Uy!xR|PEw4=sK_Gtk7K>kRhvAGNzpm1d!u6KziXcurgulbp0R+wd&3P+QZ!Cn0EMctb6{7M-vBZ8|d6XLNO>Z$pZWF zkI{NJcl;p*aJktx4`ak}nUjhnXu#xv1`loM6C4nSiv=jJq&XA?-a6>p>b8PR2UmB) z3Wgt@w9(ZLV;UtVu8LNTdRWo0LHwb1%fkqRK>`nf?j#V{RPzYwe!1FxAK)AJ74cwAO+*VUNNleE90; zvrl0y!zF>}`KJp`G^{r+tkOxM+SPo|qw~*i7*vGv3y{1UbM~O|J>1J*@HR^>YjvB? zKfg%v;+7iT#+FmilZ7x3WP^mUropAr`;D$6crGwdjTcZ94>J&j;5k4O@A*5>srJ=d zUqRV~rs!BbYm>ixd2RX6fU^F(0j>1pLO=CuL6$M^3zX|HGdc1%kJ9eCtfiLF%WGJa zs0tR`uQ0|3JVStAaACM`LEHi*9f2o5Ol9WUyy2Zi-~#*>7U1eP@GgAGmu@U^ta#vB zIoryY!>i7v>!v0wmxkj*?hTwf=oEEPC}|z4h#M}ha#`^|Y{40}-(TX_YS~bz{X6Ia zBQG)lff^(O%v9iKvcP=BmV|ZCo<^(y*d~zP!L}1l9;D67umbrPmZF9%ghbKVz&5)t zN$f*~a=Cm3w(#U+Shl>y^(~8&8?e9}Sre3{+0l9SOXJW1v6dZQ%jY*CCV}?`%rH<) zLjRuyx}IC+5R~_?H88ycKupL0pQ+i8$CZh%on65n$D>8i3P=LR3v-XOHO~!VpkZOJ zisUT-o+j`k3N#a6a+%*6HLv|kF*>&CFaUGxc^_qvh8p1F`R4~^&M{fh7PfOemI%f- zc;$CAQ!vER@c_b49YNTQO^M%Prm_h$3;^zoF)Qm|*t>tn9JqG~+ExuP6)Tg6g^2;v z&cwWmJ+|4sf&v4HmCYh}DtIBxA~-*IWrT36XxxsnHL{|RgysZGTCDED5O2aguDbqN z+ug%+4sYF`hKJY_Hy6K#qr|R;mqb7@|NLvsY1{ufbyDAwW{LJ)eY*_F{{@H8A5U5N zhV>-A7Rv_C4+D$dUU2YWDr522!B3;51+th^YxF-mYMixIi@}9A2xi~={{E}p+cIR; z^=DE0;IX%5!+70~g5qV_q|V8}@~B@UZD$`QZCWx9b`M4t3#+vwxnVhi!b3ecwFC;V zSzMm4;#bN{UQkK*@OKexPLBT+hf0}!lGtyGX_zf6RI#T4%l3v9#8TlyQ1osb1YlXA ziykf>xyP;EJ!el)09UNk-2P%u)Q!gTUn7o-VQnKAfHeof<|Mjq89;sKW@I zcjLSWo@wqV%Q8O_CFY1xACvUY;oUy62=$(hD}z8rmC%KS3FlWeN3^ZN=zgWF&27n5q)fKbiiz`P;)hSkN% z1w}076;MSf1CjtN@%Ga^%o>LK6@H(j}g42f!`E`Ar)aRaD*lzG|K(ZK0 z8RdBT%X%=!9B1L)o;aEVV;p{GW4Ut8kB+lt^aJX(#0@u1Ej zB)TsMF)779lxDv(LmPH`Xq(f?NwGM9QC1QFYmfj_LpHuPZ&Kr*Z4;&ZUy@YkDr7Vc z`&|AVRu(y8+Os^;NC`85vHn~Ep#U5mAVo97Ewn2+uZSvV) z5jfT&`u;NX4QiW^M>BODcG9zNk0_tU%|$gF&_T3_3*i_}_Xrfm4Y3=6zrr$v5687< z83}G2Tt1l8waIow$jITGZaPQu3=7md{%H@_pTHYlJZI}^x>4meXdQLh&H)Xvc(C3x z-+juJ8GegQL-+@AHnnO1fKYA0?GF&2k_B+u`a&uCas&;-ODt}#cJT07B1Ew$>Ds$$ z0o(;XSaP;PHl4NdJAMpX8qwOe3T%P8&UWW!b11{celT@pk`BB=#4efYJLI7jz2{X$MSE-O)pef^)LfA{d#75f&EKFE%-ctgJ{&W8 zE;PZsGdZ-RT*1hKL>^ry3jR!lm7j_?v zEa?2v+iQ8y>99_!y2y;Qf;64!iO@#p#G2mQ$o(1`W9DC^1Q^(8(JR)qExNG8)y?gZ z##a9Gd?fM0wfUVIKhwLorVzTjxh?x0^A=YHgLP`zJNBP3`zm?g^^Ae(Qh6d zEyHJ5wp2XUI=Y@%@Hp(|eQ3E&qTOtvqsF%T9cf>?m}WLRw#%3(N$~$+xP<<@sA9?v z0yEoc4OI&oB5vLfGAW;T_KtX(U4D%wA5_N+sG8MH%XZlpmS%_*%xJW)wZWwx(9$55Jq4}8$u zok2stE=7qr#iaVVH7$|#{S%FuF&Yhn60;#y)CRV!eUH7jqQJbEWP z*z{NI3utc6mPrwkkFQ;y*0j;C)wiU3mEFz~k3R$P_sjHV+Z$afQk1pE$p=@qpX@Vg zek;WZ8V(2wwjhswQ7C#l8lMSt$A>RP0Y_da&pHjgno+a8SC*~le6q5$0(?(Ib;DW# zfkZ<0tK7m)|L2|l*J#BTG95s4FfB(9x}0`DDB6~^P6ZaXr5OhNhPHfx@6~)myQLJ? zkwn;QeEiX)D|Akfa?IP?cH7rA=nS#I!y>F(x9%r{v0YM9@+O%Ubn&!P(W19K6?D#v zQ%6UCzCDn+%w|wxl>Rwq+Um3QB$e?%qv83Nq314ZA(x<+zHLZLKv&?a**-%djv2Yo zW$oDHnBO{RF8%yzgFDVmSHDp0J>5?^w~|_a9I)yvD8lGY22Z8^HnXqkg#p`o}X}L)KDXhW5nORGn?}zFAJ^khsc46`ORoQ^b_D;-!`9^J`gJV)o_K z@g=7)Fkgm#|Nea!0^7eJ=2wDmiOB0uU+8`MoH6g1(XQ-Ph-NgsZJu!io4=fDl&G(g zggG8uG_&AR4Yx$_?Dy&N4L0}&gHj&xc!HQ))4Pbm>f@A~k+0H1f1NOSkq{tUYiO6XNMvw$9FKvt z&G3_>&&F{=%-ORVSGd2^jqxu0OK8U9T)&C(yq_mlwVy=4jVQgBU(IL+G!mKi?pdRE zcfUdtM>m#FGc}ags^M^^$^j`eHC)4%(siiN*jn-lXX3-fE~~_9t~QC;Do~DZ8_*ci z7r?}W&;JPs?H-Q5cY5^O@3Ui0qs0x(-IZml8b&)g`UkmH9=Fvm3_gw3v)jG<`Wk9l zwFQ3&$P53qKo~n`I_&HSkYkaPrdHmI{7I=jDy^=Xv}u9$9ZdI)d)=Ys>$)kk-qcgy z5C2#@_0(?)B;&;|Q(KNU`)!#B&G0L8^DA^l>ownE7YMX=)Xu@)g<0DX<#Z#+@~`bO zTUvKv>t7pqWzdn7xq0{QP9gFBRG3`P{FY!!L^kI0aK59jIq5O1jc)16>@?Qy8~4&* zM473K{r-Jm>(G#;kfjvycd$>}Nl=;}n31pFe+WZ!*EKp9` zbfjn>He*=?XAc_pmGPSqJfhH7i&>#3VM$7j#;C8{WYdx)OxUHrC8Ph!9YCx1FSk0B{Lao! zAzjSej8v?_V*`b91=P>;#zsbN^LO1Ohr-M4KI#)cb>Fc^#oHs}OBXGyj6ciQ4yJy< zm$Kli?s1bQrthlia34JyG!fCYwP?@@%~;WX61#6IC83+>Zr9o|pNAiV(nC3C*c8^J zqe&QgZBT?9RD{$_@H1Jf$^9|>G<3sszan`mT<6{t2F6*mpugrxu$GnRXRCQ{_=9nZ zEcwq`IYl`?C(AC?Ow1}YBO9^_R^N>hhdiV4l<3j$i@&+2CJWsvB6Dgz?_d*P3vtd< z9no+0>;#<9G#A|;ZZzD3t?-{`A!db6s3kLr*{#M3@*~*Re;ysJ3@%EAE6U)vvG) zW%^rhS0@vW7%b$QW&HRbU&x!L@LJ{EiFc53hEQdvkFKdu%1HO%4hNZ73{3PQV6Vc1 zdU2e;PBnV*J>VTXG~>(u8U4hQuF_xs*wjB3q>}zxX0)mKhZ=3n%)X%07B_07^y`=r zBm@rSJN|%vNf>852hR!N#>cSLSQl{mt8C^&B@81{qD#!6eFph!7Z3A|HG;9~3w#JV z`BZz#dnn{|Z@TT026SJV}pv%RJC_R1KrjqV$oGCYW8~(uH zyI_Se(W7QXrteB}AFE$z8yGYHm0oDL{0+0~2BYbz;LdT$nidHotr+3Y^)S;g!DrMU3iaE!OI;umYX5F+^3xoU`x)^t-PhtEoWNxXn6;6t^-WXqq0_~s`xnYudBB*DOQ!SN4_!Aq}?sru{c+YNZkdg}Jvfi08! zfAM;cwIEO=nz!>E^T>z?9c!q&s|%vk&D(w(mhjKi#kr4P<(`a+%4_n@f`^e4hGNLi zV@3~PLcONyWm}rUx3=zby0NlB$MkwRw976M}D z8~2vIJ+3rS9?-xZB6dIF#~TvsA()5ha=3Bu0@V>w29`R7$h^q6AD=~-ZrFvW#K8TQpWa4&$wone}`LM_A`yX&PPpApxJ=$^wn+K!j(!RTb!h4@MHuP|^f9H*R z;$NsnSgP+~c(AUoEXx-aym^1S)U5GWSfXWa_AqnPjS~eBaYS^#?@fUHgkg*ze6`Hz z@`&Hxg#U9@RFYd&rp@KW^yI}(1P5p5RZKhc2NrP>E?6O{Sy)yG8i2$a7Qrc}iLoi` zGO9;oP`e8E$FZ%(A%oW0HF3;{A0Im1I8;ILLwHa@X<(X-g{?~)fL05fAVOIigaNOL zi{Bekh*=ffKFt>+bWXW)9o;CgT8l4#cn?iwrs(`VS;Iwo{mQcK88ibzRD13ySz94; zyUdG5w;T6v-p_A8>AE+O+CeDNWdxI;au+!UP+1=r7JnK=T9i1{LW+ARnN|9u_}gxZM(gWzdrCTJ>|-aIb;X` zVdIUBwYv{sHS_0POnAk;DWk-bMoPciE2cln4!O1$_JY>lid_U{13f5r=)daDMZDwM z9tN=(A|-iQiD_wPU-y~%LpOh6cqnM*YNHT^4f5;PmZ-^A(%|b*>6=@h9Xv^9>Zv4Q zIbkEE=T;yX$9CyHiqK+BWz^udk)iIPFD37`KC>(jHKfrD7Dt+zMeS9vu$gZvRYjD9 z)3M*ZJ4pNNz$@~$nyB1_05w|s$s-Nye)D(F?wk;Qs?ZsywBu6(D%{;EmB*Fz?FfNWuX2aV((cS4qk|mG-wM`&z%Zr~?hc+(Uxb|VXF5kh z|8u_|N`AhMT(ENtajAIamy$Y8Il`v}XYZtY2F&1UiQ(P4W>!RKhEJaKtkcl*OK%C7 zK^q?)<;R+82mlfC17?O35d!%WW-5FGu=_f=LKiYy-~|SC_3W0~tZLYC=;o>hoe0iQ z(Lb*Dna0ix8p6)F8p}gB-<@<_m>A{nd*s64?%fX`tqPAISa^$^HV)wIg}t_|$H`T> z9!aiNL|Fc}Efg<)56w`HJZ7FxA@<0X7F7%|V}-o8pPFbx*EFF&bNc6HFQ>026Jqy2FiKodpZ_QSfa!&i$qaG2f!W(G^Ok7_ zLt(nB=lg*5_72N2+$%OcLi&cj9q@s8kB)ki2#9b*99;LjAW&B(vgiwr-UIv)1MVQQ z!s0ExNxv!VOwz}-waEuVuk;pK&=mu*y_Mx*+7T-2+36#b0Um^qURVD8Hq}}Dv&Nd3G^ws@49xPKQFv%jD@e$F;KG3kp$&rjRTq|UG}MT> z1J2glag^i-=a7EFfEQT!%$>m0iOkqn$4hDXKkZ%nKa^?zmqSOT-RwrIXdfN46`?4{ z4z^WPvbMD)+8UBF*~v&_jMB1Sohi|T(k5wlRFY*fLy8cSRFiQSrwGkVOpIa1Jnwtt z+4ev9{;*#6O9$qjYp%oR^FDm;>k=FncGNm@W;Z#7aW>tcY<*;NV!_j6#{rJGN)Z{5 z326Z5?NUQrXm^gw@6B8m@s=H|H`#($V|{8#OWr@n#?p{e=h4(YI6s!$*_QE_q<}R$ zLlT}^m0op6^!zaG_5-=M6i-T)b%>BW5UVWzGP^FJ+5s|-re%D0b=t#2P8rxKFuZT} zgt-Rihdsv>0dIe|bRh7OppRRg?NlnC)}K+-R4o=>Xk$9{$c8btuJNx=Mgk40^$U>a!)8ZFdbt*EjAh%(w;Y5 zL&-hShna+n zjyPy=`2P^xnTv;0a`frgd6 z@DB%zx?Hm>jQyXf6sves+f`;-VuX9Geq=u+T!|v-wG&%Cer&tP$ihelj@h)NbNDPMN~Vcv@@I~qTT`!Y79n<*t~&gDJ}p#4}CM;k^st}bgG8HkQ07d@6Q$@ z;C&j_mmU4H&346c8@tzx%(LW&K{HyJyQ_M6vv+T36*VjJkNqW=q%S;AsykCLIRBAN zT3FzvZ&yzTO{xendK~h{!ni}>;WuqhGpr+;cbD`?`wAxYrPc2miC7(-AFS^}9bzPs z_FeiG5fB_lEuGAsHi6_#wX`h`_1Rv^eemFWbaX-FFh?M1bqYS5si9#kbzQgm`+W2+ z-7#!2(cIB5^lo*6`*_vWxl&Op)y~t=SL=PlvJTq>DRW1ierLVvKukB&G7==ztZl;T zgIi6U_|-MBB@jNI17ZMlfd(8fRC&g9=S_JhsSo6&T*y0fVUN(O*1F)Yzn--mJlh!# zJcf|14kJK4PwfRh0_OTy{Ke#DWs%l4ua>qbqWCQ!I zFzn3`Z)${-Ig5D`@rv2$3#9`G{JtO4S*|pklDt3SLpK$a0h~Fg>(mUN8qgO z9X66%%AHT=>$rGaZt%1#u_>A4c<-hrS{LQC;(v)NM;ax+5tAnw%HKRGDvfC`oQC|A z&{IGR84AR(lj|WG?Ut!)7)DmGCjZ@^QNFwz?J{0U8=W*FTgj7D$)9c+r2f!keTu;PIHblKr{3r8;458M zKFE)$^Kgv&TFxi3=pRW9b{)(-0V_Y{K|~&<@zJ&6j@t<-U15 zDG~`7+O9}i1w)PCNZyWLwW=zZqzqnlh5kiwbU3>B|XV@yx7g#}W z!XY$YfqHRbxO2*QLCHjctWF{Why)=8);v=-8hEg|%?q3guzc334?M;Q_K@FzB@Oum ze?b6``&wtUpU@RyGCeYpgt@vXZVlGm(&H9u^`5qlUo&bBs5><3gJf5KM*AE!ngei7 zB;iws`rP98KoST~l~p&?wYTEmfwO2Q5%h;u=Uc; zelMe1Eb&k0n6)uY9-w2p2uzI&;bryo*EB0`s?e8x67ZvgS4APO_zJ)W*$7e*L(yhT zENKk>(u+Xz8{*dil7~IFK2-=cHy6Olkn8ivhCNkrS@!8f+`UYz-`%yLy>0#s8=Vh3 zv!TC=Ob&ap7_4?^9Nh)?e?6Sg!q~90ac4ktI5E|X%I=>OTA!+_tkO7YGO@ite5RUY z86mx8xURW?wWOBGB}?`rucLwy=hVEkJ_Rhdq*WrL!7vp@uZ%UEem3JKma^8=9ejuK zUIKEhb#vRLXw>M3GUfzWjOLb@j#uO zwk47XT9YS?#BakCTb}HOEVm?q`S}qquNB|exI|K#a2pFbAWoHEq}2;25Qhqx{brEy zR@$YEfg{hkvD(lmN#6cBgXs%5jUQodMQZoJ<-@O#D)uZ~?V&$l_*9uxtS#!agC9-k}(XZd7e@x6#U(War#wf^pMj%9^58W@n0e&KK6x9wn9b6gk z9_lS3L)~sTMyph<4|P3H%v=CF3<)tk9{ zqVZTTLfLWyUEo%vIUSAz5sw(!=hYKiL&GmQp50Rb#s@i!u(_bUA=4HsAawuEi0#J; zHTy9CUbVDgyb$t(PusPHz-%vh9DZiP-|H#GVIDnqg@RK?Ay`;33ac-+O~yZFXp__p6vT6%fS>k^V8ay$#o z+VK#g>)m|1K}=lwla5|^YF9NO7r^;v3(a}LgUw2?r)BZ^L^N&szEm{FNnmoTRK-c%+uHe=O$ zd99jr1{ahlG|xl7?%?pnzqWP7nmC-^4GxJ}ZF_oDp2 z*7mmR6AQCH1o2hp?nut_|P%3w85K2{V{-;tD7dA=7g z2RIDZrHq<=x$&LhD{QlShSrzeuN=e-ARM@ZJ49l zkBSQo6#b*cB`s&iatG0%=0dj^GBpAldB^__q1^T~LIxqdVG_g3gi}P@Fwc$j z;bh1)*CoplEa1K%K%wW5W$_)+K>V$$q1U|@cmTpC789FRXlU@v`jm2|G{k5F7@E62HA8)ongx7^HoGka+0S5kkJ7#WM)^oWa&9+fDHq zk<@_j7OXxvd_)aYaLcY+*_`KyG0?Jc9ke|!8D5YeN~4LP-LTn2tcM8)f2L-yDQZFH zHfZ-^c(IxTtk|V^JPIEdtmOhJaBW{k;HC|Ocy}N=G!|punxDK%byL6#(Cmc{j8%dQ z=>f$WH&B&3fwox`Af@}F?g_sR-vgHCVf)m@wic_Az3vF}l3ShToCyVG#^-bK*fYT( ziGdSHg=!9>#%d7$PknpMm`)xGoy34f1XovfAcDYS2BgLB!5+e*g@*7>Nr!OP*s^12 zZV;k5ru;8dJBpafzTX}kX|B9YZC-1L3LvlP+6cY`+5~O9lu_{D!Hd1tfG|YItrgdo zT?$C8@*iqFVcuTAA`CN(rOP>b2dw2jDe&UL$>=f&(H6SU7XTYzPHOe=q`_q&NV2G+ z053%yfn*>*bh1Vs5-j4ZtgQr8L46!mr1oIG``AZC0a$Rj3nIC- z`{su&c;4r6h@zO1bfx}sCvqf$o8<_|B8(oL0~DVbdxcF+FzSHBqUoM-3|7*CH9c@9 zC=|7`G71`NyS~SnYl$kMSNDM08zy|6sn^}j9yr(*>A#v+_v`ri=h5TvH=(m2uZO21 ztfS&4!s@WeL`{HEv<6qPp9w$IX=EcUmTJgA_JZaMV^#7}TkgN>Xn3CgxnpKR=21=W z#5yOd6Eg&Ct>e2gVcknnlS}MU%_bs8tu=J^>ztmA*R?6AEfpz)_*;r+^G(eLR( zKCD=c^_y$Ihmd`Gw_RrAo;K0`S0P3O3G($tNd;0ECc33K z?28=taMV-ZWCa1|A=T08e}X5&?FNsIZA~){ijm{|^S4~pFc*;S1E^yc4&XE0xPlas zkjtb1cUkBjIH!P}g%7FwfEBcz8s@W&)dNh%-h{)CD_B8?h0Ut8EC(YTOiu*fz)M8I zNbXN&m3NKRRM^G~55Hi3j3k%WyRQ`Le?SI>hrfpxuv0E|9|tv2li z`BEv%4i&-F-yWLhvk1Uf#2C{Lnsat*dRuvL180FlshZqYs?K5;Sd4c>vukK+U z)$#8w!lKjCf4WrbpRvL%yk16!QqvXN08G6MHcBU7XC@QKr+ zHmttwrJLi|p*!OtEiT#1y_Ixed^eOHj6d?f{;zP2pfJRnh6fmOYr9_OYQoFIYy>+c zQYPfPc+-Jo_v!-`Vt?mIeU}weaATNSxG;wPO`?=ecSEPRukF@x3d@~of18CZ}at_daeLAk>4cvC2` zoZ+mj{e}z}D3~_xo-acWWZM}{6U9vQ&>yAjeq+o%ZJuYdxc|s~BXZJRd2A9P4&oG! z1j#UP4>i4DQb+w1O`|dogO~x?wVJnkW`^hV3{hsF#S9Arq84Ff2UmCzs^Bqakj}=s zG^AZ9bq9Lc=!vk;TxxR4E?sHR7K|o`6-+bWO#06F6i38!k@6DFdWyzF3x&(tAgTE2 z*AqR@o@x6L!8B_TlFRmVfKh758uZwY=zlz+iB1JIu;4&nVhMP#&>mVKZ8^>Qc?&-m zf;mASWgDFqzp}71NeYDAtrjVW2gXeM(yv9+?UOup!bM8q)b*Xg0I|Air`;%AF+Y*K@DUR4XPx z(#WY!qvqnlJq={cU@=+c?!) zo|Gf=pWn?4907G1Hx*v4B^E-TJrCg!R7YHqQ!$gd{p|OQnIgunyA?Eneei(;g;dM;M2=_!wtDr3}*2VN-C^p zrR-4AlVud%0E?#hQS`1scbSFVE9~Q&5CJc^YWjGqM@_oBZ5gS0ghI`?dK#JhZ^2xpHV;v#|52TnUf#@CB?TG!UoB?OmvGNas&VoU zI6@Jn72Iyg!$Dl{hJQ={4v+-l05BOBSZK_Cm>^E@-BG{Nf-6R zVeE^M`ME}&f)WFP%m$~9njA-JLXLbKvX~#L+RQpd%#ZiOV=8=<>ac&vI)fOv4~SG? zIcOsW<;y0eH@{3XI^pA*MeW%!35f!>k`oiaE2%Zy=ZfZldopz=J;qkx}1ea>@HJ!_SFkeEcfPZn0O1K^{uB;EZ^* zLT!@+Av0UBg`2N~4c0LA3D+>wIOgi?OeYZWvO9S4Via#Xtr?>#jEVDYFQT3Ro7GD0%@73+j-}3h}~%X>!9|~*jp16_Ywln4OS2$zH}%!j~3sin&n2y z2%Lo?76>(W7sE<)Yz&rd^W8|is@ZAAN4}wL{!l&kXW z*&TT^KerFl(;hAISKleh>8@14@hN49QT{U2A?uKGdJ^6cQ)2J6k5ZKS_dfkrlq{Ce zKM5G0{!ByRyLM~@|MCC$N0im4$^Rcewf*-+qy6!3M|_+Y|8~T`9r2G4q4ED?MyQN4 XvnR?+C$&Zqt#ftRw2rmL@7R9?BPb~#-Cz(RE!_%8!za>w ze6a6_nK|>1xX)R8owd$d`|M$y5fHxbeV^x!>%Ok*dB;~-Q5ydk*)cpkJbYOhi5qx$ zgfn<}M;4D9g6~8TdAY$~M{Q&@?eXx~=+J-nxx5i|f^VL4kkoKcwKj5azH4_6&)M0T z&D6@=-r%myJvM7QRLL#olJ_K9nHn`2YJyW2F9kik znZYD@S60SuWaEINymiSnq7wS0jo9#c*O8GWFKa7;okfMO+zJQa`u_97_0!wpOh5-&+oujA3?JMZ|l)t$gOakav$E*xBtH-XYlB?J;mxyW0poP z?L=!r0$0x4w*flNLxp(0cmiyD%FWehH#9X%`_^7Oe=a%M5|?b;8sA=OKS_G|&Q*^^ zf4u;9uSI{`&os{@TwOPA$@dE=iQ*h$T}FNRmpT*$Sr;nThWFF&pDNkArj%d&PBY*3 za9W+~OYqXWb?b~YrQ^+5*NG_GLEC!CFnUYEllPsNRHy#7MgRD8Ai2N4|0R#*Z3^$L zMcbbr4%Z)NuTY+n!6Wh6Qy1^IE`B`DUi0qmr_o8#9oJXMc*=OSPY8a0&3A=rH*ZQ{ zhAZtS9335Vt%l0d($jsPK7CptNJd6B3NH~*Xx>wIFH)zdFlqlg%InZ8j#KXc?PYFX zQs|Hgd)>y-8^pb~cG-5crev{>oY$2hrn&Cplj8;pgQXk>bph*LIbNsbUa<6yZ(meR zsadS29x;m2(r-_aT-;h}oovFcVW`EQ5wKpRy&ojEr>M_ICsA$RlJj%h?vB1s_PAjLov$V7wyVMpN^|m?v{QT^)*>x-U ztV(~p*iU~T@zmapviK;=7)Nqe+eR$EXQ6a5-ZJ*k{cE!S3oD>ikdu^JiFZlU%uSrTvXuWUoQ6uzqTslUaLJU0t2VyE|em z+9j8HEP7A<`0=B?+!@pBxi*yi`t|F;4&Fj9+@?m6g=S}0SM8VQ%*hoMLITbU6sJ$0 zZm)D-%i6R^#9d@__-&i;?$2wwy1E9Ca?nyi1jU-?RBvxG_`9Vj#GHXo-NO5H-RDo! zNe2y%=WqXttghMFYTc>P+u7`a%MTnK9qqNPr!-g_at{9R=`|x;Fys&#+qSzz-5zn>2P&(srKoKf;~?>-UaHnNr147+0} zkDp=jNmossh!q_5p&Pw_fWXAIyEU5ET32XuDw%%?B3dFr#It|=T$?VvX>`gHg5Ti| z>q_yCr3h|4d`Es{`vSH1b&(Bz*ER_u>ojqJh9ITf77Uai7wHPu^< z)!gnA1s#h1SWLC3u@hV#PgIt6DW_HWe38r4t7oG>BK54C)KeAXl8TCWjCF6^Ai~GT zS1<||*)*YW9<+7UQ^jebisUsIaimwnxXg_R&cZ(pC|y1vd{5 zPr3E?k5Ah3ja#P%imf|4JGo1p*1tciS5*=&tUVXQWz_UCmNOLvg&?MaxVE;|^4AFy z_O06AaAh0KYf}jxg=Cr-DFdFsI_^MjTs19qt?)qgIM>JpSqYUe36%*h>X@F6e6^cu zYF7mH@{JVyox8ibB%!`(d#-flTJ+_e!Ss=xVb`TFj;u_Ue5oVsg52n1yl{W)v!KFl55JT0yq*xx95qdy0ArdwCS&i&@s5%(t?&`$j$4tJd{B z*2+f$wX7=(YX$p14wl**^uD{hh#lDx*<8bnFbIygV=DRP3pz&oj1z`N^C#n+b#JPx zd*7BhlbaiB@oT)n_7gsD!KEHpq)=76o6z@+;~Z~gu3mG0^E+0*@5COHqOxNv+v-h}e)-%h7Vf36)KELw9(wLZo;IFCfbiV8UTn8JA z)4xV%WMr`Rho_jrHPk;jt4j(oX-SyX97rWx*5|6CqA~{=#&PHU{j{8%;0tmuY91au z9vxBRL95Wgx3jfmFwqocJLK4N#a&54;@-V`b9s$ys79lj%L1i2ygG8gx*8=8Idm+` z4S%eLq@?5=G<^<}w!}0577!vD5PK*#ZoSnYL~CBLF%i=|;ROZMU~7GGaaM1qtc#z@ zeJ+=8sfo*AOL?4;(ttn$UD4; z`O+nQ*xDfIPzWjfXpF4iT$wGNI%jD))%MC3a;2_;F@ZwZZP~StO14(IVOlD?g`h9u#a-HV;W3deKFGEy2^Ub<4N-$Me{lOAj z)-OD$N0r#zZSnZ}T9&o{Fy(_i=&HZcB3jDRfTz2Qx8~~=$6TAfvUM9r%eU#~K823> z?I8-uxg0}=G>4u<(#z6ARbucBOOlT`W32Cqs~e3}tc_w~za!gvnA+nM6vUP&c#uQz_#G{23R{T)3VzP2?Ufv9K)k%OO^i;%u9GF(o3jS%Kfl|4m1X>~ zg|*$mtrcgarDkWd8S@x^4%yB5$Ha<0Ri4-hZM^~$l?wO;6rM`PaB&QmeeoA^bJJ4!!X;!E>yqMi3*Y2=i5pm$G)Wm0*(FV|vyR(h8{uNIzt6x0i5zSh`z1JQCt#urP0v;^%KMY*Z)3e@&8ixOCAky8o$0@hci0Zo}lq4nD?HS;2LrbTX@3H?e6Afvv2Yn`IP9AB;_%n6UrQ#U%|{;| zXY-L~=ol47wO`xy$Mf8~pPn)-L6KnH)=`KT;!o{-YduoMVb+;;X7Ya$8Kx4iLlt;m ztaS1kC1-yh3*M|tYfWiydl~pP9^Gr7Mt8?c+0pQzkj9sNG7_{wI!=9W@QJJ_QIYd+na^((X>K{mKOVx$Htp+!Mn33Q zb-#Wz#x$K})9y|3$Xa~E?wQ`VAx-VsIhqtt>C{UT53^sdbv5obF)J-Cbe~a_6Njl> z5*xMvh6c@Mm$NxR1#9llhssj|U)oKK)dvTMg@xUke7q{ZCkH4$)@8(V=S|mrjJGJu z{q`fDy6;*+<-2oXGT}ZJM4|NLjW5VLd@RU9Q^-dKltip8O{41oO`YZ)v=Nt&;mPWA zcj`AyU2hNe>P*7HeeF2ueC;5Manosh!D`;sQq4M}S!kx_zgBn?W`YP9axE<_!#BRZ zk<+TM2k>SY9u}`8|MD_T>Tar|geVygljAY3$E}S}GplD?aL#t7s|JwsW;fgYsfP!R zjj=^8kLAU4fBo#WYAh@~kj|YaOBA(U63fU_Wo-I7)N8P_qkqi`rbFA=tm26#b8~Zp zp)$usSgtz27h{mbfe6%wyMOueWi(Wp$`_Wk`{2xd7z<+Jb}UO3%$>7!E6ZxJJogqy zYjX`7!gl+!X5M%QCX!8ObGipck68QW=3_sY^){~0!M1W3x5P3mX<3zCKuOPZ>C)yP zW%YV3yPXkZf`{E4+@<9U;(q2mY=FZNSqXYsB1u`I+9;^x7gTOU_(Db*hWW^cN!?Oy zbz%;u4~2H>{j2JzD24db6Q*79K^f*f z*`f3eb#`xBP2gj(Wx@|i9=TQpJFPx|fyMQ);Ckwv_4;)PUJ7sMng+Fgr?dJ?D_>r| zdo9*;wNJqa8i!TWOAfjq{)v|r#=uZe=2UH(?KUpUXu?0-MuEGmghUwp$B;AOqWeb4 z&kNy08lB0h#@Oc&P;P!)vJoW4Nw1lRFG$Lg+zShq^EeiR!R%~f#vUA|@_~L{{!XmO z07_<=(>xhqX4Cw*=F=+$5&%umcxMZPS8ceG$hno370Wzlcl(+2)VkWUdaoHsh9+j9!CnT)KX zts@_IUEe@OX}7V`1Ln&WcTJsYf5TlCaYoWqCFOi6O29BVHeaaR?ANbfKNj{%_#!j2 zc}G%wUS8fUjLT}D@fgHIkn7S!p;*$q7KF=a09T6-Ez*dAVygH!T2jnKY%m z%79gtAc~@=4e!$^yQv-F8|M~LOYkEuDal?o;*529QaqY}5M={YK%n>bq<0Y1P0Lk_ z{_d3?J?fE-7H8U+W~%(q5Coc;oh{byFS3Oxw+?=MWc-S8 zeqYIt7h0qJ<~f$DP4mSgRKPlzaAsy?_=PJ9m}VM1S(VsRcII^%e3=>y;gVEtIxz=6 zwICA~h?Ia~13Cs>OiHN2^JNQ6*lSZwrB=AlOgYn=4s5=PSu8XBFg)uoPqp(e0oamm zjThc!%%D9?0n~%?Su~?*L5*hEl5Y=>^SD-O6yZ#ztRYsI*jc3BAyn74m28pTdf7C}~fRl@D z;wNjNRYo^a1EALc6cny$YHAv5-@>mY%vivsk4g=xOR4Z=Pe+)6#1wyuATB~Z23zO zPdA78{zAO;qAYm^V$`BAo)~w92{Zy${QAO-P?WSp4Y_p%A(XWyeop|qz3S0oV_QY z_5oU|0>MAM$gQl~U2_$Ad3NNC7t!9b8y7)UM%{Q6c0I5wQ=PZ8Xe>yu?qX_eUe>5s z`3>#8JZ#%7=tt3UIkyWhxvkEX26m8iLv6MPY~i#Gv`mr9B-B@Opea~I^kj$`^(uDHL=Ug{1IT0xC$9m^;#x#Aif*vzA^ z%mo$&?Oz3y+QmWp*4jAd;d5vf0{W&F5CG+Dch*2%LvavrfYK@|?F=~>)W$7(-&wvq z(x31LhW~z%!>BJ~-Oulz4B++odk{T{D4ik`J(%R*!mj;uIj+F?&j&om7z~NltD6X7 z+tQkN|8bu#%7(q&}2TqhhHH2 zhv2huTU(%15?;AESG}{%DxjyPcG`K^)p%>cx!ND-+(O$jONm3E3NKEmxT0x)~g+&PlZnk)Fp&U~O

      dq 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¡|-fiykSAlzpKLBbEFng+Y;YfPUa^h8<*xjgN^ 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

      %3`|8#7#?{Br@C4t@lq6{**8nY;$$(7sm%-W0 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�y2974@MTK;se@ydi^uEE0NFv)7eXRRSR&9b}%1 z>cHEot^{!oL6bEy1+`>>ut|zza#v1uS>f0UaRnmfC=mwS8^;?^Cdh~c_i_1#_Xss5C<{nE zfNK@&j2pa@F8E*`8~2x^^7BLvLdw=J2Miy;2>`ix`bR!w0G}T0d!kFgFDr~_68Bd# zd^js|QTMsh$l}#cY>5U>8AiBpiWxgxa87e}!%-dVjrDr_d)37a0ux zjQq1Ax;sTnS=Fkg^RS|kzs68aj2pP$YPG3RQj<4`{>0_fQs6s2O|5nSYuK0i+}u^S zXl~KI^qchJvQX={ZH5_i(Q4VFf(A0bWxhYo_*Kw+9PJ@DLda*i|C`h5}A*l_7!4Mai$P zR!4r@oBz3D>m)JYa072WG!dwn;oiC@!sko zS%F~{KnV1b`}b^L+|rp>I!GB+NV$J7ljR;Js_?8s64Q8f+$~%S$X|)xpjg6vlO-8 z=a$N;11ifCe(3(1>x2sPkGKlvjfaM`QGxuZDq&l(q+ddVQrs9h17xG`7sAAZqtW*v zifB(BzK())-c#0FW0=G>cxE5LRMv6p0beq`I@kfz9l6Ro+ z!-75`pG!5Yr@x(b z+0xH`kWTYZSL7xQc!h0Lda+O>V}0mvS;mZ1{-~w&(NAQWG>EB#0)6IB9GWv^n9wS# zP9C^QC_R0OXO#-y|7U@n{-&B=eoKR6rn&cVQV_Py&hZla>t5lWE9<@;Y_le*=B03Y zLhP8Rt-Ln}tJca-)*Jt|*1=+WA7<@3D^G@{2}N?X{y;@pS<(C*^xYQfE*?PyD z1*S|xxX*B9E{Bwlmc-CLdT}t_kKUkUvV17iCzTARn!cfqvQ`oZ@Zk@^V+S`SN2Nq* zU?4{71-PU%)EPKAf?L}WO*s<4M|%tkusOh92Nc^MHrRvWArcpCAOk?#2<9|oXa7(p zUNR^I^9Q($!rEESxbU6j54;sG>{=SsJKjq&FM&FnKp?E$gt7m)dWZZUdjwR%cta=? zdULvh+>9dia2Gpoz%apuo39iHsLAX#)}{f);F8L3fmGaKUI!vCCsB_49+Ue-b8|># zd!BcLidyQTcgZu<@E2wc4uMOsbWi-*vd*;vo_r7;G$fk@@LJWsb{1

    1. 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

      k5vYdW38QQQ)PQ4R&02kX1jrJ7egSn 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

        &gkzC$^!2 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

        qRU?pD?4k`Yoq{@2)(xqVw| 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 yksO40gAWIL*l1oo!rxZpdiD;QV@+Hk5T_ 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®KKtKtk!D|Hid$E7zmeN7qUNYVn~~jh zru&P_^cJb*+XVCUge&|`j=vj9@*d*MgZ|Z%O*+@3@ia3XS3M z9@2fqHlDNvKM|r;-#Qu?7ZmOYF(~*TwpDgBndI{sIlgz8|6D&#h&)#M`>^KP-Ed<) zs^P~!5^QAYt`b<2?q0lmG_%9W%PJXuKsSwd89=Y?H2S zl%Z^h2F(w5zELT_NI0WyaA0^^@&X%|jy6T|eljyoV8?yM>gr${23!}yEpQqp-1>?i zxglP_Ne0ISm+uH~EY3#=XVVF9uC~q~-M~zXy{|?r)hFw*BtXyo_ZB(eAwx+n7SyBz z;}o3lK*fz5PVcg>nsk~;S8$9%q*r=QWqPnT?k9i#qeo;_jLVLA8U^E;nCgJtIf=qsX>SF3elPuFGudkFxosmS29FJpb<-$@5tv z9tDg@T#5{wbfo%-vTm8b@}C>HM{KoMZ{MMuihODmd|i1(uuw&BRIGatl~;svp+w^s zk7>Q4&Gg&sv27{ z{-i{kM+dR(C^j7(@QG7et@iDr3_6?IGRVbhYB-VsHlOUF=LBHDzXF}Rku z@5MEje?Q58Ug!X>fYMG8A!IZ^7=I7Dfe=bZ2SFLm#RJ0@PC+dsnC6UATmhU*a9V{c znxE>4Q&ABf3(nP@9c2a@UA2C$4z!Ol?T+6<4Al}auufb~!KrJk3V0xJU*Py`tUWF; zwbhL~|075PZ4h(;sV-pE4<+p%;w~gK0OTd!^DNt{i1r^z0?t`!d>k-Ku$8fU0OZiw z*^q3`vLOk*c|LNmVFf_06nODIz!VjclmyN9XTIEJQJ|GZWRuvy8eU^~3(#o+3ivpj zrPhhb+@4ql2!(*=04ZVc!SHRvy(1hT?)Xkb`{?%MZxj-$FG@7Y&VR-G*~p z!a4*AqV*X2-Ui4!x4 zkd>MQX>BQ}prm%U*8D3K_|b$Gsu$3S!sHP$Y7AC*c_f?RZ^d~Rk5KRxuG8T5;oOAM zeDtU2GGO%IGsAv9qb9954?^6M^zg&oB|3$zHxDX2i(9P3|{ou zk;(+eDF|X03T59N{?p|L=ef>fEs*M4H&A$sxZ%Bk2*bBH=K8n5@ zP(4*C9akH|Z23TKIi59lSY^>T%J;j3ba`8DTyWh}(PEoZsINBp2IoSHpqY2rweIgx z_aD!t3_fbERnpJpw?U?j@Jwh5RRjWz5UcAv} zcXu59i-_7h4u}^yVPu2tAw_KODGJMZ?x9657FOmlF*2GUT-g{9LsCL|OCae{bpO_o z&&1hJ0*gxpuJC!iajW5^kp0K((_T0%<@;-erV|Fq% zO*8TK$2zl=tEWyfR&g#+^68k2UELkGf@SYoKiFG`d*gHs@ZOj*fM8P3hQHmU7|0sH z6-J=3F3TXjFuwpDD!8UOfoCS=R_c6EqL$|xFa@jZddiuK1!sf-K=7*T7dZUwC08s6 zL7^C&EuItN#9aiuy-JpWQPQy1W17#dtkh4JHy|=0pw_?JIAfjv9FT-iud8id>T3W7yf40FpFxSpsA3N%?we0~*T~_b{`g3#sXwmwRj`E7%=}{W}^& z=4J`P(+m%m*v*w__BhSnXe-cbtMlhgYN|cx>!k?~3PJVx2wX=}pu()5Fc@|TlUMku z_lZrPPLluPtg>#}U_WFfKvul7liOlka|A`bwfe3Ma{4WB>Xd2VXutk8FK)5{iO%2# z

        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�Il;zSX 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%0DUm&o;Z$_qvl+`y+Q^FO5oz{$EA+g~!Tw7k7W# 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 E0ek=C#sB~S diff --git a/aviary/docs/examples/multi-missions.ipynb b/aviary/docs/examples/multi-missions.ipynb index be48f5cc0..1b7be980f 100644 --- a/aviary/docs/examples/multi-missions.ipynb +++ b/aviary/docs/examples/multi-missions.ipynb @@ -34,8 +34,12 @@ "glue_variable(f'{Aircraft.LandingGear.NOSE_GEAR_MASS=}'.split('=')[0], md_code=True)\n", "glue_variable(f'{Aircraft.Wing.SWEEP=}'.split('=')[0], md_code=True)\n", "glue_variable(f'{Mission.Design.GROSS_MASS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Mission.Summary.GROSS_MASS=}'.split('=')[0], md_code=True)\n", "glue_variable(f'{Aircraft.Design.EMPTY_MASS=}'.split('=')[0], md_code=True)\n", - "\n" + "glue_variable(f'{Mission.Summary.FUEL_BURNED=}'.split('=')[0], md_code=True)\n", + "\n", + "glue_variable(f'{Aircraft.Furnishings.MASS=}'.split('=')[0], md_code=True)\n", + "glue_variable(f'{Aircraft.CrewPayload.PASSENGER_SERVICE_MASS=}'.split('=')[0], md_code=True)\n" ] }, { @@ -100,30 +104,31 @@ "The results of the [Multi-mission Example](\n", "https://github.com/OpenMDAO/Aviary/tree/main/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py) are included in the data table and plots below.\n", "\n", - "From the table results we can see that the Primary mission have the same `Design.EMPTY_MASS` and `Design.GROSS_MASS`. However, the `Summary.GROSS_MASS` varies as expected because these represent \"as-flown\" values. The Primary mission has the higher `Summary.GROSS_MASS` which corresponds to the full passenger load and bags. Consequently, the `Summary.FUEL_BURNED` for each mission is different, higher for the Primary mission, as expected because this mission is carrying more mass for the same mission. `Design.FUEL_MASS` is automatically calculated, it is higher for the Deadhead mission, indicating that the aircraft could hold more fuel, however, that fuel is not needed for the mission. `Wing.SPAN` and `Wing.AERA` are the same for both missions, indicating that the aircraft has been designed similarly in both cases. We do not want to see different values for the wing design because it would mean that the two pre-mission systems are not mirroring eachother. If they were not the same it would mean we are designing two different aircraft. \n", + "From the table results we can see that the Primary mission have the same {glue:md}`Aircraft.Design.EMPTY_MASS` and {glue:md}`Mission.Design.GROSS_MASS`. However, the {glue:md}`Mission.Summary.GROSS_MASS` varies as expected because these represent \"as-flown\" values. The Primary mission has the higher {glue:md}`Mission.Summary.GROSS_MASS` which corresponds to the full passenger load and bags. Consequently, the {glue:md}`Mission.Summary.FUEL_BURNED` for each mission is different, higher for the Primary mission, as expected because this mission is carrying more mass for the same mission. {glue:md}`Aircraft.Wing.SWEEP`is the same for both missions, indicating that the aircraft has been designed similarly in both cases. We do not want to see different values for the wing design because it would mean that the two pre-mission systems are not mirroring eachother. If they were not the same it would mean we are designing two different aircraft. \n", "\n", - "The Landing_gear masses were also displayed because they are sensitive to `LANDING_TO_TAKEOFF_MASS_RATIO` and `Summary.CRUISE_MACH`, which the user may or may not have specified in Aviary_values. We expect these landing gear masses to be the same and they are which is good news for us and indicates that both pre-mission designs are mirroring eachother.\n", + "The Landing_gear masses were also displayed because they are sensitive to {glue:md}`Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO` and {glue:md}`Mission.Summary.CRUISE_MACH`, which the user may or may not have specified in Aviary_values. We expect these landing gear masses to be the same and they are which is good news for us and indicates that both pre-mission designs are mirroring eachother.\n", "\n", - "Lastly the `Furnishings.MASS` and `CREW_AND_PAYLOAD.PASSENGER_SERVICE_MASS` are displayed. These values represent the weight of the seats and the air conditioning system for the passengers. They are both the same which is what we expect to see.\n", + "Lastly the {glue:md}`Aircraft.Furnishings.MASS` and {glue:md}`Aircraft.CrewPayload.PASSENGER_SERVICE_MASS` are displayed. These values represent the weight of the seats and the air conditioning system for the passengers. They are both the same which is what we expect to see.\n", "\n", "A summary colum called 'Expectations' is included as a summary of what we want to see when evaluating this data. \n", "\n", "| Variable | Primary | Deadhead | Expectations |\n", "|:-------------------------------------------------|:-----------------------------:|:--------------------:|---:|\n", - "|MISSION.DESIGN.GROSS_MASS | 174200.00 (lbm) | 174200.00 (lbm) | Equal |\n", - "|AIRCRAFT.DESIGN.EMPTY_MASS | 88183.64 (lbm) | 88183.64 (lbm) | Equal |\n", - "|MISSION.SUMMARY.GROSS_MASS | 158666.39 (lbm) | 152894.30 (lbm) | Different |\n", - "|MISSION.SUMMARY.FUEL_BURNED | 27508.15 (lbm) | 26679.17 (lbm) | Different |\n", - "|MISSION.DESIGN.FUEL_MASS | 43041.75 (lbm) | 47984.87 (lbm) | Different |\n", - "|MISSION.SUMMARY.TOTAL_FUEL_MASS | 27508.15 (lbm) | 26679.17 (lbm) | Different |\n", - "|AIRCRAFT.WING.SPAN | 112.58 (ft) | 112.58 (ft) | Equal |\n", - "|AIRCRAFT.WING.AREA | 1340.98 (ft**2) | 1340.98(ft**2) | Equal |\n", - "|AIRCRAFT.LANDING_GEAR.MAIN_GEAR_MASS | 6348.73 (lbm) | 6348.73 (lbm) | Equal |\n", - "|AIRCRAFT.LANDING_GEAR.NOSE_GEAR_MASS | 799.54 (lbm) | 799.54 (lbm) | Equal |\n", - "|AIRCRAFT.DESIGN.LANDING_TO_TAKEOFF_MASS_RATIO | 0.84 (unitless) | 0.84 (unitless) | Equal |\n", - "|MISSION.SUMMARY.CRUISE_MACH | 0.785 (unitless) | 0.785 (unitless) | Equal |\n", - "|AIRCRAFT.FURNISHINGS.MASS | 14690.34 (lbm) | 14690.34 (lbm) | Equal |\n", - "|AIRCRAFT.CREW_AND_PAYLOAD.PASSENGER_SERVICE_MASS | 2524.48 (lbm) | 2524.48 (lbm) | Equal |\n", + "|Variable: MISSION.DESIGN.GROSS_MASS | 157271.61813452866 (lbm) | 157271.61813452866 (lbm) | Equal |\n", + "|Variable: AIRCRAFT.DESIGN.EMPTY_MASS | 87405.28415563758 (lbm) | 87405.28415563758 (lbm) | Equal |\n", + "|Variable: MISSION.SUMMARY.GROSS_MASS | 157271.61813452866 (lbm) | 120124.3931958877 (lbm) | Different |\n", + "|Variable: MISSION.SUMMARY.FUEL_BURNED | 26891.72449433127 (lbm) | 22994.499555690258 (lbm) | Different |\n", + "|Variable: MISSION.DESIGN.FUEL_MASS | 26891.724494351714 (lbm) | 60141.724494351714 (lbm) | Different |\n", + "|Variable: MISSION.SUMMARY.TOTAL_FUEL_MASS| 26891.72449433127 (lbm) | 22994.499555690258 (lbm) | Different |\n", + "|Variable: AIRCRAFT.LANDING_GEAR.MAIN_GEAR_MASS| 5761.149085460596 (lbm) | 5761.149085460596 (lbm) | Equal |\n", + "|Variable: AIRCRAFT.LANDING_GEAR.NOSE_GEAR_MASS| 746.6143746941743 (lbm) | 746.6143746941743 (lbm) | Equal |\n", + "|Variable: AIRCRAFT.DESIGN.LANDING_TO_TAKEOFF_MASS_RATIO| 0.84 (unitless) | 0.84 (unitless) | Equal |\n", + "|Variable: MISSION.SUMMARY.CRUISE_MACH | 0.785 (unitless) | 0.785 (unitless) | Equal |\n", + "|Variable: AIRCRAFT.FURNISHINGS.MASS | 14690.33988 (lbm) | 14690.33988 (lbm) | Equal |\n", + "|Variable: AIRCRAFT.CREW_AND_PAYLOAD.PASSENGER_SERVICE_MASS| 2524.475592961527 (lbm) | 2524.475592961527 (lbm) | Equal |\n", + "|Variable: AIRCRAFT.WING.SWEEP | 20.0 (deg) | 20.0 (deg) | Equal |\n", + "\n", + "\n", "\n", "In the graph below The Altitude, Drag force, Throttle command, Mass, Distance, and Mach number of the Primary and Deadhead missions are displayed. The Deadhead mission shows a characteristic smaller mass throughout the flight as expected since we have fewer passengers, and a slightly lower throttle profile to match, indicating the engine is not being pushed as hard to meet the demands of a lighter plane. Otherwise the missions themselves match, showing Mach, Distance, and Altitude all identical for every part of the mission. We did not allow the mach or altitude to be optimized for this mission so these results are not surprising. \n", "\n", diff --git a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py index 9a0c465e4..b36cb5664 100644 --- a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py @@ -293,10 +293,7 @@ def createN2(fileref, prob): (Aircraft.Design.EMPTY_MASS, 'lbm'), (Mission.Summary.GROSS_MASS, 'lbm'), (Mission.Summary.FUEL_BURNED, 'lbm'), - (Mission.Design.FUEL_MASS, 'lbm'), (Mission.Summary.TOTAL_FUEL_MASS, 'lbm'), - (Aircraft.Wing.SPAN, 'ft'), - (Aircraft.Wing.AREA, 'ft**2'), (Aircraft.LandingGear.MAIN_GEAR_MASS, 'lbm'), (Aircraft.LandingGear.NOSE_GEAR_MASS, 'lbm'), (Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 'unitless'), From bf5a284620abe7ec091287bfe910ef6e050d4f17 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Wed, 30 Oct 2024 15:32:32 -0400 Subject: [PATCH 104/113] added preprocess_options to N3CC examples in docs. typo in glue fixed for multimission docs --- aviary/docs/examples/multi-missions.ipynb | 2 +- ...S_based_detailed_takeoff_and_landing.ipynb | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/aviary/docs/examples/multi-missions.ipynb b/aviary/docs/examples/multi-missions.ipynb index 1b7be980f..343e86321 100644 --- a/aviary/docs/examples/multi-missions.ipynb +++ b/aviary/docs/examples/multi-missions.ipynb @@ -72,7 +72,7 @@ "### Setting Values\n", "The {glue:md}`Mission.Design.RANGE` value must be set to size some of Aviary's subsystems. These subsystems, such as avionics, have increasing mass as {glue:md}`Mission.Design.RANGE` increases. These are first order approximations that come with aviary. But because of these, we must ensure that both pre-missions have the same {glue:md}`Mission.Design.RANGE`, even if the actual range flown buy each mission (target_rage) is different. Without this, the avoinics mass calculated in pre-mission would be different for the two missions, resulting in a different aircraft design, which is counter to what is intended with the multi-mission feature. \n", "\n", - "The total number of passengers ({glue:md}`Aircraft.CrewPayload.Design.NUM_PASENGERS`) and the design number of passengers of each type (business, tourist, first class), help to define the passenger air conditioning subsystems and the passenger support mass (seats) respectively. Thus when these values are set equal in the primary and deadhead missions, we ensure the aircraft will be designed similarly. \n", + "The total number of passengers ({glue:md}`Aircraft.CrewPayload.Design.NUM_PASSENGERS`) and the design number of passengers of each type (business, tourist, first class), help to define the passenger air conditioning subsystems and the passenger support mass (seats) respectively. Thus when these values are set equal in the primary and deadhead missions, we ensure the aircraft will be designed similarly. \n", "\n", "It is good practice, but not required, to set {glue:md}`Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO` in Aviary Values to ensure consistent design of the landing gear for both missions. This combined with Design.GROSS_MASS helps to ensure that {glue:md}`Aircraft.LandingGear.MAIN_GEAR_MASS` and {glue:md}`Aircraft.LandingGear.NOSE_GEAR_MASS` are the same for both missions. If {glue:md}`Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO` is not set, Landing Gear Masses will be caluclated based on {glue:md}`Mission.Summary.CRUISE_MACH` and {glue:md}`Mission.Design.RANGE`. This is potentially problematic because {glue:md}`Mission.Summary.CRUISE_MACH` may not be set, and instead cruse mach may be optimized. In that case, {glue:md}`Mission.Summary.CRUISE_MACH` could vary between the Primary and Deadhead missions, which would then cascade into differeing {glue:md}`Aircraft.LandingGear.MAIN_GEAR_MASS` which causes the aircraft designs to diverge.\n", "\n", diff --git a/aviary/docs/user_guide/FLOPS_based_detailed_takeoff_and_landing.ipynb b/aviary/docs/user_guide/FLOPS_based_detailed_takeoff_and_landing.ipynb index e346a650b..c33d2dbdf 100644 --- a/aviary/docs/user_guide/FLOPS_based_detailed_takeoff_and_landing.ipynb +++ b/aviary/docs/user_guide/FLOPS_based_detailed_takeoff_and_landing.ipynb @@ -38,13 +38,25 @@ "execution_count": null, "id": "5fe75e1d", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mRunning cells with 'base (Python 3.12.5)' requires the ipykernel package.\n", + "\u001b[1;31mRun the following command to install 'ipykernel' into the Python environment. \n", + "\u001b[1;31mCommand: 'conda install -n base ipykernel --update-deps --force-reinstall'" + ] + } + ], "source": [ "from aviary.api import Dynamic, Mission\n", "\n", "import aviary.api as av\n", "\n", "from aviary.models.N3CC.N3CC_data import inputs\n", + "from aviary.utils.preprocessors import preprocess_options\n", "\n", "aviary_options = inputs.deepcopy()\n", "\n", @@ -82,6 +94,7 @@ "# We also need propulsion analysis for takeoff and landing. No additional configuration\n", "# is needed for this builder\n", "engine = av.build_engine_deck(aviary_options)\n", + "preprocess_options(aviary_options, engine_models=engine)\n", "prop_builder = av.CorePropulsionBuilder(engine_models=engine)" ] }, @@ -633,7 +646,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "base", "language": "python", "name": "python3" }, @@ -647,7 +660,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.12.5" } }, "nbformat": 4, From 4b24874a73f196138d70ae6c6a3200081d2f6d0d Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Wed, 30 Oct 2024 15:40:47 -0400 Subject: [PATCH 105/113] updated toc.yml with multi_missions references --- aviary/docs/_toc.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/aviary/docs/_toc.yml b/aviary/docs/_toc.yml index 4c53a7e9c..06b8d8da5 100644 --- a/aviary/docs/_toc.yml +++ b/aviary/docs/_toc.yml @@ -45,6 +45,7 @@ parts: - file: user_guide/features/overriding - file: user_guide/FLOPS_based_detailed_takeoff_and_landing - file: user_guide/reserve_missions + - file: user_guide/multi_missions - file: user_guide/off_design_missions - file: user_guide/SGM_capabilities - file: user_guide/troubleshooting @@ -57,6 +58,7 @@ parts: - file: examples/coupled_aircraft_mission_optimization - file: examples/additional_flight_phases - file: examples/reserve_missions + - file: examples/multi_missions - file: examples/off_design_example - file: examples/OAS_subsystem - file: examples/level_2_detailed_takeoff_and_landing From 9a598c50f29eea3553c87fc5e619728916222951 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Wed, 30 Oct 2024 16:21:17 -0400 Subject: [PATCH 106/113] consolidated naming for multi_mission and updated references --- aviary/docs/_toc.yml | 4 ++-- .../examples/{multi-missions.ipynb => multi_mission.ipynb} | 6 +++--- .../user_guide/{multi-mission.ipynb => multi_mission.ipynb} | 2 +- .../run_multimission_example_large_single_aisle.py | 0 4 files changed, 6 insertions(+), 6 deletions(-) rename aviary/docs/examples/{multi-missions.ipynb => multi_mission.ipynb} (96%) rename aviary/docs/user_guide/{multi-mission.ipynb => multi_mission.ipynb} (99%) rename aviary/examples/{multi_missions => multi_mission}/run_multimission_example_large_single_aisle.py (100%) diff --git a/aviary/docs/_toc.yml b/aviary/docs/_toc.yml index 06b8d8da5..37137df5a 100644 --- a/aviary/docs/_toc.yml +++ b/aviary/docs/_toc.yml @@ -45,7 +45,7 @@ parts: - file: user_guide/features/overriding - file: user_guide/FLOPS_based_detailed_takeoff_and_landing - file: user_guide/reserve_missions - - file: user_guide/multi_missions + - file: user_guide/multi_mission - file: user_guide/off_design_missions - file: user_guide/SGM_capabilities - file: user_guide/troubleshooting @@ -58,7 +58,7 @@ parts: - file: examples/coupled_aircraft_mission_optimization - file: examples/additional_flight_phases - file: examples/reserve_missions - - file: examples/multi_missions + - file: examples/multi_mission - file: examples/off_design_example - file: examples/OAS_subsystem - file: examples/level_2_detailed_takeoff_and_landing diff --git a/aviary/docs/examples/multi-missions.ipynb b/aviary/docs/examples/multi_mission.ipynb similarity index 96% rename from aviary/docs/examples/multi-missions.ipynb rename to aviary/docs/examples/multi_mission.ipynb index 343e86321..65c0dab52 100644 --- a/aviary/docs/examples/multi-missions.ipynb +++ b/aviary/docs/examples/multi_mission.ipynb @@ -13,7 +13,7 @@ "# Testing Cell\n", "from aviary.docs.tests.utils import glue_variable\n", "from aviary.api import Aircraft, Mission, AviaryProblem\n", - "from aviary.examples.multi_missions import run_multimission_example_large_single_aisle\n", + "from aviary.examples.multi_mission import run_multimission_example_large_single_aisle\n", "\n", "glue_variable(f'{Mission.Design.RANGE=}'.split('=')[0], md_code=True)\n", "\n", @@ -49,7 +49,7 @@ "# Multi-Mission Example\n", "\n", "The [Multi-mission Example](\n", - "https://github.com/OpenMDAO/Aviary/tree/main/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py) demonstrates the capability to optimize an aircraft design considering two missions that the aircraft will perform. For a background on this example see [Multi-Mission Overview](../user_guide/multi-mission).\n", + "https://github.com/OpenMDAO/Aviary/tree/main/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py) demonstrates the capability to optimize an aircraft design considering two missions that the aircraft will perform. For a background on this example see [Multi-Mission Overview](../user_guide/multi_mission).\n", "\n", "## Implementation\n", "At a minimum, the user must supply the following inputs for a multi-mission:\n", @@ -102,7 +102,7 @@ "source": [ "## Results\n", "The results of the [Multi-mission Example](\n", - "https://github.com/OpenMDAO/Aviary/tree/main/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py) are included in the data table and plots below.\n", + "https://github.com/OpenMDAO/Aviary/tree/main/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py) are included in the data table and plots below.\n", "\n", "From the table results we can see that the Primary mission have the same {glue:md}`Aircraft.Design.EMPTY_MASS` and {glue:md}`Mission.Design.GROSS_MASS`. However, the {glue:md}`Mission.Summary.GROSS_MASS` varies as expected because these represent \"as-flown\" values. The Primary mission has the higher {glue:md}`Mission.Summary.GROSS_MASS` which corresponds to the full passenger load and bags. Consequently, the {glue:md}`Mission.Summary.FUEL_BURNED` for each mission is different, higher for the Primary mission, as expected because this mission is carrying more mass for the same mission. {glue:md}`Aircraft.Wing.SWEEP`is the same for both missions, indicating that the aircraft has been designed similarly in both cases. We do not want to see different values for the wing design because it would mean that the two pre-mission systems are not mirroring eachother. If they were not the same it would mean we are designing two different aircraft. \n", "\n", diff --git a/aviary/docs/user_guide/multi-mission.ipynb b/aviary/docs/user_guide/multi_mission.ipynb similarity index 99% rename from aviary/docs/user_guide/multi-mission.ipynb rename to aviary/docs/user_guide/multi_mission.ipynb index ac2126ac0..d05b50796 100644 --- a/aviary/docs/user_guide/multi-mission.ipynb +++ b/aviary/docs/user_guide/multi_mission.ipynb @@ -55,7 +55,7 @@ "A number of checks exist in {glue:md}`capi` to help the user in the case that incomplete as-flow or design passenger information is provided. This was done to provide backward compatability for older aircraft models.\n", "\n", "## Example\n", - "An example of a multi-mission as well as Setup, Theory, and Results, is presented in [Multi-Mission Examples](../examples/multi-mission)." + "An example of a multi-mission as well as Setup, Theory, and Results, is presented in [Multi-Mission Examples](../examples/multi_mission)." ] } ], diff --git a/aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py similarity index 100% rename from aviary/examples/multi_missions/run_multimission_example_large_single_aisle.py rename to aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py From 65b4778e5df743ff6ff3321e0f616b2993e3ff52 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Mon, 4 Nov 2024 11:32:26 -0500 Subject: [PATCH 107/113] set verbosity, removed checks on keys because they are already set by default, updated warning messages. --- ...multimission_example_large_single_aisle.py | 7 +++--- aviary/utils/preprocessors.py | 22 +++++-------------- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py index b36cb5664..d72fffdd0 100644 --- a/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py @@ -17,7 +17,7 @@ """ import copy as copy from aviary.examples.example_phase_info import phase_info -from aviary.variable_info.variables import Mission, Aircraft +from aviary.variable_info.variables import Mission, Aircraft, Settings from aviary.variable_info.enums import ProblemType import aviary.api as av import openmdao.api as om @@ -37,6 +37,7 @@ # get large single aisle values aviary_inputs_primary = get_flops_inputs('LargeSingleAisle2FLOPS') aviary_inputs_primary.set_val(Mission.Design.GROSS_MASS, val=100000, units='lbm') +aviary_inputs_primary.set_val(Settings.VERBOSITY, val=1) aviary_inputs_deadhead = copy.deepcopy(aviary_inputs_primary) aviary_inputs_deadhead.set_val('aircraft:crew_and_payload:num_passengers', 1, 'unitless') @@ -153,8 +154,8 @@ def setup_wrapper(self): # some warnings related to variable promotion. Replicating that here with # setup for the super problem with warnings.catch_warnings(): - warnings.simplefilter("ignore", om.OpenMDAOWarning) - warnings.simplefilter("ignore", om.PromotionWarning) + # warnings.simplefilter("ignore", om.OpenMDAOWarning) + # warnings.simplefilter("ignore", om.PromotionWarning) self.setup(check='all') def run(self): diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 5b7e20b5f..9344e1554 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -41,20 +41,6 @@ def preprocess_crewpayload(aviary_options: AviaryValues): verbosity = aviary_options.get_val(Settings.VERBOSITY) - # Grab Default all values for num_pax and 1TB (1st class, Tourist Class, Business Class Passengers) to make - # sure they are accessible so we don't have to run checks if they exist again - for key in ( - Aircraft.CrewPayload.NUM_PASSENGERS, - Aircraft.CrewPayload.NUM_FIRST_CLASS, - Aircraft.CrewPayload.NUM_BUSINESS_CLASS, - Aircraft.CrewPayload.NUM_TOURIST_CLASS, - Aircraft.CrewPayload.Design.NUM_PASSENGERS, - Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, - Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, - Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS,): - if key not in aviary_options: - aviary_options.set_val(key, _MetaData[key]['default_value']) - # Sum passenger Counts for later checks and assignments passenger_count = 0 for key in (Aircraft.CrewPayload.NUM_FIRST_CLASS, @@ -126,7 +112,9 @@ def preprocess_crewpayload(aviary_options: AviaryValues): aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, num_pax) elif design_passenger_count != 0 and num_pax == 0 and passenger_count == 0: if verbosity >= 1: - print("User has not input as-flown passengers data. Assuming as-flow is equal to design passenger data.") + print("User has specified Design.NUM_* passenger values but CrewPyaload.NUM_* has been left blank or set to zero.") + print( + "Assuming they are equal to maintain backwards compatibility with GASP and FLOPS output files.") print("If you intended to have no passengers on this flight, please set Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS to zero in aviary_values.") aviary_options.set_val( Aircraft.CrewPayload.NUM_PASSENGERS, design_passenger_count) @@ -139,7 +127,9 @@ def preprocess_crewpayload(aviary_options: AviaryValues): # user has not supplied detailed information on design but has supplied summary information on passengers elif design_num_pax != 0 and num_pax == 0: if verbosity >= 1: - print("User has specified Design.NUM_PASSENGERS but not how many passengers are on the flight in NUM_PASSENGERS. Assuming they are equal.") + print("User has specified Design.NUM_PASSENGERS but CrewPayload.NUM_PASSENGERS has been left blank or set to zero.") + print( + "Assuming they are equal to maintain backwards compatibility with GASP and FLOPS output files.") print("If you intended to have no passengers on this flight, please set Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS to zero in aviary_values.") aviary_options.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, design_num_pax) From 6ad6148040bd7683f3b53bea382d9425acca82e7 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Mon, 4 Nov 2024 11:37:00 -0500 Subject: [PATCH 108/113] added in warning suppression for openmdao --- .../run_multimission_example_large_single_aisle.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py index d72fffdd0..42a8cd72c 100644 --- a/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py @@ -154,8 +154,8 @@ def setup_wrapper(self): # some warnings related to variable promotion. Replicating that here with # setup for the super problem with warnings.catch_warnings(): - # warnings.simplefilter("ignore", om.OpenMDAOWarning) - # warnings.simplefilter("ignore", om.PromotionWarning) + warnings.simplefilter("ignore", om.OpenMDAOWarning) + warnings.simplefilter("ignore", om.PromotionWarning) self.setup(check='all') def run(self): From 8a7a1d97687f72c03d85325bd15e35d9ae3b0a42 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Mon, 4 Nov 2024 12:13:36 -0500 Subject: [PATCH 109/113] updated objective to Mission.Summary.FUEL_BURNED and still got good results --- .../run_multimission_example_large_single_aisle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py b/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py index 42a8cd72c..b0316bf8b 100644 --- a/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py +++ b/aviary/examples/multi_mission/run_multimission_example_large_single_aisle.py @@ -102,7 +102,7 @@ def __init__(self, aviary_values, phase_infos, weights): promotes_inputs=[Mission.Design.GROSS_MASS, Mission.Design.RANGE, Aircraft.Wing.SWEEP], - promotes_outputs=[(Mission.Objectives.FUEL, promoted_name)]) + promotes_outputs=[(Mission.Summary.FUEL_BURNED, promoted_name)]) def add_design_variables(self): self.model.add_design_var(Mission.Design.GROSS_MASS, From ae0915aaf6cd3124708581c1f1a2402a171b39b2 Mon Sep 17 00:00:00 2001 From: Eliot Aretskin-Hariton Date: Mon, 4 Nov 2024 13:06:12 -0500 Subject: [PATCH 110/113] reverted setting default_values of passenger counts because some sub-tests do not successfully set these --- aviary/utils/preprocessors.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 9344e1554..89fef61af 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -41,6 +41,21 @@ def preprocess_crewpayload(aviary_options: AviaryValues): verbosity = aviary_options.get_val(Settings.VERBOSITY) + # Some tests, but not all, do not correctly set default values + # # so we need to ensure all these values are available. + + for key in ( + Aircraft.CrewPayload.NUM_PASSENGERS, + Aircraft.CrewPayload.NUM_FIRST_CLASS, + Aircraft.CrewPayload.NUM_BUSINESS_CLASS, + Aircraft.CrewPayload.NUM_TOURIST_CLASS, + Aircraft.CrewPayload.Design.NUM_PASSENGERS, + Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, + Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, + Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS,): + if key not in aviary_options: + aviary_options.set_val(key, _MetaData[key]['default_value']) + # Sum passenger Counts for later checks and assignments passenger_count = 0 for key in (Aircraft.CrewPayload.NUM_FIRST_CLASS, From e4a1917ae7480417f55e54847863d34a6a207af5 Mon Sep 17 00:00:00 2001 From: Bennett Date: Mon, 4 Nov 2024 13:54:29 -0500 Subject: [PATCH 111/113] off design payload work in progress --- aviary/subsystems/mass/gasp_based/fixed.py | 6 ++++-- aviary/subsystems/mass/gasp_based/fuel.py | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/aviary/subsystems/mass/gasp_based/fixed.py b/aviary/subsystems/mass/gasp_based/fixed.py index 3f083f3b3..aecbe131d 100644 --- a/aviary/subsystems/mass/gasp_based/fixed.py +++ b/aviary/subsystems/mass/gasp_based/fixed.py @@ -294,12 +294,14 @@ def compute(self, inputs, outputs): Aircraft.CrewPayload.PASSENGER_MASS_WITH_BAGS, units='lbm') PAX = aviary_options.get_val( Aircraft.CrewPayload.NUM_PASSENGERS, units='unitless') + PAX_des = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') cargo_mass = inputs[Aircraft.CrewPayload.CARGO_MASS] outputs[Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS] = \ payload_mass = pax_mass * PAX - outputs["payload_mass_des"] = payload_mass - outputs["payload_mass_max"] = pax_mass * PAX + cargo_mass + outputs["payload_mass_des"] = pax_mass * PAX_des + outputs["payload_mass_max"] = pax_mass * PAX_des + cargo_mass class ElectricAugmentationMass(om.ExplicitComponent): diff --git a/aviary/subsystems/mass/gasp_based/fuel.py b/aviary/subsystems/mass/gasp_based/fuel.py index b9b973fc9..806905929 100644 --- a/aviary/subsystems/mass/gasp_based/fuel.py +++ b/aviary/subsystems/mass/gasp_based/fuel.py @@ -1344,7 +1344,7 @@ def compute(self, inputs, outputs): - control_wt - fixed_equip_wt - useful_wt - - payload_wt + - payload_wt_des - fuel_sys_wt ) / GRAV_ENGLISH_LBM outputs["fuel_mass_min"] = ( From 8c038042245087bf885e34e0d0b15ca5dd937141 Mon Sep 17 00:00:00 2001 From: cmbenne3 Date: Mon, 18 Nov 2024 17:09:11 -0500 Subject: [PATCH 112/113] wip adding design and as flown cargo_mass distinction for gasp based missions --- aviary/subsystems/mass/gasp_based/fixed.py | 11 ++++++----- aviary/subsystems/mass/gasp_based/fuel.py | 17 +++++++---------- .../mass/gasp_based/mass_premission.py | 2 +- aviary/variable_info/variable_meta_data.py | 14 +++++++++++++- aviary/variable_info/variables.py | 1 + 5 files changed, 28 insertions(+), 17 deletions(-) diff --git a/aviary/subsystems/mass/gasp_based/fixed.py b/aviary/subsystems/mass/gasp_based/fixed.py index aecbe131d..4e757d624 100644 --- a/aviary/subsystems/mass/gasp_based/fixed.py +++ b/aviary/subsystems/mass/gasp_based/fixed.py @@ -276,7 +276,7 @@ def setup(self): "payload_mass_des", val=0, units="lbm", desc="WPLDES: design payload" ) self.add_output( - "payload_mass_max", + "payload_mass", val=0, units="lbm", desc="WPLMAX: maximum payload that the aircraft is being asked to carry" @@ -284,7 +284,7 @@ def setup(self): ) self.declare_partials( - "payload_mass_max", [ + "payload_mass", [ Aircraft.CrewPayload.CARGO_MASS], val=1.0) @@ -297,11 +297,12 @@ def compute(self, inputs, outputs): PAX_des = aviary_options.get_val( Aircraft.CrewPayload.Design.NUM_PASSENGERS, units='unitless') cargo_mass = inputs[Aircraft.CrewPayload.CARGO_MASS] + cargo_mass_des = inputs[Aircraft.CrewPayload.Design.CARGO_MASS] outputs[Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS] = \ payload_mass = pax_mass * PAX - outputs["payload_mass_des"] = pax_mass * PAX_des - outputs["payload_mass_max"] = pax_mass * PAX_des + cargo_mass + outputs["payload_mass_des"] = pax_mass * PAX_des + cargo_mass_des + outputs["payload_mass"] = pax_mass * PAX + cargo_mass class ElectricAugmentationMass(om.ExplicitComponent): @@ -2490,7 +2491,7 @@ def setup(self): "payload", PayloadMass(aviary_options=aviary_options), promotes_inputs=["aircraft:*"], - promotes_outputs=["payload_mass_des", "payload_mass_max", ] + ["aircraft:*"], + promotes_outputs=["payload_mass_des", "payload_mass", ] + ["aircraft:*"], ) self.add_subsystem( diff --git a/aviary/subsystems/mass/gasp_based/fuel.py b/aviary/subsystems/mass/gasp_based/fuel.py index 806905929..062a812b6 100644 --- a/aviary/subsystems/mass/gasp_based/fuel.py +++ b/aviary/subsystems/mass/gasp_based/fuel.py @@ -1237,7 +1237,7 @@ def setup(self): add_aviary_input(self, Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS, val=36000) self.add_input( - "payload_mass_max", + "payload_mass", val=46040, units="lbm", desc="WPLMAX: maximum payload that the aircraft is being asked to carry (design payload + cargo)", @@ -1265,6 +1265,7 @@ def setup(self): Aircraft.Design.FIXED_EQUIPMENT_MASS, Aircraft.Design.FIXED_USEFUL_LOAD, "payload_mass_des", + "payload_mass", Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT, Aircraft.Fuel.DENSITY, @@ -1297,7 +1298,7 @@ def setup(self): Aircraft.Controls.TOTAL_MASS, Aircraft.Design.FIXED_EQUIPMENT_MASS, Aircraft.Design.FIXED_USEFUL_LOAD, - "payload_mass_max", + "payload_mass_des", Aircraft.Fuel.FUEL_SYSTEM_MASS, ], val=-1, @@ -1318,9 +1319,7 @@ def compute(self, inputs, outputs): CK21 = inputs[Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER] c_mass_trend_fuel_sys = inputs[Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT] rho_fuel = inputs[Aircraft.Fuel.DENSITY] * GRAV_ENGLISH_LBM - payload_wt = inputs[Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS] * \ - GRAV_ENGLISH_LBM - payload_wt_max = inputs["payload_mass_max"] * GRAV_ENGLISH_LBM + payload_wt = inputs["payload_mass"] * GRAV_ENGLISH_LBM fuel_margin = inputs[Aircraft.Fuel.FUEL_MARGIN] outputs[Mission.Design.FUEL_MASS] = ( @@ -1354,7 +1353,7 @@ def compute(self, inputs, outputs): - control_wt - fixed_equip_wt - useful_wt - - payload_wt_max + - payload_wt_des - fuel_sys_wt ) / GRAV_ENGLISH_LBM @@ -1373,9 +1372,7 @@ def compute_partials(self, inputs, J): CK21 = inputs[Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER] c_mass_trend_fuel_sys = inputs[Aircraft.Fuel.FUEL_SYSTEM_MASS_COEFFICIENT] rho_fuel = inputs[Aircraft.Fuel.DENSITY] * GRAV_ENGLISH_LBM - payload_wt = inputs[Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS] * \ - GRAV_ENGLISH_LBM - payload_wt_max = inputs["payload_mass_max"] * GRAV_ENGLISH_LBM + payload_wt = inputs["payload_mass"] * GRAV_ENGLISH_LBM fuel_margin = inputs[Aircraft.Fuel.FUEL_MARGIN] J[Mission.Design.FUEL_MASS, Mission.Design.GROSS_MASS] = 1 / ( @@ -1531,7 +1528,7 @@ def setup(self): ] higher_level_inputs3 = [ "payload_mass_des", - "payload_mass_max", + "payload_mass", "eng_comb_mass", ] diff --git a/aviary/subsystems/mass/gasp_based/mass_premission.py b/aviary/subsystems/mass/gasp_based/mass_premission.py index 187df60a2..fc19a5aa7 100644 --- a/aviary/subsystems/mass/gasp_based/mass_premission.py +++ b/aviary/subsystems/mass/gasp_based/mass_premission.py @@ -43,7 +43,7 @@ def setup(self): # output values from fixed_mass that are connected to fuel_mass via promotion fuel_mass_fixed_mass_values = [ "payload_mass_des", - "payload_mass_max", + "payload_mass", "wing_mounted_mass", "eng_comb_mass", ] diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index 673383eb3..333ba6e5e 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -684,7 +684,19 @@ ] }, units='lbm', - desc='total mass of cargo' + desc='total mass of as-flown cargo' +) + +add_meta_data( + Aircraft.CrewPayload.Design.CARGO_MASS, + meta_data=_MetaData, + historical_name={"GASP": None, + "FLOPS": None, + "LEAPS1": None + }, + units='lbm', + desc='total mass of cargo for the design mission', + default_value=10040, ) add_meta_data( diff --git a/aviary/variable_info/variables.py b/aviary/variable_info/variables.py index 2cdb61d30..f4e9c0c82 100644 --- a/aviary/variable_info/variables.py +++ b/aviary/variable_info/variables.py @@ -133,6 +133,7 @@ class Design: NUM_FIRST_CLASS = 'aircraft:crew_and_payload:design:num_first_class' NUM_TOURIST_CLASS = 'aircraft:crew_and_payload:design:num_tourist_class' NUM_PASSENGERS = 'aircraft:crew_and_payload:design:num_passengers' + CARGO_MASS = 'aircraft:crew_and_payload:design:cargo_mass' class Design: # These variables are values that do not fall into a particular aircraft From d742f27485d03451d6fad6637ce05c0f96958896 Mon Sep 17 00:00:00 2001 From: cmbenne3 Date: Mon, 18 Nov 2024 17:19:14 -0500 Subject: [PATCH 113/113] wip - optimization running for GwGm with design cargo --- aviary/models/test_aircraft/aircraft_for_bench_GwGm.csv | 1 + aviary/subsystems/mass/gasp_based/fixed.py | 1 + 2 files changed, 2 insertions(+) diff --git a/aviary/models/test_aircraft/aircraft_for_bench_GwGm.csv b/aviary/models/test_aircraft/aircraft_for_bench_GwGm.csv index 2f3c32e0d..3039a89f9 100644 --- a/aviary/models/test_aircraft/aircraft_for_bench_GwGm.csv +++ b/aviary/models/test_aircraft/aircraft_for_bench_GwGm.csv @@ -7,6 +7,7 @@ aircraft:controls:control_mass_increment,0,lbm aircraft:controls:stability_augmentation_system_mass,0,lbm aircraft:controls:stability_augmentation_system_mass_scaler,1,unitless aircraft:crew_and_payload:cargo_mass,10040,lbm +aircraft:crew_and_payload:design:cargo_mass,10040,lbm aircraft:crew_and_payload:catering_items_mass_per_passenger,7.6,lbm aircraft:crew_and_payload:design:num_passengers,180,unitless aircraft:crew_and_payload:passenger_mass_with_bags,200,lbm diff --git a/aviary/subsystems/mass/gasp_based/fixed.py b/aviary/subsystems/mass/gasp_based/fixed.py index 4e757d624..b1d64ff56 100644 --- a/aviary/subsystems/mass/gasp_based/fixed.py +++ b/aviary/subsystems/mass/gasp_based/fixed.py @@ -269,6 +269,7 @@ def initialize(self): def setup(self): add_aviary_input(self, Aircraft.CrewPayload.CARGO_MASS, val=10040) + add_aviary_input(self, Aircraft.CrewPayload.Design.CARGO_MASS, val=10040) add_aviary_output(self, Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS, val=0)

        +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

    2. LSH@fKlJmOp4YhJCv~ZP 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 z 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®|Mr-H+G2CTj<=13T@-Svb}er{ZJ< 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