From c489b4c8a088ae17897cb8e361141d4dfe00a54d Mon Sep 17 00:00:00 2001
From: AndiGob <andreas.gobbbin@hotmail.de>
Date: Tue, 10 Dec 2024 18:28:35 +0100
Subject: [PATCH 1/6] landing_gear_design: -Add owne function for wing tip
 clearance check

---
 .../landing_gear_design_conf.xml              | 14 ++---
 .../call_functions/_04_estimatelimitations.py | 11 +++-
 .../sub_function/wingtipclearance.py          | 61 +++++++++++++++++++
 3 files changed, 77 insertions(+), 9 deletions(-)
 create mode 100644 landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/wingtipclearance.py

diff --git a/landing_gear_design/landing_gear_design_conf.xml b/landing_gear_design/landing_gear_design_conf.xml
index 656a5388..3786d73c 100644
--- a/landing_gear_design/landing_gear_design_conf.xml
+++ b/landing_gear_design/landing_gear_design_conf.xml
@@ -99,17 +99,17 @@
 								</wing_strike_limit>
 							</ground_strike_limitations>
 							<nacelle_clearance description="Nacelle clearance according to CS25.149.">
-								<value>7</value>
-								<unit>degree</unit>
-								<lower_boundary>5</lower_boundary>
-								<upper_boundary>10</upper_boundary>
-								<default>7</default>
+								<value>0.55</value>
+								<unit>m</unit>
+								<lower_boundary>0.45</lower_boundary>
+								<upper_boundary>0.90</upper_boundary>
+								<default>0.60</default>
 							</nacelle_clearance>
 							<strut_suspension description="Switch to use landing gear strut suspension systems. ('true': use, 'false': don't use">
 								<value>true</value>
 								<default>true</default>
 								<strut_suspension_travel>
-									<value>0.4699</value>
+									<value>0.65</value>
 									<unit>m</unit>
 									<lower_boundary>0.35</lower_boundary>
 									<upper_boundary>0.95</upper_boundary>
@@ -117,7 +117,7 @@
 								</strut_suspension_travel>
 							</strut_suspension>
 							<landing_gear_bay_keel_beam_width description="Width of the landing gear bay keel beam.">
-								<value>0.8</value>
+								<value>0.55</value>
 								<unit>m</unit>
 								<lower_boundary>0.5</lower_boundary>
 								<upper_boundary>1.5</upper_boundary>
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
index 4323022b..f7ecffce 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
@@ -2,6 +2,9 @@
 import sys
 import math
 
+# import own modules.
+from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.call_functions.sub_function.wingtipclearance import wing_tip_clearance  # noPep8 e501
+
 
 def estimate_limitations(dict_ac_exchange, dict_mod_config, landing_gear_description, runtime_output):
     """ Hier beschreibung hin: Estimation of ground strike limitations in accordance to Sforza and CS-25
@@ -365,7 +368,11 @@ def estimate_limitations(dict_ac_exchange, dict_mod_config, landing_gear_descrip
     landing_gear_description['main_gear_description']['main_gear_arrangement'] = main_gear_arrangement
     landing_gear_description['nose_gear_description']['nose_gear_arrangement'] = nose_gear_arrangement
     landing_gear_description['tail_tipping_point']['maximum_rotation_angle_landing'] = maximum_rotation_angle_landing
-
-    runtime_output.debug('estimate_limitations successfully executed!')
+    
+    # Call function to check the wing tip clearance.
+    landing_gear_description = wing_tip_clearance(dict_ac_exchange, dict_mod_config, landing_gear_description, runtime_output)
+    
+    # debug print
+    runtime_output.debug('The function "estimate_limitations.py" successfully executed!')
 
     return landing_gear_description
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/wingtipclearance.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/wingtipclearance.py
new file mode 100644
index 00000000..cba618ac
--- /dev/null
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/wingtipclearance.py
@@ -0,0 +1,61 @@
+# Import standard modules.
+import math
+
+
+def wing_tip_clearance(dict_ac_exchange, dict_mod_config, landing_gear_description, runtime_output):
+    """ Estimation of wing tip clearance in accordance to Torenbeek and CS-25
+            [ref. E. Torenbeek; 1982]
+            [ref. CS-25 Amendment 27; 2022]
+
+    :param dict dict_ac_exchange: Dict containing parameter and according values from aircraft exchange file
+    :param dict dict_mod_config: Dict containing parameter and according values from module configuration file
+    :param dict landing_gear_description: Dict containing parameter and values of current landing gear estimation
+    :param logging.Logger runtime_output: Logging object used for capturing log messages in the module
+    :return dict landing_gear_description: Dict containing parameter and values of current landing gear estimation
+    """
+    ''' initialize local parameter '''
+    wing_tip_clearance_angle = 0
+    minimum_required_clearance_angle = 5  # according to CS25.149 -> minimum 5 degree bank angle
+    
+    ''' check wing tip clearance '''
+    try:
+        _, wing_reference_point_on_tip_in_y_value = \
+            next(reversed(list(dict_ac_exchange['wing_section_position_in_y'].items())), (None, None))
+        _, wing_reference_point_on_tip_in_z_value = \
+            next(reversed(list(dict_ac_exchange['wing_section_position_in_z'].items())), (None, None))
+
+        if wing_reference_point_on_tip_in_y_value is not None and wing_reference_point_on_tip_in_z_value is not None:
+            distance_between_wing_tip_and_outer_strut = \
+                round(wing_reference_point_on_tip_in_y_value
+                      - landing_gear_description['landing_gear_positions']['main_gear_outer_strut_y_position'], 4)
+            wing_tip_ground_clearance = \
+                (landing_gear_description['lever_arms']['vertical_distance_between_ground_and_fuselage_center_line']
+                 - wing_reference_point_on_tip_in_z_value)
+            wing_tip_clearance_angle = \
+                round(math.degrees(math.atan(wing_tip_ground_clearance/distance_between_wing_tip_and_outer_strut)), 4)
+
+            if wing_tip_clearance_angle < dict_mod_config['wing_strike_limit'] \
+                    and not wing_tip_clearance_angle < minimum_required_clearance_angle:
+                raise ValueError('The resulting wing tip angle is below the specified clearance angle of: '
+                                 + str(dict_mod_config['wing_strike_limit']) + ' degrees!')
+            elif wing_tip_clearance_angle < minimum_required_clearance_angle:
+                raise ValueError('The resulting wing tip angle is below the required clearance angle of the '
+                                 'CS25.149 of: ' + str(minimum_required_clearance_angle) + ' degrees!')
+            else:
+                runtime_output.print('The resulting wing tip angle conforms the specified clearance angle of: '
+                                     + str(dict_mod_config['wing_strike_limit']) + ' degrees!')
+
+        else:
+            raise ValueError('At least one wing parameter is missing in the aircraft exchange file, '
+                             'wing tip clearance could not be checked!')
+
+    # exception handling for wing tip clearance check
+    except ValueError as e:
+        runtime_output.error('Error: ' + str(e))
+
+    landing_gear_description['landing_gear_limitations']['wing_tip_clearance_angles'] = wing_tip_clearance_angle
+
+    # debug print
+    runtime_output.debug('estimate_clearances successfully executed!')
+
+    return landing_gear_description
-- 
GitLab


From ae3e906f4612d79dc45544c2ac1a065d4db6d4c3 Mon Sep 17 00:00:00 2001
From: AndiGob <andreas.gobbbin@hotmail.de>
Date: Tue, 10 Dec 2024 18:39:33 +0100
Subject: [PATCH 2/6] landing_gear_design: - Add owne function for nacelle
 ground clearance check

---
 .../call_functions/_05_estimateclearances.py  | 38 -------------------
 .../sub_function/nacellegroundclearance.py    | 33 ++++++++++++++++
 .../usermethoddatapreparation.py              |  2 +
 3 files changed, 35 insertions(+), 38 deletions(-)
 create mode 100644 landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py

diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_05_estimateclearances.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_05_estimateclearances.py
index 2397d661..397cc577 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_05_estimateclearances.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_05_estimateclearances.py
@@ -17,7 +17,6 @@ def estimate_clearances(dict_ac_exchange, dict_mod_config, landing_gear_descript
     specific_flag = False
     required_flag = False
     nacelle_clearance_angle = []
-    wing_tip_clearance_angle = 0
     minimum_required_clearance_angle = 5  # according to CS25.149 -> minimum 5 degree bank angle
     propulsor_mounting_position = list(dict_ac_exchange['propulsor_mounting_position'].values())
     nacelle_y_position = {key: value for key, value in dict_ac_exchange['engine_y_position'].items() if
@@ -86,44 +85,7 @@ def estimate_clearances(dict_ac_exchange, dict_mod_config, landing_gear_descript
     except ValueError as e:
         runtime_output.error('Error: ' + str(e))
 
-    ''' check wing tip clearance '''
-    try:
-        _, wing_reference_point_on_tip_in_y_value = \
-            next(reversed(list(dict_ac_exchange['wing_section_position_in_y'].items())), (None, None))
-        _, wing_reference_point_on_tip_in_z_value = \
-            next(reversed(list(dict_ac_exchange['wing_section_position_in_z'].items())), (None, None))
-
-        if wing_reference_point_on_tip_in_y_value is not None and wing_reference_point_on_tip_in_z_value is not None:
-            distance_between_wing_tip_and_outer_strut = \
-                round(wing_reference_point_on_tip_in_y_value
-                      - landing_gear_description['landing_gear_positions']['main_gear_outer_strut_y_position'], 4)
-            wing_tip_ground_clearance = \
-                (landing_gear_description['lever_arms']['vertical_distance_between_ground_and_fuselage_center_line']
-                 - wing_reference_point_on_tip_in_z_value)
-            wing_tip_clearance_angle = \
-                round(math.degrees(math.atan(wing_tip_ground_clearance/distance_between_wing_tip_and_outer_strut)), 4)
-
-            if wing_tip_clearance_angle < dict_mod_config['wing_strike_limit'] \
-                    and not wing_tip_clearance_angle < minimum_required_clearance_angle:
-                raise ValueError('The resulting wing tip angle is below the specified clearance angle of: '
-                                 + str(dict_mod_config['wing_strike_limit']) + ' degrees!')
-            elif wing_tip_clearance_angle < minimum_required_clearance_angle:
-                raise ValueError('The resulting wing tip angle is below the required clearance angle of the '
-                                 'CS25.149 of: ' + str(minimum_required_clearance_angle) + ' degrees!')
-            else:
-                runtime_output.print('The resulting wing tip angle conforms the specified clearance angle of: '
-                                     + str(dict_mod_config['wing_strike_limit']) + ' degrees!')
-
-        else:
-            raise ValueError('At least one wing parameter is missing in the aircraft exchange file, '
-                             'wing tip clearance could not be checked!')
-
-    # exception handling for wing tip clearance check
-    except ValueError as e:
-        runtime_output.error('Error: ' + str(e))
-
     landing_gear_description['landing_gear_limitations']['nacelle_ground_clearance_angles'] = nacelle_clearance_angle
-    landing_gear_description['landing_gear_limitations']['wing_tip_clearance_angles'] = wing_tip_clearance_angle
 
     # debug print
     runtime_output.debug('estimate_clearances successfully executed!')
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py
new file mode 100644
index 00000000..4ed78ed8
--- /dev/null
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py
@@ -0,0 +1,33 @@
+def nacelle_ground_clearance(dict_ac_exchange, dict_mod_config, landing_gear_description, main_gear_arrangement, runtime_output):
+    """ Estimation of ancelle ground clearance in accordance to Torenbeek and CS-25.
+            [ref. E. Torenbeek; 1982]
+            [ref. CS-25 Amendment 27; 2022]
+
+        :param dict dict_ac_exchange: Dict containing parameter and according values from aircraft exchange file
+        :param dict dict_mod_config: Dict containing parameter and according values from module configuration file
+        :param dict landing_gear_description: Dict containing parameter and values of current landing gear estimation
+        :param dict main_gear_arrangement: Dict containing parameter and values of current main landing gear arrengment
+        :param logging.Logger runtime_output: Logging object used for capturing log messages in the module
+        :return list required_main_gear_strut_delta_length: List containing requiered delta lengths for each wing mounted nacelle
+                bool nacelle_ground_clearance_flag: Status flag if the ground clearance check is failed and a deltea length is required
+    """
+    ''' initialize local parameter '''
+    nacelle_ground_clearance_flag = False
+    required_main_gear_strut_delta_length = []
+    
+    nacelle_y_position = {key: value for key, value in dict_ac_exchange['engine_y_position'].items() if value is not None}
+    nacelle_y_position = list(nacelle_y_position.values())
+    nacelle_z_position = {key: value for key, value in dict_ac_exchange['engine_z_position'].items() if value is not None}
+    nacelle_z_position = list(nacelle_z_position.values())
+    nacelle_section_widths = {key: value for key, value in dict_ac_exchange['nacelle_section_widths'].items() if value is not None}
+    nacelle_section_widths = list(nacelle_section_height.values())
+    nacelle_section_height = {key: value for key, value in dict_ac_exchange['nacelle_section_height'].items() if value is not None}
+    nacelle_section_height = list(nacelle_section_height.values())
+    
+    # Check if the current propulsor is mounted to the wing 
+    #  -> if true: -> prepare wing nacelle paramter for ground clearance check
+    for key, value in dict_ac_exchange['propulsor_mounting_position'].item():
+        print(value)
+        print(key)
+    
+    return required_main_gear_strut_delta_length, nacelle_ground_clearance_flag
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/usermethoddatapreparation.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/usermethoddatapreparation.py
index 7ecdb4e2..43a35197 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/usermethoddatapreparation.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/usermethoddatapreparation.py
@@ -76,6 +76,8 @@ def user_method_data_input_preparation(routing_dict):
             ['./analysis/masses_cg_inertia/most_forward_mass/mass_properties/center_of_gravity/y', float],
         'most_forward_center_of_gravity_in_z_direction':
             ['./analysis/masses_cg_inertia/most_forward_mass/mass_properties/center_of_gravity/z', float],
+        'nacelle_section_width':
+            ['./component_design/propulsion/specific/propulsion[@ID="0"]/nacelle[@ID="0"]/sections/section/[@ID="0"]/width', float],  # noPep8 e501
         'nacelle_section_height':
             ['./component_design/propulsion/specific/propulsion[@ID="0"]/nacelle[@ID="0"]/sections/section/[@ID="0"]/height', float],  # noPep8 e501
         'engine_x_position':
-- 
GitLab


From 0455de2ad721d527cedb25d88eb57c2fef7efee4 Mon Sep 17 00:00:00 2001
From: AndiGob <andreas.gobbbin@hotmail.de>
Date: Tue, 10 Dec 2024 23:33:38 +0100
Subject: [PATCH 3/6] landing_gear_design: - Add nacelle ground clearance check
 to landing gear strut length estimation

---
 .../call_functions/_01_estimatedistances.py   |  8 +-
 .../call_functions/_04_estimatelimitations.py | 22 +++++
 .../call_functions/_05_estimateclearances.py  | 93 -------------------
 ...stimatemasses.py => _05_estimatemasses.py} |  0
 ...{_07_estimatecog.py => _06_estimatecog.py} |  0
 ...geometry.py => _07_setexistinggeometry.py} |  0
 .../sub_function/nacellegroundclearance.py    | 40 ++++++--
 .../sub_function/wingtipclearance.py          |  2 +-
 .../general/useexistinggeometry.py            |  6 +-
 9 files changed, 62 insertions(+), 109 deletions(-)
 delete mode 100644 landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_05_estimateclearances.py
 rename landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/{_06_estimatemasses.py => _05_estimatemasses.py} (100%)
 rename landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/{_07_estimatecog.py => _06_estimatecog.py} (100%)
 rename landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/{_08_setexistinggeometry.py => _07_setexistinggeometry.py} (100%)

diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_01_estimatedistances.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_01_estimatedistances.py
index 301bfb86..a4902c22 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_01_estimatedistances.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_01_estimatedistances.py
@@ -192,15 +192,15 @@ def estimate_distances(dict_ac_exchange, dict_mod_config, landing_gear_descripti
         fuselage_reference_point_z_key, fuselage_reference_point_z_value = \
             next(iter(dict_ac_exchange['fuselage_reference_point_in_z_direction'].items()), (None, None))
         if fuselage_reference_point_z_value is not None \
-                and dict_ac_exchange['most_aft_center_of_gravity_in_z_direction'] is not None:
-            if fuselage_reference_point_z_value <= dict_ac_exchange['most_aft_center_of_gravity_in_z_direction']:
+                and dict_ac_exchange['center_of_gravity_in_z'] is not None:
+            if fuselage_reference_point_z_value <= dict_ac_exchange['center_of_gravity_in_z']:
                 delta_height_fuselage_center_line_to_center_of_gravity = \
-                    abs(dict_ac_exchange['most_aft_center_of_gravity_in_z_direction']
+                    abs(dict_ac_exchange['center_of_gravity_in_z']
                         - fuselage_reference_point_z_value)
             else:
                 delta_height_fuselage_center_line_to_center_of_gravity = \
                     abs(fuselage_reference_point_z_value
-                        - dict_ac_exchange['most_aft_center_of_gravity_in_z_direction'])
+                        - dict_ac_exchange['center_of_gravity_in_z'])
         elif dict_ac_exchange['fuselage_type'] == 'single_aisle':
             delta_height_fuselage_center_line_to_center_of_gravity = 0.5
         elif dict_ac_exchange['fuselage_type'] == 'wide_body':
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
index f7ecffce..7689c8d3 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
@@ -4,6 +4,7 @@ import math
 
 # import own modules.
 from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.call_functions.sub_function.wingtipclearance import wing_tip_clearance  # noPep8 e501
+from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.call_functions.sub_function.nacellegroundclearance import nacelle_ground_clearance  # noPep8 e501
 
 
 def estimate_limitations(dict_ac_exchange, dict_mod_config, landing_gear_description, runtime_output):
@@ -193,6 +194,25 @@ def estimate_limitations(dict_ac_exchange, dict_mod_config, landing_gear_descrip
                        'vertical_distance_between_ground_and_aft_center_of_gravity']
                   + main_gear_arrangement['main_landing_gear_wing_mounting_position_in_z_direction'])
                   - (min_tire_diameter/2 * convert_inch_to_meter), 4)
+        
+        # Check nacelle ground clearance if at least one engine is exisiting.
+        if dict_ac_exchange['engine_z_position'] is not None:
+            # Call function to check nacelle ground clearance.
+            required_main_gear_strut_delta_length, nacelle_ground_clearance_flag = \
+                nacelle_ground_clearance(dict_ac_exchange, dict_mod_config, landing_gear_description,
+                                         main_gear_arrangement, runtime_output)
+            
+            # Check if nacelle ground clearance check is failed 
+            #  -> if true: -> start repositioning and resizing of main landing gear struts.
+            if nacelle_ground_clearance_flag:
+                if i == 1:
+                    runtime_output.warning('Attention: At least one nacelle mounted to the wing '
+                                           'falls below the minimum required nacelle ground clearance.')
+                    runtime_output.print('Repositioning and resizing of landing gear struts started!')
+                
+                # Add required delta length to the length of main landing gear struts.
+                main_gear_arrangement['main_gear_outer_strut_length'] += max(required_main_gear_strut_delta_length)
+                
         landing_gear_description['landing_gear_positions']['main_gear_z_position_outer_strut'] = \
             round(main_gear_arrangement['main_landing_gear_wing_mounting_position_in_z_direction'], 4)
 
@@ -289,6 +309,8 @@ def estimate_limitations(dict_ac_exchange, dict_mod_config, landing_gear_descrip
                  + 0.05)
             i += 1
 
+    runtime_output.print('Repositioning and resizing of landing gear struts successfully finished!')
+    
     try:
         # check if the turnover iteration failed -> if true: -> raise an error and abort program
         if not main_gear_positioning_flag:
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_05_estimateclearances.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_05_estimateclearances.py
deleted file mode 100644
index 397cc577..00000000
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_05_estimateclearances.py
+++ /dev/null
@@ -1,93 +0,0 @@
-# Import standard modules.
-import math
-
-
-def estimate_clearances(dict_ac_exchange, dict_mod_config, landing_gear_description, runtime_output):
-    """ Hier beschreibung hin: Estimation of ground clearances in accordance to Torenbeek and CS-25
-            [ref. E. Torenbeek; 1982]
-            [ref. CS-25 Amendment 27; 2022]
-
-    :param dict dict_ac_exchange: Dict containing parameter and according values from aircraft exchange file
-    :param dict dict_mod_config: Dict containing parameter and according values from module configuration file
-    :param dict landing_gear_description: Dict containing parameter and values of current landing gear estimation
-    :param logging.Logger runtime_output: Logging object used for capturing log messages in the module
-    :return dict landing_gear_description: Dict containing parameter and values of current landing gear estimation
-    """
-    ''' initialize local parameter '''
-    specific_flag = False
-    required_flag = False
-    nacelle_clearance_angle = []
-    minimum_required_clearance_angle = 5  # according to CS25.149 -> minimum 5 degree bank angle
-    propulsor_mounting_position = list(dict_ac_exchange['propulsor_mounting_position'].values())
-    nacelle_y_position = {key: value for key, value in dict_ac_exchange['engine_y_position'].items() if
-                          value is not None}
-    nacelle_y_position = list(nacelle_y_position.values())
-    nacelle_z_position = {key: value for key, value in dict_ac_exchange['engine_z_position'].items() if
-                          value is not None}
-    nacelle_z_position = list(nacelle_z_position.values())
-    nacelle_section_height = {key: value for key, value in dict_ac_exchange['nacelle_section_height'].items() if
-                              value is not None}
-    nacelle_section_height = list(nacelle_section_height.values())
-    main_gear_outer_strut_y_position = landing_gear_description['landing_gear_positions'][
-        'main_gear_outer_strut_y_position']
-
-    ''' check nacelle clearance '''
-    try:
-        # check if at least one engine exist in the aircraft exchange file
-        if len(nacelle_y_position) > 0:
-            index = 0
-            # loop across all existing engines
-            for position in nacelle_y_position:
-                # check if the current engine is mounted to the wing -> if true: -> estimate clearance angle
-                if propulsor_mounting_position[index] == 'wing':
-                    # check if the y-position of current engine is not within the outer landing gear leg position
-                    #  -> if true: -> estimate clearance angle
-                    if abs(position) > main_gear_outer_strut_y_position:
-                        # estimate clearance angle between outer main landing gear strut and lowest point of nacelle
-                        distances = abs(position) - main_gear_outer_strut_y_position
-                        nacelle_ground_clearance = round(landing_gear_description['lever_arms'][
-                            'vertical_distance_between_ground_and_fuselage_center_line']
-                                             - abs(nacelle_z_position[index])
-                                             - abs(nacelle_section_height[index]/2), 4)
-                        nacelle_clearance_angle.append(
-                            round(math.degrees(math.atan(nacelle_ground_clearance/distances)), 4))
-                    # Else condition: current engine is within the outer landing gear leg position
-                    #  -> raise an error and skip nacelle ground clearance estimation
-                    else:
-                        raise ValueError('At least one wing mounted engine is within the outer landing gear leg '
-                                         'position. No valid configuration!')
-                    index += 1
-
-            # loop across all existing nacelle clearance angles to check angle requirements
-            for angle in nacelle_clearance_angle:
-                if angle < dict_mod_config['nacelle_clearance'] and not angle < minimum_required_clearance_angle:
-                    specific_flag = True
-                elif angle < minimum_required_clearance_angle:
-                    required_flag = True
-
-            if specific_flag and not required_flag:
-                raise ValueError('At least one wing mounted engine falls below the specified clearance angle of: '
-                                 + str(dict_mod_config['nacelle_clearance']) + ' degrees!')
-            elif required_flag:
-                raise ValueError('At least one wing mounted engine falls below the required clearance angle of the '
-                                 'CS25.149 of: '
-                                 + str(minimum_required_clearance_angle) + ' degrees!')
-            else:
-                runtime_output.print('All engines mounted to the wing conforms the specified clearance angle of: '
-                                     + str(dict_mod_config['nacelle_clearance']) + ' degrees!')
-
-        # Else condition: no engine exists in the aircraft exchange file -> print a warning
-        else:
-            runtime_output.warning('Attention: No engines available in the aircraft exchange file, '
-                                   'nacelle ground clearance could not be checked!')
-
-    # exception handling for nacelle ground clearance check
-    except ValueError as e:
-        runtime_output.error('Error: ' + str(e))
-
-    landing_gear_description['landing_gear_limitations']['nacelle_ground_clearance_angles'] = nacelle_clearance_angle
-
-    # debug print
-    runtime_output.debug('estimate_clearances successfully executed!')
-
-    return landing_gear_description
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_06_estimatemasses.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_05_estimatemasses.py
similarity index 100%
rename from landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_06_estimatemasses.py
rename to landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_05_estimatemasses.py
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_07_estimatecog.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_06_estimatecog.py
similarity index 100%
rename from landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_07_estimatecog.py
rename to landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_06_estimatecog.py
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_08_setexistinggeometry.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_07_setexistinggeometry.py
similarity index 100%
rename from landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_08_setexistinggeometry.py
rename to landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_07_setexistinggeometry.py
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py
index 4ed78ed8..4140caaa 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py
@@ -12,22 +12,46 @@ def nacelle_ground_clearance(dict_ac_exchange, dict_mod_config, landing_gear_des
                 bool nacelle_ground_clearance_flag: Status flag if the ground clearance check is failed and a deltea length is required
     """
     ''' initialize local parameter '''
+    engine_counter = 0
     nacelle_ground_clearance_flag = False
     required_main_gear_strut_delta_length = []
-    
+    wing_nacelle_bottom_position = []
+    wing_nacelle_inboard_position = []
     nacelle_y_position = {key: value for key, value in dict_ac_exchange['engine_y_position'].items() if value is not None}
     nacelle_y_position = list(nacelle_y_position.values())
     nacelle_z_position = {key: value for key, value in dict_ac_exchange['engine_z_position'].items() if value is not None}
     nacelle_z_position = list(nacelle_z_position.values())
-    nacelle_section_widths = {key: value for key, value in dict_ac_exchange['nacelle_section_widths'].items() if value is not None}
-    nacelle_section_widths = list(nacelle_section_height.values())
-    nacelle_section_height = {key: value for key, value in dict_ac_exchange['nacelle_section_height'].items() if value is not None}
-    nacelle_section_height = list(nacelle_section_height.values())
+    nacelle_section_widths = {key: value for key, value in dict_ac_exchange['nacelle_section_width'].items() if value is not None}
+    nacelle_section_widths = list(nacelle_section_widths.values())
+    nacelle_section_heights = {key: value for key, value in dict_ac_exchange['nacelle_section_height'].items() if value is not None}
+    nacelle_section_heights = list(nacelle_section_heights.values())
     
     # Check if the current propulsor is mounted to the wing 
     #  -> if true: -> prepare wing nacelle paramter for ground clearance check
-    for key, value in dict_ac_exchange['propulsor_mounting_position'].item():
-        print(value)
-        print(key)
+    for _, value in dict_ac_exchange['propulsor_mounting_position'].items():
+        if value == 'wing':
+            idx_start = int(engine_counter * (len(nacelle_section_widths)/len(nacelle_y_position)))
+            idx_end = int(engine_counter * (len(nacelle_section_widths)/len(nacelle_y_position)) 
+                          + (len(nacelle_section_widths)/len(nacelle_y_position)))
+            wing_nacelle_bottom_position.append(nacelle_z_position[engine_counter] 
+                                                - max(nacelle_section_heights[idx_start:idx_end])/2)
+            wing_nacelle_inboard_position.append(abs(nacelle_y_position[engine_counter])
+                                                - max(nacelle_section_widths[idx_start:idx_end])/2)
+        engine_counter += 1
+    
+    # Multiply every second nacelle inboard postion by -1
+    wing_nacelle_inboard_position = [value if index % 2 == 0 else -value 
+                                   for index, value in enumerate(wing_nacelle_inboard_position)]
     
+    # Check if the posiotn of current nacelle under investigation is below the minimum required nacelle ground clearance.
+    for i in range(0, len(wing_nacelle_bottom_position)):
+        clearance_required = abs(wing_nacelle_bottom_position[i]) + dict_mod_config['nacelle_clearance']
+        clearance_available = landing_gear_description['lever_arms']['vertical_distance_between_ground_and_fuselage_center_line']
+        if (clearance_required > clearance_available):
+            nacelle_ground_clearance_flag = True
+            required_main_gear_strut_delta_length.append(clearance_required - clearance_available)
+    
+    # debug print
+    runtime_output.debug('The function "nacelle_ground_clearance.py" successfully executed!')
+
     return required_main_gear_strut_delta_length, nacelle_ground_clearance_flag
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/wingtipclearance.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/wingtipclearance.py
index cba618ac..4bb528a3 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/wingtipclearance.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/wingtipclearance.py
@@ -56,6 +56,6 @@ def wing_tip_clearance(dict_ac_exchange, dict_mod_config, landing_gear_descripti
     landing_gear_description['landing_gear_limitations']['wing_tip_clearance_angles'] = wing_tip_clearance_angle
 
     # debug print
-    runtime_output.debug('estimate_clearances successfully executed!')
+    runtime_output.debug('The function "wing_tip_clearance.py" successfully executed!')
 
     return landing_gear_description
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/useexistinggeometry.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/useexistinggeometry.py
index b8a5014c..de7b7432 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/useexistinggeometry.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/useexistinggeometry.py
@@ -4,10 +4,10 @@ import xml.etree.ElementTree as ET
 
 # Import own modules.
 from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.landinggeardesign import landing_gear_design  # noPep8 e501
-from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.call_functions._07_estimatecog import estimate_cog
+from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.call_functions._06_estimatecog import estimate_cog
 from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.plot_functions.generateacnplots import generate_acn_plots  # noPep8 e501
-from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.call_functions._06_estimatemasses import estimate_masses  # noPep8 e501
-from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.call_functions._08_setexistinggeometry import set_existing_geometry  # noPep8 e501
+from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.call_functions._05_estimatemasses import estimate_masses  # noPep8 e501
+from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.call_functions._07_setexistinggeometry import set_existing_geometry  # noPep8 e501
 from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.plot_functions.generatelandinggearplots import generate_landing_gear_plots  # noPep8 e501
 from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.aicraft_classification_number.estimateaircraftclassificationnumber import estimate_aircraft_classification_number  # noPep8 e501
 
-- 
GitLab


From 3e8fa6f52a61ef8d586784c04de59a6b06a948a0 Mon Sep 17 00:00:00 2001
From: AndiGob <andreas.gobbbin@hotmail.de>
Date: Wed, 11 Dec 2024 13:03:47 +0100
Subject: [PATCH 4/6] landing_gear_design: -Upadet src code to run nacelle
 clearance check inside of the strut length dimensioning

---
 .../landing_gear_design_conf.xml              | 10 ++--
 .../call_functions/_04_estimatelimitations.py | 25 ++++++---
 .../general/call_functions/_06_estimatecog.py |  6 +-
 .../{ => sub_function}/convergencecheck.py    |  0
 .../sub_function/nacellegroundclearance.py    |  1 -
 .../{ => sub_function}/prepareexternaldata.py |  8 ++-
 .../general/landinggeardesign.py              | 12 +---
 .../general/methodplot.py                     | 56 +++++++++----------
 .../generatelandinggearplots.py               | 38 +++++++------
 9 files changed, 83 insertions(+), 73 deletions(-)
 rename landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/{ => sub_function}/convergencecheck.py (100%)
 rename landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/{ => sub_function}/prepareexternaldata.py (96%)

diff --git a/landing_gear_design/landing_gear_design_conf.xml b/landing_gear_design/landing_gear_design_conf.xml
index 3786d73c..8add8c37 100644
--- a/landing_gear_design/landing_gear_design_conf.xml
+++ b/landing_gear_design/landing_gear_design_conf.xml
@@ -99,25 +99,25 @@
 								</wing_strike_limit>
 							</ground_strike_limitations>
 							<nacelle_clearance description="Nacelle clearance according to CS25.149.">
-								<value>0.55</value>
+								<value>0.45</value>
 								<unit>m</unit>
 								<lower_boundary>0.45</lower_boundary>
 								<upper_boundary>0.90</upper_boundary>
-								<default>0.60</default>
+								<default>0.45</default>
 							</nacelle_clearance>
 							<strut_suspension description="Switch to use landing gear strut suspension systems. ('true': use, 'false': don't use">
 								<value>true</value>
 								<default>true</default>
 								<strut_suspension_travel>
-									<value>0.65</value>
+									<value>0.60</value>
 									<unit>m</unit>
 									<lower_boundary>0.35</lower_boundary>
 									<upper_boundary>0.95</upper_boundary>
-									<default>0.6</default>
+									<default>0.60</default>
 								</strut_suspension_travel>
 							</strut_suspension>
 							<landing_gear_bay_keel_beam_width description="Width of the landing gear bay keel beam.">
-								<value>0.55</value>
+								<value>0.50</value>
 								<unit>m</unit>
 								<lower_boundary>0.5</lower_boundary>
 								<upper_boundary>1.5</upper_boundary>
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
index 7689c8d3..f74806d4 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
@@ -23,10 +23,10 @@ def estimate_limitations(dict_ac_exchange, dict_mod_config, landing_gear_descrip
     convert_inch_to_meter = 0.0254
     current_turn_over_angle = None
     main_gear_positioning_flag = True
+    nacelle_ground_clearance_flag = False
     max_outside_diameter_in_inch = float()
     minimum_required_wheel_base = 0.0
     main_gear_tires = landing_gear_description['main_gear_description']['main_gear_tires']
-    nose_gear_tires = landing_gear_description['nose_gear_description']['nose_gear_tires']
     main_gear_arrangement = landing_gear_description['main_gear_description']['main_gear_arrangement']
     nose_gear_arrangement = landing_gear_description['nose_gear_description']['nose_gear_arrangement']
     tail_tipping_point = landing_gear_description['tail_tipping_point']
@@ -50,7 +50,9 @@ def estimate_limitations(dict_ac_exchange, dict_mod_config, landing_gear_descrip
     ''' Tail strike take-off and landing limitation '''
     i = 0
     # while loop to iterate the landing gear strut length to avoid turn over
-    while i < 1000 and not limitation_flag:
+    while i < 1000 and not limitation_flag or not nacelle_ground_clearance_flag:
+        # Reset nacelle ground clearance flag for next iteration
+        nacelle_ground_clearance_flag = False
         # Estimate minimum forward main landing gear position for tail strike take-off and landing limitation
         # check if strut suspension system should be used for limit estimation
         #  -> if true: -> add maximum strut suspension travel to vertical distance between center of gravity and ground
@@ -189,11 +191,12 @@ def estimate_limitations(dict_ac_exchange, dict_mod_config, landing_gear_descrip
             if dict_ac_exchange['fuselage_type'] == 'wide_body':
                 main_gear_arrangement['main_landing_gear_wing_mounting_position_in_z_direction'] = -1.3
 
-        main_gear_arrangement['main_gear_outer_strut_length'] = \
-            round((landing_gear_description['lever_arms'][
-                       'vertical_distance_between_ground_and_aft_center_of_gravity']
-                  + main_gear_arrangement['main_landing_gear_wing_mounting_position_in_z_direction'])
-                  - (min_tire_diameter/2 * convert_inch_to_meter), 4)
+        if 'main_gear_outer_strut_length' not in main_gear_arrangement:
+            main_gear_arrangement['main_gear_outer_strut_length'] = \
+                round((landing_gear_description['lever_arms'][
+                        'vertical_distance_between_ground_and_aft_center_of_gravity']
+                    + main_gear_arrangement['main_landing_gear_wing_mounting_position_in_z_direction'])
+                    - (min_tire_diameter/2 * convert_inch_to_meter), 4)
         
         # Check nacelle ground clearance if at least one engine is exisiting.
         if dict_ac_exchange['engine_z_position'] is not None:
@@ -212,6 +215,12 @@ def estimate_limitations(dict_ac_exchange, dict_mod_config, landing_gear_descrip
                 
                 # Add required delta length to the length of main landing gear struts.
                 main_gear_arrangement['main_gear_outer_strut_length'] += max(required_main_gear_strut_delta_length)
+                # Recalculate distance between ground and fusealge center line.
+            landing_gear_description['lever_arms']['vertical_distance_between_ground_and_fuselage_center_line'] = \
+                (main_gear_arrangement['main_gear_outer_strut_length'] 
+                    + abs(landing_gear_description['main_gear_description']['main_gear_arrangement'][
+                        'main_landing_gear_wing_mounting_position_in_z_direction']) 
+                    + (max_outside_diameter_in_inch/2 * convert_inch_to_meter))
                 
         landing_gear_description['landing_gear_positions']['main_gear_z_position_outer_strut'] = \
             round(main_gear_arrangement['main_landing_gear_wing_mounting_position_in_z_direction'], 4)
@@ -231,7 +240,7 @@ def estimate_limitations(dict_ac_exchange, dict_mod_config, landing_gear_descrip
             round(main_gear_arrangement['main_gear_outer_strut_length']
                   + abs(main_gear_arrangement['main_landing_gear_wing_mounting_position_in_z_direction'])
                   - landing_gear_description['fuselage_parameter']['fuselage_height'] / 2
-                  + 0.6, 4)
+                  + (landing_gear_description['fuselage_parameter']['fuselage_height'] / 2 / 5), 4)
 
         ''' estimate y-position of nose and main gear struts '''
         # Check if the fuselage_width is not given in the aircraft exchange file
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_06_estimatecog.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_06_estimatecog.py
index 955ca198..e26bb48c 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_06_estimatecog.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_06_estimatecog.py
@@ -34,18 +34,18 @@ def estimate_cog(dict_ac_exchange, dict_mod_config, landing_gear_description, ru
     nose_gear_cog['nose_gear_cog_global']['y'] = 0.0
 
     #  global cog in z-direction
-    fuselage_reference_point_in_z_direction_key, fuselage_reference_point_in_z_direction_value = \
+    _, fuselage_reference_point_in_z_direction_value = \
         next(iter(dict_ac_exchange['fuselage_reference_point_in_z_direction'].items()), (None, None))
     if fuselage_reference_point_in_z_direction_value is not None:
         nose_gear_cog['nose_gear_cog_global']['z'] = \
             round(fuselage_reference_point_in_z_direction_value
                   - landing_gear_description['fuselage_parameter']['fuselage_height'] / 2
-                  + 0.6, 4)
+                  + (landing_gear_description['fuselage_parameter']['fuselage_height'] / 2 / 5), 4)
     else:
         nose_gear_cog['nose_gear_cog_global']['z'] = \
             round(0.0
                   - landing_gear_description['fuselage_parameter']['fuselage_height'] / 2
-                  + 0.6, 4)
+                  + (landing_gear_description['fuselage_parameter']['fuselage_height'] / 2 / 5), 4)
 
     ''' estimate main gear center of gravity '''
     # estimate global cog for main gear assembly
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/convergencecheck.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/convergencecheck.py
similarity index 100%
rename from landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/convergencecheck.py
rename to landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/convergencecheck.py
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py
index 4140caaa..eb0e89ba 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py
@@ -42,7 +42,6 @@ def nacelle_ground_clearance(dict_ac_exchange, dict_mod_config, landing_gear_des
     # Multiply every second nacelle inboard postion by -1
     wing_nacelle_inboard_position = [value if index % 2 == 0 else -value 
                                    for index, value in enumerate(wing_nacelle_inboard_position)]
-    
     # Check if the posiotn of current nacelle under investigation is below the minimum required nacelle ground clearance.
     for i in range(0, len(wing_nacelle_bottom_position)):
         clearance_required = abs(wing_nacelle_bottom_position[i]) + dict_mod_config['nacelle_clearance']
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/prepareexternaldata.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/prepareexternaldata.py
similarity index 96%
rename from landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/prepareexternaldata.py
rename to landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/prepareexternaldata.py
index 1815313e..65035865 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/prepareexternaldata.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/prepareexternaldata.py
@@ -17,7 +17,7 @@ def prepare_external_data(paths_and_names, routing_dict, dict_ac_exchange, dict_
     """
     
     ''' set most forward and most aftward center of gravity position for maximum take-off mass condition '''
-    # TODO: this have to remove if the correct cog positions for mtom are writen!!!
+    # TODO: this have to remove if the correct cog positions for mtom are writen!!! (line 20 to 45)
     dict_ac_exchange['dihedral_angle_wing'] = 4.5  # angle in degree
     if dict_ac_exchange['center_of_gravity_in_x'] is not None \
         and dict_ac_exchange['wing_reference_point_global_in_x'] is not None:
@@ -37,6 +37,12 @@ def prepare_external_data(paths_and_names, routing_dict, dict_ac_exchange, dict_
     elif dict_ac_exchange['center_of_gravity_in_x'] is not None:
         dict_ac_exchange['most_aft_center_of_gravity_in_x_direction'] = (dict_ac_exchange['center_of_gravity_in_x'] + 0.5)
         dict_ac_exchange['most_forward_center_of_gravity_in_x_direction'] = (dict_ac_exchange['center_of_gravity_in_x'] - 0.5)
+    
+    if dict_ac_exchange['most_aft_center_of_gravity_in_z_direction'] is not None:
+        dict_ac_exchange['most_aft_center_of_gravity_in_z_direction'] = dict_ac_exchange['center_of_gravity_in_z'] - 0.1
+        
+    if dict_ac_exchange['most_forward_center_of_gravity_in_z_direction'] is not None:
+        dict_ac_exchange['most_forward_center_of_gravity_in_z_direction'] = dict_ac_exchange['center_of_gravity_in_z'] - 0.05
         
     ''' transform local position of input parameter into global positions '''
     # transform wing reference points
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/landinggeardesign.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/landinggeardesign.py
index a742d7bb..ee879380 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/landinggeardesign.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/landinggeardesign.py
@@ -5,10 +5,10 @@ import math
 import importlib
 
 # Import own modules.
-from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.call_functions.convergencecheck import convergence_check  # noPep8 e501
 from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.plot_functions.generateacnplots import generate_acn_plots  # noPep8 e501
-from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.call_functions.prepareexternaldata import prepare_external_data  # noPep8 e501
 from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.plot_functions.generatelandinggearplots import generate_landing_gear_plots  # noPep8 e501
+from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.call_functions.sub_function.convergencecheck import convergence_check  # noPep8 e501
+from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.call_functions.sub_function.prepareexternaldata import prepare_external_data  # noPep8 e501
 from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.aicraft_classification_number.estimateaircraftclassificationnumber import estimate_aircraft_classification_number  # noPep8 e501
 
 
@@ -31,7 +31,6 @@ def landing_gear_design(paths_and_names, routing_dict, dict_ac_exchange, dict_mo
 
     ''' Initialize local parameter '''
     word_to_insert_after = 'estimate'
-    files_to_remove = ['prepareexternaldata.py', 'convergencecheck.py']
     landing_gear_description = {'working_directory': paths_and_names['working_directory']}
 
     ''' Run landing gear design '''
@@ -55,11 +54,6 @@ def landing_gear_design(paths_and_names, routing_dict, dict_ac_exchange, dict_mo
                                                 routing_dict['module_import_name'].replace('.', '/')
                                                 + '/general/call_functions' + '/' + entry)]
 
-    # Remove unnecessary files from call function list.
-    for file in files_to_remove:
-        if file in call_function_list:
-            call_function_list.remove(file)
-
     call_function_list = sorted(call_function_list, key=lambda x: (int(x.split('_')[1]), x))
 
     # initialize convergence criteria
@@ -137,6 +131,6 @@ def landing_gear_design(paths_and_names, routing_dict, dict_ac_exchange, dict_mo
         landing_gear_description['current_tool_level'] = int(routing_dict['tool_level'])
     
     # Debug print for function landing_gear_design.        
-    runtime_output.debug('landing_gear_design successfully executed!')
+    runtime_output.debug('The functioin "landing_gear_design.py" successfully executed!')
 
     return landing_gear_description
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodplot.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodplot.py
index 3bcd611a..6be72ab0 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodplot.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodplot.py
@@ -175,34 +175,6 @@ def create_landing_gear_plots(paths_and_names, data_dict, plot_directory, runtim
     for point in data_dict['dict_landing_gear_output']['strut_positions']:
         ax.scatter(point[0], point[1], color='gray')
 
-    # Plot engines if available.
-    if 'nacelle_plot_list' in data_dict['dict_landing_gear_output']:
-        theta = np.linspace(0, 2*np.pi, 100)
-        i = 0
-        while i < len(data_dict['dict_landing_gear_output']['nacelle_plot_list']):
-            y1 = (data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][0]
-                  + data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][2] * np.cos(theta))
-            z1 = (data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][1]
-                  + data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][2] * np.sin(theta))
-            y2 = (data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][0]
-                  + (data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][2]
-                     * (1 - data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][3]/100)) * np.cos(theta))
-            z2 = (data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][1]
-                  + (data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][2]
-                     * (1 - data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][3]/100)) * np.sin(theta))
-            ax.plot(y1, z1, color='black')
-            ax.plot(y2, z2, color='black')
-            vertices = np.vstack((np.column_stack((y1, z1)),
-                                  np.column_stack((y2[::-1], z2[::-1]))))
-            polygon = Polygon(vertices, closed=True, color='gray', alpha=0.15)
-            vertices_inner = np.column_stack((y2[::-1], z2[::-1]))
-            fig.gca().add_patch(polygon)
-            polygon_inner = Polygon(vertices_inner, closed=True, color='gray', alpha=0.05)
-            fig.gca().add_patch(polygon_inner)
-            ax.scatter(data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][0],
-                       data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][1], color='gray')
-            i += 1
-
     # Plot wing if available.
     if 'wing_plot_list' in data_dict['dict_landing_gear_output']:
         i = 0
@@ -250,6 +222,34 @@ def create_landing_gear_plots(paths_and_names, data_dict, plot_directory, runtim
         else:
             runtime_output.warning('Attention! The Use existing geometry mode is selected. '
                                    'Clearance and limitation angle are not plotted.')
+    
+    # Plot nacelle if available.
+    if 'nacelle_plot_list' in data_dict['dict_landing_gear_output']:
+        theta = np.linspace(0, 2*np.pi, 100)
+        i = 0
+        while i < len(data_dict['dict_landing_gear_output']['nacelle_plot_list']):
+            y1 = (data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][0]
+                  + data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][2] * np.cos(theta))
+            z1 = (data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][1]
+                  + data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][2] * np.sin(theta))
+            y2 = (data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][0]
+                  + (data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][2]
+                     * (1 - data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][3]/100)) * np.cos(theta))
+            z2 = (data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][1]
+                  + (data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][2]
+                     * (1 - data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][3]/100)) * np.sin(theta))
+            ax.plot(y1, z1, color='black')
+            ax.plot(y2, z2, color='black')
+            vertices = np.vstack((np.column_stack((y1, z1)),
+                                  np.column_stack((y2[::-1], z2[::-1]))))
+            polygon = Polygon(vertices, closed=True, color='gray', alpha=0.8)
+            vertices_inner = np.column_stack((y2[::-1], z2[::-1]))
+            fig.gca().add_patch(polygon)
+            polygon_inner = Polygon(vertices_inner, closed=True, color='gray', alpha=0.15)
+            fig.gca().add_patch(polygon_inner)
+            ax.scatter(data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][0],
+                       data_dict['dict_landing_gear_output']['nacelle_plot_list'][i][1], color='gray')
+            i += 1
 
     # Remove frame
     fig.gca().spines['top'].set_visible(False)
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/plot_functions/generatelandinggearplots.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/plot_functions/generatelandinggearplots.py
index 160009db..c7694e4e 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/plot_functions/generatelandinggearplots.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/plot_functions/generatelandinggearplots.py
@@ -183,24 +183,6 @@ def generate_landing_gear_plots(dict_ac_exchange, landing_gear_description, runt
          round(abs(2 * landing_gear_description['landing_gear_positions']['main_gear_outer_strut_y_position']), 2)
          ]
 
-    # Check if engine data are available -> if true: -> prepare plotting.
-    _, nacelle_y_position_value = \
-        next(iter(dict_ac_exchange['engine_y_position'].items()), (None, None))
-
-    if nacelle_y_position_value is not None:
-        nacelle_plot_list = []
-        cleaned_nacelle_dict = {key: value for key, value in dict_ac_exchange['nacelle_section_height'].items()
-                                if value is not None}
-        i = 0
-        y_pos_list = list(dict_ac_exchange['engine_y_position'].values())
-        z_pos_list = list(dict_ac_exchange['engine_z_position'].values())
-        radius_list = max(list(cleaned_nacelle_dict.values()))
-        for i in range(0, len(y_pos_list)):
-            # List contains the following entries: [y_pos, z_pos, radius, wall_thickness_in_percent]
-            nacelle_plot_list.append([y_pos_list[i], z_pos_list[i], radius_list/2, 18])
-
-        dict_landing_gear_output['nacelle_plot_list'] = nacelle_plot_list
-
     # Check if wing data are available -> if true: -> prepare plotting.
     _, wing_section_y_position_value = \
         next(iter(dict_ac_exchange['wing_chord_length_on_section'].items()), (None, None))
@@ -244,6 +226,26 @@ def generate_landing_gear_plots(dict_ac_exchange, landing_gear_description, runt
             dict_landing_gear_output['wing_clearance_list'] = wing_clearance_list
         else:
             dict_landing_gear_output['wing_clearance_list'] = None
+            
+    # Check if engine data are available -> if true: -> prepare plotting.
+    _, nacelle_y_position_value = \
+        next(iter(dict_ac_exchange['engine_y_position'].items()), (None, None))
+
+    if nacelle_y_position_value is not None:
+        nacelle_plot_list = []
+        cleaned_nacelle_dict = {key: value for key, value in dict_ac_exchange['nacelle_section_height'].items()
+                                if value is not None}
+        i = 0
+        y_pos_list = list(dict_ac_exchange['engine_y_position'].values())
+        z_pos_list = list(dict_ac_exchange['engine_z_position'].values())
+        nacelle_diameter_list = max(list(cleaned_nacelle_dict.values()))
+        engine_diameter = nacelle_diameter_list - nacelle_diameter_list / 100 * 9  # 9 percent wall thickness of total nacelle diameter assumed
+        nacelle_width = round(nacelle_diameter_list - engine_diameter, 2) * 100  # nacelle wall width in cm for plotting 
+        for i in range(0, len(y_pos_list)):
+            # List contains the following entries: [y_pos, z_pos, radius, wall_thickness_in_percent]
+            nacelle_plot_list.append([y_pos_list[i], z_pos_list[i], nacelle_diameter_list/2, nacelle_width])
+
+        dict_landing_gear_output['nacelle_plot_list'] = nacelle_plot_list
 
     ''' generate output data for side view of landing gear design '''
 
-- 
GitLab


From 0346d6d5ab72adfd9d3dec4f7da750b0ab8db31d Mon Sep 17 00:00:00 2001
From: AndiGob <andreas.gobbbin@hotmail.de>
Date: Wed, 11 Dec 2024 15:48:25 +0100
Subject: [PATCH 5/6] landing_gear_deisgn: - bugFix: -> correction of nacelle
 clearance iteration flag from False to True

---
 .../general/call_functions/_04_estimatelimitations.py         | 4 ++--
 .../call_functions/sub_function/nacellegroundclearance.py     | 3 ++-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
index f74806d4..a5ba7371 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
@@ -23,7 +23,7 @@ def estimate_limitations(dict_ac_exchange, dict_mod_config, landing_gear_descrip
     convert_inch_to_meter = 0.0254
     current_turn_over_angle = None
     main_gear_positioning_flag = True
-    nacelle_ground_clearance_flag = False
+    nacelle_ground_clearance_flag = True
     max_outside_diameter_in_inch = float()
     minimum_required_wheel_base = 0.0
     main_gear_tires = landing_gear_description['main_gear_description']['main_gear_tires']
@@ -50,7 +50,7 @@ def estimate_limitations(dict_ac_exchange, dict_mod_config, landing_gear_descrip
     ''' Tail strike take-off and landing limitation '''
     i = 0
     # while loop to iterate the landing gear strut length to avoid turn over
-    while i < 1000 and not limitation_flag or not nacelle_ground_clearance_flag:
+    while i < 1000 and not limitation_flag or nacelle_ground_clearance_flag:
         # Reset nacelle ground clearance flag for next iteration
         nacelle_ground_clearance_flag = False
         # Estimate minimum forward main landing gear position for tail strike take-off and landing limitation
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py
index eb0e89ba..d8ef3a97 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py
@@ -46,10 +46,11 @@ def nacelle_ground_clearance(dict_ac_exchange, dict_mod_config, landing_gear_des
     for i in range(0, len(wing_nacelle_bottom_position)):
         clearance_required = abs(wing_nacelle_bottom_position[i]) + dict_mod_config['nacelle_clearance']
         clearance_available = landing_gear_description['lever_arms']['vertical_distance_between_ground_and_fuselage_center_line']
+        # Check if the required nachell clearance is greater than the current available clearance.
         if (clearance_required > clearance_available):
             nacelle_ground_clearance_flag = True
             required_main_gear_strut_delta_length.append(clearance_required - clearance_available)
-    
+            
     # debug print
     runtime_output.debug('The function "nacelle_ground_clearance.py" successfully executed!')
 
-- 
GitLab


From ec5a292bb3bba2ae802d7d7f1614c19a9c57876a Mon Sep 17 00:00:00 2001
From: AndiGob <andreas.gobbbin@hotmail.de>
Date: Wed, 11 Dec 2024 15:54:08 +0100
Subject: [PATCH 6/6] landing_gear_design: - Add header to all python src files

---
 landing_gear_design/main.py                   | 20 +++++++++++++++++++
 landing_gear_design/src/datapostprocessing.py | 20 +++++++++++++++++++
 landing_gear_design/src/datapreprocessing.py  | 20 +++++++++++++++++++
 landing_gear_design/src/readlayertext.py      | 20 +++++++++++++++++++
 .../estimateaircraftclassificationnumber.py   | 20 +++++++++++++++++++
 .../flexible_pavement/acnflexcomp.py          | 20 +++++++++++++++++++
 .../alpha_factor_from_curve.py                | 20 +++++++++++++++++++
 .../flexible_pavement/cvrg.py                 | 20 +++++++++++++++++++
 .../initializeacnflexparameter.py             | 20 +++++++++++++++++++
 .../setacnflexinputparameter.py               | 20 +++++++++++++++++++
 .../flexible_pavement/storeflexcurvefits.py   | 20 +++++++++++++++++++
 .../call_functions/_00_estimatepositions.py   | 20 +++++++++++++++++++
 .../call_functions/_01_estimatedistances.py   | 20 +++++++++++++++++++
 .../call_functions/_02_estimateloads.py       | 20 +++++++++++++++++++
 .../call_functions/_03_estimatetires.py       | 20 +++++++++++++++++++
 .../call_functions/_04_estimatelimitations.py | 20 +++++++++++++++++++
 .../call_functions/_05_estimatemasses.py      | 20 +++++++++++++++++++
 .../general/call_functions/_06_estimatecog.py | 20 +++++++++++++++++++
 .../call_functions/_07_setexistinggeometry.py | 20 +++++++++++++++++++
 .../sub_function/convergencecheck.py          | 20 +++++++++++++++++++
 .../sub_function/nacellegroundclearance.py    | 20 +++++++++++++++++++
 .../sub_function/prepareexternaldata.py       | 20 +++++++++++++++++++
 .../sub_function/wingtipclearance.py          | 20 +++++++++++++++++++
 .../general/landinggeardesign.py              | 20 +++++++++++++++++++
 .../general/methodhtmlreport.py               | 20 +++++++++++++++++++
 .../general/methodplot.py                     | 20 +++++++++++++++++++
 .../general/methodtexoutput.py                | 20 +++++++++++++++++++
 .../general/methodxmlexport.py                | 20 +++++++++++++++++++
 .../plot_functions/generateacnplots.py        | 20 +++++++++++++++++++
 .../generatelandinggearplots.py               | 20 +++++++++++++++++++
 .../general/useexistinggeometry.py            | 20 +++++++++++++++++++
 .../kerosene/methodkerosene.py                | 20 +++++++++++++++++++
 .../liquid_hydrogen/methodliquidhydrogen.py   | 20 +++++++++++++++++++
 .../usermethoddatapreparation.py              | 20 +++++++++++++++++++
 34 files changed, 680 insertions(+)

diff --git a/landing_gear_design/main.py b/landing_gear_design/main.py
index e3eacb65..2deba33d 100644
--- a/landing_gear_design/main.py
+++ b/landing_gear_design/main.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 """Calculation module main file."""
 # Import standard modules.
 import logging
diff --git a/landing_gear_design/src/datapostprocessing.py b/landing_gear_design/src/datapostprocessing.py
index 618a030c..45613b7e 100644
--- a/landing_gear_design/src/datapostprocessing.py
+++ b/landing_gear_design/src/datapostprocessing.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 """Module providing functions for data postprocessing."""
 # Import standard modules.
 
diff --git a/landing_gear_design/src/datapreprocessing.py b/landing_gear_design/src/datapreprocessing.py
index c2f9833a..de8078f0 100644
--- a/landing_gear_design/src/datapreprocessing.py
+++ b/landing_gear_design/src/datapreprocessing.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 """Module providing functions for data preprocessing."""
 # Import standard modules.
 import importlib
diff --git a/landing_gear_design/src/readlayertext.py b/landing_gear_design/src/readlayertext.py
index 86d7c856..a334aa21 100644
--- a/landing_gear_design/src/readlayertext.py
+++ b/landing_gear_design/src/readlayertext.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 """File providing functions to read layer text from aircraft XML file."""
 # Import standard libraries.
 import sys
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/estimateaircraftclassificationnumber.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/estimateaircraftclassificationnumber.py
index 62c3229b..27ba034d 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/estimateaircraftclassificationnumber.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/estimateaircraftclassificationnumber.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # Import standard modules.
 import os
 import sys
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/acnflexcomp.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/acnflexcomp.py
index 8f8d79d2..5af142ba 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/acnflexcomp.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/acnflexcomp.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # Import standard modules.
 import math
 
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/alpha_factor_from_curve.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/alpha_factor_from_curve.py
index 67d1c92e..852d9d03 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/alpha_factor_from_curve.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/alpha_factor_from_curve.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # imports for python
 import math
 
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/cvrg.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/cvrg.py
index 8b9176a5..f2efa92a 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/cvrg.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/cvrg.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 import math
 
 
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/initializeacnflexparameter.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/initializeacnflexparameter.py
index 8162d6aa..f6a89f42 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/initializeacnflexparameter.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/initializeacnflexparameter.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # Import own modules.
 from src.wing_mounted.empirical.landing_gear_design_tu_berlin.general.aicraft_classification_number.flexible_pavement.storeflexcurvefits import store_flex_curve_fits  # noPep8 e501
 
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/setacnflexinputparameter.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/setacnflexinputparameter.py
index 20afc060..e27d4890 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/setacnflexinputparameter.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/setacnflexinputparameter.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 def set_acn_flex_input_parameter(paths_and_names, landing_gear_description, dict_ac_exchange, dict_mod_config,
                                  runtime_output, dict_acn_flex_parameter, dict_constants):
     """ This function prepares all input parameter to estimate the aircraft classification number in accordance to
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/storeflexcurvefits.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/storeflexcurvefits.py
index 9fb0a7d0..1b6d3e62 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/storeflexcurvefits.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/aicraft_classification_number/flexible_pavement/storeflexcurvefits.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 def store_flex_curve_fits():
     """ This function initialized the acn parameter in accordance to ICAO COMFAA tool.
 
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_00_estimatepositions.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_00_estimatepositions.py
index 18fc1f9c..f39d7af5 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_00_estimatepositions.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_00_estimatepositions.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 def estimate_positions(dict_ac_exchange, dict_mod_config, landing_gear_description, runtime_output):
     """ This function estimates start values of the x-positions for nose and main landing gear in meter.
 
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_01_estimatedistances.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_01_estimatedistances.py
index a4902c22..33f5f5d1 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_01_estimatedistances.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_01_estimatedistances.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # Import standard modules.
 import math
 import sys
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_02_estimateloads.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_02_estimateloads.py
index 62ad5496..7752d6de 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_02_estimateloads.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_02_estimateloads.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # Import standard modules.
 import sys
 
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_03_estimatetires.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_03_estimatetires.py
index aa59d620..2826fa3c 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_03_estimatetires.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_03_estimatetires.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # Import standard modules.
 import os
 import sys
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
index a5ba7371..9fb94f4e 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_04_estimatelimitations.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # Import standard modules.
 import sys
 import math
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_05_estimatemasses.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_05_estimatemasses.py
index 0ff412ff..a76079b3 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_05_estimatemasses.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_05_estimatemasses.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 def estimate_masses(dict_ac_exchange, dict_mod_config, landing_gear_description, runtime_output):
     """ Hier beschreibung hin: Estimation of undercarriage masses in accordance to Torenbeek.
                 [ref. E. Torenbeek; 1982]
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_06_estimatecog.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_06_estimatecog.py
index e26bb48c..3753f21e 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_06_estimatecog.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_06_estimatecog.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 def estimate_cog(dict_ac_exchange, dict_mod_config, landing_gear_description, runtime_output):
     """ Hier beschreibung hin: Estimation of undercarriage center of gravity.
 
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_07_setexistinggeometry.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_07_setexistinggeometry.py
index a892e3e5..120dad4e 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_07_setexistinggeometry.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/_07_setexistinggeometry.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # Import standard modules.
 import os
 import sys
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/convergencecheck.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/convergencecheck.py
index 81e28215..81410f46 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/convergencecheck.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/convergencecheck.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 def convergence_check(landing_gear_description, convergence_parameter, runtime_output, convergence_flag, i):
     """  Module checks the convergence of landing gear design an prepared the log-file and console prints.
 
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py
index d8ef3a97..54617ff0 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/nacellegroundclearance.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 def nacelle_ground_clearance(dict_ac_exchange, dict_mod_config, landing_gear_description, main_gear_arrangement, runtime_output):
     """ Estimation of ancelle ground clearance in accordance to Torenbeek and CS-25.
             [ref. E. Torenbeek; 1982]
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/prepareexternaldata.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/prepareexternaldata.py
index 65035865..1ed7ed68 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/prepareexternaldata.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/prepareexternaldata.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # Import own modules.
 import math
 import pyaixml as aixml
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/wingtipclearance.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/wingtipclearance.py
index 4bb528a3..62628583 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/wingtipclearance.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/call_functions/sub_function/wingtipclearance.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # Import standard modules.
 import math
 
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/landinggeardesign.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/landinggeardesign.py
index ee879380..5edb3eb9 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/landinggeardesign.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/landinggeardesign.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # Import standard modules.
 import os
 import sys
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodhtmlreport.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodhtmlreport.py
index e8689c07..06752f72 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodhtmlreport.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodhtmlreport.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 """Module providing report functionalities for current calculation method."""
 
 
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodplot.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodplot.py
index 6be72ab0..9cf6f9d3 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodplot.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodplot.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 """Module providing plotting functionalities for current calculation method."""
 # Import standard libraries.
 import os
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodtexoutput.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodtexoutput.py
index 40c7f635..05e9a708 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodtexoutput.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodtexoutput.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 """Module providing report functionalities for current calculation method."""
 
 
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodxmlexport.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodxmlexport.py
index aa317cb3..adf8c4ae 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodxmlexport.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/methodxmlexport.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 """Module providing export functionalities for current calculation method."""
 # Import standard libraries.
 import xml.etree.ElementTree as ET
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/plot_functions/generateacnplots.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/plot_functions/generateacnplots.py
index ed6e4ddd..d5c0fb75 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/plot_functions/generateacnplots.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/plot_functions/generateacnplots.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # Import standard modules.
 import math
 
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/plot_functions/generatelandinggearplots.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/plot_functions/generatelandinggearplots.py
index c7694e4e..6bd72cfe 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/plot_functions/generatelandinggearplots.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/plot_functions/generatelandinggearplots.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # Import standard modules.
 import numpy as np
 from matplotlib import pyplot as plt
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/useexistinggeometry.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/useexistinggeometry.py
index de7b7432..603881c6 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/useexistinggeometry.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/general/useexistinggeometry.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 # Import standard modules.
 import sys
 import xml.etree.ElementTree as ET
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/kerosene/methodkerosene.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/kerosene/methodkerosene.py
index 3ac4ac5d..98cdf452 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/kerosene/methodkerosene.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/kerosene/methodkerosene.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 """Module providing calculation functions provided by the user."""
 # Import standard modules.
 import os
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/liquid_hydrogen/methodliquidhydrogen.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/liquid_hydrogen/methodliquidhydrogen.py
index 013d5da7..a6168255 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/liquid_hydrogen/methodliquidhydrogen.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/liquid_hydrogen/methodliquidhydrogen.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 """Module providing calculation functions provided by the user."""
 # Import standard modules.
 import os
diff --git a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/usermethoddatapreparation.py b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/usermethoddatapreparation.py
index 43a35197..774f9358 100644
--- a/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/usermethoddatapreparation.py
+++ b/landing_gear_design/src/wing_mounted/empirical/landing_gear_design_tu_berlin/usermethoddatapreparation.py
@@ -1,3 +1,23 @@
+# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
+#
+# Copyright (C) 2024 UNICADO consortium
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Description:
+# This file is part of UNICADO.
+
 """Module providing functions for the preparation of user data."""
 
 import pycoordinatesystemconversion as py11csc
-- 
GitLab