Skip to content
Snippets Groups Projects
Commit be59c055 authored by “KatrinBistreck”'s avatar “KatrinBistreck”
Browse files

ecological_assessment doc: updates documentation

- deletes all placeholder files / sections
- adds LCA description
- restructures software architecture
parent ad32f804
No related branches found
No related tags found
5 merge requests!263Apply 1 suggestion(s) to 1 file(s),!261Reintruduced automatic flight condition selection,!245Apply 1 suggestion(s) to 1 file(s),!233Initial open source version,!1ecological_assessment: adds first version of documentation
Showing
with 858 additions and 2586 deletions
...@@ -42,7 +42,7 @@ DOXYFILE_ENCODING = UTF-8 ...@@ -42,7 +42,7 @@ DOXYFILE_ENCODING = UTF-8
# title of most generated pages and in a few other places. # title of most generated pages and in a few other places.
# The default value is: My Project. # The default value is: My Project.
PROJECT_NAME = "ecological_assessment" PROJECT_NAME = "Ecological Assessment"
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This # The PROJECT_NUMBER tag can be used to enter a project or revision number. This
# could be handy for archiving the generated documentation or if some version # could be handy for archiving the generated documentation or if some version
...@@ -68,7 +68,7 @@ PROJECT_LOGO = ...@@ -68,7 +68,7 @@ PROJECT_LOGO =
# entered, it will be relative to the location where doxygen was started. If # entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used. # left blank the current directory will be used.
OUTPUT_DIRECTORY = . OUTPUT_DIRECTORY = . #$(CI_PROJECT_DIR)/docs/modules/
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 # If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
# sub-directories (in 2 levels) under the output directory of each output format # sub-directories (in 2 levels) under the output directory of each output format
...@@ -1255,6 +1255,45 @@ USE_HTAGS = NO ...@@ -1255,6 +1255,45 @@ USE_HTAGS = NO
VERBATIM_HEADERS = YES VERBATIM_HEADERS = YES
# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
# clang parser (see:
# http://clang.llvm.org/) for more accurate parsing at the cost of reduced
# performance. This can be particularly helpful with template rich C++ code for
# which doxygen's built-in parser lacks the necessary type information.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse_libclang=ON option for CMake.
# The default value is: NO.
CLANG_ASSISTED_PARSING = NO
# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS
# tag is set to YES then doxygen will add the directory of each input to the
# include path.
# The default value is: YES.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
CLANG_ADD_INC_PATHS = YES
# If clang assisted parsing is enabled you can provide the compiler with command
# line options that you would normally use when invoking the compiler. Note that
# the include paths will already be set by doxygen for the files and directories
# specified with INPUT and INCLUDE_PATH.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
CLANG_OPTIONS =
# If clang assisted parsing is enabled you can provide the clang parser with the
# path to the directory containing a file called compile_commands.json. This
# file is the compilation database (see:
# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the
# options used when the source files were built. This is equivalent to
# specifying the -p option to a clang tool, such as clang-check. These options
# will then be passed to the parser. Any options specified with CLANG_OPTIONS
# will be added as well.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse_libclang=ON option for CMake.
CLANG_DATABASE_PATH =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index # Configuration options related to the alphabetical class index
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
......
@startuml class_diagram
title Class Diagram propulsionDesign
caption UNICADO (c) 2024
hide empty members
' The extracted report functions
package report <<rectangle>> {
annotation "propulsionDesign::create_plots()" as plot
{
}
annotation "propulsionDesign::create_html_report()" as html
{
}
class "report::BucketCurve" as BucketCurve
{
- bucket_point_valid_
- bucket_point_
- thrust_
- fuel_flow_
- find_bucket_point()
+ {static} from_engine_data()
+ bucket_point()
+ set_fuel_flow()
+ set_thrust()
+ fuel_flow()
+ thrust()
+ tsfc()
+ update_bucket_point()
}
class "report::Data" as ReportData
{
+ SLST_total
+ thrust_takeoff
+ fuel_flow_takeoff
+ bucket_curves
+ {static} generate_data
}
annotation "file_names" as file_names
{
{static} name_bucket_curve()
{static} name_top_view()
{static} name_front_view()
{static} name_side_view()
}
plot -- ReportData
html -- ReportData
file_names -- html
file_names -- plot
}
' from moduleBasics
package "moduleBasics" {
class RuntimeIO
class Module {
# rtIO_
+ {abstract} initialize()
+ {abstract} run()
+ {abstract} update()
+ {abstract} report()
+ {abstract} save()
# execute()
}
}
' propulsionDesign Module
annotation utility {
to_energy_carrier()
create_energy_carrier_map()
create_engine()
print()
}
enum Component {
Nacelle
Pylon
Engine
Other
}
stereotype ParentComponent {
}
enum Parent {
Wing
Fuselage
}
enum Lateral {
Left
Mid
Right
}
enum Longitudinal {
Front
Rear
}
enum Vertical {
Over
Mid
Under
In
}
class propulsionDesign {
- aircraft_xml
- aircraft_geometry
- report_data
- configuration_xml
- std::vector<variant> engines
- engine_designer
- propulsion_integrator
- nacelle_designer
- pylon_designer
- mass_analyzer
- create_aircraft_geometry()
- create_html_report()
- create_plots()
- create_propulsors()
- get_design_condition()
- select_engine_designer()
- select_propulsion_integrator()
- select_nacelle_designer()
- select_pylon_designer()
- select_mass_analyzer()
+ propulsionDesign()
}
struct "geometry::Aircraft" as AircraftGeometry
{
+ fuselages
+ wings
+ empennage
+ {static} is_vertical()
}
' The propulsion strategy which defines the different propulsions types which have to be considered
interface Strategy {
+ {abstract} initialize()
+ {abstract} run()
+ {abstract} update()
+ {abstract} report()
+ {abstract} save()
}
interface PropulsionStrategy {
- configuration_
+ configuration()
+ {abstract} operator() (Turbofan<Kerosene> engine)
+ {abstract} operator() (Turbofan<Hydrogen> engine)
+ {abstract} operator() (Turboprop<Kerosene> engine)
+ {abstract} operator() (Turboprop<Hydrogen> engine)
}
' The types of propulsion systems
class Propulsion <<EnergyCarrier>>{
+ {static} energy_carrier
- bucket_point_
- dimension_
- required_thrust_
- id_
- model_
- nacelle_
- offtakes_
- parent_
- pointmasses_
- position_
- pylon_
- scale_
+ bucket_point()
+ dimension()
+ required_thrust()
+ id()
+ model()
+ nacelle()
+ offtakes()
+ parent()
+ pointmass()
+ position()
+ pylon()
+ scale()
+ set_bucket_point()
+ set_dimension()
+ set_required_thrust()
+ set_model()
+ set_nacelle()
+ set_offtakes()
+ set_parent()
+ set_pointmass()
+ set_scale()
+ change_to_global_reference_frame()
+ revert_to_local_reference_frame()
}
struct BucketPoint {
+ thrust
+ tsfc
}
struct Dimension_3 {
+ width
+ height
+ length
}
struct FlightCondition {
+ ambiance
+ altitude
+ mach
}
struct Offtakes {
+ bleed_air
+ shaft_power
}
struct "PointMass" as Mass {
+ CG
+ inertia
+ weight
}
struct Fan {
+ diameter
}
struct Propeller {
+ diameter
}
class Turbofan <<EnergyCarrier>>{
- bypass_ratio_
- fan_
+ bypass_ratio()
+ fan()
+ set_bypass_ratio()
+ set_fan()
}
class Turboprop <<EnergyCarrier>> {
- propeller_
+ propeller()
+ set_propeller()
}
' The variants of the propulsion systems based on the energy carrier
package "std::variant" as variant {
class "Turbofan" as fan_kerosene < Kerosene >
class "Turbofan" as fan_hydrogen < Liquid_Hydrogen >
class "Turboprop" as turbo_kerosene < Kerosene >
class "Turboprop" as turbo_hydrogen < Liquid_Hydrogen >
}
' The different design domains of the module
package design <<Rectangle>> {
interface EngineDesigner {
- technology_factors
- engine_database_
- engine_directory_
- engine_models_
- flight_condition_
+ initialize()
+ technology_factor()
+ designed_engines()
+ engine_database()
+ engine_directory()
+ add_designed_engine()
+ write_deck_value()
+ flight_condition()
}
class Rubber {
- preselected_engines_
- preselected_engine()
- calculate_bucket_point()
+ Rubber()
+ initialize()
+ save()
}
class Empirical {
}
class Gasturb {
}
interface PropulsionIntegrator {
- aircraft_
+ aircraft()
}
class "integration::Default" as PositionDefault {
- n_engines_
- engines_done
- parents_placed
- integrate_into_wing()
- integrate_into_fuselage()
- integrate_into_empennage()
- calculate_span_position()
- select_fuselage()
- select_wing()
- select_vertical_tail()
}
}
package geometry <<Rectangle>> {
interface NacelleDesigner {
- geometry_directory_
+ geometry_directory()
}
interface PylonDesigner {
- aircraft_
- geometry_directory_
+ aircraft()
+ geometry_directory()
}
class "nacelle::Default" as DefaultNacelle {
- section_shapes
- get_section_shape()
+ initialize()
}
class "pylon::Default" as DefaultPylon {
- section_profiles
- get_section_profile()
+ initialize()
}
}
package mass <<Rectangle>> {
interface MassAnalyzer {
- technology_factors
+ technology_factor()
}
class "Default" as MassDefault {
}
}
package io {
' The interface to the exchange file format
annotation EngineXML {
load_engine_data()
load_engine_scaled()
}
' The interface to the aicraft exchange file format
interface AircraftXMLInterface {
+ {abstract} insert(geom2::Point_3 reference_position)
+ {abstract} insert(PointMass mass_properties)
+ {abstract} insert(Turbofan<Kerosene> engine)
+ {abstract} insert(Turbofan<Liquid_Hydrogen> engine)
+ {abstract} insert(Turboprop<Kerosene> engine)
+ {abstract} insert(Turboprop<Liquid_Hydrogen> engine)
}
class AircraftXML {
- xml_interface
+ insert(Turbofan<> engine)
+ insert(Turboprop<> engine)
}
class AircraftXMLv3 {
- aircraft_data
- insert_bucket_point()
- insert_point()
- insert_point_mass()
- insert_string()
- insert_propulsion<carrier>()
+ AircraftXMLv3( aircraft_xml )
}
}
' Start the diagram
Module *-- RuntimeIO
Module <|- propulsionDesign
AircraftGeometry --* propulsionDesign
propulsionDesign ---- utility
propulsionDesign *- PropulsionStrategy: std::visit()
BucketCurve -* ReportData
ReportData ---* propulsionDesign
Turbofan *-- Fan
Turbofan ---|> Propulsion
Turboprop *-- Propeller
Turboprop ---|> Propulsion
Propulsion --- ParentComponent
Propulsion *-- BucketPoint
Propulsion *-- Dimension_3
Propulsion *-- Offtakes
Propulsion *-- Mass
Component - Propulsion
ParentComponent -- Parent
ParentComponent -- Lateral
ParentComponent -- Longitudinal
ParentComponent -- Vertical
fan_kerosene --|> Turbofan
fan_hydrogen --|> Turbofan
turbo_kerosene --|> Turboprop
turbo_hydrogen --|> Turboprop
PropulsionStrategy -|> Strategy
EngineDesigner *-- FlightCondition
EngineDesigner ---|> PropulsionStrategy
PropulsionStrategy *---- fan_kerosene
PropulsionStrategy *---- fan_hydrogen
PropulsionStrategy *---- turbo_kerosene
PropulsionStrategy *---- turbo_hydrogen
MassAnalyzer ---|> PropulsionStrategy
MassDefault --|> MassAnalyzer
PropulsionIntegrator ---|> PropulsionStrategy
PositionDefault --|> PropulsionIntegrator
Rubber --|> EngineDesigner
Empirical --|> EngineDesigner
Gasturb --|> EngineDesigner
NacelleDesigner ---|> PropulsionStrategy
DefaultNacelle --|> NacelleDesigner
PylonDesigner ---|> PropulsionStrategy
DefaultPylon --|> PylonDesigner
variant ------- io
AircraftXML *- AircraftXMLInterface
AircraftXMLv3 --|> AircraftXMLInterface
@enduml
# Additional information {#additional}
...@@ -14,12 +14,4 @@ During the development of this release the following bugs were found and fixed: ...@@ -14,12 +14,4 @@ During the development of this release the following bugs were found and fixed:
- SFCContThrustSL was used before calculated - SFCContThrustSL was used before calculated
### Changes in the CSR designs
The implemented changes and bugfixes lead to the following changes in the results of the CSR designs.
#### CSR-02
|Parameter|Changed introduced by|Old Value|New Value|Unit|
|---|---|---|---|:---|
|ATR|New emission input due to cahnges in engine library|?|?|*K*|
...@@ -5,6 +5,6 @@ This module enables you to assess various ecological factors, including aircraft ...@@ -5,6 +5,6 @@ This module enables you to assess various ecological factors, including aircraft
The _ecological\_assessment_ tool offers flexibility in how you approach these evaluations. You can choose to perform a complete life cycle assessment (LCA), which evaluates the environmental impact across the entire lifespan of the aircraft — from development and production through operation to end-of-life, including eventual disposal. Alternatively, if you're focusing on the operational phase, you can limit the analysis to the impact of the flown mission alone. The _ecological\_assessment_ tool offers flexibility in how you approach these evaluations. You can choose to perform a complete life cycle assessment (LCA), which evaluates the environmental impact across the entire lifespan of the aircraft — from development and production through operation to end-of-life, including eventual disposal. Alternatively, if you're focusing on the operational phase, you can limit the analysis to the impact of the flown mission alone.
If you want to explore the details of the _ecological\_assessment_ module and discover how to optimize your aircraft designs for environmental sustainability, check out the next section of this documentation. The @subpage getting-started gives you a first insight into how to execute the tool. To understand how the tool works, the documentation is split into a @subpage softwarearchitecture section, where the structure of the module is described, and a @subpage submodules section, which gives you an overview of the implemented methodologies. If you want to explore the details of the _ecological\_assessment_ module and discover how to optimize your aircraft designs for environmental sustainability, check out the next section of this documentation. The @subpage getting-started gives you a first insight into how to execute the tool. To understand how the tool works, the documentation is split into a @subpage softwarearchitecture section, where the structure of the module is described.
So let's get started! ✈️ So let's get started! ✈️
This diff is collapsed.
# mission_emissions {#mission-emissions} # mission_emissions {#mission-emissions}
The submodule _mission_emission_ is the only part of _ecological\_assessment_ that will always be executed. It is handled via the class `Mission` and provides various options to calculate the emissions of kerosene or hydrogen-burning engines during a mission. The submodule _mission_emissions_ is the only part of _ecological\_assessment_ that will always be executed. It is handled via the class `Mission` and provides various options to calculate the emissions of kerosene or hydrogen-burning engines during a mission.
## General principles {#mission-emissions-generalprinciples} ## General principles {#mission-emissions-generalprinciples}
The following steps are executed within the mission class: The following steps are executed within the mission class:
......
# Software Architecture {#softwarearchitecture} # Software Architecture {#softwarearchitecture}
## Software Architecture Overview At the highest level, the `main_ecological_assessment.cpp` calls the function `execute()` of the class `EcologicalAssessment`, which inherits from the class `Module` (available in the library **moduleBasics**). `EcologicalAssessment` provides access to defined strategies. It will run the functions `initialize`, `run`, `update`, `report` and `save` of the strategy (inherited from the `Module` class in **moduleBasics**). Additionally, the `save` function will save and close the aircraft XML file, as well as close the configuration file.
The software architecture is (based on the parts of a Life Cycle Assessment (LCA)) structured into various submodules (see [submodule description](#submodules)). For a first overview, examining the folder structure (file list) could be beneficial. For more detailed insights, exploring the collaboration diagrams or the source code is recommended. This page provides information about the coordination of the module subparts and their behavior.
The methods of the submodules are located in subfolders called "emissionCalculation" or "impactCalculation," respectively. Currently, only one strategy (called STANDARD) is implemented. Here you can find more information about it: @subpage standard-strategy
- The folder **emissionCalculation** contains all methods to determine emissions.
- In one folder, you'll find the method for mission calculation. By changing the setting in the configuration file, you can choose different methods for emission calculation. Both kerosene and hydrogen-burning turbines can be calculated. The results will be saved in the _ecological\_assessment\_results.xml_.
- The other folder provides functions for life cycle emission calculation. The implemented method is based on Schaefer (2017) \cite Sch17 and determines the emissions for development, production, operation, and end-of-life phases.
- Additionally, you'll find the **ecoDatabase**, a class that offers a variety of constants to calculate the emissions in all aircraft life phases.
- The folder **impactCalculation** contains different methods to calculate the consequences of the emissions.
- The air quality index is determined according to Schaefer (2017) \cite Sch17.
- The climate impact is determined according to Dallara (2011) \cite Dal11.
## EcologicalAssessment
At the highest level, the `main_ecological_assessment.cpp` calls the function `execute()` of the class `EcologicalAssessment`, which inherits from the class `Module` (available in the library **moduleBasics**). `EcologicalAssessment` provides access to defined strategies. Currently, only one strategy (called STANDARD) is implemented. The corresponding class `StandardStrategy`, derived from the class `Strategy`, coordinates all calculations based on the methods chosen by the user. Its functions will be executed before the acXML is saved and both acXML and configXML are closed.
## StandardStrategy
The class `StandardStrategy` contains all classes of the submodules, as well as functions for generating the plots and the output files. It handles _shared_ptr_ for collecting the HTML report body information of all submodules and the `ecological_assessment_results.xml` data exchanged between the submodules. It includes the functions `initialize`, `run`, `update`, `report`, and `save` (inherited from the `Module` class in **moduleBasics**).
- **initialize()**: The methods for the submodules are read from the config file, and the report and `ecological_assessment_results` are initialized.
- **run()**: Depending on the chosen methods, the run function of the methods is executed. Important: The emissions of the flown mission will always be calculated, as they are needed for all other methods.
- **update()**: Depending on the chosen methods, the acXML will be updated.
- **report()**: Depending on the chosen methods, the plots will be generated, and the HTML as well as TeX reports will be written.
- **save()**: The `ecological_assessment_results.xml` will be saved and closed.
## Submodule Routines
All submodules have a class _IOData_, which contains all data from acXML and functions to read or write the data. Additionally, it has a member _configuration_, which provides access to configuration file data. The submodules are executed via the function `run`, which is called by the `StandardStrategy`. The `run` function shall call functions to initialize the data, perform the calculation routines, and update the `ecological_assessment_results.xml` (in case there are results that are needed by other parts of *ecological_assessment*).
# Submodule Description {#submodules} # Submodule Description {#submodules}
## Submodule Routines {#submodules-routines}
All submodules have a class _IOData_, which contains all data from acXML and functions to read or write the data. Additionally, it has a member _configuration_, which provides access to configuration file data. The submodules are executed via the function `run`, which is called by the `StandardStrategy`. The `run` function shall call functions to initialize the data, perform the calculation routines, and update the `ecological_assessment_results.xml` (in case there are results that are needed by other parts of *ecological_assessment*).
## Submodule Description {#submodules-description}
The following subpages will provide you with an overview of the implemented methodologies. For every submodule, there is a brief description of the method, as well as the required inputs and outputs. To gain deeper insights into the calculation routines, you're encouraged to take a look at the source code and the cited literature. The following subpages will provide you with an overview of the implemented methodologies. For every submodule, there is a brief description of the method, as well as the required inputs and outputs. To gain deeper insights into the calculation routines, you're encouraged to take a look at the source code and the cited literature.
The following submodules are available: The following submodules are available:
......
# Tutorials
@note The idea would be to explain here how developer can extend e.g. for a new strategies and/or new methods within the standard strategy.
E.g.
- @subpage tutorial_new_strategy
- @subpage tutorial_new_method_in_standard_strategy
\ No newline at end of file
# Tutorial standard strategy extension {#tutorial_new_method_in_standard_strategy}
@note The idea is to explain how the standard strategy can be extended by a new method
\ No newline at end of file
# Tutorial strategy extension {#tutorial_new_strategy}
Idea is to provide a step by step appraoch how to extend this module by another strategy
\ No newline at end of file
ecological_assessment/doc/img/class_diagram.png

441 KiB

This diff is collapsed.
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
id="Ebene_1"
data-name="Ebene 1"
width="118.98mm"
height="55.57mm"
viewBox="0 0 337.25 157.51"
version="1.1"
sodipodi:docname="engine-mount_modified2.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview78"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="4.2429398"
inkscape:cx="145.53589"
inkscape:cy="127.15241"
inkscape:window-width="1920"
inkscape:window-height="1121"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="g78" />
<defs
id="defs1">
<style
id="style1">
.cls-1 {
fill: none;
}
.cls-1, .cls-2, .cls-3, .cls-4, .cls-5 {
stroke: #000;
}
.cls-1, .cls-2, .cls-3, .cls-4, .cls-5, .cls-7 {
stroke-width: 0.75px;
}
.cls-2 {
fill: #d9d9d9;
}
.cls-3, .cls-4 {
fill: #787878;
}
.cls-3, .cls-4, .cls-7 {
stroke-miterlimit: 1;
}
.cls-4 {
stroke-dasharray: 1 3 10 3;
}
.cls-5 {
fill: #bdbdbd;
}
.cls-6 {
fill: #2c2a28;
}
.cls-7 {
stroke: #fff;
}
</style>
</defs>
<title
id="title1">engine-mounts</title>
<g
id="g78">
<path
class="cls-1"
d="m 146.18589,67.695085 -0.77047,-11.762142 c 0,0 -48.330078,-11.068261 -83.771869,-9.040896 -15.133109,0.855429 -51.019157,9.94765 -52.0994949,12.317187 -0.2093678,0.444823 -1.6749429,1.565434 -1.6749429,1.822063 0.6532277,4.901605 -1.6749429,50.906553 3.2912628,74.422283 v 0 c 0.108872,0.48759 28.140721,12.69548 28.819073,12.82379 7.629365,1.41145 66.930531,-0.83177 73.714041,-0.42971 24.27229,-7.85654 31.79731,-9.51984 31.79731,-9.51984 0,-26.49476 0.0715,-31.62754 0.69508,-70.632735 z"
id="path1"
sodipodi:nodetypes="cccccssccccc" />
<path
class="cls-2"
d="m 288.26189,19.24 c 0.47,7.21 8.31,-10.51 8.31,-10.51 0,0 -86.5,-13.3 -128.84,-6.83 -10.37,0.85 -29.53,2.32 -46.36,7.32 -21.3,6.26 -10.78,22.63 14.49,20.93 18.66,-1.26 144.12,-0.43 144.12,-0.43 0,0 7.81,-17.68 8.28,-10.48 z"
id="path2" />
<path
class="cls-5"
d="m 382.36625,368.91003 c 0,0 -85.75181,-0.88003 -103.83181,0.24997 -23.43,1.46 -25.3197,-9.35015 -25.3197,-9.35015 0,0 -1.05249,-1.68944 -31.86249,5.39056 -24,5.48 -66.31781,22.94359 -69.70781,34.11359 60.12819,-27.15248 124.13579,-5.12884 136.56282,-4.00901 z"
id="path53"
sodipodi:nodetypes="ccccccc"
transform="translate(-142.92,-339.32)" />
<g
id="g59">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.99947322px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.749964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="81.749542"
y="132.0347"
id="text1"><tspan
sodipodi:role="line"
id="tspan1"
style="stroke-width:0.749964px;font-size:10.99947322px"
x="81.749542"
y="132.0347">Nacelle</tspan></text>
</g>
<g
id="g64">
<path
class="cls-6"
d="M267.47,375.61h3.77a2.85,2.85,0,0,1,2,.63,2.21,2.21,0,0,1,.7,1.74,2.56,2.56,0,0,1-.7,1.92,2.69,2.69,0,0,1-2,.69c-1.1,0-2,0-2.6,0v3.62h-1.17Zm1.17,4H271a2,2,0,0,0,1.33-.38,1.57,1.57,0,0,0,.42-1.21,1.29,1.29,0,0,0-.42-1.06,2.14,2.14,0,0,0-1.33-.34h-2.31Z"
transform="translate(-142.92 -339.32)"
id="path60" />
<path
class="cls-6"
d="M277.92,384.43a6,6,0,0,1-1,1.89,1.7,1.7,0,0,1-1.29.44,1.38,1.38,0,0,1-.51-.06v-1a2,2,0,0,0,.6.1.74.74,0,0,0,.6-.3,4.42,4.42,0,0,0,.55-1.09v-.1h0L274.58,378h1.2l1.68,5.19h0l1.69-5.19h1.16Z"
transform="translate(-142.92 -339.32)"
id="path61" />
<path
class="cls-6"
d="M281.25,375.61h1.05v8.61h-1.05Z"
transform="translate(-142.92 -339.32)"
id="path62" />
<path
class="cls-6"
d="M284.34,383.48a4,4,0,0,1,0-4.8,2.66,2.66,0,0,1,2.1-.92,2.69,2.69,0,0,1,2.12.92,4,4,0,0,1,0,4.8,2.68,2.68,0,0,1-2.12.91A2.66,2.66,0,0,1,284.34,383.48Zm3.43-.65a3.37,3.37,0,0,0,0-3.5,1.66,1.66,0,0,0-2.65,0,3.37,3.37,0,0,0,0,3.5,1.68,1.68,0,0,0,2.65,0Z"
transform="translate(-142.92 -339.32)"
id="path63" />
<path
class="cls-6"
d="M290.56,378h1v.93l.24-.31a2.16,2.16,0,0,1,1.72-.81,2.12,2.12,0,0,1,1.59.57,2.14,2.14,0,0,1,.57,1.6v4.29h-1.06v-3.94a1.76,1.76,0,0,0-.32-1.19,1.3,1.3,0,0,0-1-.36,1.46,1.46,0,0,0-1.21.57,2.55,2.55,0,0,0-.44,1.56v3.36h-1.06Z"
transform="translate(-142.92 -339.32)"
id="path64" />
</g>
<g
id="g77">
<path
class="cls-6"
d="M344.07,359.87l-2.25-8.62h1.26l1.53,6.81c0,.12.05.22.07.33a1,1,0,0,1,0,.22h0a1.52,1.52,0,0,1,0-.24c0-.1,0-.21.07-.31l1.83-6.81h1.31l1.81,6.78a3,3,0,0,1,.07.32,1.52,1.52,0,0,1,0,.24h0a1.58,1.58,0,0,1,0-.23c0-.11,0-.22.07-.33l1.55-6.78h1.25l-2.25,8.62h-1.25l-1.87-6.66c0-.12-.06-.23-.09-.34a1.43,1.43,0,0,1,0-.23h0a1.52,1.52,0,0,1,0,.24c0,.11-.05.22-.08.33l-1.82,6.66h-1.26Z"
transform="translate(-142.92 -339.32)"
id="path65" />
<path
class="cls-6"
d="M353.75,351.25h1.08v1.2h-1.08Zm0,2.35h1.06v6.27h-1.06Z"
transform="translate(-142.92 -339.32)"
id="path66" />
<path
class="cls-6"
d="M356.39,353.6h1v.92l.23-.31a2.13,2.13,0,0,1,3.88,1.36v4.3h-1.06v-3.94a1.75,1.75,0,0,0-.32-1.19,1.27,1.27,0,0,0-1-.37,1.44,1.44,0,0,0-1.21.58,2.51,2.51,0,0,0-.44,1.56v3.36h-1.06Z"
transform="translate(-142.92 -339.32)"
id="path67" />
<path
class="cls-6"
d="M365.36,361.64a1.71,1.71,0,0,0,1.39-.57,2.58,2.58,0,0,0,.47-1.67v-.2h0a2.08,2.08,0,0,1-1.7.83,2.46,2.46,0,0,1-2-.94,4,4,0,0,1-.74-2.54,3.41,3.41,0,0,1,.73-2.28,2.39,2.39,0,0,1,1.92-.87,2.07,2.07,0,0,1,1.79,1l.08.11v-.9h1v5.8a3.4,3.4,0,0,1-.72,2.35,2.83,2.83,0,0,1-2.18.77,2.66,2.66,0,0,1-1.69-.5,2.08,2.08,0,0,1-.76-1.43H364a1.19,1.19,0,0,0,.45.78A1.46,1.46,0,0,0,365.36,361.64Zm.21-7.27a1.49,1.49,0,0,0-1.29.56,4,4,0,0,0,0,3.57,1.45,1.45,0,0,0,1.26.62,1.54,1.54,0,0,0,1.24-.57,2.34,2.34,0,0,0,.46-1.52,3.78,3.78,0,0,0-.42-2A1.4,1.4,0,0,0,365.57,354.37Z"
transform="translate(-142.92 -339.32)"
id="path68" />
<path
class="cls-6"
d="M372.5,351l-2.94,9.07h-.8l2.93-9.07Z"
transform="translate(-142.92 -339.32)"
id="path69" />
<path
class="cls-6"
d="M374.39,354.47v5.4h-1.06v-5.4h-.86v-.87h.86v-1.07a1.33,1.33,0,0,1,.41-1,1.9,1.9,0,0,1,1.23-.35l.47,0v1l-.42,0a.59.59,0,0,0-.47.2.83.83,0,0,0-.16.56v.76h1.05v.87Z"
transform="translate(-142.92 -339.32)"
id="path70" />
<path
class="cls-6"
d="M377.5,357.64a1.73,1.73,0,0,0,.3,1.14,1.28,1.28,0,0,0,1,.35,1.45,1.45,0,0,0,1.21-.59,2.56,2.56,0,0,0,.45-1.6V353.6h1.05v6.27h-1v-1a1.91,1.91,0,0,1-.24.32,2.09,2.09,0,0,1-1.68.81,1.9,1.9,0,0,1-2.14-2.14v-4.3h1.06Z"
transform="translate(-142.92 -339.32)"
id="path71" />
<path
class="cls-6"
d="M386.67,355.41a1.08,1.08,0,0,0-.42-.8,1.59,1.59,0,0,0-1-.29,1.83,1.83,0,0,0-1,.23.74.74,0,0,0-.34.67.57.57,0,0,0,.24.5,3.12,3.12,0,0,0,.95.34l1.09.26a2.81,2.81,0,0,1,1.31.61,1.47,1.47,0,0,1,.39,1.09,1.78,1.78,0,0,1-.67,1.47,2.75,2.75,0,0,1-1.81.55,3.1,3.1,0,0,1-2-.53,2.21,2.21,0,0,1-.72-1.65h1a1.35,1.35,0,0,0,.47,1,2,2,0,0,0,1.22.3,1.78,1.78,0,0,0,1.07-.27.9.9,0,0,0,.37-.79.56.56,0,0,0-.24-.49,2.84,2.84,0,0,0-1-.34l-1.09-.26a2.64,2.64,0,0,1-1.26-.59,1.43,1.43,0,0,1-.37-1.06,1.71,1.71,0,0,1,.63-1.4,2.54,2.54,0,0,1,1.7-.52,2.73,2.73,0,0,1,1.75.53,1.91,1.91,0,0,1,.68,1.47Z"
transform="translate(-142.92 -339.32)"
id="path72" />
<path
class="cls-6"
d="M391.64,360a2.64,2.64,0,0,1-2.09-.85,3.34,3.34,0,0,1-.77-2.33,3.69,3.69,0,0,1,.81-2.51,2.7,2.7,0,0,1,2.16-.94,2.46,2.46,0,0,1,2,.91,3.63,3.63,0,0,1,.76,2.41l0,.37h-4.57a2.7,2.7,0,0,0,.42,1.43,1.65,1.65,0,0,0,1.41.6,1.67,1.67,0,0,0,1.05-.34,1.37,1.37,0,0,0,.55-.87h1.05a2.7,2.7,0,0,1-.94,1.58A2.89,2.89,0,0,1,391.64,360Zm1.76-3.79a2.34,2.34,0,0,0-.44-1.36,1.49,1.49,0,0,0-1.25-.54,1.61,1.61,0,0,0-1.33.63,2.34,2.34,0,0,0-.47,1.27Z"
transform="translate(-142.92 -339.32)"
id="path73" />
<path
class="cls-6"
d="M395.78,351.25h1.05v8.62h-1.05Z"
transform="translate(-142.92 -339.32)"
id="path74" />
<path
class="cls-6"
d="M400.08,360a2.11,2.11,0,0,1-1.46-.49,1.73,1.73,0,0,1-.54-1.33,1.84,1.84,0,0,1,.5-1.35,2.53,2.53,0,0,1,1.48-.62l1.44-.18a1.61,1.61,0,0,0,.33-.06.48.48,0,0,0,.32-.21.7.7,0,0,0,.11-.4v0a.94.94,0,0,0-.38-.79,1.73,1.73,0,0,0-1.06-.28,1.59,1.59,0,0,0-1,.3,1.34,1.34,0,0,0-.44.9h-1a2.06,2.06,0,0,1,.72-1.55,2.93,2.93,0,0,1,1.87-.52,2.67,2.67,0,0,1,1.74.5,1.76,1.76,0,0,1,.6,1.44v3.45a.35.35,0,0,0,.09.25.38.38,0,0,0,.26.1h.14l.2,0v.76l-.33.1-.28,0a1.06,1.06,0,0,1-.87-.33,1.32,1.32,0,0,1-.25-.61,2.37,2.37,0,0,1-.27.28A2.8,2.8,0,0,1,400.08,360Zm2.18-2.66v-.68a2.15,2.15,0,0,1-.65.2l-1,.14a2.68,2.68,0,0,0-1.11.35.8.8,0,0,0-.35.68,1.06,1.06,0,0,0,.29.81,1.09,1.09,0,0,0,.81.28,2.24,2.24,0,0,0,1.41-.45,1.58,1.58,0,0,0,.52-.71,1.09,1.09,0,0,0,0-.24C402.25,357.65,402.26,357.52,402.26,357.38Z"
transform="translate(-142.92 -339.32)"
id="path75" />
<path
class="cls-6"
d="M407.39,361.64a1.71,1.71,0,0,0,1.39-.57,2.58,2.58,0,0,0,.47-1.67v-.2h0a2.08,2.08,0,0,1-1.7.83,2.46,2.46,0,0,1-2-.94,4,4,0,0,1-.74-2.54,3.41,3.41,0,0,1,.73-2.28,2.39,2.39,0,0,1,1.92-.87,2.07,2.07,0,0,1,1.79,1l.08.11v-.9h1v5.8a3.4,3.4,0,0,1-.72,2.35,2.83,2.83,0,0,1-2.18.77,2.66,2.66,0,0,1-1.69-.5,2.08,2.08,0,0,1-.76-1.43H406a1.19,1.19,0,0,0,.45.78A1.44,1.44,0,0,0,407.39,361.64Zm.21-7.27a1.49,1.49,0,0,0-1.29.56,4,4,0,0,0,0,3.57,1.45,1.45,0,0,0,1.26.62,1.51,1.51,0,0,0,1.23-.57,2.28,2.28,0,0,0,.47-1.52,3.78,3.78,0,0,0-.42-2A1.4,1.4,0,0,0,407.6,354.37Z"
transform="translate(-142.92 -339.32)"
id="path76" />
<path
class="cls-6"
d="M414.33,360a2.67,2.67,0,0,1-2.1-.85,3.38,3.38,0,0,1-.76-2.33,3.69,3.69,0,0,1,.81-2.51,2.68,2.68,0,0,1,2.16-.94,2.49,2.49,0,0,1,2,.91,3.68,3.68,0,0,1,.75,2.41v.37h-4.58a2.78,2.78,0,0,0,.43,1.43,1.65,1.65,0,0,0,1.41.6,1.67,1.67,0,0,0,1.05-.34,1.41,1.41,0,0,0,.55-.87h1a2.68,2.68,0,0,1-.93,1.58A2.91,2.91,0,0,1,414.33,360Zm1.75-3.79a2.34,2.34,0,0,0-.43-1.36,1.49,1.49,0,0,0-1.25-.54,1.6,1.6,0,0,0-1.33.63,2.42,2.42,0,0,0-.48,1.27Z"
transform="translate(-142.92 -339.32)"
id="path77" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.99962px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.749964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="168.89421"
y="75.285164"
id="text78"><tspan
sodipodi:role="line"
style="font-size:7.99962px;stroke-width:0.749964px"
x="168.89421"
y="75.285164"
id="tspan79">nacelle attachment: engine/nacelle start</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.99962px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.749964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="169.33449"
y="84.31498"
id="text78-6"><tspan
sodipodi:role="line"
id="tspan78-2"
style="font-size:7.99962px;stroke-width:0.749964px"
x="169.33449"
y="84.31498">wing attachment: LE</tspan><tspan
sodipodi:role="line"
style="font-size:7.99962px;stroke-width:0.749964px"
x="169.33449"
y="94.314507"
id="tspan79-2" /></text>
</g>
<polygon
class="cls-7"
points="88.65 42.14 81.58 48.57 84.89 48.57 84.89 70.42 92.02 70.42 92.02 48.57 95.61 48.57 88.65 42.14"
id="polygon77" />
<polygon
class="cls-7"
points="180.65 20.14 173.57 26.57 176.89 26.57 176.89 48.42 184.02 48.42 184.02 26.57 187.61 26.57 180.65 20.14"
id="polygon78" />
</g>
</svg>
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment