From 65025429344a29b698cb6ecc3637c946c4eb77f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CKatrinBistreck=E2=80=9D?= <“katrin.bistreck@tuhh.de”> Date: Fri, 7 Feb 2025 15:26:17 +0100 Subject: [PATCH 1/5] corrections of format and content --- .../ecological_assessment/basic-concepts.md | 117 +++++++++++------- .../ecological_assessment/changelog.md | 1 + .../software-architecture.md | 6 +- .../standard-strategy.md | 37 ------ .../analysis/ecological_assessment/usage.md | 28 ++++- 5 files changed, 98 insertions(+), 91 deletions(-) delete mode 100644 docs/documentation/analysis/ecological_assessment/standard-strategy.md diff --git a/docs/documentation/analysis/ecological_assessment/basic-concepts.md b/docs/documentation/analysis/ecological_assessment/basic-concepts.md index 5c78702..740d6f6 100644 --- a/docs/documentation/analysis/ecological_assessment/basic-concepts.md +++ b/docs/documentation/analysis/ecological_assessment/basic-concepts.md @@ -1,5 +1,5 @@ # Basic concepts {#basic-concepts} -This chapter provides some insight in the implemented calculation routines. The module is split into several submodules which are responsible to calculate parts of the ecological assessment. The following graph shows a rough overview of the module structure, with the end points standing for a submodule: +This chapter provides some insight in the implemented calculation routines. The module is split into several submodules which are responsible to calculate parts of the ecological assessment. The following graph shows a rough overview of the module structure, with every end point standing for a submodule: <pre class='mermaid'> graph TD; A[ecological_assessment/src]-->C[standard_strategy] @@ -18,9 +18,9 @@ The next sections will describe the submodules in detail, with information about The submodule _mission_emissions_ is the only part of _ecological\_assessment_ which can not be deactivated by the user, as its results are needed by all other submodules. It provides various options to calculate the emissions of kerosene or hydrogen-burning engines during a mission. Both the design and the study mission will be calculated (in the following, file names including *mission* will always mean *study_mission* and *design_mission*). ### General principles {#mission-emissions-generalprinciples} -Depending on the defined engine carrier, the emissions will be calculated for every mission step defined in the `mission.csv` file. Only pure kerosene or pure liquid hydrogen combustion is possible, other energy carriers or hybrid variants are not implemented and will lead to a program abortion! +Depending on the defined engine carrier, the emissions will be calculated for every mission step defined in the `mission.csv` file. Currently, only pure kerosene or pure liquid hydrogen combustion is supported, other energy carriers or hybrid variants are not implemented and will lead to a program abortion! -The needed engine thermodynamics during the landing and takeoff phase (LTO) according to ICAO definition are calculated by the engine library. If you're interested in seeing a comparison between the standard ICAO LTO cycle and your aircraft design, you need to switch on the `info` mode for console or log file output inside your configuration file to get those information. Following thrust settings in percent of take-off thrust are used for LTO: +The needed engine thermodynamics during the landing and takeoff phase (LTO) according to ICAO definition are calculated by the engine library. If you're interested to see a comparison between the standard ICAO LTO cycle and your aircraft design, you need to switch on the `info` mode for console or log file output inside your configuration file to get those information. Following thrust settings in percent of take-off thrust are used for LTO: Taxiing | Take-off | Climb | Approach | --------|----------|-------|----------| @@ -37,7 +37,7 @@ The emissions of CO2, H2O, SO2, SO4 and (in a low fidelity approach) soot are co $ m_{emission} = EI * m_{fuel}$, -with +where - $ m_{emission}$: emission mass $[kg]$ - $ EI $: emission index $[\frac{kg_{emission}}{kg_{fuel}}]$ @@ -70,7 +70,7 @@ Climb | 6.17 | Cruise | 3.14 | Approach| 2.4 | -Alternatively, you can choose to follow the method describes in \cite Koss22 and calculate the emission index in every mission step. For that, the emissions of kerosene-burning engines are calculated via the P3T3 method and a correction factor is used to derive the emissions due to hydrogen combustion. If the calculation of a correction factor fails, the first method is used as a fallback method. +Alternatively, you can choose to follow the method described in \cite Koss22 and calculate the emission index in every mission step. For that, the emissions of kerosene-burning engines are calculated via the P3T3 method and a correction factor is used to derive the emissions due to hydrogen combustion. If the calculation of a correction factor fails, the first method is used as a fallback method. @@ -112,18 +112,18 @@ In the `ecological_assessment_conf.xml`, next to the control settings block, you - duration_operation ``` -From `mission.xml`, the taxi time and range will be read : +From `mission.xml`, the taxi time and mission range will be read : ```xml - taxi_time_origin - taxi_time_destination - range ``` -Additionally, you need to provide the `mission.csv` file written by the UNICADO *mission_analysis* module and located in _aircraft\_exchange\_file\_directory/mission_data_. +Additionally, you need to provide the `mission.csv` file written by the UNICADO [mission analysis](../mission_analysis/index.md) module and located in _aircraft\_exchange\_file\_directory/mission_data_. -And last but not least, the engine library will be used, so you can check the documentation page of the library to get information about its input files. +And last but not least, the engine library will be used, so you can check the documentation page of the [engine library](../../libraries/index.md) to get information about its input files. ### Output data {#mission-emissions-output} -The central output of the mission submodule is the `ecological_assessment_results_file.xml` which you will find in the *aircraft\_exchange\_file\_directory/reporting/report_xml* directory. It contains all calculated emission masses. Additionally, there is a `...emissionspath.csv` file in the folder *aircraft_exchange_file_directory/mission_data/* including mission and engine data for every mission step. As described in [Module usage](#usage), an HTML report including plots with emission flows will be generated. +The central output of the mission submodule is the `ecological_assessment_results.xml` which you will find in the *aircraft\_exchange\_file\_directory/reporting/report_xml* directory. It contains all calculated emission masses. Additionally, there is a `...emissionspath.csv` file in the folder *aircraft_exchange_file_directory/mission_data/* including mission and engine data for every mission step. As described in [Module usage](#usage), an HTML report including plots with emission flows will be generated. ## LCA Schaefer {#lca-schaefer} @@ -131,7 +131,7 @@ The method is based on the dissertation by Katharina Schäfer (2011) \cite Sch17  -The method is only applicable for conventional tube and wing aircraft, powered by kerosene. This will be checked and the program skips the life cycle emission calculation in case you try to assess fancy unconventional aircraft designs :wink:. +The method is only applicable for conventional tube and wing aircraft, powered by kerosene. This will be checked and the program skips the life cycle emission calculation in case you try to assess fancy unconventional aircraft designs :wink: ### General principles {#lca-schaefer-generalprinciples} For all processes within the four phases, an inventory analysis is conducted. In a first step, all relevant inputs are collected, such as materials, fuel and energy demand. Next, the resulting emissions are determined. For background processes, data provided primarily by [GaBi Software](https://ghgprotocol.org/gabi-databases) is used, offering emission data for material extraction, fuel production, energy production, and more. With this data, emissions resulting of the determined resources are calculated as follows: @@ -142,7 +142,7 @@ $ Em_{fuel} = Em_{fuel}^* \cdot f + Em_{com}$ $ Em_{mat} = Em_{mat}^* \cdot m_{mat} $ -with +where - $ Em_{energy} $: Emissions due to energy production (both electric and heat energy) [kg] - $ Em_{fuel} $: Emissions due to fuel production and combustion [kg] @@ -155,7 +155,7 @@ with - $ f $: Fuel demand [kg] - $ m_{mat} $: Material demand [kg] -The emissions of CO2, H2O, NOx, CO, SO2, CH4, HC and soot are determined. For the testing phase during development, perfluorinated hydrocarbons (PFC), non methane volatile organic compounds (NMVOC) and nitrous oxide emissions (N2O) are additionally calculated. +The emissions of CO2, H2O, NOx, CO, SO2, CH4, HC and soot are determined. For the testing phase during development, perfluorinated hydrocarbons (PFC), non methane volatile organic compounds (NMVOC) and nitrous oxide emissions (N2O) are calculated in addition. If recycling is enabled, emissions in the end-of-life phase can be negative, as the emissions saved in the production phase due to recycling are accounted for here. @@ -166,25 +166,25 @@ Both electric and heat energy demand for engineering is determined by: $ E = E^* \cdot A \cdot \frac{t}{h} $ -with +where - $E$: (Electric and heat) energy $[MJ]$ -- $E^*$: Specific energy per area $[MJ/(m^2 \cdot a)]$ +- $E^*$: Specific energy per area $[\frac{MJ}{m^2 \cdot a}]$ - $A$: Gross floor area $[m^2]$ - $t$: Engineering hours $[h]$ - $h$: Hours per year $[h/a]$ Testing is split into wind tunnel test, structure tests, system tests, ground tests, engine tests and flight tests. -The wind tunnel tests (index: wt) only use energy E [JM], depending on the time spend in the wind tunnel t [s] and power demand P [MW]: +The wind tunnel tests (index: wt) only use energy $E$ [MJ], depending on the time spend in the wind tunnel $t$ [s] and power demand $P$ [MW]: $ E_{wt} = t_{wt} \cdot P_{wt}$. -For structure tests (index: struc), production and end of life (eol) of the test components are considered. As the emissions resulting from energy, material and fuel demand of those components are calculated within the according phases, the resources are not determined here - instead, the emissions are directly summed up from existing data. Additionally, there is some energy needed for carrying out the tests. The energy E [MJ] is calculated using a linear correlation for the needed hydraulic and pneumatic power, depending on the number of load cycles n [-] and the maximum take off mass MTOM [t]: +For structure tests (index: struc), production and end of life of the test components are considered. As the emissions resulting from energy, material and fuel demand of those components are calculated within the according phases, the resources are not determined here - instead, the emissions are directly summed up from existing data. Additionally, there is some energy needed for carrying out the tests. The energy $E$ [MJ] is calculated using a linear correlation for the needed hydraulic and pneumatic power, depending on the number of load cycles $n$ [-] and the maximum take off mass $MTOM$ [kg]: -$E_{struc} = n \cdot MTOM * 1.45 \frac{J}{kg}$ +$E_{struc} = n \cdot MTOM \cdot 1.45 \frac{MJ}{kg}$ -The system tests (index: sys) are divided into integration tests and iron bird tets. The needed energy E [MJ] is estimated using the maximum design power of the electric, pneumatic and hydraulic aircraft systems P [MW] and the testing time t [s]: +The system tests (index: sys) are divided into integration tests and iron bird tets. The needed energy $E$ [MJ] is estimated using the maximum design power of the electric, pneumatic and hydraulic aircraft systems $P$ [MW] and the testing time $t$ [s]: $E_{sys} = P \cdot t_{sys}$ @@ -194,7 +194,7 @@ $E_{gt} = P \cdot t_{gt}$ Additionally, emissions for taxi tests are considered. As they are calculated in the mission submodule anyway, the are summed up directly instead of calculating the resources here. It is assumed, that the total ground test time equals the flight test time, and the taxi test time is 5% of the total ground test time. -Engine tests are divided into rig tests (index: rig) and test on an flying test bed (index: ftb). For the fuel demand f [kg], the number of test engines n [-], their thrust specific fuel consumption TSFC [(kg/s)/kN] and thrust T [kN] both for cruise condition c, and maximum max as well as share of those values x [-] and total time t [s] are needed: +Engine tests are divided into rig tests (index: rig) and test on an flying test bed (index: ftb). For the fuel demand $f$ [kg], the number of test engines $n$ [-], their thrust specific fuel consumption $TSFC$ [(kg/s)/kN] and thrust $T$ [kN] both for cruise condition $c$, and maximum $max$ as well as share of those values $x$ [-] and total time $t$ [s] are needed: $ f_{rig} = n \cdot t_{rig} (\cdot (TSFC_{max} \cdot T_{max} \cdot x + TSFC_{c} \cdot T_{c} \cdot (1 - x))) $ @@ -220,13 +220,15 @@ The energy of labour is determined based on the actual working hours, the yearly $ labourCosts = 0.41 \cdot (recurringCosts - finalAssemblyCosts) $ +<div class="mathjax-render"> $ energy [MJ] = specificEnergy [MJ/a] \cdot \frac{labourCosts [\$]}{wage [\$/h] \cdot hoursPerYear [h/a]} $ +</div> -For the material demand m [kg] of one aircraft component (index: ac), the component weight W [kg], the material ration mr [-] and the scrap ratio sr [-] are needed: +For the material demand $m$ [kg] of one aircraft component (index: ac), the component weight $m_{comp}$ [kg], the material ration $mr$ [-] and the scrap ratio $sr$ [-] are needed: -$ m_{ac} = \frac{mr \cdot W}{1-sr} $ +$ m_{ac} = \frac{mr \cdot m_{comp}}{1-sr} $ -This is done for all components and all considered materials (aluminum, CFRP, steel, titanium, nickel) and summed up for a total value. Whereas the competent masses are read from the aircraft exchange file, all other values can be found hardcoded in the module database. Also part of the database are the values for recycling of primary scrap. The raw material demand (index: raw) per material (index: mat)and component is: +This is done for all components and all considered materials (aluminum, CFRP, steel, titanium, nickel) and summed up for a total value. Whereas the component masses are read from the aircraft exchange file, all other values can be found in the module database. Also part of the database are the values for recycling of primary scrap. The raw material demand (index: raw) per material (index: mat) per component is: $ m_{mat, raw} = m_{ac} \cdot (1- sr \cdot recoveryRate) $ @@ -234,45 +236,55 @@ Therefor, the whole raw material demand for a component is: $ m_{ac,raw} = \sum m_{mat, raw} $ -The energy demand for material processing does not consider the scrap ratio, as the values for specific energy demand are valid per aircraft component. The energy is calculated per material and summed up: +The energy demand for material processing does not consider the scrap ratio, as the values for specific energy demand $E^{*}_{mat}$ are valid per aircraft component. The energy demand is calculated per material and summed up: -$ E_{component} = \sum specificEnergyMaterial \cdot mr \cdot W $ +<div class="mathjax-render"> +$ E_{comp} = \sum E^{*}_{mat} \cdot mr \cdot m_{comp} $ +</div> -The fuel demand for transportation is based on a Airbus transportation network scenario which is hardcoded in the module. For every transportation/fuel type, the amount of fuel is calculated based on the components weight and transport distance: +The fuel demand for transportation is based on a Airbus transportation network scenario which is defined in source code of the module. For every transportation/fuel type, the amount of fuel $f$ [kg] is calculated based on the components weight $m_{comp}$ [t], the transport distance $d$ [km] and a fuel specific fuel consumption $f^*$ [kg/(km$\cdot$t)]: -$fuel [kg] = mass [t] \cdot distance [km] * fuelConsumption [kg/(km\cdot t)]$ +$f = m_{comp} \cdot d \cdot f^* $ For the final assembly, mainly personnel work and therefor electrical and heat energy is required. Again, the working hours are derived from costs: +<div class="mathjax-render"> $energy [MJ] = specificEnergy[MJ/a] \cdot \frac{finalAssemblyCosts [\$]}{wage [\$/h] \cdot hoursPerYear [h/a]} $ +</div> -The fuel for final flight tests are determined as the first flight tests: +The fuel for final flight tests (index: ft) are determined as the first flight tests: $f_{ft} = f_{mission} \cdot \frac{t_{ft}}{t_{mission}}$ #### Operation resources -During the operation phase, flight are performed and maintenance is necessary. The needed fuel for operation can be read from the mission calculation and is not calculates in this phase. Resources for maintenance are production resources for spare parts and labour energy (heat and electricity). For the spare parts, resourced determined in the production phase are used. It is assumed, that the ratio of the maintenance material costs of a certain component and the corresponding recurring costs of that component is equal to the ratio of resources of the spare parts and of manufacturing of the specific component. For labour energy, direct maintenance costs are used and the amount of operating years t considered: +During the operation phase, flights are performed and maintenance is necessary. The needed fuel for operation can be read from the mission calculation and is not calculates in this phase. Resources for maintenance are production resources for spare parts and labour energy (heat and electricity). For the spare parts, resources determined in the production phase are used. It is assumed, that the ratio of the maintenance material costs of a certain component and the corresponding recurring costs of that component is equal to the ratio of resources of the spare parts and of manufacturing of the specific component. For labour energy, direct maintenance costs are used and the amount of operating years t considered: -$energy [MJ] = specificEnergy[MJ/a] \cdot \frac{directMaintenanceCosts [\$]}{wage [\$/h] \cdot hoursPerYear [h/a]} \cdot t [yr]$ +$energy [MJ] = specificEnergy[MJ/a] \cdot \frac{directMaintenanceCosts [\$]}{wage [\$/h] \cdot hoursPerYear [h/a]} \cdot t [a]$ #### End of life resources In the end of life (EoL) phase, the transport to EoL-site, disassembly, dismantling and recycling/incineration/landfill are considered. -The transport to EoL-site is handled like a flight with a certain distance and the fuel demand f determined via the range R [NM] of this flight compared to the range of the known mission: +The transport to EoL-site is handled like a flight with a certain distance and the fuel demand $f$ [kg] is determined via the range $R$ [NM] of this flight compared to the range of the known mission: $f_{EoL} = f_{mission} \cdot \frac{R_{EoL}}{R_{mission}}$ -Resources for disassembly and dismantling are determined as for the final assembly, but no heat energy is required as the the process takes place outdoors. +Resources for disassembly and dismantling are determined as for the final assembly, but no heat energy is required as the the process typically takes place outdoors. -$energy [MJ] = specificEnergy[MJ/a] \cdot \frac{costs [\$]}{wage [\$/h] \cdot hoursPerYear [h/a]} \cdot t [yr]$ +$energy [MJ] = specificEnergy[MJ/a] \cdot \frac{costs [\$]}{wage [\$/h] \cdot hoursPerYear [h/a]} \cdot t [a]$ -The EoL scenario hardcoded in the module contains recycling, incineration and landfill rates for the aircraft components. The energy needed for all materials/components and all cases is summed up. With the ratios of incineration and landfill, the energy for all components and materials are calculated like this: +The EoL scenario defined in the module contains recycling, incineration and landfill rates for the aircraft components. The energy needed for all materials/components and all cases is summed up. With the ratios of incineration and landfill, the energy for all components and materials are calculated like this: -$ energy [MJ] = specificEnergy [MJ/kg] \cdot componentMass \cdot $ +$ E = E^*\cdot m_{comp} $ -For recycling, the energy rate ER is needed additionally: +where -$ energy [MJ] = \frac{1}{ER} \cdot specificEnergy [MJ/kg] \cdot componentMass \cdot $ +- $E$: Energy $[MJ]$ +- $E^*$: Specific energy $[MJ/kg]$ +- $m_{comp}$: Mass of component $[kg]$ + +For recycling, the energy rate $ER$ [-] is needed additionally: + +$ E = \frac{1}{ER} \cdot E^*\cdot m_{comp} $ ### Input data {#lca-schaefer-input} The calculation results depend on following user inputs the aircraft exchange file: @@ -497,7 +509,7 @@ $ AQI = 1/n \cdot \sum x_i/x_{i,max}$ where: - $ x_i $: emission mass [g] ( for CO, HC, NOx) or maximum concentration [mg/m^3] ( for soot) during the landing and takeoff cycle, -- $ x_{i,max}$: regulatory value defined by ICAO, the ratio of emission mass Dp [g] emitted during LTO and the rated thrust F00 [kN], +- $ x_{i,max}$: regulatory value defined by ICAO (the ratio of emission mass $Dp$ [g] emitted during LTO and the rated thrust $F00$ [kN]), - $ n $: number of emission species. ### Input data {#aqi-schaefer-input} @@ -518,10 +530,10 @@ From `ecological_assessment_results.xml` the emissions during LTO of the study m - study_mission - emissions - LTO_cycle - - HC - - CO - - NOx - - c_soot_LTO_max + - HC + - CO + - NOx + - c_soot_LTO_max ``` ### Output data {#aqi-schaefer-output} The submodule writes its calculation results into the HTML report located in *aircraft_exchange_file_directory/reporting/report_html*. @@ -532,7 +544,7 @@ The climate model calculates key climate impact metrics: Radiative Forcing (RF), The key metrics are: - **RF**: quantifies the change in energy flux in the Earth's atmosphere due to emissions, specifically related to greenhouse gases, aerosols, and other components like soot or water vapor. -- **AGWP**: measures the cumulative impact of an emission over a specific time horizon (typically 20, 100, or 500 years), comparing it to CO₂'s effect. +- **AGWP**: measures the cumulative RF of an emission over a specific time horizon (typically 20, 100, or 500 years). - **AGTP**: calculates the temperature change due to emissions at a given point in time, typically looking at how gases contribute to warming. - **ATR**: ATR evaluates the mean temperature change over time. @@ -547,12 +559,23 @@ Additionally aircraft induced cloudiness (AIC) is considered. A particular feature of the method is the usage of forcing factors, which are unitless parameters. These factors modify the radiative forcing for emissions at different altitudes by normalizing the RF values to a fleet wide average. The altitude is the only flight trajectory parameter considered, meaning the geographic location is not factored into the calculations. This altitude dependency recognizes that emissions at higher altitudes (such as those from aviation) have a different forcing impact compared to emissions at ground level, as atmospheric processes and the distribution of pollutants vary with height. -In the model, you can explore how the influence of time affects climate impact by adjusting the rate of devaluation for temperature response. A value of zero indicates that the temperature changes occurring after operations are given equal weight compared to changes during the operational period. Higher values of the rate, however, signify that postoperation impacts become progressively less important over time, with each subsequent year's temperature change being less significant than that of the previous year. +In the model, you can explore how the influence of time effects climate impact by adjusting the rate of devaluation for temperature response. A value of zero indicates that the temperature changes occurring after operations are given equal weight compared to changes during the operational period. Higher values of the rate, however, signify that postoperation impacts become progressively less important over time, with each subsequent year's temperature change being less significant than that of the previous year. ### General principles {#climate-model-generalprinciples} -The submodules is based on the emissions calculated by the mission submodule. The values are read and scaled to one year, to get the yearly emission mass E. +The submodules is based on the emissions calculated by the mission submodule. Following metrics are calculated, always for one kilogram of one emission species, for the annual amount of this emission and finally for all emission species together: + +<pre class='mermaid'> + graph LR; + A[Emissions]-->B[RF] + B-->C[Normalized RF] + C-->D[Temperature Change] + D-->E[Weighted Temperature Change] + E-->F[ATR] +</pre> + +In a first step, the emission masses are read and scaled to annual emissions. -To calculate the radiative forcing following formulas are used: +Afterwards, following formulas are used to calculate the radiative forcing: $ RF(t, h) = s_i(h) \cdot \int_{0}^{t} G_i(t-\tau)E_i(\tau)d\tau$ for $i \in [CO_2, O_{3L}, CH_4]$ @@ -560,7 +583,7 @@ $ RF(t, h) = s_i(h) \cdot \left(\frac{RF_{ref}}{E_{ref}}\right)\cdot E_i(t)$ fo $ RF_{AIC}(t, h) = s_{AIC}(h) \cdot \left(\frac{RF_{ref}}{L_{ref}}\right)_{AIC}\cdot L(t)$ -with +where - $RF$: radiative forcing [W/m^2] - $s_i$: forcing factor [-] @@ -606,7 +629,7 @@ with the weighting function: $ </div> -with +where - $t$: current year - $t_{max}$: considered time frame diff --git a/docs/documentation/analysis/ecological_assessment/changelog.md b/docs/documentation/analysis/ecological_assessment/changelog.md index ab0e5a4..4967d86 100644 --- a/docs/documentation/analysis/ecological_assessment/changelog.md +++ b/docs/documentation/analysis/ecological_assessment/changelog.md @@ -5,6 +5,7 @@ The *v3.0.0* release is a **major** release with many changes including the *mod ### 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. diff --git a/docs/documentation/analysis/ecological_assessment/software-architecture.md b/docs/documentation/analysis/ecological_assessment/software-architecture.md index 03fcde2..2eca7fb 100644 --- a/docs/documentation/analysis/ecological_assessment/software-architecture.md +++ b/docs/documentation/analysis/ecological_assessment/software-architecture.md @@ -4,11 +4,11 @@ If you're interested in developing this module, reading this chapter could be he 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 +- 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. -- 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. +- 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. It will be set according to the method defined in the `strategy_selector` node of the configuration file. -- 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. +- 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 the 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 diff --git a/docs/documentation/analysis/ecological_assessment/standard-strategy.md b/docs/documentation/analysis/ecological_assessment/standard-strategy.md deleted file mode 100644 index 29e04c9..0000000 --- a/docs/documentation/analysis/ecological_assessment/standard-strategy.md +++ /dev/null @@ -1,37 +0,0 @@ - -# Standard Strategy {#standard-strategy} -## Overview -This page provides an overview of the structure and functionalities of the standard strategy. -The architecture is (based on the parts of a Life Cycle Assessment (LCA)) structured into various submodules (see @subpage submodules). The methods of the submodules are located in subfolders called "emissionCalculation" or "impactCalculation," respectively. -- 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. - -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. In the following, information about the coordination of the module subparts and their behavior is provided. - -The corresponding class `StandardStrategy`, derived from the class `Strategy`, coordinates all calculations based on the methods chosen by the user. It 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 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 submodules are available: -- @subpage mission-emissions -- @subpage lca-schaefer -- @subpage aqi-schaefer -- @subpage climate-model-dallara \ No newline at end of file diff --git a/docs/documentation/analysis/ecological_assessment/usage.md b/docs/documentation/analysis/ecological_assessment/usage.md index 5f34185..6ddeb1c 100644 --- a/docs/documentation/analysis/ecological_assessment/usage.md +++ b/docs/documentation/analysis/ecological_assessment/usage.md @@ -3,7 +3,7 @@ You have carefully read the [basic-concepts](basic-concepts.md) and feel ready t ## Prerequisites 1. It is assumed that you have the `UNICADO Package` installed, including the executables and UNICADO libraries. If you are a developer, you need to build the tool first (see [build instructions on the UNICADO website](https://unicado.pages.rwth-aachen.de/unicado.gitlab.io/developer/build/cpp/)). -2. Fill out the configuration file `ecological_assessment_config.xml`. +2. Fill out the configuration file `ecological_assessment_conf.xml`. - change at least in `control_settings`: - `aircraft_exchange_file_name` and `aircraft_exchange_file_directory` to your respective settings - set `console_output` at least to `mode_1` @@ -17,7 +17,7 @@ You have carefully read the [basic-concepts](basic-concepts.md) and feel ready t project environment ├── ecological_assessment/ │ ├── ecological_assessment.exe - │ └── ecological_assessment_config.xml + │ └── ecological_assessment_conf.xml ├── projects/ │ └── CSMR/ │ └──CSMR-2020 @@ -30,7 +30,26 @@ You have carefully read the [basic-concepts](basic-concepts.md) and feel ready t If you used the UNICADO installer, you will automatically have this environment in your UNICADOworkflow directory. But make sure, that the aircraft exchange file includes all nodes defined in the input data sections of the submodule you would like to execute (remember: you'll find the information [here](basic-concepts.md)). If the tool is executed via the workflow, all data will be available anyway. ## Tool execution -If you have prepared everything, you can open a terminal and run *ecological_assessment.exe*. You will see output in the console window. If you chose `mode_1` for console output, you'll only be informed about the ongoing calculation step. For more information, choose a higher mode. At `mode_1`, you will get following output: +If you have prepared everything, you can open a terminal and run *ecological_assessment.exe*. + +=== "cmd" + + ``` { .sh .copy } + ecological_assessment.exe + ``` + +=== "powershell" + + ``` { .sh .copy } + ecological_assessment.exe + ``` +=== "git bash" + + ``` { .sh .copy } + ./ecological_assessment.exe + ``` + +You will see output in the console window. If you chose `mode_1` for console output, you'll only be informed about the ongoing calculation step. For more information, choose a higher mode. At `mode_1`, you will get following output: ```xml ******************************************************************************* 27.01.2025 14:33:32 - Start ecological_assessment @@ -112,12 +131,13 @@ After successful calculation, the aircraft exchange file will be updated, plots 27.01.2025 14:34:25 - CSS code written to style.css successfully. 27.01.2025 14:34:25 - Finish ecological_assessment ``` -You will find a `.log` file within the directory of the executable and an HTML report in the directory of `aircraft_exchange_file_directory/reporting/reportHTML`. Depending on your chosen methods, results are saved in +You will find a `.log` file within the directory of the executable and an HTML report in the directory of `aircraft_exchange_file_directory/reporting/reportHTML`. Depending on your chosen methods, additional results are saved in - `/aircraft_exchange_file/assessment/average_temperature_response` - and/or in the files you'll find in the `aircraft_exchange_file_directory/reporting/plots/` directory - and/or in the files you'll find in the `aircraft_exchange_file_directory/reporting/plots/csv_files` directory. +Check the Output data sections of [basic concepts](basic-concepts.md) to see, which outputs you can expect. Be aware of the files' timestamp as there could be leftovers of earlier program executions! ## Changing user input -- GitLab From 8a0e1319fd1ef560a68055511d62f1f60f82a749 Mon Sep 17 00:00:00 2001 From: kbistreck <katrin-bistreck@gmx.de> Date: Mon, 10 Feb 2025 11:54:59 +0100 Subject: [PATCH 2/5] renames html directory --- docs/documentation/analysis/ecological_assessment/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/documentation/analysis/ecological_assessment/usage.md b/docs/documentation/analysis/ecological_assessment/usage.md index 6ddeb1c..605c1e3 100644 --- a/docs/documentation/analysis/ecological_assessment/usage.md +++ b/docs/documentation/analysis/ecological_assessment/usage.md @@ -131,7 +131,7 @@ After successful calculation, the aircraft exchange file will be updated, plots 27.01.2025 14:34:25 - CSS code written to style.css successfully. 27.01.2025 14:34:25 - Finish ecological_assessment ``` -You will find a `.log` file within the directory of the executable and an HTML report in the directory of `aircraft_exchange_file_directory/reporting/reportHTML`. Depending on your chosen methods, additional results are saved in +You will find a `.log` file within the directory of the executable and an HTML report in the directory of `aircraft_exchange_file_directory/reporting/report_html`. Depending on your chosen methods, additional results are saved in - `/aircraft_exchange_file/assessment/average_temperature_response` - and/or in the files you'll find in the `aircraft_exchange_file_directory/reporting/plots/` directory -- GitLab From 7e77d473a276080754ed55a3691fb46de31a74ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CKatrinBistreck=E2=80=9D?= <“katrin.bistreck@tuhh.de”> Date: Tue, 11 Feb 2025 00:16:05 +0100 Subject: [PATCH 3/5] changes input parameters --- .../ecological_assessment/basic-concepts.md | 640 ++++++++++-------- 1 file changed, 349 insertions(+), 291 deletions(-) diff --git a/docs/documentation/analysis/ecological_assessment/basic-concepts.md b/docs/documentation/analysis/ecological_assessment/basic-concepts.md index 740d6f6..47ecb5b 100644 --- a/docs/documentation/analysis/ecological_assessment/basic-concepts.md +++ b/docs/documentation/analysis/ecological_assessment/basic-concepts.md @@ -78,45 +78,88 @@ Alternatively, you can choose to follow the method described in \cite Koss22 and ### Input data {#mission-emissions-input} For the mission emission calculation (including used libraries), the following parameters are needed in the `aircraft_exchange_file`: -```xml -- requirements_and_specifications - - general - - type - - model - - design_specification - - configuration - - configuration_type - - aerodynamic_technologies - - energy_carriers - - energy_carrier (ID="0") - - type - - assessment_scenario - - flights_per_year +``` +├── requirements_and_specifications/ +│ ├── general/ +│ │ ├── type +│ │ └── model +│ ├── mission_files/ +│ │ ├── design_mission_file +│ │ └── study_mission_file +│ ├── design_specification/ +│ │ ├── configuration/ +│ │ │ ├── configuration_type +│ │ │ └── aerodynamic_technologies +│ │ ├── energy_carriers/ +│ │ | └── energy_carrier (ID="0")/ +│ │ | └── type +│ | └── transport_task/ +│ | ├── cargo_definition/ +│ | | └── additional_cargo_mass +│ | └── passenger_definition/ +│ | ├── total_number_passengers +│ | ├── mass_per_passenger +│ | └── luggage_mass_per_passenger +│ ├── requirements/ +│ │ └── top_level_aircraft_requirements/ +│ │ ├── study_mission/ +│ │ │ └── delta_ISA +│ │ └── design_mission/ +| | ├── delta_ISA +│ │ └── payload_fractions/ +│ │ ├── cargo_fraction +│ │ └── passenger_mass_fraction +│ └── assessment_scenario/ +│ └── duration_operation +├── analysis/ +│ └── mission/ +│ ├── design_mission/ +│ │ └── cruise/ +│ │ └── cruise_step@{i}/ +│ │ └── cruise_steps/ +│ │ ├── relative_end_of_cruise_step +│ │ └── altitude +│ └── study_mission/ +│ └── cruise/ +│ └── cruise_step@{i}/ +│ └── cruise_steps/ +│ ├── relative_end_of_cruise_step +│ └── altitude +├── component_design/ +│ └── propulsion/ +│ └── specific/ +│ └── propulsion (ID="0")/ +│ └── engine/ +│ ├── scale_factor +│ └── model +└── assessment/ + └── cost_estimation/ + └── operating_cost/ + └── direct_operating_cost/ + └── flights_per_year_study_mission ``` In the `ecological_assessment_conf.xml`, next to the control settings block, you can set the emission calculation methods, relative humidity of the air and the duration of aircraft operation within the program settings: -```xml -- strategy_selector - - standard_strategy - - emission_calculation - - mission_emissions - - emission_methods - - kerosene - - HC_method_selector - - CO_method_selector - - NOx_method_selector - - soot_method_selector - - hydrogen_combustion - - NOx_method_selector - - relative_humidity - - duration_operation +``` +standard_strategy/ +└── emission_calculation/ + ├── mission_emissions/ + │ └── emission_methods/ + │ ├── kerosene/ + │ │ ├── HC_method_selector + │ │ ├── CO_method_selector + │ │ ├── NOx_method_selector + │ │ └── soot_method_selector + │ └── hydrogen_combustion/ + │ └── NOx_method_selector + └── relative_humidity ``` From `mission.xml`, the taxi time and mission range will be read : -```xml -- taxi_time_origin -- taxi_time_destination -- range +``` +├── taxi_time_origin +├── taxi_time_destination +├── range ``` Additionally, you need to provide the `mission.csv` file written by the UNICADO [mission analysis](../mission_analysis/index.md) module and located in _aircraft\_exchange\_file\_directory/mission_data_. @@ -288,212 +331,227 @@ $ E = \frac{1}{ER} \cdot E^*\cdot m_{comp} $ ### Input data {#lca-schaefer-input} The calculation results depend on following user inputs the aircraft exchange file: -```xml -- requirements_and_specifications - - general - - type - - model - - design_specification - - transport_task - - passenger_definition - - total_number_passengers - - requirements - - top_level_aircraft_requirements - - flight_envelope - - maximum_operating_velocity - - study_mission - - range - - payload_fractions - - passenger_mass_fraction - - assessment_scenario - - flights_per_year - - duration_operation - - mission_files - - design_mission_file +``` +requirements_and_specifications/ +├── general/ +│ ├── type +│ └── model +├── design_specification/ +│ └── transport_task/ +│ └── passenger_definition/ +│ └── total_number_passengers +├── requirements/ +│ └── top_level_aircraft_requirements/ +│ ├── flight_envelope/ +│ │ └── maximum_operating_velocity +│ └── study_mission/ +│ ├── range +│ └── payload_fractions/ +│ └── passenger_mass_fraction +├── assessment_scenario/ +│ └── duration_operation +└── mission_files/ + └── design_mission_file ``` Additionally, results from other Unicado tools are needed: -```xml -- component_design - - propulsion - - specific - - propulsion (ID="0") - - engine - - scale_factor - - model - - bucket_point - - thrust - - tsfc - - mass_properties - - mass - - nacelle (ID="0") - - mass_properties - - mass - - pylon (ID="0") - - mass_properties - - mass - - mass_properties - - mass - - systems - - specific - - maximium_power_demand - - geometry - - mass_properties - - bleed_air_system - - fuel_system - - mass_properties - - mass - - wing - - mass_properties - - mass - - fuselage - - mass_properties - - mass - - landing_gear - - mass_properties - - mass - - empennage - - specific - - geometry - - aerodynamic_surface (ID="0") - - name - - mass_properties - - mass - - aerodynamic_surface (ID="1") - - name - - mass_properties - - mass -- analysis - - aerodynamics - - reference_values - - S_ref - - masses_cg_inertia - - maximum_takeoff_mass - - mass_properties - - mass - - operating_mass_empty - - mass_properties - - mass - - manufacturer_mass_empty - - mass_properties - - mass - - mission - - design_mission - - range - - block_time - - flight_time - - taxi_energy (ID="0") - - taxi_out_energy (ID="0") - - consumed_energy - - study_mission - - flight_time - - taxi_energy (ID="0") - - taxi_out_energy (ID="0") - - consumed_energy - - in_flight_energy - - trip_energy (ID="0") - - consumed_energy +``` +├──component_design/ +│ ├── propulsion/ +│ │ ├── specific/ +│ │ ├── propulsion (ID="0")/ +│ │ │ ├── engine/ +│ │ │ │ ├── scale_factor +│ │ │ │ ├── model +│ │ │ │ ├── bucket_point/ +│ │ │ │ │ ├── thrust +│ │ │ │ │ └── tsfc +│ │ │ │ └── mass_properties/ +│ │ │ │ └── mass +│ │ │ ├── nacelle (ID="0")/ +│ │ │ │ └── mass_properties/ +│ │ │ │ └── mass +│ │ │ └── pylon (ID="0")/ +│ │ │ └── mass_properties/ +│ │ │ └── mass +│ │ └── mass_properties/ +│ │ └── mass +│ ├── systems/ +│ │ └── specific/ +│ │ ├── maximium_power_demand +│ │ ├── geometry/ +│ │ │ └── mass_properties/ +│ │ │ ├── bleed_air_system +│ │ │ └── fuel_system +│ │ └── mass_properties/ +│ │ └── mass +│ ├── wing/ +│ │ └── mass_properties/ +│ │ └── mass +│ ├── fuselage/ +│ │ └── mass_properties/ +│ │ └── mass +│ ├── landing_gear/ +│ │ └── mass_properties/ +│ │ └── mass +│ └── empennage/ +│ └── specific/ +│ └── geometry/ +│ ├── aerodynamic_surface (ID="0")/ +│ │ ├── name +│ │ └── mass_properties/ +│ │ └── mass +│ └── aerodynamic_surface (ID="1")/ +│ ├── name +│ └── mass_properties/ +│ └── mass +├── analysis/ +│ ├── aerodynamics/ +│ │ └── reference_values/ +│ │ └── S_ref +│ ├── masses_cg_inertia/ +│ │ ├── maximum_takeoff_mass/ +│ │ │ └── mass_properties/ +│ │ │ └── mass +│ │ ├── operating_mass_empty/ +│ │ │ └── mass_properties/ +│ │ │ └── mass +│ │ └── manufacturer_mass_empty/ +│ │ └── mass_properties/ +│ │ └── mass +│ └── mission/ +│ ├── design_mission/ +│ │ ├── range +│ │ ├── block_time +│ │ ├── flight_time +│ │ ├── trip_energy +│ │ │ └── consumed_energy +│ │ ├── takeoff_energy +│ │ │ └── consumed_energy +│ │ ├── landing_energy +│ │ │ └── consumed_energy +│ │ └── taxi_energy (ID="0")/ +│ │ ├── taxi_out_energy (ID="0")/ +│ │ │ └── consumed_energy +│ │ └── taxi_in_energy (ID="0")/ +│ │ └── consumed_energy +│ └── study_mission/ +│ ├── range +│ ├── flight_time +│ ├── taxi_energy (ID="0")/ +│ │ ├── taxi_out_energy (ID="0")/ +│ │ │ └── consumed_energy +│ │ └── taxi_in_energy (ID="0")/ +│ │ └── consumed_energy +│ └── in_flight_energy/ +│ └── trip_energy (ID="0")/ +│ └── consumed_energy +└── assessment/ + └── cost_estimation/ + └── operating_cost/ + └── direct_operating_cost/ + └── flights_per_year_study_mission ``` In the `ecological_assessment_conf.xml`, you can specify calculation modes and input parameters like testing hours for the different phases. Next to the control settings block, the following program settings can be set: -```xml -- emission_calculation - - life_cycle_emissions_methods - - method - - schaefer - - engine_mode_switch - - engine_engineering_ratio - - development_phase - - test_phase - - development_emission_setting - - aircraft_specs - - ETOPS_switch - - engine_options - - wind_tunnel_test - - test_hours - - structural_test - - test_cycles - - number_of_structural_test_aircraft - - system_test - - system_integration_test_hours - - iron_bird_test_hours - - engine_test - - enable - - number_of_new_engines - - number_of_test_engines - - rig_test - - test_hours - - max_continuous_thrust_percentage - - flying_testbed - - test_hours - - flying_testbed_engines - - engine_number - - flying_testbed_fuel_consumption_per_engine - - flight_test - - test_hours - - number_of_flight_test_aircraft - - production_phase - - production_mode - - primary_material_recycling_switch - - number_produced_aircraft - - end_of_life_phase - - distance_to_end_of_life_site +``` +emission_calculation/ +└── life_cycle_emissions_methods/ + └── schaefer/ + ├── engine_mode_switch + ├── engine_engineering_ratio + ├── development_phase/ + │ ├── test_phase/ + │ │ ├── development_emission_setting + │ │ └── aircraft_specs/ + │ │ ├── ETOPS_switch + │ │ └── engine_options + │ ├── wind_tunnel_test/ + │ │ └── test_hours + │ ├── structural_test/ + │ │ ├── test_cycles + │ │ └── number_of_structural_test_aircraft + │ ├── system_test/ + │ │ ├── system_integration_test_hours + │ │ └── iron_bird_test_hours + │ ├── engine_test/ + │ │ ├── enable + │ │ ├── number_of_new_engines + │ │ ├── number_of_test_engines + │ │ ├── rig_test/ + │ │ │ ├── test_hours + │ │ │ └── max_continuous_thrust_percentage + │ │ └── flying_testbed/ + │ │ ├── test_hours + │ │ └── flying_testbed_engines/ + │ │ ├── engine_number + │ │ └── flying_testbed_fuel_consumption_per_engine + │ └── flight_test/ + │ ├── test_hours + │ └── number_of_flight_test_aircraft + ├── production_phase/ + │ ├── production_mode + │ ├── primary_material_recycling_switch + │ └── number_produced_aircraft + └── end_of_life_phase/ + └── distance_to_end_of_life_site + ``` Other inputs are mission related. The design mission taxi time is needed and read from the *design_mission.xml*: -```xml -- taxi_time_origin -- taxi_time_destination +``` +├── taxi_time_origin +├── taxi_time_destination ``` And last but not least, the emissions provided by the submodule [mission_emissions](mission_emissions) will be read from *ecological_assessment_results.xml*: -```xml -- mission_emissions - - design_mission - - emissions - - LTO_cycle - - CO2 - - H2O - - SO2 - - SO4 - - HC - - CH4 - - CO - - NOx - - soot - - c_soot_LTO_max - - cruise - - CO2 - - H2O - - SO2 - - SO4 - - HC - - CH4 - - CO - - NOx - - soot - - study_mission - - emissions - - LTO_cycle - - CO2 - - H2O - - SO2 - - SO4 - - HC - - CH4 - - CO - - NOx - - soot - - c_soot_LTO_max - - cruise - - CO2 - - H2O - - SO2 - - SO4 - - HC - - CH4 - - CO - - NOx - - soot +``` +mission_emissions/ +├── design_mission/ +│ └── emissions/ +│ ├── LTO_cycle/ +│ │ ├── CO2 +│ │ ├── H2O +│ │ ├── SO2 +│ │ ├── SO4 +│ │ ├── HC +│ │ ├── CH4 +│ │ ├── CO +│ │ ├── NOx +│ │ ├── soot +│ │ └── c_soot_LTO_max +│ └── cruise/ +│ ├── CO2 +│ ├── H2O +│ ├── SO2 +│ ├── SO4 +│ ├── HC +│ ├── CH4 +│ ├── CO +│ ├── NOx +│ └── soot +└── study_mission/ + └── emissions/ + ├── LTO_cycle/ + │ ├── CO2 + │ ├── H2O + │ ├── SO2 + │ ├── SO4 + │ ├── HC + │ ├── CH4 + │ ├── CO + │ ├── NOx + │ ├── soot + │ └── c_soot_LTO_max + └── cruise/ + ├── CO2 + ├── H2O + ├── SO2 + ├── SO4 + ├── HC + ├── CH4 + ├── CO + ├── NOx + └── soot ``` ### Output data {#lca-schaefer-output} The Method writes data to CSV files in the *aircraft\_exchange\_file\_directory/reporting/plots/csv_files* folder containing emissions, energy demand, fuel demand and GWP100 for all processes. Additionally, total emissions of the four phases are written to the `ecological_assessment_results.xml`. As described in [Usage of the ecological_assessment tool](#usage), an HTML report including a plot will be generated. @@ -514,26 +572,26 @@ where: ### Input data {#aqi-schaefer-input} Only engine and emission data are needed. To construct the engine object, the following is required from aircraft exchange file: -```xml -- component_design - - propulsion - - specific - - propulsion (ID="0") - - engine - - engine_model - - scale_factor +``` +component_design/ +└── propulsion/ + ├── specific + └── propulsion (ID="0")/ + └── engine/ + ├── engine_model + └── scale_factor ``` From `ecological_assessment_results.xml` the emissions during LTO of the study mission are needed: -```xml -- mission_emissions - - study_mission - - emissions - - LTO_cycle - - HC - - CO - - NOx - - c_soot_LTO_max +``` +mission_emissions/ +└── study_mission/ + └── emissions/ + └── LTO_cycle/ + ├── HC + ├── CO + ├── NOx + └── c_soot_LTO_max ``` ### Output data {#aqi-schaefer-output} The submodule writes its calculation results into the HTML report located in *aircraft_exchange_file_directory/reporting/report_html*. @@ -646,58 +704,58 @@ $ATR = \sum_{i} ATR_i$ ### Input data {#climate-model-input} From the aircraft exchange file following parameter are needed: -```xml -- requirements_and_specifications - - design_specification - - assessment_scenario - - flights_per_year - - analysis - - mission - - study_mission - - range - - cruise - - top_of_climb_range - - top_of_descent_range - - cruise_steps - - cruise_step (ID="0") - - relative_end_of_cruise_step - - altitude +``` +├──analysis/ +│ ├── mission/ +│ └── study_mission/ +│ ├── range +│ └── cruise/ +│ ├── top_of_climb_range +│ ├── top_of_descent_range +│ └── cruise_steps/ +│ └── cruise_step (ID="0")/ +│ ├── relative_end_of_cruise_step +│ └── altitude +└── assessment/ + └── cost_estimation/ + └── operating_cost/ + └── direct_operating_cost/ + └── flights_per_year_study_mission ``` The submodule reads following data from the program settings in the configuration file: ```xml -- standard_strategy - - impact_calculation - - climate_model_methods - - method - - dallara - - fuel_factor_AIC - - max_integration_period - - devaluation_rate - - forcing_factors - - variations - - aircraft_induced_cloudiness - - short_lived_ozone - - methan_and_long_lived_ozone - - data_set_selector +standard_strategy/ +└── impact_calculation/ + └── climate_model_methods/ + └── dallara/ + ├── fuel_factor_AIC + ├── max_integration_period + ├── devaluation_rate + └── forcing_factors/ + ├── variations + │ ├── aircraft_induced_cloudiness + │ ├── short_lived_ozone + │ └── methan_and_long_lived_ozone + └── data_set_selector ``` Additionally, the emission masses of the study missions are needed: -```xml -- mission_emissions - - study_mission - - emissions - - LTO_cycle - - CO2 - - H2O - - SO4 - - NOx - - soot - - cruise - - CO2 - - H2O - - SO4 - - NOx - - soot +``` +mission_emissions/ +└── study_mission/ + └── emissions/ + ├── LTO_cycle/ + │ ├── CO2 + │ ├── H2O + │ ├── SO4 + │ ├── NOx + │ └── soot + └── cruise/ + ├── CO2 + ├── H2O + ├── SO4 + ├── NOx + └── soot ``` -- GitLab From 6e25c777bb0eaa785ea8757b938d75384b530248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CKatrinBistreck=E2=80=9D?= <“katrin.bistreck@tuhh.de”> Date: Tue, 11 Feb 2025 00:52:49 +0100 Subject: [PATCH 4/5] Small changes --- .../ecological_assessment/basic-concepts.md | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/documentation/analysis/ecological_assessment/basic-concepts.md b/docs/documentation/analysis/ecological_assessment/basic-concepts.md index 47ecb5b..0bc371d 100644 --- a/docs/documentation/analysis/ecological_assessment/basic-concepts.md +++ b/docs/documentation/analysis/ecological_assessment/basic-concepts.md @@ -35,7 +35,7 @@ Kerosene combustion emissions will be calculated as following: The emissions of CO2, H2O, SO2, SO4 and (in a low fidelity approach) soot are considered to be proportional to the fuel flow. Therefore, they are calculated via -$ m_{emission} = EI * m_{fuel}$, +$ m_{emission} = EI \cdot m_{fuel}$, where @@ -102,9 +102,9 @@ For the mission emission calculation (including used libraries), the following p │ | └── luggage_mass_per_passenger │ ├── requirements/ │ │ └── top_level_aircraft_requirements/ -│ │ ├── study_mission/ +│ │ ├── design_mission/ │ │ │ └── delta_ISA -│ │ └── design_mission/ +│ │ └── study_mission/ | | ├── delta_ISA │ │ └── payload_fractions/ │ │ ├── cargo_fraction @@ -705,17 +705,17 @@ $ATR = \sum_{i} ATR_i$ ### Input data {#climate-model-input} From the aircraft exchange file following parameter are needed: ``` -├──analysis/ -│ ├── mission/ -│ └── study_mission/ -│ ├── range -│ └── cruise/ -│ ├── top_of_climb_range -│ ├── top_of_descent_range -│ └── cruise_steps/ -│ └── cruise_step (ID="0")/ -│ ├── relative_end_of_cruise_step -│ └── altitude +├── analysis/ +│ └── mission/ +│ └── study_mission/ +│ ├── range +│ └── cruise/ +│ ├── top_of_climb_range +│ ├── top_of_descent_range +│ └── cruise_steps/ +│ └── cruise_step (ID="0")/ +│ ├── relative_end_of_cruise_step +│ └── altitude └── assessment/ └── cost_estimation/ └── operating_cost/ -- GitLab From 547fcffb9effebf6178c910eb1ce15a6f61947a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CKatrinBistreck=E2=80=9D?= <“katrin.bistreck@tuhh.de”> Date: Thu, 13 Feb 2025 13:31:45 +0100 Subject: [PATCH 5/5] Further changes --- .../ecological_assessment/basic-concepts.md | 405 +++++++++++++----- .../software-architecture.md | 13 + .../analysis/ecological_assessment/usage.md | 49 ++- 3 files changed, 346 insertions(+), 121 deletions(-) diff --git a/docs/documentation/analysis/ecological_assessment/basic-concepts.md b/docs/documentation/analysis/ecological_assessment/basic-concepts.md index 0bc371d..7d98ac7 100644 --- a/docs/documentation/analysis/ecological_assessment/basic-concepts.md +++ b/docs/documentation/analysis/ecological_assessment/basic-concepts.md @@ -1,18 +1,12 @@ # Basic concepts {#basic-concepts} -This chapter provides some insight in the implemented calculation routines. The module is split into several submodules which are responsible to calculate parts of the ecological assessment. The following graph shows a rough overview of the module structure, with every end point standing for a submodule: -<pre class='mermaid'> - graph TD; - A[ecological_assessment/src]-->C[standard_strategy] - C-->D[emission_calculation] - D-->F[life_cycle_emissions] - F-->H[LCA_schaefer] - D-->G[mission_emissions] - C-->E[impact_calculation] - E-->I[air_quality_index_schaefer] - E-->J[climate_impact_dallara] -</pre> +This chapter provides some insight in the implemented calculation routines. The module is split into several submodules which are responsible to calculate parts of the ecological assessment. Following submodules are implemented: -The next sections will describe the submodules in detail, with information about in- and outputs as well as calculation routines. If you'd like to get more information about the values named in the input xml files, you can have an look into the files and read the corresponding description. +- [Mission Emissions](#mission-emissions) +- [Life Cycle Emissions (Schaefer)](#lca-schaefer) +- [Air Quality Index (Schaefer)](#aqi-schaefer) +- [Climate Model (Dallara)](#climate-model-dallara) + +The next sections will describe the submodules in detail, with information about in- and outputs as well as calculation routines. If you'd like to get more information about the values named in the input xml files, you can have an look into the files and read the corresponding description. The inputs from configuration file are shown in their original format, so that you can check the default values and boundaries within this documentation. ## Mission Emissions {#mission-emissions} The submodule _mission_emissions_ is the only part of _ecological\_assessment_ which can not be deactivated by the user, as its results are needed by all other submodules. It provides various options to calculate the emissions of kerosene or hydrogen-burning engines during a mission. Both the design and the study mission will be calculated (in the following, file names including *mission* will always mean *study_mission* and *design_mission*). @@ -28,12 +22,7 @@ Taxiing | Take-off | Climb | Approach | If the taxiing thrust can not be set (which happens sometimes because of a lack of engine data), you will see a warning and the engine will automatically set to idle conditions. -Then, the main task of this submodule is executed: the emission calculation. - -#### Kerosene Emissions -Kerosene combustion emissions will be calculated as following: - -The emissions of CO2, H2O, SO2, SO4 and (in a low fidelity approach) soot are considered to be proportional to the fuel flow. Therefore, they are calculated via +Then, the main task of this submodule is executed: the emission calculation. Following formula is used for determination: $ m_{emission} = EI \cdot m_{fuel}$, @@ -43,7 +32,10 @@ where - $ EI $: emission index $[\frac{kg_{emission}}{kg_{fuel}}]$ - $ m_{fuel} $: fuel mass $[kg]$ -Following emission indices are used: +#### Kerosene Emissions +Kerosene combustion emissions will be calculated as following: + +The emissions of CO2, H2O, SO2, SO4 and (in a low fidelity approach) soot are considered to be proportional to the fuel flow. Following emission indices are used: Emission | EI [kg/kg] | ---------|------------| @@ -55,9 +47,18 @@ Soot | 0.025e-3 | All other emissions are considered to be non-proportional and are calculated with following methods: -- For NOx emissions, there are a P3T3 Method \cite Nor03, Boeing Fuel Flow Method 2 \cite Sch13, and the calculation based on data generated by GasTurb available. -- For HC as well as CO emissions, the DLR Omega method and Boeing Fuel Flow Method 2 \cite Sch13 are implemented. Additionally, there is the option to calculate the landing and takeoff cycle emissions based on constants provided by ICAO. -- Soot emissions can be determined via a DLR correlation based on ICAO smoke numbers or a correlation by R.B. Whyte \cite Kug05. Alternatively, it can be assumed to be proportional to the consumed fuel. +- For NOx emissions, there are + - a P3T3 Method \cite Nor03, + - Boeing Fuel Flow Method 2 \cite Sch13 + - and the calculation based on data generated by GasTurb available. +- For HC as well as CO emissions, the + - DLR Omega method + - and Boeing Fuel Flow Method 2 \cite Sch13 are implemented. + - Additionally, there is the option to calculate the landing and takeoff cycle emissions based on constants provided by ICAO. +- Soot emissions can be determined via + - a DLR correlation based on ICAO smoke numbers + - or a correlation by R.B. Whyte \cite Kug05. + - Alternatively, it can be assumed to be proportional to the consumed fuel. #### Hydrogen Combustion Emissions When hydrogen is burned in an engine, only H2O and NOx emissions are produced. H2O is again assumed to be proportional to the fuel flow. For NOx emissions, there are two methods implemented. As the determination of NOx emissions when burning hydrogen is subject to great uncertainty, a the low-fidelity method of using constant emission indices for different flight phases is the default method. The emission indices were determined in \cite Koss22 for one engine type and are listed in this table: @@ -81,25 +82,25 @@ For the mission emission calculation (including used libraries), the following p ``` ├── requirements_and_specifications/ │ ├── general/ -│ │ ├── type -│ │ └── model +│ │ ├── type +│ │ └── model │ ├── mission_files/ │ │ ├── design_mission_file │ │ └── study_mission_file │ ├── design_specification/ -│ │ ├── configuration/ -│ │ │ ├── configuration_type -│ │ │ └── aerodynamic_technologies -│ │ ├── energy_carriers/ -│ │ | └── energy_carrier (ID="0")/ -│ │ | └── type -│ | └── transport_task/ -│ | ├── cargo_definition/ -│ | | └── additional_cargo_mass -│ | └── passenger_definition/ -│ | ├── total_number_passengers -│ | ├── mass_per_passenger -│ | └── luggage_mass_per_passenger +│ │ ├── configuration/ +│ │ │ ├── configuration_type +│ │ │ └── aerodynamic_technologies +│ │ ├── energy_carriers/ +│ │ | └── energy_carrier (ID="0")/ +│ │ | └── type +│ | └── transport_task/ +│ | ├── cargo_definition/ +│ | | └── additional_cargo_mass +│ | └── passenger_definition/ +│ | ├── total_number_passengers +│ | ├── mass_per_passenger +│ | └── luggage_mass_per_passenger │ ├── requirements/ │ │ └── top_level_aircraft_requirements/ │ │ ├── design_mission/ @@ -139,20 +140,40 @@ For the mission emission calculation (including used libraries), the following p └── flights_per_year_study_mission ``` -In the `ecological_assessment_conf.xml`, next to the control settings block, you can set the emission calculation methods, relative humidity of the air and the duration of aircraft operation within the program settings: -``` -standard_strategy/ -└── emission_calculation/ - ├── mission_emissions/ - │ └── emission_methods/ - │ ├── kerosene/ - │ │ ├── HC_method_selector - │ │ ├── CO_method_selector - │ │ ├── NOx_method_selector - │ │ └── soot_method_selector - │ └── hydrogen_combustion/ - │ └── NOx_method_selector - └── relative_humidity +In the `ecological_assessment_conf.xml`, next to the control settings block, you can set the emission calculation methods and relative humidity of the air within the program settings: +```xml +<standard_strategy description="Settings for standard strategy. Different methods can be used by defining them in this block."> + <emission_calculation description="Settings for the emission calculation"> + <mission_emissions> + <emission_methods description="Methods for calculation of emission indices"> + <kerosene description="Calculation methods for kerosene combustion emission indices"> + <HC_method_selector description="Select method for calculation of hydrocarbon emission index. Selector: mode_0 (DLR Omega Method) / mode_1 (Boeing Fuel Flow Method 2) / mode_2 (ICAO Emission indices)"> + <value>mode_0</value> + </HC_method_selector> + <CO_method_selector description="Select method for calculation of carbon monoxide emission index. Selector: mode_0 (DLR Omega Method) / mode_1 (Boeing Fuel Flow Method 2) / mode_2 (ICAO Emission indices)"> + <value>mode_0</value> + </CO_method_selector> + <NOx_method_selector description="Select method for calculation of nitrogen oxide emission index. Selector: mode_0 (pressure and temperature dependent (P3T3) method by P.D.Norman) / mode_1 (Boeing Fuel Flow Method 2) / mode_2 (NOx values from GasTurb will be used)"> + <value>mode_0</value> + </NOx_method_selector> + <soot_method_selector description="Select method for calculation of soot emission index. Selector: mode_0 (DLR correlation based on ICAO smoke number) / mode_1 (Correlation by R.B.Whyte) / mode_2 (Use constant factor defined in engine.xml)"> + <value>mode_0</value> + </soot_method_selector> + </kerosene> + <hydrogen_combustion description="Calculation methods for hydrogen combustion emission indices"> + <NOx_method_selector description="Select method for calculation of nitrogen oxide emission index. Selector: mode_0 (Use constant EI for different mission segments (Kossarev 2022)) / mode_1 (P3T3 correlation based on experiments by Marek 2005 and correction factor derived of kerosene P3T3 method)"> + <value>mode_0</value> + </NOx_method_selector> + </hydrogen_combustion> + </emission_methods> + <relative_humidity description="Relative humidity of air"> + <value>0.6</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1</upper_boundary> + </relative_humidity> + </mission_emissions> + </emission_calculation> ``` From `mission.xml`, the taxi time and mission range will be read : @@ -169,7 +190,7 @@ And last but not least, the engine library will be used, so you can check the do The central output of the mission submodule is the `ecological_assessment_results.xml` which you will find in the *aircraft\_exchange\_file\_directory/reporting/report_xml* directory. It contains all calculated emission masses. Additionally, there is a `...emissionspath.csv` file in the folder *aircraft_exchange_file_directory/mission_data/* including mission and engine data for every mission step. As described in [Module usage](#usage), an HTML report including plots with emission flows will be generated. -## LCA Schaefer {#lca-schaefer} +## Life Cycle Emissions (Schaefer) {#lca-schaefer} The method is based on the dissertation by Katharina Schäfer (2011) \cite Sch17. It is highly recommended to refer to this work for detailed insights. The method calculates the energy demand and emissions across the aircraft's life cycle phases: development, production, operation, and end-of-life. The following image shows the processes considered.  @@ -452,48 +473,174 @@ Additionally, results from other Unicado tools are needed: └── flights_per_year_study_mission ``` In the `ecological_assessment_conf.xml`, you can specify calculation modes and input parameters like testing hours for the different phases. Next to the control settings block, the following program settings can be set: -``` -emission_calculation/ -└── life_cycle_emissions_methods/ - └── schaefer/ - ├── engine_mode_switch - ├── engine_engineering_ratio - ├── development_phase/ - │ ├── test_phase/ - │ │ ├── development_emission_setting - │ │ └── aircraft_specs/ - │ │ ├── ETOPS_switch - │ │ └── engine_options - │ ├── wind_tunnel_test/ - │ │ └── test_hours - │ ├── structural_test/ - │ │ ├── test_cycles - │ │ └── number_of_structural_test_aircraft - │ ├── system_test/ - │ │ ├── system_integration_test_hours - │ │ └── iron_bird_test_hours - │ ├── engine_test/ - │ │ ├── enable - │ │ ├── number_of_new_engines - │ │ ├── number_of_test_engines - │ │ ├── rig_test/ - │ │ │ ├── test_hours - │ │ │ └── max_continuous_thrust_percentage - │ │ └── flying_testbed/ - │ │ ├── test_hours - │ │ └── flying_testbed_engines/ - │ │ ├── engine_number - │ │ └── flying_testbed_fuel_consumption_per_engine - │ └── flight_test/ - │ ├── test_hours - │ └── number_of_flight_test_aircraft - ├── production_phase/ - │ ├── production_mode - │ ├── primary_material_recycling_switch - │ └── number_produced_aircraft - └── end_of_life_phase/ - └── distance_to_end_of_life_site - +```xml +<standard_strategy description="Settings for standard strategy. Different methods can be used by defining them in this block."> + <emission_calculation description="Settings for the emission calculation"> + <life_cycle_emissions_methods description="Settings for life cylce emission calculation"> + <schaefer description="Settings for the emission calculations according to K.Schäfer(2018)"> + <engine_mode_switch description="Includes engine life cycle in calculation (Dev+Production+Maintenance+EoL). Switch: true (engine included) / false (engine not included)"> + <value>true</value> + </engine_mode_switch> + <engine_engineering_ratio description="Engineering effort for engines relative to whole aircraft (derived from Micado CSR-02 costs)"> + <value>0.2113</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1</upper_boundary> + </engine_engineering_ratio> + <development_phase description="Settings for the calculation of the development phase"> + <test_phase description="Settings for calculation of test emissions"> + <development_emission_setting description="Selects scope of development emission calculation. Selector: mode_0 (no development emissions) / mode_1 (development emissions without production/endOfLife emissions of test components) / mode_2 (development emissions with production/endOfLife emissions of test components)"> + <value>mode_2</value> + </development_emission_setting> + <aircraft_specs description="Aircraft specifications needed for development calculations"> + <ETOPS_switch description="Aircraft and engine(s) will be tested for ETOPS (Extended-range Twin-engine Operations Performance Standards) approval, engine test: additional 3000 test cycles (a 0.5h). Switch: true (test) / false (no test)"> + <value>false</value> + </ETOPS_switch> + <engine_options description="Number of engine options for this aircraft"> + <value>2</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>10</upper_boundary> + </engine_options> + </aircraft_specs> + <wind_tunnel_test description="Settings for wind tunnel test"> + <test_hours description="Number of wind tunnel hours in aircraft development"> + <value>15000</value> + <unit>h</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>150000</upper_boundary> + </test_hours> + </wind_tunnel_test> + <structural_test description="Settings for structural test"> + <test_cycles description="Number of tested flight cycles in aircraft development (twice the number of flight cycles for which the aircraft will be certified)"> + <value>160000</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>500000</upper_boundary> + </test_cycles> + <number_of_structural_test_aircraft description="Number of aircraft for structural tests"> + <value>2</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>10</upper_boundary> + </number_of_structural_test_aircraft> + </structural_test> + <system_test description="Settings for system tests"> + <system_integration_test_hours description="Test hours at the system integration test rig"> + <value>5000</value> + <unit>h</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>10000</upper_boundary> + </system_integration_test_hours> + <iron_bird_test_hours description="Test hours on the Iron-Bird test rig"> + <value>5000</value> + <unit>h</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>10000</upper_boundary> + </iron_bird_test_hours> + </system_test> + <engine_test description="Specify engine tests"> + <enable description="Switch to enable engine tests. Switch: true (engine tests on (only if new engine/s for aircraft has to be certified)) / false (engine tests off)"> + <value>true</value> + </enable> + <number_of_new_engines description="Number of new engine(s) to be certified"> + <value>1</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>10</upper_boundary> + </number_of_new_engines> + <number_of_test_engines description="Number of engine for test rig (approx. 5) and flight test (approx. 1)"> + <value>6</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>100</upper_boundary> + </number_of_test_engines> + <rig_test> + <test_hours description="Test hours on the engine rig within aircraft development without/with ETOPS (Extended-range Twin-engine Operations Performance Standards) hours (s.inclETOPS)"> + <value>1500</value> + <unit>h</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>15000</upper_boundary> + </test_hours> + <incl_ETOPS_switch description="Adds ETOPS (Extended-range Twin-engine Operations Performance Standards) certification in test hours. Switch: true (is included) / false (is not included)"> + <value>false</value> + </incl_ETOPS_switch> + <max_continuous_thrust_percentage description="Percentage of test hours on the engine rig with Maximum Continuous Thrust in aircraft development"> + <value>0.1</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1</upper_boundary> + </max_continuous_thrust_percentage> + </rig_test> + <flying_testbed description="Settings for the flying testbed "> + <test_hours description="Test hours on flying testbed aircraft development"> + <value>225</value> + <unit>h</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1000</upper_boundary> + </test_hours> + <flying_testbed_engines description="Information about the engine at the flying_test_bed_engines (!), not to be tested engine"> + <engine_number description="Number of engines on flying testbed (without tested engine)"> + <value>3</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>20</upper_boundary> + </engine_number> + <flying_testbed_fuel_consumption_per_engine description="Fuel consumption of the flying testbed engines of (one!) engine in cruise flight"> + <value>3000</value> + <unit>kg/h</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>10000</upper_boundary> + </flying_testbed_fuel_consumption_per_engine> + </flying_testbed_engines> + </flying_testbed> + </engine_test> + <flight_test description="Settings for the flight tests"> + <test_hours description="Flight test hours in aircraft development for one / all Engine(s)-Option/s (s. incl_engine_options)"> + <value>2500</value> + <unit>h</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>10000</upper_boundary> + <incl_engine_options description="Defines if all engine options are included in tests. Switch: true (include all engine options) / false (only one engine)"> + <value>false</value> + </incl_engine_options> + </test_hours> + <number_of_flight_test_aircraft description="Number of aircraft for flight tests"> + <value>6</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>10</upper_boundary> + </number_of_flight_test_aircraft> + </flight_test> + </test_phase> + </development_phase> + <production_phase description="Settings for the calculation of the production phase"> + <production_mode description="Selects the production calculation mode. Selector: mode_0 (material mode) / mode_1 (main parts mode)"> + <value>mode_1</value> + </production_mode> + <primary_material_recycling_switch description="Enables primary material recycling. Switch: true (primary material will be recycled) / false (no recyling)"> + <value>true</value> + </primary_material_recycling_switch> + <number_produced_aircraft description="Number of produced aircraft per programm"> + <value>1500</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>10000</upper_boundary> + </number_produced_aircraft> + </production_phase> + <operating_phase description="Settings for the calculation of the opeerating phase"> + </operating_phase> + <end_of_life_phase description="Settings for the calculation of the end of life phase"> + <distance_to_end_of_life_site description="Distance to be flown to the demolition location"> + <value>1000</value> + <unit>NM</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>10000</upper_boundary> + </distance_to_end_of_life_site> + </end_of_life_phase> + </schaefer> + </life_cycle_emissions_methods> + </emission_calculation> ``` Other inputs are mission related. The design mission taxi time is needed and read from the *design_mission.xml*: @@ -556,7 +703,7 @@ mission_emissions/ ### Output data {#lca-schaefer-output} The Method writes data to CSV files in the *aircraft\_exchange\_file\_directory/reporting/plots/csv_files* folder containing emissions, energy demand, fuel demand and GWP100 for all processes. Additionally, total emissions of the four phases are written to the `ecological_assessment_results.xml`. As described in [Usage of the ecological_assessment tool](#usage), an HTML report including a plot will be generated. -## Air Quality Index Schaefer {#aqi-schaefer} +## Air Quality Index (Schaefer) {#aqi-schaefer} This method provides a single indicator - called the Air Quality Index (AQI) - for the assessment of air quality. The AQI can take values between 0 and 1, with 1 indicating that the allowable limits defined by ICAO are reached by all species. Therefore, low values are preferable. ### General principles {#aqi-schaefer-generalprinciples} @@ -596,7 +743,7 @@ mission_emissions/ ### Output data {#aqi-schaefer-output} The submodule writes its calculation results into the HTML report located in *aircraft_exchange_file_directory/reporting/report_html*. -## Climate Model Dallara {#climate-model-dallara} +## Climate Model (Dallara) {#climate-model-dallara} The climate model calculates key climate impact metrics: Radiative Forcing (RF), Absolute Global Warming Potential (AGWP), Absolute Global Temperature Potential (AGTP), and Average Temperature Response (ATR). The calculation methodology is derived from Dallara's work in 2011 \cite Dal11, providing a systematic approach to assess the environmental effects of various emissions. The key metrics are: @@ -724,19 +871,57 @@ From the aircraft exchange file following parameter are needed: ``` The submodule reads following data from the program settings in the configuration file: ```xml -standard_strategy/ -└── impact_calculation/ - └── climate_model_methods/ - └── dallara/ - ├── fuel_factor_AIC - ├── max_integration_period - ├── devaluation_rate - └── forcing_factors/ - ├── variations - │ ├── aircraft_induced_cloudiness - │ ├── short_lived_ozone - │ └── methan_and_long_lived_ozone - └── data_set_selector +<standard_strategy description="Settings for standard strategy. Different methods can be used by defining them in this block."> + <impact_calculation description="Settings for impact calculation"> + <climate_model_methods description="Settings for climate model"> + <dallara description="Settings for the climate impact calculation according to E.Schwartz-Dallara(2011)"> + <forcing_factors> + <data_set_selector description="Selects data set for forcing factor calculation. Selector: mode_0 (Data set by E.Schwartz-Dallara (2011)) / mode_1 (Data set by K.Dahlmann (2011))"> + <value>mode_0</value> + </data_set_selector> + <variations description="Forcing factors (S_i_height) are within a certain likelihood range (Reference Dallara_2011_Metric for comparing...). Here you can vary the forcing factors."> + <aircraft_induced_cloudiness description="Variation of AIC forcing factor"> + <value>1</value> + <unit>1</unit> + <lower_boundary>0.67</lower_boundary> + <upper_boundary>1.33</upper_boundary> + </aircraft_induced_cloudiness> + <short_lived_ozone description="Variation of short-lived ozone forcing factor"> + <value>1</value> + <unit>1</unit> + <lower_boundary>0.67</lower_boundary> + <upper_boundary>1.33</upper_boundary> + </short_lived_ozone> + <methan_and_long_lived_ozone description="Variation of methan and long-live ozone forcing factor"> + <value>1</value> + <unit>1</unit> + <lower_boundary>0.67</lower_boundary> + <upper_boundary>1.33</upper_boundary> + </methan_and_long_lived_ozone> + </variations> + </forcing_factors> + <fuel_factor_AIC description="Set a factor to scale radiative forcing of aircraft induced cloudiness (AIC) relative to kerosene depending on fuel type. liquidHydrogen=0.3...0.8"> + <value>0.6</value> + <unit>1</unit> + <lower_boundary>0.3</lower_boundary> + <upper_boundary>1</upper_boundary> + </fuel_factor_AIC> + <max_integration_period description="Time over which radiative forcing is to be integrated"> + <value>200</value> + <unit>a</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1000</upper_boundary> + </max_integration_period> + <devaluation_rate description="Rate of devaluation of temperature response. Zero means, that postoperation impacts are equally important compared with impacts during operating years, higher values mean that temperature change each postoperation year is less important than the temperature change experienced the previous year"> + <value>0.03</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>10^10</upper_boundary> + </devaluation_rate> + </dallara> + </climate_model_methods> + </impact_calculation> +</standard_strategy> ``` Additionally, the emission masses of the study missions are needed: diff --git a/docs/documentation/analysis/ecological_assessment/software-architecture.md b/docs/documentation/analysis/ecological_assessment/software-architecture.md index 2eca7fb..57dda6f 100644 --- a/docs/documentation/analysis/ecological_assessment/software-architecture.md +++ b/docs/documentation/analysis/ecological_assessment/software-architecture.md @@ -2,6 +2,19 @@ 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: +The following graph shows a rough overview of the module structure, with every end point standing for a submodule described in [Basic Concepts](basic-concepts.md): +<pre class='mermaid'> + graph TD; + A[ecological_assessment/src]-->C[standard_strategy] + C-->D[emission_calculation] + D-->F[life_cycle_emissions] + F-->H[LCA_schaefer] + D-->G[mission_emissions] + C-->E[impact_calculation] + E-->I[air_quality_index_schaefer] + E-->J[climate_impact_dallara] +</pre> + 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. diff --git a/docs/documentation/analysis/ecological_assessment/usage.md b/docs/documentation/analysis/ecological_assessment/usage.md index 605c1e3..483c52b 100644 --- a/docs/documentation/analysis/ecological_assessment/usage.md +++ b/docs/documentation/analysis/ecological_assessment/usage.md @@ -3,12 +3,35 @@ You have carefully read the [basic-concepts](basic-concepts.md) and feel ready t ## Prerequisites 1. It is assumed that you have the `UNICADO Package` installed, including the executables and UNICADO libraries. If you are a developer, you need to build the tool first (see [build instructions on the UNICADO website](https://unicado.pages.rwth-aachen.de/unicado.gitlab.io/developer/build/cpp/)). -2. Fill out the configuration file `ecological_assessment_conf.xml`. - - change at least in `control_settings`: - - `aircraft_exchange_file_name` and `aircraft_exchange_file_directory` to your respective settings +2. Fill out the configuration file `ecological_assessment_conf.xml`. Check and change if needed at least following settings: + - change in `control_settings`: + ``` + control_settings/ + ├── aircraft_exchange_file_name/ + ├── aircraft_exchange_file_directory/ + ├── console_output/ + ├── plot_output/ + │ └── enable/ + ├── inkscape_path/ + └── gnuplot_path/ + ``` + - set `aircraft_exchange_file_name` and `aircraft_exchange_file_directory` to your respective settings - set `console_output` at least to `mode_1` - - set `plot_output` to false (or define `inkscape_path` and `gnuplot_path`) - - define in the `program_settings` which submodules you would like to execute + - set `plot_output` to false **or** define `inkscape_path` and `gnuplot_path` + - define in the `program_settings` which submodules you would like to execute: + ``` + program_settings/ + ├── strategy_selector/ + └── standard_strategy/ + ├── emission_calculation/ + │ └── life_cycle_emissions_methods/ + │ └── method/ + └── impact_calculation/ + ├── climate_model_methods/ + │ └── method/ + └── air_quality_methods/ + └── method/ + ``` - all other parameters can be left at default values 3. You need to provide all necessary input data. What is necessary depends on the chosen methods (or executed submodule). In general, you need a (shortened) project environment as described in [Seperate Tool Execution](https://unicado.pages.rwth-aachen.de/unicado.gitlab.io/tutorials/seperate-tool-execution/). The aircraft exchange file need to located at the path you defined in the configuration file. Here is an example with a CSMR-2020 in the projects directory: @@ -131,17 +154,21 @@ After successful calculation, the aircraft exchange file will be updated, plots 27.01.2025 14:34:25 - CSS code written to style.css successfully. 27.01.2025 14:34:25 - Finish ecological_assessment ``` -You will find a `.log` file within the directory of the executable and an HTML report in the directory of `aircraft_exchange_file_directory/reporting/report_html`. Depending on your chosen methods, additional results are saved in +You will find -- `/aircraft_exchange_file/assessment/average_temperature_response` -- and/or in the files you'll find in the `aircraft_exchange_file_directory/reporting/plots/` directory -- and/or in the files you'll find in the `aircraft_exchange_file_directory/reporting/plots/csv_files` directory. +- a `.log` file within the directory of the executable, +- an HTML report in the directory of `aircraft_exchange_file_directory/reporting/report_html`, +- an xml file in `aircraft_exchange_file_directory/reporting/report_xml` +- and depending on your chosen methods, additional results are saved in + - `/aircraft_exchange_file/assessment/average_temperature_response` + - and/or in the files you'll find in the `aircraft_exchange_file_directory/reporting/plots/` directory + - and/or in the files you'll find in the `aircraft_exchange_file_directory/reporting/plots/csv_files` directory. -Check the Output data sections of [basic concepts](basic-concepts.md) to see, which outputs you can expect. +Check the Output data sections of [Basic Concepts](basic-concepts.md) to see, which outputs you can expect. Be aware of the files' timestamp as there could be leftovers of earlier program executions! ## Changing user input -If you want to adapt the tool's execution, you can modify the parameters within the configuration file. There, you can enable or disable specific aspects of the ecological assessment and select the methods to be used for the calculations. At the [basic concepts](basic-concepts.md), you can check which parameters are available. Start with changing only one parameter at once, so you can track the influence of this parameter! +If you want to adapt the tool's execution, you can modify the parameters within the configuration file. There, you can enable or disable specific aspects of the ecological assessment and select the methods to be used for the calculations. At the [Basic Concepts](basic-concepts.md), you can check which parameters are available. Start with changing only one parameter at once, so you can track the influence of this parameter! ## Troubleshooting If something does not work as expected: -- GitLab