Skip to content
Snippets Groups Projects

Bug fix mode_1 (calculation of inertia by components)

Merged Timeea requested to merge fix/wb_inertia_by_components into main
1 file
+ 42
60
Compare changes
  • Side-by-side
  • Inline
@@ -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
Loading