Skip to content
Snippets Groups Projects
Commit f936b5f7 authored by gPauls-TUHH's avatar gPauls-TUHH
Browse files

Merge branch 'documentation/mission_analysis' into 'develop'

mission_analysis initial commit

See merge request !24
parents 2ba8db5b dbeea0c3
No related branches found
No related tags found
3 merge requests!76Draft: Updated Python code example,!73Initial open source version,!24mission_analysis initial commit
Pipeline #1608113 passed
Showing
with 983 additions and 2 deletions
File added
<mxfile host="Electron" modified="2025-01-23T11:02:38.911Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.0.2 Chrome/114.0.5735.289 Electron/25.8.4 Safari/537.36" etag="3bY63jl8jJOAUaerBc7u" version="22.0.2" type="device">
<diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">
<mxGraphModel dx="1036" dy="1783" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="WIyWlLk6GJQsqaUBKTNV-0" />
<mxCell id="WIyWlLk6GJQsqaUBKTNV-1" parent="WIyWlLk6GJQsqaUBKTNV-0" />
<mxCell id="WIyWlLk6GJQsqaUBKTNV-2" value="" style="rounded=0;html=1;jettySize=auto;orthogonalLoop=1;fontSize=11;endArrow=block;endFill=0;endSize=8;strokeWidth=1;shadow=0;labelBackgroundColor=none;edgeStyle=orthogonalEdgeStyle;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="WIyWlLk6GJQsqaUBKTNV-3" target="WIyWlLk6GJQsqaUBKTNV-6" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="WIyWlLk6GJQsqaUBKTNV-3" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;Compute performance&lt;br&gt;data using set_segment_end_conditions&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=12;glass=0;strokeWidth=1;shadow=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="430" y="-60" width="270" height="70" as="geometry" />
</mxCell>
<mxCell id="WIyWlLk6GJQsqaUBKTNV-4" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;Yes&lt;/font&gt;" style="rounded=0;html=1;jettySize=auto;orthogonalLoop=1;fontSize=11;endArrow=block;endFill=0;endSize=8;strokeWidth=1;shadow=0;labelBackgroundColor=none;edgeStyle=orthogonalEdgeStyle;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="WIyWlLk6GJQsqaUBKTNV-6" target="VD6oQmZdT0cPyfVzGxJv-10" edge="1">
<mxGeometry x="0.0456" y="-20" relative="1" as="geometry">
<mxPoint x="41" as="offset" />
<mxPoint x="219.71" y="210" as="sourcePoint" />
<mxPoint x="219.71" y="270" as="targetPoint" />
<Array as="points">
<mxPoint x="830" y="40" />
<mxPoint x="830" y="40" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="WIyWlLk6GJQsqaUBKTNV-5" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;No&lt;/font&gt;" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;fontSize=11;endArrow=block;endFill=0;endSize=8;strokeWidth=1;shadow=0;labelBackgroundColor=none;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="WIyWlLk6GJQsqaUBKTNV-6" target="VD6oQmZdT0cPyfVzGxJv-5" edge="1">
<mxGeometry x="-0.9379" y="-20" relative="1" as="geometry">
<mxPoint as="offset" />
<mxPoint x="298.97" y="175" as="sourcePoint" />
<mxPoint x="308.97" y="-40" as="targetPoint" />
<Array as="points">
<mxPoint x="830" y="-100" />
<mxPoint x="130" y="-100" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="WIyWlLk6GJQsqaUBKTNV-6" value="&lt;font style=&quot;&quot;&gt;&lt;font style=&quot;font-size: 18px; border-color: var(--border-color);&quot;&gt;h&lt;/font&gt;&lt;font style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 9px;&quot;&gt;end, i&lt;/font&gt;&lt;font style=&quot;font-size: 18px; border-color: var(--border-color);&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;= h&lt;/span&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 9px;&quot;&gt;end, i-1&lt;/font&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;?&lt;/span&gt;&lt;/font&gt;" style="rhombus;whiteSpace=wrap;html=1;shadow=0;fontFamily=Helvetica;fontSize=12;align=center;strokeWidth=1;spacing=6;spacingTop=-4;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="740" y="-55" width="180" height="60" as="geometry" />
</mxCell>
<mxCell id="VD6oQmZdT0cPyfVzGxJv-1" value="&lt;font style=&quot;&quot;&gt;&lt;font style=&quot;font-size: 18px;&quot;&gt;h&lt;/font&gt;&lt;font style=&quot;&quot;&gt;&lt;font style=&quot;font-size: 9px;&quot;&gt;end, i&lt;/font&gt;&lt;font style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;= h&lt;/span&gt;&lt;font style=&quot;font-size: 9px;&quot;&gt;start&lt;/font&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;+ Δh&lt;/span&gt;&lt;font style=&quot;font-size: 9px;&quot;&gt;i&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=12;glass=0;strokeWidth=1;shadow=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="230" y="-40" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="VD6oQmZdT0cPyfVzGxJv-3" value="" style="rounded=0;html=1;jettySize=auto;orthogonalLoop=1;fontSize=11;endArrow=block;endFill=0;endSize=8;strokeWidth=1;shadow=0;labelBackgroundColor=none;edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="VD6oQmZdT0cPyfVzGxJv-1" target="WIyWlLk6GJQsqaUBKTNV-3" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="230" y="130" as="sourcePoint" />
<mxPoint x="220" y="80" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VD6oQmZdT0cPyfVzGxJv-5" value="&lt;font style=&quot;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;Compute Δh&lt;/span&gt;&lt;font style=&quot;font-size: 9px;&quot;&gt;i&lt;/font&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=12;glass=0;strokeWidth=1;shadow=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="70" y="-40" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="VD6oQmZdT0cPyfVzGxJv-6" value="" style="rounded=0;html=1;jettySize=auto;orthogonalLoop=1;fontSize=11;endArrow=block;endFill=0;endSize=8;strokeWidth=1;shadow=0;labelBackgroundColor=none;edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="VD6oQmZdT0cPyfVzGxJv-5" target="VD6oQmZdT0cPyfVzGxJv-1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="230" y="60" as="sourcePoint" />
<mxPoint x="220" y="20" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VD6oQmZdT0cPyfVzGxJv-7" value="" style="rounded=0;html=1;jettySize=auto;orthogonalLoop=1;fontSize=11;endArrow=block;endFill=0;endSize=8;strokeWidth=1;shadow=0;labelBackgroundColor=none;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="VD6oQmZdT0cPyfVzGxJv-9" target="VD6oQmZdT0cPyfVzGxJv-5" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="220" y="-60" as="sourcePoint" />
<mxPoint x="230" y="30" as="targetPoint" />
<Array as="points">
<mxPoint x="30" y="-25" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="VD6oQmZdT0cPyfVzGxJv-9" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="10" y="-35" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="VD6oQmZdT0cPyfVzGxJv-10" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="820" y="50" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="VD6oQmZdT0cPyfVzGxJv-11" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="825" y="55" width="10" height="10" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
docs/documentation/analysis/mission_analysis/figures/acceleration/acceleration.png

130 B

<?xml version="1.0" encoding="UTF-8"?>
<!-- Do not edit this file with editors other than draw.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="912px" height="180px" viewBox="-0.5 -0.5 912 180" content="&lt;mxfile host=&quot;Electron&quot; modified=&quot;2025-01-22T15:10:02.927Z&quot; agent=&quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.0.2 Chrome/114.0.5735.289 Electron/25.8.4 Safari/537.36&quot; etag=&quot;Nayg6E22_kPXE1fj6PBs&quot; version=&quot;22.0.2&quot; type=&quot;device&quot;&gt;&lt;diagram id=&quot;C5RBs43oDa-KdzZeNtuy&quot; name=&quot;Page-1&quot;&gt;7Vpbd5s4EP41nLP7YB8uBtuPsXPpdrs97Uk22fQlRwYZ2AhEhXzrr69khLkaMIY0aZsXM8NoJM3lk2aCpM297Q0BgfMPtiCSVNnaStqlpKrKaCKzH87ZRRxV1o2IYxPXElIJ49b9BgVTDLRXrgXDjCDFGFE3yDJN7PvQpBkeIARvsmJLjLKzBsCGBcatCVCR++Ba1Im4E3Wc8N9B13bimRVjGr3xQCwsdhI6wMKbFEu7krQ5wZhGT952DhG3XmyXh792D+jDs3Hz/nP4Ffw7+/vu4/0gUnZ9ypDDFgj0abeq1Uj1GqCVsJfYK93FBiR45VuQK5ElbeZQD7FHhT3+DyndCYeDFcWMhQl1sI19gD5gHAi5JfapEFM4DX3rgjuW0QuEzeeIde0iJOZglJCfMCqkBD8ffMcVHBzBhRFYQDQD5rO9X+gcI0zYKx/7kKuyWDCIvSSLu0q4s4a2FT4I8YqYsEJOEyEOiA2r9Ikk4utLxanw3A3EHqRkxwQIRIC662wwA5ET9kEu8Tt7EK4/IQy0kjAwEBXOy8SD8XWF4xeDcO+mCyagTILt3prxe/Zk89859oIVhdzGkCwx8YDPDCi0L0gsZgEKmMwqdH2bzwfpUwhtjznliYXDE0MHy6Uu9sN4KNtntLZofEXY8pDZOC6FtwHY+27DoC4byukQZV6Y2QiEoQiwmvg7LX7WkFC4rfS4eDvSBOwI4B0Ygt4kKKaOBc9JIVjM6zxIRv0FySNs4defEo5YFJHdf1zZUI/Jx8NCGHG5zVC7mNq6NDWMUY9iefw5GcSJXavQrYU+owh995cG/ux9se5k89Nuef/tZvt+PYhvBrXYJzJBHsqj+NIRJ0N8JjeGR6H9E3b3oRonWW4EXi4Z8mSP0dwQVZkOx0pmNYe7TqwmMpUYeKKufPpG5izoYiELdimxgAuEx3c6ycHJSK5cWbU4e4jmT8Dk4Lb2+KL3hy8fcVN4qc/Qtw1AncKL/BrhRT8NXQbycKqNp93Cyyl4Mp0Mp+PM9MpYb4cnmlzQNRi9DJ4wVK9GFKVmQD+YYpyOKUX0aA1D8gITC5KBGSXhxX4l5I/BIM3/s3RO5yhg1ayl/ZQdqpZzFpkewWWGbJI6505su90eTM9+gccLBH8RBqk1HFlaGAD/rMNpP0hOOzxS+Qq8wsG5cvP92eS6xh61dYKDvcUqrK/9MqcnV3kNPBdxlHoH0RpS1wQlFSJAru0zwmSHGyTlxzKbklez2qWRUHf7awCrpfqrHMejHNLqeqFyVCYllaPRQeVYfuP/oSjcGbSev6aXx8E3Dm4N7ReyWw3tfSsF03FMleZX0nTU9wbr4qIp+4c2yQoQ1hT9jkKdmr9UjopNMsUogTqtL6gr66T+Yh0sUSrGvafHTNlYXiomZamULkqTGvVIWVpa6rWrOasOrtpuvlYepWd2p/LRreSjtnGfSc0qmjSrCVsUYVUVeTfH/9kwnvxD4pVC90+G0eMGEK2+JESX9QR+Q/RbhWi9CNHHobx3iM6XUG0RWn1ZhB7/TomW4d0mlfpOiWnDlND7SYlcKA9a50Qut/IHQked7HwJoeq5DDuvLV3loap8Y1rcIIT1Rz4Ig+i7qaW75fk5W7IUiuNfYtvb//V4wCs5A2rFdlPZ+Z6HuO66TXKf1u3LipNc2ugln3u8qBXLmnZvNkYnIqsP1i1piZZYN/+P/QbWZWTySWCEF8mXldrVdw==&lt;/diagram&gt;&lt;/mxfile&gt;" style="background-color: rgb(255, 255, 255);"><defs/><g><path d="M 690 84 L 719.88 84" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 728.88 84 L 719.88 88.5 L 719.88 79.5 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="420" y="49" width="270" height="70" rx="10.5" ry="10.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 84px; margin-left: 421px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 18px;">Compute performance<br />data using set_segment_end_conditions</font></div></div></div></foreignObject><text x="555" y="88" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Compute performance...</text></switch></g><path d="M 820 114 L 820 149 L 820 148.88" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 820 157.88 L 815.5 148.88 L 824.5 148.88 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 137px; margin-left: 841px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font style="font-size: 18px;">Yes</font></div></div></div></foreignObject><text x="841" y="140" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">Yes</text></switch></g><path d="M 820 54 L 820 9 L 120 9 L 120 58.88" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 120 67.88 L 115.5 58.88 L 124.5 58.88 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 30px; margin-left: 840px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font style="font-size: 18px;">No</font></div></div></div></foreignObject><text x="840" y="33" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">No</text></switch></g><path d="M 820 54 L 910 84 L 820 114 L 730 84 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 170px; height: 1px; padding-top: 82px; margin-left: 735px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style=""><font style="font-size: 18px; border-color: var(--border-color);">h</font><font style="border-color: var(--border-color);"><font style="border-color: var(--border-color); font-size: 9px;">end, i</font><font style="font-size: 18px; border-color: var(--border-color);"> </font><span style="font-size: 18px;">= h</span><font style="border-color: var(--border-color); font-size: 9px;">end, i-1</font></font><span style="font-size: 18px;">?</span></font></div></div></div></foreignObject><text x="820" y="86" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">hend, i = hend, i-1?</text></switch></g><rect x="220" y="69" width="160" height="30" rx="4.5" ry="4.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 84px; margin-left: 221px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style=""><font style="font-size: 18px;">h</font><font style=""><font style="font-size: 9px;">end, i</font><font style="font-size: 18px;"> </font><span style="font-size: 18px;">= h</span><font style="font-size: 9px;">start</font><span style="font-size: 18px;"> + Δh</span><font style="font-size: 9px;">i</font></font></font></div></div></div></foreignObject><text x="300" y="88" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">hend, i = hstart + Δhi</text></switch></g><path d="M 380 84 L 409.88 84" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 418.88 84 L 409.88 88.5 L 409.88 79.5 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="60" y="69" width="120" height="30" rx="4.5" ry="4.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 84px; margin-left: 61px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style=""><span style="font-size: 18px;">Compute Δh</span><font style="font-size: 9px;">i</font></font></div></div></div></foreignObject><text x="120" y="88" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Compute Δhi</text></switch></g><path d="M 180 84 L 209.88 84" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 218.88 84 L 209.88 88.5 L 209.88 79.5 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 20 84 L 49.88 84" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 58.88 84 L 49.88 88.5 L 49.88 79.5 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="10" cy="84" rx="10" ry="10" fill="#000000" stroke="rgb(0, 0, 0)" pointer-events="all"/><ellipse cx="820" cy="169" rx="10" ry="10" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><ellipse cx="820" cy="169" rx="5" ry="5" fill="#000000" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
\ No newline at end of file
docs/documentation/analysis/mission_analysis/figures/acceleration/iteration.gif

1.07 MiB

docs/documentation/analysis/mission_analysis/figures/mission_profile.png

130 B

docs/documentation/analysis/mission_analysis/figures/transition_altitude.png

131 B

This diff is collapsed.
# Introduction {#mainpage}
**mission_analysis** is an assessment tool that outputs the flown mission profile, saves characteristic parameters within that profile and checks if performance requirements are met. The following mission types can be analyzed:
- `design_mission`:
- Defines the mission for which the aircraft shall be optimized
- $MTOM$ is altered during the design process
- Exports the `mission profile` as a CSV file
- Except $MTOM$, all other results for the [Aircraft Exchange File](getting_started.md/#acxml) are saved in the `design_mission` node
- `study_mission`:
- Calculates off-design missions
- Exports a `mission profile` as a CSV file
- All results for the [Aircraft Exchange File](getting_started.md/#acxml) are saved in the `study_mission` node
- `requirements_mission`:
- Checks top-level aircraft requirements and possible maxima (like maximum operating altitude)
- In the [Aircraft Exchange File](getting_started.md/#acxml) only the `requirement_compliance` block is edited
Mentioned parameters include the energy consumptions which has a high impact on how the aircraft is sized. That's the reason why (unlike many other assessment tools) its `design_mission` calculation takes place within the design loop of our [RCE Workflow](../../../workflow.md).
Once your mission is calculated, you can choose from a wide range of profile data which allows you to further investigate what your aircraft actually does. Here's a little example graph which visualizes the engines' total fuelflow during a `design_mission`:
<p align="center">
<img src="figures/mission_profile.png" alt="Mission Profile" width="85%">
<br>
<em>Visualization of an example mission profile.</em>
</p>
## Quick Overview
| Mission method | mission type | Status |
|----------------------------------|---------------------------|----------------------------------------|
| [3D Standard Mission (low-fidelity)](methods.md/#midfi)|`design_mission::breguet`| running :white_check_mark:|
| [3D Standard Mission (mid-fidelity)](methods.md/#midfi)|`design_mission` | running :white_check_mark:|
| [3D Standard Mission (mid-fidelity)](methods.md/#midfi)|`study_mission` | running :white_check_mark:|
| [3D Standard Mission (mid-fidelity)](methods.md/#midfi)|`requirements_mission` | running :white_check_mark:|
| [4D_trajectory (high-fidelity)](methods.md/#highfi) |None | under development :construction:|
By now, only a [standard (3D) mission method](methods.md/#midfi) is implemented. Its mid-fidelity version can trigger the three missions mentioned above while the low-fidelity sub-version is only used for the `design_mission`. The later is a Breguet-based estimation of the consumed mission fuel and it is triggered automatically if no initial values where given for the `design_mission`. A 4D trajectory mission is also planned, but it is still in the making.
<pre class='mermaid'>
graph TD;
A[mission_analysis]-->B[design_mission]
B-->E[low-fidelity]
B-->F[mid-fidelity]
B-->G["(high-fidelity)"]
A-->C[study_mission]
C-->H[mid-fidelity]
C-->I["(high-fidelity)"]
A-->D[requirements_mission]
D-->J[mid-fidelity]
D-->K["(high-fidelity)"]
</pre>
## Where to start
If you want a step-by-step guide to start your first calculation, head over to the [Getting Started](getting_started.md) section. We will show you some basic functionalities and how to get your airplane into the air.
Further details about the methods can be found [here](methods.md).
# Mission Methods {#missions}
Depending on computing resources and needed level of detail, we have set up three different approaches to calculate a mission. Okay... it's only two by now, but the third will come for sure! Let's see, what we can find here.
## Breguet Estimation (Low Fidelity) {#lowfi}
In this method, the trip fuel mass $ m_{fuel,\,trip} $ (consumed fuel from takeoff until taxi-in) is calculated using the Breguet range equation. To do so, the time needed for climb and cruise are derived from the `mission file`. The approach segment is neglected since its share is rather small and the engines are set to `maximum_continuous` which will overestimate the needed fuel anyway. Up next, it is calculated how much lift $ \overline{L} $, drag $ \overline{D} $, thrust $ \overline{T} $ and fuel massflow $ \overline{\dot{m}}_{fuel} $ are needed on average to reach the top of climb and the end of cruise. After those values are set, the trip fuel mass is computed in the following way:
$ m_{fuel,\,trip} \approx \sum_{i=0}^{n} m_{fuel,\,i} $
$ m_{fuel,\,0} = 0 $
$ m_{fuel,\,i} = (m_{zero\textrm{-}fuel\,mass} + m_{fuel,\,i-1}) \cdot e^{t_{i} \cdot TSFC_i \cdot g \cdot \frac{\overline{D_i}}{\overline{L_i}}} $
$ TSFC_i = \frac{\overline{\dot{m}}_{fuel,\,i}}{\overline{T}_i} $
To get the total fuel carried for the mission $ m_{fuel,\,mission} $, taxi-out $ m_{fuel,\,taxi\textrm{-}out} $ and reserve fuel $ m_{fuel,\,reserve} $ are added:
$ m_{fuel,\,mission} = m_{fuel,\,trip} + m_{fuel,\,taxi\textrm{-}out} + m_{fuel,\,reserve} $
Depending on taxiing procedures and reserve fuel methods like JAR or FAR, the fuel quantities may differ (for more details, [click here](#fuel_planning)).
!!! note
The Breguet Estimation is a sub-method of the 3D Standard Mission and therefore uses the same functions for e.g. taxi fuel calculations. When calculating a `design_mission` without having any mission data yet (first loop), the Breguet Estimation is activated automatically to ensure greater robustness. To trigger this method manually, set the [Configuration File's](getting_started.md/#config_file) `fidelity_level` node to `low`.
## 3D Standard Mission (Mid Fidelity) {#midfi}
This standard method for the **mission_analysis** tool calculates a `mission profile` that consists of two space dimension plus one time dimension (range, altitude & time). Due to that, it will not handle more complex trajectories like specific flight paths between two airports. To set up its 2D profile, this method derives various target points from [departure, cruise and approach steps](mission_steps.md) stated in the `mission file`. There, every steps' `mode` indicates how _FlightConditions_ and _OperatingConditions_ shall be manipulated to reach those target points. _FlightConditions_ are used to save performance-related values (like true airspeed and current altitude) while _OperatingConditions_ will tell **mission_analysis** in which conditions the aircraft is operated (e.g. high-lift configuration or engine rating).
The following `modes` can be found in the steps of the `mission file`:
- `takeoff`
- `climb`
- `climb_to_cruise`
- `climb_to_ceiling`
- `change_flight_level_constant_ROC`
- `accelerate`
- `change_speed`
- `change_speed_to_CAS`
- `change_speed_to_Mach`
- `cruise`
- `descend_to_approach`
- `descend`
- `level_glide_slope_interception`
- `landing`
!!! note
Which `mode` is used will be determined by the steps in the `mission file`. If you want to alter them, check out [Create Mission XML](../../sizing/create_mission_xml/index.md).
For each step, the start conditions are initialized using the exit data of the previous one (for `TAKEOFF`, an initial step is given manually where most values are set to $0$). Depending on the `mode` different functions are used to change the current conditions of the aircraft iteratively until the required end conditions of the [steps](mission_steps.md) are reached. Since those iterations are split into many small increments, processing the data takes much longer than the [Breguet Estimation](#lowfi). On the upside, this method offers a superior resolution without which a valid analysis of the mission would not be possible. Also, for each increment the relevant flight parameters are saved into a `mission profile` CSV sheet which can be further analyzed.
!!! note
[The Breguet Estimation](#lowfi) only estimates the aircraft performance using average values for each flight step. Whether the aircraft is able to deliver the needed thrust or lift throughout the whole mission cannot be assured! To get valid mission profiles, always use the [3D Standard Mission](#midfi)! To use this method, set the [Configuration File's](getting_started.md/#config_file) `fidelity_level` node to `mid`.
As you might have noticed, we have only discussed the `mission profile` from takeoff until touchdown, but what about taxiing and reserve fuel? Like the others, taxiing steps are described in the [Mission Steps](mission_steps.md/#taxiing) section while fuel planning will be tackled in the following subparagraph.
### Fuel Planning Procedures {#fuel_planning}
If you want to set a specific fuel planning procedure, head over to the [Aircraft Exchange File](getting_started.md/#acxml). There, you can select between EASA's fuel planning (_JAR_), FAA's domestic fuel planning (_FAR_DOMESTIC_) and FAA's flag or supplemental fuel planning (_FAR_FLAG_). How the fuel quantities for the different procedures shall be calculated can be changed in the [Configuration File](getting_started.md/#config_file).
_JAR_ consists of:
- Extra fuel:
- Fuel mass that shall be carried at the discretion of the captain
- Alternate Fuel:
- Estimated fuel needed to fly the `alternate_distance` (from `mission_file`) on $FL200$
- Final Reserve Fuel:
- $30\,min$ holding at $1500\,ft$ above destination airport at holding speed and ISA-Conditions
- Additional Fuel:
- $15\,min$ holding at $1500\,ft$ above destination airport at holding speed and ISA-Conditions
- Contingency Fuel using the maximum of the following quantities:
- $5\,min$ holding at $1500\,ft$ above destination airport at holding speed and ISA-Conditions
- $5\,\%$ of trip-fuel or $3\,\%$ if en-route alternate is available
_FAR_DOMESTIC_ consists of:
- Alternate Fuel:
- Estimated fuel needed to fly the `alternate_distance` (from `mission_file`) on $FL200$
- Final Reserve Fuel:
- $45\,min$ at mean cruise fuel consumption
_FAR_FLAG_ consists of:
- Alternate Fuel:
- Estimated fuel needed to fly the `alternate_distance` (from `mission_file`) on $FL200$
- Final Reserve Fuel:
- $30\,min$ holding at $1500\,ft$ above destination airport at holding speed and ISA-Conditions
- Additional Fuel:
- $15\,min$ holding at $1500\,ft$ above destination airport at holding speed and ISA-Conditions
- Contingency Fuel:
- $10\,\%$ of the total required time from brake release (departure airport) to landing (destination airport) at mean cruise fuel consumption
## 4D Trajectory (High Fidelity) {#highfi}
Oops, that is not ready yet. An industrious UNICADO coder is probably working on that right now :unicorn:
# Mission Steps {#mission_steps}
In this section, you will learn how **mission_analysis** interprets the different mission steps from the `mission file`. Beside that, we show you how the taxiing procedures are implemented.
## Mission Step Input Parameters
A mission step can consist of the following nodes:
- `configuration`: Aircraft configuration to identify the right polars for aerodynamic calculations (mandatory)
- `derate`: Thrust derate to (de)throttle the engines during the step (mandatory)
- `mode`: Defines the mode of the step (mandatory)
- `rating`: The engine's thrust rating (mandatory)
- `shaft_power_takeoff_schedule`: Defines the power the engines must provide for the aircraft systems (mandatory)
- `bleed_air_takeoff` Schedule: Defines bleed air offtakes the engines must provide for the aircraft systems (mandatory)
- `altitude`: Altitude at the end of this step.
- `calibrated_airspeed`: Airspeed at the end of this step
- `mach_number`: Mach number at the end of this step
- `rate_of_climb_limit`: Maximum rate of climb during this step
- `flight_management_system`: Indicator if a flight management system is implemented and what its cost index is (`cruise_step` only)
- `round_to_regular_flight_level`: Rounded flight levels to the multiples of 10 (`cruise_step` only)
- `auto_select_optimum_flight_level`: Switch to let **mission_analysis** decide what FL is the best (`cruise_step` only)
- `glide_path`: Angle between glide path and runway (`approach_step` only)
If you need further information about these, please head other to [Create Mission XML](../../sizing/create_mission_xml/index.md).
## Step Modes
In the following paragraphs, we focus on how the steps' `mode` will manipulate the `mission_profile` from start to landing.
### Takeoff {#takeoff_subparagraph}
The `takeoff` is composed of ground run (break release until lift-off) and first climb segment to screen height ($35\,ft$). First, the aircraft is accelerated from $ 0\,\frac{m}{s} $ to the lift-off velocity $ v_{LOF} $ utilizing the `acceleration increments` of the [Configuration File](getting_started.md/#config_file). According to [EASA's CS-25 rules](https://www.easa.europa.eu/en/document-library/easy-access-rules/easy-access-rules-large-aeroplanes-cs-25), $ v_{LOF} $ equals $ 110\,\%$ $v_{MU}$ (minimum unstick speed) for aerodynamically limited aircrafts and $ 108\,\%$ $v_{MU}$ for geometry limited aircrafts. To generalize the $v_{LOF}$ calculation, a more conservative approach has been implemented. Since the climb speed at screen height $v_2$ should always be (moderately) greater than the lift-off speed, the following approximation is used (all velocities are calibrated airspeeds):
$$
v_{LOF} \approx v_2 \geq 1.2 \cdot v_{stall} = 1.2 \cdot 0.94 \cdot v_{stall,\,1g} = 1.128 \cdot v_{stall,\,1g}
$$
The 1-g stall speed $v_{stall,\,1g}$ is the speed where lift $L$ is equal to the aircraft's weight $ m_{aircraft} \cdot g $ when operating at maximum lift coefficient $C_{L,\,max}$:
$$
L = m_{aircraft} \cdot g = \frac{1}{2} \cdot \rho \cdot v_{stall,\,1g}^2 \cdot C_{L,\,max} \cdot S_{ref}
\iff v_{stall,\,1g} = \sqrt{\frac{2 \cdot m_{aircraft} \cdot g}{\rho \cdot C_{L,\,max}\cdot S_{ref}}}
$$
After the aircraft's lift-off, it [climbs with constant speed](#climb_subparagraph) towards screen height to finish this segment.
### Accelerate {#accelerate_subparagraph}
`acceleration` segments activate the _change_speed_at_constant_ROC_ function. This mode is usually used for altitudes below $10\,000\,ft$ where the aircraft's speed is increased while retaining a given rate of climb (departure steps). To do so, the speed gap $\Delta v$ between segment start and end is divided into $n$ smaller steps using the [Configuration File's](getting_started.md/#config_file) `acceleration increment`. Then, for $n$ steps the aircraft's velocity is increased using the `acceleration increment`. For each increment, an iterative loop is initiated in which its end altitude is set like this:
$$
h_{end} = h_{start} + \Delta h = h_{start} + \sin(\frac{\gamma}{2 \cdot \overline{a}} \cdot (v_{start}^2 - v_{end}^2))
$$
before adapting the other _FlightConditions_ using the _set_segment_end_conditions_ function. Once the end altitude within the iteration loop doesn't change anymore, the parameters have converged. Hence, they are saved into the `mission profile` and the next increment will be calculated.
<p align="center">
<img src="../figures/acceleration/iteration.gif" alt="Acceleration flow chart" width="95%">
<br>
<em>Flow chart displaying the iterative pattern to identify the increment's height change.</em>
</p>
### Change Speed {#change_speed_subparagraph}
See [Accelerate](#accelerate_subparagraph). Unlike `accelerate`, `change_speed` uses a (constant) given glide path angle from the `mission file` to derive a rate of climb. For this reason, it is used for deceleration during approach steps below $10\,000\,ft$ (ATC regulations demand certain glide path angles which can be maintained with this mode).
### Change Speed to CAS {#change_speed_to_CAS_subparagraph}
`change_speed_to_CAS` alters the calibrated airspeed while a given rate of climb from the `mission file` is maintained. It's an adaption of [Accelerate](#accelerate_subparagraph) for altitudes between $10\,000\,ft$ and the transition height $h_{transition}$.
### Change Speed to Mach {#change_speed_to_Mach_subparagraph}
`change_speed_to_Mach` alters the Mach number while a given rate of climb from the `mission file` is maintained. It's an adaption of [Accelerate](#accelerate_subparagraph) for altitudes above the transition height $h_{transition}$.
### Climb {#climb_subparagraph}
The `climb` mode activates the _change_altitude_at_constant_speed_ function.
To ensure that the aircraft maintains an efficient aerodynamic behavior, the calibrated airspeed is kept constant while the aircraft's altitude is increased/decreased by $\Delta h$. To achieve this, $\Delta h$ is split into $n$ steps by dividing it by the [Configuration File's](getting_started.md/#config_file) `altitude increment`. By default, the minimum rate of climb $ROC$ with which the new altitudes are reached is set to $100\,\frac{ft}{min}$. The actual $ROC$ is calculated using the glide path $\gamma$ while maintaining the total available thrust $T$:
$$
\gamma = \arcsin \left(\frac{T-D}{g\cdot m_{aircraft}}\right);
$$
$$
ROC = \sin(\gamma) \cdot v_{TAS};
$$
If no maximum $ROC$ is given by the `mission file`, $ROC$ will be taken from the equation above. Else, it is checked if the given $ROC$ limit is exceeded. If this is the case, $ROC$ is set to the maximum while adapting $\gamma$ and $T$ to it. Analogous to [Change Speed](#change_speed_subparagraph), the increment's _FlightConditions_ are looped until $\gamma$ has converged. Afterwards, they are saved into the `mission profile` and the next increment will be calculated.
### Climb to Cruise {#climb_to_cruise_subparagraph}
The `climb_to_cruise` mode adapts [Climb](#climb_subparagraph) with the difference that its minimum rate of climb is set to $ 0\,\frac{ft}{min}$. While climbing towards the initial cruise altitude, the air becomes thinner and colder which leads to an increasing Mach number. Once the design cruise Mach number $M_{cruise}$ is exceeded, a constant CAS climb would lead to compressibility effects which could worsen the aircraft's performance. Therefore, the Mach number is kept constant as soon as $M_{cruise}$ is reached. Therefore, $M_{cruise} \approx M_{transition}$.
The altitude at which this occurs is called transition altitude $h_{transition}$ (aka crossover altitude). $h_{transition}$ is defined as the geopotential pressure altitude at which calibrated airspeed and Mach number are representing the same value of true airspeed ($TAS_{Mach} = TAS_{CAS}$). Using the barometric formula, $h_{transition}$ is computed in the following way:
<p align="center">
<img src="../figures/transition_altitude.png" alt="Transition Altitude" width="85%">
<br>
<em>Climb profile at given IAS/MACH Law [1].</em>
</p>
$$
h_{transition} = \frac{T_{h=0}}{\frac{\delta T}{\delta h}} \cdot \left(\frac{p_{transition}}{p_{h=0}}\right)^{\frac{R\cdot \frac{\delta T}{\delta h}}{g} - 1}
$$
$R$ represents the Gas Constant and $g$ the gravitational acceleration. Within the tropopause, the temperature gradient $\frac{\delta T}{\delta h}$ equals $-0.0065\,[K/m]$; above it is defined as $0\,[K/m]$. For $TAS_{Mach}$, you can simply use Mach number $M_{transition}$ and speed of sound $a_{transition}$ which can also be displayed in relation to sea-level conditions:
$$
TAS_{Mach} = M_{transition}\cdot a_{transition} = M_{transition}\cdot a_{z=0} \cdot\sqrt{\frac{T_{transition}}{T_{z=0}}}
$$
$TAS_{CAS}$ is computed using isentropic flow equations:
$$
TAS_{CAS} = a_{h=0} \sqrt{\frac{2}{\kappa - 1} \cdot \frac{\sqrt{T_{transition}}}{T_{h=0}}\cdot\left(\frac{q}{p_{transition}}+1\right)^{\frac{\kappa -1}{\kappa}}-1}
$$
Where the the stagnation pressure $q$ is derived from the calibrated airspeed:
$$
CAS = a_{h=0} \sqrt{\frac{2}{\kappa - 1} \cdot \left(\frac{q}{p_{z=0}}+1\right)^{\frac{\kappa -1}{\kappa}}-1}
$$
Finally, the following statement can be derived for the needed pressure ratio characterizing $h_{transition}$:
$$
\frac{p_{transition}}{p_{h=0}} = \frac{\left(1 + \frac{\kappa-1}{2} \cdot \left(\frac{CAS}{a_{h=0}}\right)^{2} \right)^{\frac{\kappa}{\kappa-1}} - 1}{\left(1 + \frac{\kappa-1}{2} \cdot M_{transition}^{2} \right)^{\frac{\kappa}{\kappa-1}} - 1}
$$
!!! note
To determine the cruise range for the [Cruise](#cruise-cruise_subparagraph) segment, the index on the `mission profile` where the aircraft reaches the `initial_cruise_altitude` is saved for later usage.
### Climb to Ceiling {#climb_to_ceiling_subparagraph}
This mode should only be used for `requirements missions`! This mode contains four segments:
1. [Climb to Cruise](#climb_to_cruise_subparagraph).
2. From there, climb to maximum operating altitude with $ROC = 100\,\frac{ft}{min}$ or with a automated maximum rate of climb by turning on the `rate_of_climb_switch`. Either way, the engines are set to `maximum continuous`.
3. Keep on climbing with $ROC = 100\,\frac{ft}{min}$. Once the engines fail, climb with $ROC = 50\,\frac{ft}{min}$ until they ultimately fail (end altitude = ceiling altitude).
4. Reset to cruise altitude and repeat step 2 with one engine inoperative.
### Change Flight Level {#change_flight_level_constant_ROC_subparagraph}
The `change_flight_level_constant_ROC` segment adapts the [Climb](climb_subparagraph) mode using a minimum rate of climb from the `mission file`. Typically, this option is used in cruise steps to initiate a flight level change. Due to the fact that the cruise altitude usually is way above the transition altitude, the Mach Number is kept constant during this altitude change (see [Climb to Cruise](#climb_to_cruise_subparagraph) for the explanation).
### Cruise {#cruise_subparagraph}
In this segment, the aircraft is moved forward with constant speed and $ROC = 0\,\frac{ft}{min}$. How long this `cruise` segment shall last, is determined by the `relative_segment_length` (`mission_file`) which will be applied to the estimated cruise range. To get the latter, the descend range $R_{descend}$ is estimated using the [Breguet method](#lowfi). Then, the afore saved mission segment for reaching `initial_cruise_altitude` (ICA) provides $R_{ICA}$ leading us to the current `cruise` segment's range:
$$
R_{cruise} = R_{descend} - R_{ICA}
$$
To iterate through this range, it is split into $n$ steps using the [Configuration File's](getting_started.md/#config_file) `way_increment`. Analogous to [Change Speed](#change_speed_subparagraph), the increment's _FlightConditions_ are looped until its consumed fuel mass has converged. Afterwards, they are saved into the `mission profile` and the next increment will be calculated.
Even though this mode is not used to climb, the `auto_select_optimum_flight_level` option (see `cruise_steps` in the `mission file`) can be switched on to alter the flight level during `cruise`. If a better specific air range can be obtained on another flight level, **mission_analysis** will test whether the aircraft would consume less fuel there. If this is the case, [Change Flight Level](#change_flight_level_constant_ROC_subparagraph) will take care of the altitude change. Since for regularity reasons discrete flight levels are mandatory, `round_to_regular_flight_level` assures that only permitted altitudes are applied.
!!! note
Even if the specific air range of another flight level might be better, a flight level change can cost more fuel than it saves until the end of cruise! Of course, **mission_analysis** is smart enough to take this into account :nerd:
### Descend to Approach {#descend_to_approach_subparagraph}
`descend_to_approach` is used to initiate a descend segment from the current cruise altitude towards approach $(10\,000\,ft)$. It uses the same functions the [Climb](#climb_subparagraph) mode does with the difference that its minimum rate of climb is set to $0\,\frac{ft}{min}$. Like in [Climb to Cruise](#climb-climb_subparagraph), the transition altitude $h_{transition}$ will presumably be crossed in this segment. Therefore, the aircraft first descends with a constant Mach number. When $h_{transition}$ is reached, it continues with a constant CAS climb.
!!! note
Since the calibrated airspeed won't further decrease below $h_{transition}$, the demanded velocity for the segment's end (segment's `calibrated_airspeed` node in the `mission file`) must be reached before that altitude. If this is not the case, the aircraft will be automatically decelerated by activating a [Change Speed](#change_speed_subparagraph) segment in between.
### Descend {#descend_subparagraph}
This mode adapts [Climb](climb_subparagraph) with the difference that its minimum rate of climb is set to $0\,\frac{ft}{min}$ and a glide path angle $\gamma$ is read from the `mission file`. This comes in handy to meet ATC regulations for lower altitudes. Hence, `descend` should be used for approach steps below $10\,000\,ft$.
!!! note
After the last descend segment, **mission_analysis** expects the aircraft to be at threshold crossing height ($50\,ft = 15.24\,m$). Otherwise, [Landing](#landing) might cause problems!
### Glide Slope Interception {#level_glide_slope_interception_subparagraph}
With `level_glide_slope_interception` the final approach slope is initiated by [cruising](#cruise_subparagraph) at glide slope interception altitude ($3000\,ft$) with constant calibrated airspeed. The distance until the aircraft reaches the interception point $\Delta x$ is derived from the landing glide slope $\gamma$ (usually it's about $3°$), total range $R_{total}$ and the aircraft's current position:
$$
\Delta x = R_{total} - \frac{h_{current}}{\tan(-\gamma)} - R_{current}
$$
!!! warning
If $\Delta x$ becomes negative, the interception was overflown. This can happen if e.g. the engine produces too much thrust while decelerating or the drag is too low. Either way, **mission_analysis** will try to land the aircraft, but the result may not be ATC conform.
### Landing {#landing_subparagraph}
Like [Descend](#descend_subparagraph), the `landing` mode changes the altitude using a constant calibrated airspeed while maintaining a given glide path angle. After touchdown, the aircraft is decelerated to the dedicated taxi speed. Beside the aircraft's brakes, you can also turn on the `thrust_reverser` in the [Configuration File](getting_started.md/#config_file). This may shorten the needed runway length drastically, but you must be sure your engines/aircraft configuration is capable of this.
## Taxiing procedures
Unlike the other mission steps, taxi-out and taxi-in are defined in the overall `mission` block within the `mission file`. The taxi fuel consumption for both the origin and destination is determined based on the type of `taxiing_procedure` used. If electric taxiing is used, fuel is only needed for engine warm-up at the origin airport, while no fuel is allocated for taxiing at the destination. The warm-up fuel is calculated using the `engine_warmup_time` $t_{warm\textrm{-}up}$ time and fuelflow rate $\dot{m}_{warm\textrm{-}up}$ which is derived from the [Configuration File's](getting_started.md/#config_file) `fuel_flow_factor_taxiing` which is applied to the engine running in `idle`:
$$
m_{fuel,\,warm\textrm{-}up} = t_{warm\textrm{-}up} \cdot \dot{m}_{warm\textrm{-}up}
$$
If electric taxiing is not used, fuel is needed for both origin and destination taxi operations. In this case, the required fuel mass is based on the taxiing time $t_{taxi}$ at each airport (`taxi_time_origin` & `taxi_time_destination`). Analogous to $\dot{m}_{warm\textrm{-}up}$, we get the taxi fuels:
$$
m_{fuel,\,taxi\textrm{-}out} = t_{taxi\textrm{-}out} \cdot \dot{m}_{taxi\textrm{-}out}
$$
$$
m_{fuel,\,taxi\textrm{-}in} = t_{taxi\textrm{-}in} \cdot \dot{m}_{taxi\textrm{-}in}
$$
!!!node
The fuelflow is computed the same way for the three procedures above. Therefore all of these are equal.
......@@ -286,8 +286,18 @@ nav: # Customizes the main navigation struc
- systems_design/namespaces.md
- systems_design/files.md
- systems_design/functions.md
- Analysis:
- documentation/analysis/index.md # Link to analysis module page.
- Analysis:
- Modules: documentation/analysis.md # Link to analysis module page.
- Mission Analysis:
- Introduction: documentation/analysis/mission_analysis/index.md
- Getting Started: documentation/analysis/mission_analysis/getting_started.md
- Mission Methods: documentation/analysis/mission_analysis/methods.md
- Mission Steps: documentation/analysis/mission_analysis/mission_steps.md
- API Reference:
- mission_analysis/classes.md
- mission_analysis/namespaces.md
- mission_analysis/files.md
- mission_analysis/functions.md
- Weight and Balance Analysis:
- Introduction: documentation/analysis/weight_and_balance_analysis/index.md
- Basic Concepts: documentation/analysis/weight_and_balance_analysis/basic-concepts.md
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment