diff --git a/weight_and_balance_analysis/src/tube_and_wing/standard/basic/methodbasic.py b/weight_and_balance_analysis/src/tube_and_wing/standard/basic/methodbasic.py index 5639c900937cdcbf35976998e176a8415f3fc516..1e9308bee7c2d723ce94c452601a72a10de063c9 100644 --- a/weight_and_balance_analysis/src/tube_and_wing/standard/basic/methodbasic.py +++ b/weight_and_balance_analysis/src/tube_and_wing/standard/basic/methodbasic.py @@ -225,7 +225,8 @@ def method_basic(paths_and_names, routing_dict, dict_ac_exchange, dict_mod_confi # Landing mass runtime_output.print("Calculate MLM by RWTH regression ...") maximum_landing_mass = calculate_maximum_landing_mass_by_regression_rwth( - maximum_takeoff_mass, inertia_method, main_components_mass_properties).print("Maximum landing mass") + maximum_takeoff_mass, inertia_method, [operating_mass_empty, design_payload_mass, + design_fuel_mass_minimum_landing]).print("Maximum landing mass") maximum_landing_mass.path_to_element = "./analysis/masses_cg_inertia/maximum_landing_mass" ################################################################################################################## @@ -432,10 +433,7 @@ def method_basic(paths_and_names, routing_dict, dict_ac_exchange, dict_mod_confi most_forward_mass.center_of_gravity["y"] = 0.0 most_forward_mass.center_of_gravity["z"] = 0.0 most_forward_mass.mass = corresponding_mass_most_fwd_CG - most_forward_mass.inertia = inertia_method["method"]( - [operating_mass_empty, MassPropertiesIO().initialize_zero(), - MassPropertiesIO().initialize_zero()], - inertia_method["additional_parameters"]) + most_forward_mass.inertia = maximum_takeoff_mass.inertia most_afterward_mass = MassPropertiesIO( "./analysis/masses_cg_inertia/most_afterward_mass") @@ -444,8 +442,8 @@ def method_basic(paths_and_names, routing_dict, dict_ac_exchange, dict_mod_confi most_afterward_mass.center_of_gravity["z"] = 0.0 most_afterward_mass.mass = corresponding_mass_most_aft_CG most_afterward_mass.inertia = inertia_method["method"]( - [operating_mass_empty, MassPropertiesIO().initialize_zero(), - MassPropertiesIO().initialize_zero()], + [most_afterward_mass, MassPropertiesIO().initialize_zero(), MassPropertiesIO().initialize_zero(), + main_components_mass_properties, most_afterward_mass.center_of_gravity], inertia_method["additional_parameters"]) ########################################################################################################### @@ -552,7 +550,8 @@ def calculate_inertia_by_components(mass_properties=[], additional_parameters=No Returns: dict: inertia """ - reference_center_of_gravity = calculate_center_of_gravity(mass_properties) + mass_components = mass_properties[3] + reference_center_of_gravity = mass_properties[4] inertia = { "j_xx": 0.0, "j_yy": 0.0, @@ -566,9 +565,9 @@ def calculate_inertia_by_components(mass_properties=[], additional_parameters=No } for component, value in inertia.items(): - for element in mass_properties: - inertia[component] += element.inertia[component] + element.mass * calculate_geometric_distance_by_axis( - component, reference_center_of_gravity, element.center_of_gravity) + for element in mass_components: + inertia[component] += mass_components[element].inertia[component] + mass_components[element].mass * calculate_geometric_distance_by_axis( + component, reference_center_of_gravity, mass_components[element].center_of_gravity) return inertia @@ -796,6 +795,12 @@ def calculate_manufacturer_mass_empty(operator_items, mass_properties, inertia_m [mass_properties[element].mass for element in mass_properties]) # = OME cg_tot = calculate_center_of_gravity(mass_properties) # = CG OME + mass_prop = copy.copy(mass_properties) + + mass_prop['op_items'] = MassPropertiesIO().initialize_zero() + mass_prop['op_items'].center_of_gravity = cg_items + mass_prop['op_items'].mass = - mass_op_items + # removing the operator items to determine MME manufacturer_mass_empty.mass = mass_tot - mass_op_items @@ -807,7 +812,8 @@ def calculate_manufacturer_mass_empty(operator_items, mass_properties, inertia_m mass_tot * cg_tot['z'] - mass_op_items * cg_items['z']) / (mass_tot - mass_op_items) manufacturer_mass_empty.inertia = inertia_method["method"]([manufacturer_mass_empty, MassPropertiesIO( - ).initialize_zero(), MassPropertiesIO().initialize_zero()], inertia_method["additional_parameters"]) + ).initialize_zero(), MassPropertiesIO().initialize_zero(), + mass_prop, manufacturer_mass_empty.center_of_gravity], inertia_method["additional_parameters"]) return manufacturer_mass_empty @@ -832,52 +838,13 @@ def calculate_operating_mass_empty(mass_properties, inertia_method, LE, mac): mass_properties) operating_mass_empty.mass += 0.1 # ToDo avoid division by zero operating_mass_empty.inertia = inertia_method["method"]([operating_mass_empty, MassPropertiesIO( - ).initialize_zero(), MassPropertiesIO().initialize_zero()], inertia_method["additional_parameters"]) + ).initialize_zero(), MassPropertiesIO().initialize_zero(), + mass_properties, operating_mass_empty.center_of_gravity], inertia_method["additional_parameters"]) operating_mass_empty.cg_mac = ( operating_mass_empty.center_of_gravity['x'] - LE) / mac * 100 return operating_mass_empty -def calculate_landing_mass_by_default_method( - mission_information=None, inertia_method=None, mass_properties=None, additional_parameters=[]): - """Calculate landing mass by default method - OME - Design Payload - Reserve fuel - - Args: - operating_mass_empty (float, optional): operating mass empty. Defaults to None. - transport_task_data (object, optional): tranport task data. Defaults to None. - mission_information (object, optional): mission information. Defaults to None. - - Returns: - float: maximum landing mass - """ - - landing_mass = MassPropertiesIO( - "./analysis/masses_cg_inertia/maximum_landing_mass/mass_properties") - - design_fuel_mass_trip = mission_information["trip_fuel_mass"] - design_fuel_mass_mission = mission_information["mission_fuel_mass"] - - # If mission information not existent - work with current landing mass - if design_fuel_mass_trip is None or design_fuel_mass_mission is None: - landing_mass.read(additional_parameters[0]) - landing_mass.center_of_gravity = calculate_center_of_gravity( - mass_properties) - landing_mass.inertia = inertia_method["method"]( - [landing_mass, MassPropertiesIO().initialize_zero(), - MassPropertiesIO().initialize_zero()], - inertia_method["additional_parameters"]) - return landing_mass - - if mission_information is not None: - landing_mass.mass = sum( - [element.mass for element in mass_properties]) - landing_mass.center_of_gravity = calculate_center_of_gravity( - mass_properties) - landing_mass.inertia = inertia_method["method"]([landing_mass, MassPropertiesIO( - ).initialize_zero(), MassPropertiesIO().initialize_zero()], inertia_method["additional_parameters"]) - return landing_mass - - def calculate_maximum_landing_mass_by_regression_rwth(maximum_takeoff_mass, inertia_method, mass_properties): """Calculate maximum landing mass by RWTH regression formular @@ -895,8 +862,15 @@ def calculate_maximum_landing_mass_by_regression_rwth(maximum_takeoff_mass, iner maximum_landing_mass.mass = 0.9009 * maximum_takeoff_mass.mass + 410.85 maximum_landing_mass.center_of_gravity = calculate_center_of_gravity( mass_properties) - maximum_landing_mass.inertia = inertia_method["method"]([maximum_landing_mass, MassPropertiesIO( - ).initialize_zero(), MassPropertiesIO().initialize_zero()], inertia_method["additional_parameters"]) + + mass_prop = {} + mass_prop["ome"] = mass_properties[0] + mass_prop["payload"] = mass_properties[1] + mass_prop["fuel"] = mass_properties[2] + + maximum_landing_mass.inertia = inertia_method["method"]( + [maximum_landing_mass, MassPropertiesIO().initialize_zero(), MassPropertiesIO().initialize_zero(), mass_prop, + maximum_landing_mass.center_of_gravity], inertia_method["additional_parameters"]) return maximum_landing_mass @@ -1662,10 +1636,14 @@ def calculate_maximum_zero_fuel_mass(mass_properties, inertia_method): maximum_zero_fuel_mass.center_of_gravity = calculate_center_of_gravity( mass_properties) + mass_prop = {} + mass_prop["ome"] = mass_properties[0] + mass_prop["payload"] = mass_properties[1] + maximum_zero_fuel_mass.inertia = inertia_method["method"]( [mass_properties[0], mass_properties[1], MassPropertiesIO( - ).initialize_zero()], inertia_method["additional_parameters"] - ) + ).initialize_zero(), mass_prop, + maximum_zero_fuel_mass.center_of_gravity], inertia_method["additional_parameters"]) return maximum_zero_fuel_mass @@ -1673,13 +1651,17 @@ def calculate_design_mass(mass_properties, inertia_method): design_mass = MassPropertiesIO( "./analysis/masses_cg_inertia/design_mass") + mass_prop = {} + mass_prop["ome"] = mass_properties[0] + mass_prop["payload"] = mass_properties[1] + mass_prop["fuel"] = mass_properties[2] + design_mass.mass = sum([element.mass for element in mass_properties]) design_mass.center_of_gravity = calculate_center_of_gravity( mass_properties) design_mass.inertia = inertia_method["method"]( - mass_properties, inertia_method["additional_parameters"] - ) - + [mass_properties[0], mass_properties[1], mass_properties[2], mass_prop, + design_mass.center_of_gravity], inertia_method["additional_parameters"]) return design_mass