Skip to content
Snippets Groups Projects
Commit caae480f authored by Alfin Johny's avatar Alfin Johny
Browse files

Merge remote-tracking branch 'origin/develop' into documentation/gitlab-workflow

parents 2fecd8d7 97329059
No related tags found
1 merge request!9Documentation/gitlab workflow
Pipeline #1605958 waiting for manual action
Showing
with 4184 additions and 56 deletions
# Ignore generated Doxygen docs in modules folder
docs/documentation/**/
# Ignore the local docs of the AcXML
docs/aircraft-xml/
...@@ -15,70 +15,72 @@ ...@@ -15,70 +15,72 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
# === Configure pipeline === # === Configure pipeline ===
# This section defines the stages of the pipeline: build and deploy
stages: stages:
- build - build # The 'build' stage is where documents are copied to the PROJECT_DIR
- deploy - deploy # The 'deploy' stage generates and deploys the generated documentation.
# === Build the doxygen documentation === # === Clone the repositories / copy documentation to the PROJECT_DIR ===
doxygen: clone:
image: alpine:latest image: alpine:latest
stage: build stage: build # This job is part of the build stage
tags: tags:
- documentation - documentation # Label for the job to be picked up by appropriate runners
before_script: before_script:
# Install necessary packages, including git, doxygen, and other dependencies
- apk update && apk --no-cache add git doxygen graphviz ttf-freefont texmf-dist texmf-dist-latexextra texlive texlive-dvi - apk update && apk --no-cache add git doxygen graphviz ttf-freefont texmf-dist texmf-dist-latexextra texlive texlive-dvi
script: script:
# clone repos # clone repos
- git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@git.rwth-aachen.de/unicado/aircraft-design - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@git.rwth-aachen.de/unicado/aircraft-design
- cd aircraft-design - cd aircraft-design
- git clone --recurse-submodules https://gitlab-ci-token:${CI_JOB_TOKEN}@git.rwth-aachen.de/unicado/libraries libs/ - git clone --recurse-submodules https://gitlab-ci-token:${CI_JOB_TOKEN}@git.rwth-aachen.de/unicado/libraries libs/
# create aircraft design documentation # Change to the project directory (useful for multi-directory repositories)
- cd propulsion_design/doc/ && ( cat Doxyfile ; echo "OUTPUT_DIRECTORY = $CI_PROJECT_DIR/docs/documentation/" ) | doxygen -
- cd ../../wing_design/doc/ && ( cat Doxyfile ; echo "OUTPUT_DIRECTORY = $CI_PROJECT_DIR/docs/documentation/" ) | doxygen -
- cd ../../empennage_design/doc/ && ( cat Doxyfile ; echo "OUTPUT_DIRECTORY = $CI_PROJECT_DIR/docs/documentation/" ) | doxygen -
- cd ../../ecological_assessment/doc/ && ( cat Doxyfile ; echo "OUTPUT_DIRECTORY = $CI_PROJECT_DIR/docs/documentation/" ) | doxygen -
- cd ../../cost_estimation/doc/ && ( cat Doxyfile ; echo "OUTPUT_DIRECTORY = $CI_PROJECT_DIR/docs/documentation/" ) | doxygen -
- cd ../../fuselage_design/doc/ && ( cat Doxyfile ; echo "OUTPUT_DIRECTORY = $CI_PROJECT_DIR/docs/documentation/" ) | doxygen -
- cd ../../initial_sizing/doc/ && ( cat Doxyfile ; echo "OUTPUT_DIRECTORY = $CI_PROJECT_DIR/docs/documentation/" ) | doxygen -
- cd ../../landing_gear_design/doc/ && ( cat Doxyfile ; echo "OUTPUT_DIRECTORY = $CI_PROJECT_DIR/docs/documentation/" ) | doxygen -
- cd ../../systems_design/doc/ && ( cat Doxyfile ; echo "OUTPUT_DIRECTORY = $CI_PROJECT_DIR/docs/documentation/" ) | doxygen -
- cd ../../tank_design/doc/ && ( cat Doxyfile ; echo "OUTPUT_DIRECTORY = $CI_PROJECT_DIR/docs/documentation/" ) | doxygen -
# create libraries documentation
- cd ../../libs/aircraftGeometry2/doc/ && ( cat Doxyfile ; echo "OUTPUT_DIRECTORY = $CI_PROJECT_DIR/docs/documentation/" ) | doxygen -
- cd ../../engine/doc/ && ( cat Doxyfile ; echo "OUTPUT_DIRECTORY = $CI_PROJECT_DIR/docs/documentation/" ) | doxygen -
- cd $CI_PROJECT_DIR - cd $CI_PROJECT_DIR
- ls -la $CI_PROJECT_DIR
artifacts: artifacts:
# Save the generated documentation as artifacts so they can be accessed later in the pipeline
paths: paths:
- $CI_PROJECT_DIR/aircraft-design
- $CI_PROJECT_DIR/libraries
- $CI_PROJECT_DIR/docs/documentation - $CI_PROJECT_DIR/docs/documentation
rules: rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' # Run when the commit is on the default branch
when: on_success when: on_success # Only run if the previous jobs are successful
- if: '$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' - if: '$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' # Allow manual triggers on non-default branches
when: manual when: manual # Run only when triggered manually
- if: '$CI_PIPELINE_SOURCE == "trigger"' - if: '$CI_PIPELINE_SOURCE == "trigger"' # Triggered by another pipeline
when: on_success when: on_success # Run if the source pipeline was successful
# === Build and deploy the website === # === Build and deploy the website ===
pages: pages:
image: python:latest image: python:latest
stage: deploy stage: deploy # This job is part of the deploy stage
tags: tags:
- documentation - documentation # Label for the job to be picked up by appropriate runners
before_script: before_script:
# Install pipenv to manage Python dependencies
- apk update && apk --no-cache add graphviz
- pip install pipenv - pip install pipenv
- pipenv install - pipenv install # Install the dependencies from the Pipfile
- pipenv run pip install mkdoxy # Install the mkdoxy plugin if needed
- apt-get update
- apt-get install -y doxygen
- export DOXYGEN_BIN=/usr/bin/doxygen
- pipenv install --dev # Install all necessary dependencies
script: script:
- pipenv run mkdocs build --site-dir $CI_PROJECT_DIR/public # Build the MkDocs documentation site
- cp -r $CI_PROJECT_DIR/aircraft-design $CI_PROJECT_DIR/docs/documentation # Copy aircraft-design to the docs/documentation folder
- pipenv run mkdocs build --verbose --site-dir $CI_PROJECT_DIR/public
needs: needs:
- doxygen - clone # This job depends on the successful completion of the clone job
artifacts: artifacts:
# Save the generated static website files as artifacts
paths: paths:
- $CI_PROJECT_DIR/public - $CI_PROJECT_DIR/public
rules: rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' # Run when the commit is on the default branch
when: on_success when: on_success # Only run if the previous jobs are successful
- if: '$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' - if: '$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' # Allow manual triggers on non-default branches
when: manual when: manual # Run only when triggered manually
- if: '$CI_PIPELINE_SOURCE == "trigger"' - if: '$CI_PIPELINE_SOURCE == "trigger"' # Triggered by another pipeline
when: on_success when: on_success # Run if the source pipeline was successful
\ No newline at end of file
...@@ -9,6 +9,7 @@ mkdocs-material = "*" ...@@ -9,6 +9,7 @@ mkdocs-material = "*"
mkdocs-glightbox = "*" mkdocs-glightbox = "*"
[dev-packages] [dev-packages]
mkdocs = "*"
[requires] [requires]
python_version = "3.11" python_version = "3.11"
...@@ -7,7 +7,7 @@ We are using `mkdocs` as the static site generator to generate the website from ...@@ -7,7 +7,7 @@ We are using `mkdocs` as the static site generator to generate the website from
You can preview the website after cloning it. First you need to install `mkdocs` and the used theme by: You can preview the website after cloning it. First you need to install `mkdocs` and the used theme by:
```sh ```sh
pip install mkdocs mkdocs-material mkdocs-glightbox pip install mkdocs mkdocs-material mkdocs-glightbox mkdoxy
``` ```
Then you can change the directory to the repository and run Then you can change the directory to the repository and run
......
This diff is collapsed.
This diff is collapsed.
...@@ -2,4 +2,4 @@ ...@@ -2,4 +2,4 @@
You want to get in touch with us to clarify your questions or share your feedback about UNICADO? Awesome! Feel free to write us a mail, and we'll respond to your inquiry as soon as possible. You want to get in touch with us to clarify your questions or share your feedback about UNICADO? Awesome! Feel free to write us a mail, and we'll respond to your inquiry as soon as possible.
:email: **E-Mail:** [contact@unicado.io](mailto:contact@unicado.io) :email: **E-Mail:** [contacts@unicado.io](mailto:contacts@unicado.io)
...@@ -22,7 +22,7 @@ lift mach numbers. ...@@ -22,7 +22,7 @@ lift mach numbers.
|Module Version|Language|License|Documentation| |Module Version|Language|License|Documentation|
|:---:|:---:|:---:|---| |:---:|:---:|:---:|---|
|2.1.0|:simple-cplusplus: |GPLv3|[Link](aerodynamic_analysis/index.html)| |2.1.0|:simple-cplusplus: |GPLv3|-|
--- ---
...@@ -39,7 +39,7 @@ For the user, possible changes in the module run configuration can be made in th ...@@ -39,7 +39,7 @@ For the user, possible changes in the module run configuration can be made in th
|Module Version|Language|License|Documentation| |Module Version|Language|License|Documentation|
|:---:|:---:|:---:|---| |:---:|:---:|:---:|---|
|2.1.0|:simple-cplusplus: |GPLv3|[Link](mission_analysis/index.html)| |2.1.0|:simple-cplusplus: |GPLv3|-|
--- ---
...@@ -50,7 +50,18 @@ The `weight_and_balance_analysis` module calculates sub-masses and total masses ...@@ -50,7 +50,18 @@ The `weight_and_balance_analysis` module calculates sub-masses and total masses
|Module Version|Language|License|Documentation| |Module Version|Language|License|Documentation|
|:---:|:---:|:---:|---| |:---:|:---:|:---:|---|
|2.1.0|:simple-cplusplus: |GPLv3|[Link](weight_and_balance_analysis/index.html)| |2.1.0|:simple-python: |GPLv3|[Link](analysis/weight_and_balance_analysis/index.md)|
---
## Constraint analysis
![Icon](../assets/images/documentation/constraint_analysis.svg){.overview-img align=left}
The `constraint_analysis` module updates the performance criteria wing loading and thrust-to-weight-ratio based on the calculated aircraft data.
{.overview-item}
|Module Version|Language|License|Documentation|
|:---:|:---:|:---:|---|
|1.0.0|:simple-cplusplus: |GPLv3|-|
--- ---
...@@ -67,7 +78,7 @@ The parameters comprised in this XML file can have different attributes as e.g. ...@@ -67,7 +78,7 @@ The parameters comprised in this XML file can have different attributes as e.g.
|Module Version|Language|License|Documentation| |Module Version|Language|License|Documentation|
|:---:|:---:|:---:|---| |:---:|:---:|:---:|---|
|2.1.0|:simple-cplusplus: |GPLv3|[Link](ecological_assessment/index.html)| |2.1.0|:simple-cplusplus: |GPLv3|[Link](analysis/ecological_assessment/index.md)|
--- ---
...@@ -78,7 +89,7 @@ The module `calculatePerformance` is used to evaluate the mission performance of ...@@ -78,7 +89,7 @@ The module `calculatePerformance` is used to evaluate the mission performance of
|Module Version|Language|License|Documentation| |Module Version|Language|License|Documentation|
|:---:|:---:|:---:|---| |:---:|:---:|:---:|---|
|2.1.0|:simple-cplusplus:| GPLv3 |[Link](performance_assessment/index.html)| |2.1.0|:simple-cplusplus:| GPLv3 |-|
--- ---
...@@ -94,6 +105,6 @@ Direct costs include all expenses incurred in operating and financing the aircra ...@@ -94,6 +105,6 @@ Direct costs include all expenses incurred in operating and financing the aircra
|Module Version|Language|License|Documentation| |Module Version|Language|License|Documentation|
|:---:|:---:|:---:|---| |:---:|:---:|:---:|---|
|2.1.0|:simple-python: |GPLv3|[Link](cost_estimation/index.html)| |2.1.0|:simple-python: |GPLv3|[Link](analysis/cost_estimation/index.md)|
--- ---
# Getting started
This section will guide you through the necessary steps to get the _cost\_estimation_ module up and running. It contains information on tool requirements and design parameters.
- [Aircraft exchange file](#aircraft-exchange-file) - Get information on necessary parameters from the _acXML_.
- [Module configuration file](#module-configuration-file) - Dive into cost estimation specific parameters.
- [Additional requirements](#additional-requirements) - Is anything else necessary to get the module running?
- [Next steps](#next-steps) - How to proceed?
!!! note
It is assumed that you have the `UNICADO package` installed including the executables and UNICADO libraries.
Generally, we use two files to set or configure modules in UNICADO:
- The aircraft exchange file (or _acXML_) includes
- data related inputs (e.g., aircraft configuration, transport task) and
- data related outputs (e.g., annual direct operating costs).
- The module configuration file `cost_estimation_conf.xml` (also _configXML_) includes
- control settings (e.g., enable/disable generating plots) and
- program settings (e.g., fees, usage information).
In the following sections you will find more information on how to configure these files to suit your needs.
## Aircraft exchange file requirements {#aircraft-exchange-file}
Since the _cost\_estimation_ module is an assessment tool, it is assumed that a converged aircraft design and therefore all the necessary data are already available.
The following information is needed from the _acXML_:
1. Design specification
- Configuration information: Configuration type
- Transport task: Passenger definition, passenger class definition, and cargo definition
- Energy carrier(s)
2. Top level aircraft requirements (for design and study mission - if desired)
- Initial cruise mach number
- Initial cruise altitude
- Payload fractions (seat load factor, only required for study mission assessment)
3. Component design
- Fuselage: Number of required cabin crew, number of required flight crew
- Propulsion: Sea level static thrust per engine
4. Analysis
- Masses: Maximum takeoff mass (certified), takeoff mass (for design and study - if desired), operating mass empty, maximum payload mass
- Mission (for design and study mission - if desired)
- Stage length
- Flight time
5. Assessment (aka. payload range data)
- Range at maximum payload and fuel mass till maximum take off mass limit
- Range at full tanks and payload till maximum take off mass limit
- Range for no payload and full tanks (ferry range)
- Payload at full tanks and payload till maximum take off mass limit
## Module configuration file {#module-configuration-file}
The _configXML_ is structured into two blocks: the control and program settings.
The control settings are standardized in UNICADO and will not be described in detail here. But to get started, you have to change at least
- the `aircraft_exchange_file_name` and `aircraft_exchange_file_directory` to your respective settings,
- the `console_output` at least to `mode_1`, and
- the `plot_output` to false (or define `inkscape_path` and `gnuplot_path`).
!!! note
If the tool is executed via the workflow, those settings are set by the workflow settings.
The program settings are structured like this (descriptions can be found in the `cost_estimation_conf.xml`):
```plaintext
Program Settings
|- Configuration (ID="tube_and_wing")
| |- Fidelity name
| |- Method name
| |- Fidelity (ID="empirical")
| | |- Operating cost estimation tu berlin
| | | |- General direct operating costs parameter
| | | | | - Capital
| | | | | | - Depreciation period
| | | | | | - Price per operating empty mass
| | | | | | - Rate insurance
| | | | | | - Rate interest
| | | | | | - Residual value factor
| | | | | - Crew
| | | | | | - Salary variation
| | | | | - Flight cycles
| | | | | | - Block time per flight
| | | | | | - Daily night curfew time
| | | | | | - Potential annual operation time
| | | | | | - Annual lay days overhaul
| | | | | | - Annual lay days reserve
| | | | | | - Annual lay days maintenance
| | | | | - Handling
| | | | | | - Fees handling
| | | | | - Landing
| | | | | | - Fees landing
| | | | | - Air traffic control
| | | | | | - Air traffic control price factor design
| | | | | | - Air traffic control price factor study
| | | | | - Maintenance
| | | | | | - Airframe repair cost per flight
| | | | | | - Cost burden
| | | | | | - Rate labor
| | | | | - Related direct operating costs
| | | | | | - Revenue per freight km design
| | | | | | - Revenue per freight km study
| | | | | - Miscellaneous
| | | | | | - Rate inflation
| | | |- Fuel type (ID="kerosene")
| | | | | - Factor engine maintenance
| | | | | - Fuel price
| | | | | - Ratio operating empty mass
| | | |- Fuel type (ID="liquid_hydrogen")
| | | | | - Factor engine maintenance
| | | | | - Fuel price
| | | | | - Ratio operating empty mass
```
## Additional requirements {#additional-requirements}
The tool requires mission-dependent data. Please make sure that the `mission_data` folder, located in the directory of the aircraft exchange file, contains at least the `design_mission.xml` file (this should be the case if the design is valid). If data for an off-design analysis is available and you wish to calculate the associated costs, the `study_mission.xml` file must also be provided.
## Next steps {#next-steps}
The next step is to [run the _cost\_estimation_ module](run_your_first_cost_estimation.md).
\ No newline at end of file
# Introduction {#mainpage}
Welcome to the _cost\_estimation_ module in UNICADO – where we take your aircraft operating costs from “hmm… probably a lot?” to laser-accurate precision! This tool is like a financial :crystal_ball for your aircraft, crunching numbers on fuel, maintenance, crew costs, and just about (almost) every other expense you can imagine. Think of it as your budgeting co-pilot, always ready to calculate so you can focus on the skies instead of spreadsheets. With _cost\_estimation_, you stay in control, keep the accountants happy, and land at your bottom line without any turbulence. So buckle up, and let’s start calculating!
## Summary of features
Here’s a quick rundown of what the tool currently does, along with a sneak peek at what's planned:
Configuration | Energy carrier |Cost share | Status |
------------------|-----------------|-------------------------|:------------------------------------:|
Tube-and-wing |Kerosene |Direct operating cost |running :white_check_mark: |
Tube-and-wing |Kerosene |Indirect operating cost |under development :construction:|
Tube-and-wing |Liquid hydrogen |Direct operating cost |running :white_check_mark: |
Tube-and-wing |Liquid hydrogen |Indirect operating cost |under development :construction:|
Blended-wing-body |... |... |under development :construction:|
## A user's guide to cost calculation
The _cost\_estimation_ tool is your key to accurately calculating the operating costs of an aircraft. In this user documentation, you’ll find all the information you need to understand the tool, as well as the necessary inputs and configurations to run a cost analysis from the ground up.
The following sections will walk you through the cost estimation process in UNICADO:
- [Getting started](getting_started.md)
- [Run your first cost estimation](run_your_first_cost_estimation.md)
For a comprehensive understanding of the tool’s functionality, the documentation is structured into two distinct sections:
- A [method description](operating_cost_method.md) and
- a [software architecture](software_architecture.md)
section.
Ready to dive in? Let’s get started! :money_with_wings:
<!-- ## You are a Developer?
If you are familiar with these concepts and want to contribute - head over to the developers guide to get your own method running in UNICADO!
The following pages will help you understand the code structure:
- [Prerequisites](prerequisites.md)
- [Build the code](build-the-code.md)
- [Cost estimation module structure](wing-module-structure.md)
- [Available methods](available-methods.md)
- [Method template](method-template.md)
We appreciate it! -->
\ No newline at end of file
# Calculation method
The total operating costs of an aircraft are split into direct operating costs (DOC) and indirect operating costs (IOC).
$
TOC = DOC + IOC
$
!!! note
Unless explicitly stated, all values are in SI units and all costs in EUR.
## Direct operating costs (calculate_direct_operating_costs function)
The Direct Operating Costs (DOC) are directly influenced by the parameters and the aircraft's performance and are commonly used for aircraft evaluation. Therefore, a simplified method for DOC estimation, based on „From Aircraft Performance to Aircraft Assessment“ by J. Thorbeck <sup>[1]</sup>, is provided. The DOC are determined for one year and the entire depreciation period.
Two elements are required for the simplified DOC model: The route independent (fixed) costs $C_1$ and route dependent (variable) costs $C_2$:
$
DOC = C_1 + C_2
$
### Route independent costs (calculate_route_independent_costs function)
Route-independent costs include all cost components apart from the operation of the aircraft.
Hence, the route-independent costs are the sum of the capital costs and the crew costs:
$
C_1 = C_{CAP} + C_{crew}
$
Those are calculated both, for one year and for the depreciation period.
#### Capital costs (calculate_capital_costs function)
The capital costs can be assumed to be a linear function of the operating empty mass if the influence of the aircraft market is considered negligible:
$
C_{CAP} = P_{OE} \cdot m_{OE} \cdot (a+f_I)
$
In which
- $P_{OE}$ - price per kg operating empty mass
- $m_{OE}$ - operating empty mass
- $a$ - annuity factor in percent
- $f_I$ - insurance rate in percent
The annuity formula, which is based on a modified mortgage equation, addresses both yearly depreciation and interest:
$
a = f_{IR} \cdot \frac{1-f_{RV} \cdot \left(\frac{1}{1+f_{IR}}\right)^{t_{DEP}}}{1-\left(\frac{1}{1+f_{IR}}\right)^{t_{DEP}}}
$
In which
- $f_{IR}$ - interest rate in percent
- $f_{RV}$ - residual value factor in percent
- $t_{DEP}$ - depreciation period in years
The reason for the annuity method modification is to include the residual aircraft value at the end of the depreciation period into the capital costs, which is occasionally relevant. This assumes that an operator is purchasing an aircraft at a constant price per kilogram and spends the corresponding capital cost consistently per year throughout the depreciation period.
#### Crew costs (calculate_crew_costs function)
This method is based on the lecture "J Flugzeugbewertung" by A. Bardenhagen <sup>[2]</sup>.
The annual crew costs are assumed to be the sum of the flight and cabin crew costs:
$
C_{crew} = C_{FC} + C_{CC}
$
both of which are of different levels. There are different approaches here, which must be adapted to the respective cost structure of the airline:
- Some airlines (mainly low-cost carriers) employ and pay pilots and flight attendants on a time basis (block hours).
- Other airlines hire their personnel permanently and must pay them irrespective of the time they are deployed.
In the first case, the personnel costs belong to the variable in the second case to the fixed direct operating costs. Here, crew costs are assumed to be fixed (route independent) because an airline must provide enough crews to ensure flight operations over the entire service time and therefore are proportional to the payload. 50 passengers per flight attendant are assumed based on certification requirements. Crew costs are constant per year. To calculate the crew cost for several years, the expected salary increase should be considered by an escalation factor. Accordingly, past price levels can be extrapolated to the current level changed according to inflation, price, or salary increase.
Both cost shares are determined by the same variables:
- The flight/cabin crew complement (the number of crews per aircraft, dependent on the stage length): $n_{FCC}$/$n_{CCC}$,
- The number of flight/cabin crew members: $n_{FC}$/$n_{CC}$,
- The annual salary of a flight/cabin crew member (dependent on the stage length): $S_{FC}$/$S_{CC}$, and
- The escalation factor in percent: $f_{ESC}$.
<!-- NOTE: The values of these drivers depend on the stage length. Two modes are implemented. Mode 1 (salary_variation = False, default): To ensure that the values of the above-mentioned parameters are the same for the design mission and mission study, the stage length of the design mission is used to determine the values for the study mission as well. Mode 2 (salary_variation = True): The above-mentioned values are obtained for different stage lengths for the design mission and mission study. -->
That results in the following calculations:
$
C_{FC} = n_{FCC} \cdot n_{FC} \cdot S_{FC} \cdot f_{ESC}
$
$
C_{CC} = n_{CCC} \cdot n_{CC} \cdot S_{CC} \cdot f_{ESC}
$
The escalation factor
$
f_{ESC} = (1+r_{INF})^{y}
$
incorporates the inflation rate ($r_{INF}$), which encompasses both price and salary adjustments, and the number of years elapsed between the calculation year and the base year for salaries ($y$).
If the depreciation period is used as the time difference, resulting costs are related to the whole depreciation period, whereas a time difference of one year solely results in the costs for the base year.
The crew complements as well as the average annual salaries are dependent on the stage length:
- Regional: ranges less than 500 km
- Short haul: ranges between 500 km and 1000 km
- Medium haul: ranges between 1000 km and 4000 km
- Long haul: ranges between 4000 km and 6500 km
- Ultra-long haul: ranges above 6500 km
and can be taken from the following tables:
Segment | Crew complement | $S_{FC}$ in EUR/y | $S_{CC}$ in EUR/y |
----------------|:---------------:|:-----------------:|:-----------------:|
Regional | 5 | 70 000 | 30 000 |
Short haul | 5 | 120 000 | 30 000 |
Medium haul | 5 | 160 000 | 30 000 |
Long haul | 8 | 200 000 | 45 000 |
Ultra-long haul | 8 | 200 000 | 45 000 |
### Route dependent costs (calculate_route_dependent_costs function)
Route dependent costs $C_2$ include all cost components that are directly attributable to flight operations. These include
- fuel $C_F$,
- fees (handling $C_H$, landing $C_L$, air traffic control (ATC) $C_{ATC}$), and
- maintenance $C_{MRO}$.
Thus, the **annual** route dependent costs can be calculated by
$
C_2 = C_F + C_H + C_{LDG} + C_{ATC} + C_{MRO}
$
#### Flights per year
Knowing the number of annual flights is mandatory to calculate the above-mentioned cost shares.
A reliable approximation of the number of annual flights can be found using the following analytical basis:
- Potential flight hours per year: $365 \cdot 24 = 8760$
- Maintenance lay days per year (C-Check every 15 months for 4 days): $4 \cdot 12/15 = 3.2$
- Overhaul lay days per year (D-Check every 5 years for 4 weeks): $4 \cdot 7/5 = 5.6$
- Lay days for repairs, technical and operational reserve: $2.6$
- Lay hours per year: $(3.2+5.6+2.6) \cdot 24 = 273.6$
- Potential operation days per year: $365-(3.2+5.6+2.6) = 353.6$
- Daily night curfew hours: $7$
- Yearly night curfew hours: $354 \cdot 7 = 2475$
- Yearly operation time in hours: $OT = 8760-2475-273.6 = 6011.4$
Knowing the time for one flight $FT$ and the block time supplement $BT$ (turn around time) per flight, the number of flight cycles $FC$ can be calculated:
$
FC = \frac{OT}{(FT + BT)}
$
It is assumed that one flight cycle consists of an outbound flight, a turnaround time and a return flight. Consequently, the number of annual flights is calculated as follows:
$
n_{flights} = 2 \cdot FC
$
#### Fuel costs (calculate_fuel_costs function)
The fuel costs depend on the fuel price $P_F$, the trip fuel mass $m_{TF}$ (which can be obtained from the payload range diagram (PRD)), and the number of yearly flights $n_{flights}$:
$
C_F = P_{F} \cdot m_{TF} \cdot n_{flights}
$
#### Handling costs (calculate_handling_costs function)
Handling charges $F_H$ include charges for loading and unloading, use of terminals and passenger boarding bridges, security checks, and ground energy supply.
The annual handling fees are charged based on the payload mass $m_{PL}$ and the number of flights per year. The resulting handling costs are calculated as follows:
$
C_H = m_{PL} \cdot F_{H} \cdot n_{flights}
$
#### Landing costs (calcutale_landing_costs function)
The annual landing fees $F_{LDG}$ are charged based on the maximum (certified) takeoff mass $m_{TO}$ and number of flights per year. The resulting landing costs are calculated as follows:
$
C_{LDG} = m_{TO} \cdot F_L \cdot n_{flights}
$
#### Air traffic control costs (calculate_air_traffic_control_costs function)
The calculation of the ATC costs is based on the EUROCONTROL route charge formula <sup>[3]</sup>, more precisely the aircraft weight factor.
> "The weight factor (expressed to two decimals) is determined by dividing, by fifty (50), the certificated Maximum Take-Off Weight (MTOW) of the aircraft (in metric tonnes, to one decimal) and subsequently taking the square root of the result rounded to the second decimal [...]".
The ATC price factor $f_{ATC}$ considers the fact that the price scenarios are varying strongly for each continent (or even region):
- $f_{ATC} = 1.0$ for domestic europe
- $f_{ATC} = 0.7$ for transatlantic flights
- $f_{ATC} = 0.6$ for far east flights (only half of the landings at european airports)
The ATC costs are calculated as follows:
$
C_{ATC} = R \cdot f_{ATC} \cdot \sqrt{\frac{m_{TO}[\text t]}{50}} \cdot n_{flights}
$
with
- $R$ - range in km
- $m_{TO}$ - maximum takeoff mass (in tonnes)
#### Maintenance costs (calculate_maintenance_costs function)
Maintenance costs are categorized into three components:
- Flight cycle dependent cost: This component primarily accounts for structural fatigue and overhaul burdens.
- Flight hour dependent cost: This component primarily reflects wear and the associated line maintenance work.
- Calendar time dependent cost: This component represents a constant share, such as the rectification of corrosion during overhaul.
In the following, only the maintenance costs per flight cycle are considered. Following the JADC method, an approximation for those costs is given by the sum of three parts:
- Airframe material maintenance cost (repair and replacement): $C_{MRO,AF,MAT}$
- Airframe personnel maintenance cost (inspection and repair): $C_{MRO,AF,PER}$
- Engine total maintenance cost: $C_{MRO,ENG}$
In which
$
C_{MRO,AF,MAT} = m_{OE}[\text t] \cdot (0.2 \cdot t_{flight} + 13.7) + C_{MRO,AF,REP}
$
$
C_{MRO,AF,PER} = f_{LR} \cdot (1+C_B) \cdot \left[ (0.655 + 0.01 \cdot m_{OE}[\text t]) \cdot t_{flight} + 0.254 + 0.01 \cdot m_{OE}[\text t] \right]
$
$
C_{MRO,ENG} = n_{ENG} \cdot \left( 1.5 \cdot \frac{T_{0} [\text t]}{n_{ENG}} + 30.5 \cdot t_{flight} + 10.6 \cdot f_{MRO,ENG}\right)
$
with
- $C_{MRO,AF,REP}$ - airframe repair cost per flight
- $f_{LR}$ - labor rate in EUR/h
- $C_B$ - cost burden
- $n_{ENG}$ - number of engines
- $T_{0}$ - sea level static thrust per engine
- $f_{MRO,ENG}$ - engine maintenance factor
The airframe repair cost per flight $C_{MRO,AF,REP}$ equal 57.5 for kerosene-powered aircraft. For hydrogen-powered aircraft, this value is multiplied by the operating empty mass factor $f_{OEM} = 1.1$ to account for an approx. 10% higher operating empty mass.
The engine maintenance factor is considered $f_{ENG} = 1$ for kerosene-powered aircraft and $f_{ENG} = 0.7$ for hydrogen-powered aircraft.
Thus, the annual maintenance costs result in
$
C_{MRO} = (C_{MRO,AF,MAT} + C_{MRO,AF,PER} + C_{MRO,ENG}) \cdot n_{flights}
$
## Related direct operating costs
Absolute DOC are generally unsuitable as an assessment measure because aircraft size and technology strongly influence this figure. They are therefore expressed in differently related quantities, depending on the purpose of the evaluation:
- DOC/Range (Flight Kilometer): Flight Kilometer Costs (FKC)
- DOC/Seat Kilometer Offered (SKO): Seat Kilometer Costs (SKC)
- DOC/Seat Kilometer Offered Corrected: Corrected SKC to take account of any freight revenue
- DOC/Ton Kilometers Offered (TKO): Ton Kilometer Costs (TKC)
- DOC/Revenue Passenger Kilometer (RPK): Revenue Seat Kilometer Costs (RSKC)
These are described below.
### Flight kilometer costs (calculate_flight_kilometer_costs function)
The flight kilometer costs are very flexible and suitable for an extended consideration of changed route structures. This parameter allows the range potential of the aircraft to be assessed:
$
FKC = \frac{DOC}{R}.
$
### Seat kilometer costs (calculate_seat_kilometer_costs function)
The seat kilometer offered (SKO) (or available) is a measure of an aircraft's passenger carrying capacity or, in other words, its potential to generate revenue by providing available seats to passengers. They are calculated by multiplying the number of seats available $n_{seats}$ by the range:
$
SKO = n_{seats} \cdot R.
$
The seat kilometer costs allow the analysis of a change in seat capacity and thus the assessment of the passenger kilometer potential:
$
SKC = \frac{DOC}{SKO}
$
### Corrected seat kilometer costs (calculate_corrected_seat_kilometer_costs function)
!!! note
The calculation of this cost share is not implemented at the moment and set to `0` instead.
A method of freight equivalent passenger seats is applied.
Cargo revenue from residual cargo payload at maximum zero fuel mass ($m_{PL,max} - m_{PL}$) can be calculated using
$
I_{cargo} = I_{FR} \cdot (W_{PL,max} - W_{PAX})
$
with
- $I_{FR}$ - revenue per freight kilometer
- $W_{PL,max}$ - maximum payload weight
- $W_{PAX}$ - pax weight
The equivalent seat revenue can be derived using the following formula:
$
n_{PAX,cargo} = \frac{I_{cargo}}{I_{PAX}}
$
with $I_{PAX}$ as revenue per seat and flight (see following table).
Segment | $I_{PAX,multi-class}$ in EUR/SO | $I_{PAX,all-economy}$ in EUR/SO |
----------------|:-------------------------------:|:-------------------------------:|
Short haul | 400 | 250 |
Medium haul | 450 | 300 |
Long haul | 550 | 400 |
Ultra long haul | 700 | 550 |
Finally, the SKC correction can be determined as follows:
$
SKC_{cor} = SKC \cdot \frac{n_{PAX}}{n_{PAX} + n_{PAX,cargo}}
$
### Ton kilometer costs (calculate_ton_kilometer_costs function)
The ton kilometer costs (TKC) allow the analysis of a change in payload capacity and thus the assessment of the payload kilometer potential. The Ton Kilometers Offered (TKO) are the product of the payload and the range:
$
TKO = m_{PL} \cdot R
$
The Ton Kilometer Costs (TKC) are the DOC related to the TKO:
$
TKC = \frac{DOC}{TKO}
$
### Revenue seat kilometer costs (calculate_revenue_seat_kilometer_costs)
Revenue passenger kilometers (RPK) are a measure of how many kilometers the aircraft has carried paying passengers. It is often referred to as "traffic" as it represents the actual demand for air transport. The RPK are determined by multiplying the range by the number of paying passengers. The revenue passenger kilometers are calculated by multiplying the number of revenue passengers with the maximum number of seats and the seat load factor $f_{PL}$:
$
RPK = n_{PAX} \cdot f_{SL} \cdot R
$
The DOC per revenue passenger kilometer additionally take into account the overall performance of an airline. Note that revenue is strongly dependent on market situation and therefore varying.
$
RSKC = \frac{DOC}{RPK}
$
## Indirect operating costs (IOC)
tbd. :construction:
---
<sup>[1]</sup> J. Thorbeck, 2007. *From Aircraft Performance to Aircraft Assessment*. DLR.<br>
<sup>[2]</sup> A. Bardenhagen, 2017. *J Flugzeugbewertung*. Technische Universität Berlin.<br>
<sup>[3]</sup> EUROCONTROL Central Route Charge Office (CRCO), 2022. *Customer Guide to Charges*. URL: https://www.eurocontrol.int/sites/default/files/2022-11/eurocontrol-customer-guide-to-charges.pdf.
\ No newline at end of file
# Run your first cost estimation
Let's dive into the fun part and crunch some numbers! :moneybag:
## Tool single execution
The tool can be executed from the console directly if all paths are set. The following will happen:
- [Console output](#console-output)
- [Generation of reports and plots](#reporting)
- [Writing output to aircraft exchange file](#write-data-to-acxml)
Some of the above mentioned steps did not work? Check out the [troubleshooting](#troubleshooting) section for advices. Also, if you need some additional information on the underlying methodology, check out the page on the [cost estimation method](operating_cost_method.md).
So, feel free to open the terminal and run `cost_estimation.exe` to see what happens...
### Console output {#console-output}
Firstly, you see output in the console window. Let's go through it step by step...
```
2024-12-06 11:37:30,205 - PRINT - Cost estimation started...
2024-12-06 11:37:30,224 - PRINT - ----------------------------------------------------------
2024-12-06 11:37:30,224 - PRINT - Operating cost estimation results for design mission.
2024-12-06 11:37:30,224 - PRINT - ----------------------------------------------------------
2024-12-06 11:37:30,226 - PRINT - Capital costs: 5,852,515 €
2024-12-06 11:37:30,226 - PRINT - Crew costs (per year): 4,779,200 €
2024-12-06 11:37:30,227 - PRINT - ROUTE INDEPENDENT COSTS (per year): 10,631,715 €
2024-12-06 11:37:30,227 - PRINT - *
2024-12-06 11:37:30,319 - PRINT - Fuel costs (per year): 22,744,718 €
2024-12-06 11:37:30,322 - PRINT - Handling costs (per year): 3,119,900 €
2024-12-06 11:37:30,322 - PRINT - Landing costs (per year): 1,290,968 €
2024-12-06 11:37:30,348 - PRINT - Air traffic control costs (per year): 9,271,834 €
2024-12-06 11:37:30,351 - PRINT - Maintenance costs (per year): 8,038,461 €
2024-12-06 11:37:30,377 - PRINT - ROUTE DEPENDENT COSTS (per year): 44,465,883 €
2024-12-06 11:37:30,377 - PRINT - *
2024-12-06 11:37:30,420 - PRINT - DIRECT OPERATING COSTS (per year): 55,097,598 €
2024-12-06 11:37:30,420 - PRINT - ----------------------------------------------------------
2024-12-06 11:37:30,607 - WARNING - No calculation method for indirect operating costs (IOC) implemented. IOC set to 0.
```
To this point, the module started and calculated the operating costs for the design mission.
There is also a warning that the indirect operating cost method is not implemented yet.
```
2024-12-06 11:37:30,607 - WARNING - Warning: Operating cost estimation of study mission not possible due to missing data. No operating costs calculated.
2024-12-06 11:37:30,608 - PRINT - ----------------------------------------------------------
```
The tool continues to check if an off-design study exists and tries to calculate the respective costs. In this example, there is no off-design data available and thus, the direct operating costs cannot be determined for the study mission.
```
2024-12-06 11:37:30,641 - PRINT - Plots are generated and saved...
2024-12-06 11:37:38,187 - WARNING - Warning: "html_output" switch in module configuration file set to "False". No HTML report generated.
2024-12-06 11:37:38,188 - PRINT - Method-specific data are written to 'cost_estimation_results.xml'...
2024-12-06 11:37:38,192 - WARNING - Warning: "tex_output" switch in module configuration file set to "False". No TeX report file generated.
2024-12-06 11:37:38,192 - PRINT - Cost estimation finished.
```
Finally, you receive information about the reports and plots created (depending on your settings, see next section) and the tool is successfully completed.
### Reporting {#reporting}
In the following, a short overview is given on the generated reports:
- A `cost_estimation.log` file is written within the directory of the executable
- Depending on your settings, the following output is generated and saved in the `reporting` folder, located in the directory of the aircraft exchange file:
- an HTML report in the `report_html` folder (not implemented yet)
- a TeX report in the `report_tex` folder (not implemented yet)
- an XML file with additional output data in the `report_xml` folder
- plots in the `plots` folder
### Write data to the aircraft exchange file {#write-data-to-acxml}
!!! note
The _acXML_ is an exchange file - we agreed on that only data will be saved as output that is needed by another tool!
Results are saved in the aircraft exchange file at the `aircraft_exchange_file/assessment/cost_estimation/operating_cost` node. The following information is written to the _acXML_:
```
Direct operating cost
|- Flights per year (design mission)
|- Flights per year (study mission) - only if off-design analysis available
|- Route independent cost annual
|- Route dependent cost annual
|- Direct operating cost annual
```
When implemented, the indirect operating costs are going to be saved at `aircraft_exchange_file/assessment/cost_estimation/operating_cost/indirect_operating_cost`.
## Troubleshooting {#troubleshooting}
- The tool does not run properly? *Make sure you have all the paths set up correctly and the specified elements exist.*
# Software architecture
This site is currently under development. :construction:
<!--
## Module structure
'main.py' runs the following functions:
1. 'data_preprocessing' (from 'datapreprocessing.py')<sup>1</sup>
- 1.1
2. 'run_module' (from 'methodexecutionpackage' library)<sup>2</sup>
- 2.1
3. 'data_postprocessing' (from 'datapostprocessing.py')<sup>3</sup>
<sup>1</sup> data preprocessing runs: \
<sup>2</sup> \
<sup>3</sup> data_postprocessing runs: ...
...
### Routing layers
The tank design module has the following layer structure:
1. Aircraft configuration
- Implemented: 'tube_and_wing'
- Not yet implemented: 'blended_wing_body'
2. Calculation method fidelity
- Implemented: 'empirical'
3. Calculation method
- Implemented: 'tank_design_tu_berlin'
4. Energy carrier <sup>1</sup>
- Implemented: 'kerosene'
- Not yet implemented: 'liquid_hydrogen', 'hybrid'
<sup>1</sup> The used energy carrier is determined automatically in the 'read_energy_carrier_and_tank_configuration' function. -->
This diff is collapsed.
# Changelog {#changelog}
## v3.0.0
The *v3.0.0* release is a **major** release with many changes including the *modularization*.
### Changes
The following changes have been introduced:
- The software architecture has been completely refactored.
- Cost calculation methods have been integrated to be independent of cost modules.
### Bugfixes
During the development of this release the following bugs were found and fixed:
- SFCContThrustSL was used before calculated
docs/documentation/analysis/ecological_assessment/figures/lifeCyclePhases.png

130 B

# Introduction {#mainpage}
## Overview
The tool _ecological\_assessment_ is one of the last modules in the UNICADO toolchain, serving as an assessment module executed after the aircraft sizing loop. As its name suggests, it is made to evaluate the ecological performance of your aircraft design. By using this tool, you gain the opportunity to contribute to the development of environmentally friendly aircraft, playing a part in shaping a sustainable future for aviation. ✈️🌱🌎
The module enables you to assess various ecological factors, including aircraft emission masses and their broader environmental impacts. These impacts are analyzed, for example, in terms of their contributions to climate change and air quality, helping you understand the environmental footprint of your design in a comprehensive way.
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 following table provides information about the implemented methods:
Topic | Configuration | Energy carrier | Fidelity | Method |
---------------------------|---------------|------------------|-----------|-----------|
Emissions of flown mission | All | Kerosene or LH2 | Empirical | Unicado |
Life cycle emissions/energy| Tube and wing | Kerosene | Empirical | Schaefer |
Air quality index | All | Kerosene or LH2 | Empirical | Schaefer |
Climate impact | All | Kerosene or LH2 | Empirical | Dallara |
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.
## A User's Guide to Ecological Assessment
This user documentation will guide you through all necessary steps to understand the tool as well as the necessary inputs and configurations to determine the ecological impact of your aircraft design.
The following pages will guide you through the theory behind the calculations and the process of computing and analyzing the ecological impact within UNICADO:
- [Basic Concepts](basic-concepts.md)
- [Usage of the Ecological Assessment Tool](usage.md)
So let's get started! ✈️
## You are a Developer?
If you are familiar with the above mentioned concepts and want to contribute - head over to the developers guide to get your own method running in UNICADO!
The following pages will help you to get into coding:
- [Developer Guide](https://unicado.pages.rwth-aachen.de/unicado.gitlab.io/get-involved/developer-installation/)
- [Tool Structure of ecological_assessment ](software-architecture.md)
!!!note
The methods of this module will not be extended by the UNICADO team. We are currently working on an additional assessment module, which combines economical and ecological assessment (including noise). You are nevertheless encouraged to improve and extend this module until the new one is published. We appreciate your ideas and will merge the modules afterwards - so no work will be lost! 💪
%%% BOOKS %%%
%%% JOURNAL ARTICLES %%%
@article{Dal11,
author = {Dallara, E. S. and Kroo, I. M. and Waitz, I. A.},
title = {Metric for Comparing Lifetime Average Climate Impact of Aircraft},
journal = {IAAA Journal},
year = {2011},
volume = {49},
number = {8},
pages = {1600-1613}
}
@article{Kug05,
author = {Kugele, A. and Jelinek, F. and Gaffal, R.},
title = {Aircraft particulate matter estimation through all phases of flight},
journal = {Eurocontrol Experimental Centre, Br{\'e}tigny sur Orge, France},
year = {2005}
}
%%% CONFERENCE PAPERS %%%
@inproceedings{Koss22,
author = {Kossarev, Kristina and Scholz, Anna E. and Egerer, Patrick and Hornung, Mirko},
title = {Comparison of Environmental Life Cycle Impact Assessment Methods for Future Aircraft Designs},
booktitle = {AIAA AVIATION 2022 Forum},
year = {2022},
doi = {10.2514/6.2022-3659},
url = {https://arc.aiaa.org/doi/abs/10.2514/6.2022-3659},
eprint = {https://arc.aiaa.org/doi/pdf/10.2514/6.2022-3659}
}
%%% THESES %%%
@misc{Ste13,
author = {Steinbrunn, V.},
year = {2013},
title = {Bewertung von Flugzeugentw{"u}rfen hinsichtlich ihrer Klimawirkung},
howpublished = {Diplomarbeit, RWTH Aachen, Aachen, Germany}
}
@misc{Sch17,
author = {Schaefer, K.},
year = {2017},
title = {Conceptual Aircraft Design for Sustainability - Nachhaltigkeitsorientierter Flugzeugvorentwurf},
howpublished = {Dissertation, RWTH Aachen, Aachen, Germany}
}
%%% TECHNICAL REPORTS %%%
@techreport{Eye04,
author = {Eyers, C. J. and Norman, P. and Middel, J. and Plohr, M. and Michot, S. and Atkinson, K. and Christou, R. A.},
institution = {QinetiQ},
year = {2004},
title = {AERO2K Global Aviation Emissions Inventories for 2002 and 2025},
series = {QinetiQ Report},
note = {LIDO-Berichtsjahr=2005},
url = {https://elib.dlr.de/1328/},
keywords = {AERO2K Global Aviation Emissions Inventories}
}
@techreport{Nor03,
author = {Norman, P. D. and Lister, D. H. and Lecht, M. and Madden, P. and Park, K. and Penanhoat, O.},
institution = {QinetiQ},
year = {2003},
title = {Development of the technical basis for a New Emissions Parameter covering the whole AIRcraft operation: NEPAIR: Final Technical Report},
note = {Tech. Rep. NEPAIR/WP4/WPR/01 Report}
}
@techreport{Sch13,
author = {Schaefer, Martin and Bartosch, Sebastian},
institution = {DLR},
year = {2013},
month = {07},
title = {Overview on fuel flow correlation methods for the calculation of NOx, CO and HC emissions and their implementation into aircraft performance software}
}
@misc{Pet05,
author = {Petzhold, A.},
institution = {DLR, Institut f{"u}r Physik der Atmosph{"a}re},
year = {2005},
title = {Particle Emissions from Aviation: Microphysics, Chemistry, and Climate Impact},
howpublished = {Forschungsbericht 2006-02}
}
%%% OTHER %%%
@inproceedings{Mar05,
author = {Marek, Cecil and Smith, Timothy and Kundu, Krishna},
title = {Low emission hydrogen combustors for gas turbines using lean direct injection},
booktitle = {41st AIAA/ASME/SAE/ASEE joint propulsion conference \& exhibit},
pages = {3776},
year = {2005}
}
@inproceedings{Lam12,
author = {Lammering, Tim and Franz, Katharina and Risse, Kristof and Hoernschemeyer, Ralf and Stumpf, Eike},
title = {Aircraft cost model for preliminary design synthesis},
booktitle = {50th AIAA Aerospace Sciences Meeting including the New Horizons Forum and Aerospace Exposition},
pages = {686},
year = {2012}
}
\ No newline at end of file
# Software Architecture {#softwarearchitecture}
If you're interested in developing this module, reading this chapter could be helpful. It provides some insights into the software (folder) structure and shall help you to find a way around :flashlight:
As you have for sure carefully read our [developer guide](https://unicado.pages.rwth-aachen.de/unicado.gitlab.io/get-involved/developer-installation/), you already know everything about the modularized structure of the UNICADO and the top, intermediate and low level of its modules. So, here is how the *ecological_assessment* tool looks like:
- On the top level, nothing fancy happens. Within the *src* directory, you will find the `main_ecological_assessment.cpp` which executes the module and the `ecolocical_assessment.cpp`/`ecolocical_assessment.h`, where the class EcologicalAssessment, which is inherited from the class Module, is defined. Therefor, it will run the functions `initialize`, `run`, `update`, `report` and `save` of the strategy. The save function will save and close the aircraft XML file and close the configuration file. In the class definition, you the RuntimeIO pointer is
- The intermediate level is structured by the implemented strategies. This section is a short one: there is only one strategy implemented in the module. It is called **STANDARD** and provides access to all the submodules.
- On the low level, you'll find all in [basic concepts](basic-concepts.md) described methods. The folder structure is like the module structure. So the *standard_strategy* is subdivided into *emission_calculation* and *impact_calulation*. In the directory, there is the class StandardStrategy, which contains the definition of `initialize`, `run`, `update`, `report` and `save`. The class can be seen as the coordinator of the submodules: in `initialize` it reads from the configuration file, which submodules shall be executed and prepares the `ecological_assessment_results.xml`. In `run`, the submodule's `run` functions are executed. In `update`, the aircraft exchange file will be updated and `report` calls the both the plotting and report functions of all executed submodules and generates the overall module reports. In a last step, `save` will save the `ecological_assessment_results.xml`. The *standard_strategy* directory additionally contains teh definition of emissionsClass, which provides a collection all emissions calculated by the module. Within the folder *emission_calculation* there are directories for *mission_emissions* and *life_cycle_emissions* which contain the corresponding methods. In addition, the class ecoDatabase offers access to database data used for calculations. The directory *impact_calculation* contains all methods to determine the impact of the emissions.
All submodules have a class _IOData_, which contains all data from acXML and functions to read or write the data. Additionally, the class has a member _configuration_, which provides access to configuration file data. The `run` function of the submodules 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*).
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment