def summarize(interface): vehicle = interface.configs.base results = interface.results mission_profile = results.missions.base # merge all segment conditions def stack_condition(a,b): if isinstance(a,np.ndarray): return np.vstack([a,b]) else: return None conditions = None for segment in mission_profile.segments: if conditions is None: conditions = segment.conditions continue conditions = conditions.do_recursive(stack_condition,segment.conditions) # pack summary = SUAVE.Core.Results() summary.weight_empty = vehicle.mass_properties.operating_empty summary.fuel_burn = max(conditions.weights.total_mass[:,0]) - min(conditions.weights.total_mass[:,0]) #results.output.max_usable_fuel = vehicle.mass_properties.max_usable_fuel summary.noise = results.noise summary.mission_time_min = max(conditions.frames.inertial.time[:,0] / Units.min) summary.max_altitude_km = max(conditions.freestream.altitude[:,0] / Units.km) summary.range_nmi = mission_profile.segments[-1].conditions.frames.inertial.position_vector[-1,0] / Units.nmi summary.field_length = results.field_length summary.stability = Data() summary.stability.cm_alpha = max(conditions.stability.static.cm_alpha[:,0]) summary.stability.cn_beta = max(conditions.stability.static.cn_beta[:,0]) #summary.conditions = conditions #TODO: revisit how this is calculated summary.second_segment_climb_rate = mission_profile.segments[1].climb_rate printme = Data() printme.fuel_burn = summary.fuel_burn printme.weight_empty = summary.weight_empty print "RESULTS" print printme return summary
def summarize(interface): # Unpack vehicle = interface.configs.base results = interface.results mission_profile = results.missions.base short_field_results = results.short_field takeoff_field_results = results.takeoff_field_length range_results = results.max_range # Weights max_zero_fuel = vehicle.mass_properties.max_zero_fuel operating_empty = vehicle.mass_properties.operating_empty payload = vehicle.mass_properties.payload # pack summary = SUAVE.Core.Results() # TOFL for MTOW @ SL, ISA summary.takeoff_field_length = float(takeoff_field_results.takeoff_field_length[-1]) # Range from a short field summary.range_short_field_nmi = float(short_field_results.range / Units.nmi) # Maximum range summary.range_max_nmi = float(range_results.range / Units.nmi) # MZFW margin calculation summary.max_zero_fuel_margin = max_zero_fuel - (operating_empty + payload) # fuel margin calculation from SUAVE.Methods.Geometry.Two_Dimensional.Planform import wing_fuel_volume wing_fuel_volume(vehicle.wings['main_wing']) fuel_density = vehicle.propulsors['turbo_fan'].combustor.fuel_data.density fuel_available = 0.97 * vehicle.wings['main_wing'].fuel_volume * fuel_density summary.available_fuel_margin = fuel_available - range_results.fuel # Fuel burn summary.fuel_burn = results.mission_fuel.fuel ## if summary.fuel_burn < 0: # work around for negative fuel results. ## summary.fuel_burn = summary.fuel_burn ** 2. # Print outs printme = Data() printme.fuel_burn = summary.fuel_burn printme.weight_empty = operating_empty printme.tofl_MTOW = summary.takeoff_field_length printme.SF_range = summary.range_short_field_nmi printme.range_max = summary.range_max_nmi printme.max_zero_fuel_margin = summary.max_zero_fuel_margin printme.available_fuel_margin = summary.available_fuel_margin print "RESULTS" print printme inputs = interface.inputs import datetime fid = open('Results.dat','a') fid.write('{:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ;'.format( \ inputs.aspect_ratio,inputs.reference_area,inputs.sweep,inputs.design_thrust,inputs.wing_thickness,inputs.MTOW,inputs.MZFW_ratio, summary.fuel_burn , operating_empty , summary.takeoff_field_length , summary.range_short_field_nmi , summary.range_max_nmi , summary.max_zero_fuel_margin , summary.available_fuel_margin )) fid.write(datetime.datetime.now().strftime("%I:%M:%S")) fid.write('\n') ## print interface.configs.takeoff.maximum_lift_coefficient return summary