diff --git a/docs/documentation/analysis/mission_analysis/figures/acceleration/PP_for_gif.pptx b/docs/documentation/analysis/mission_analysis/figures/acceleration/PP_for_gif.pptx new file mode 100644 index 0000000000000000000000000000000000000000..4bde5657badf3751e3d952b276529995f7c4db8b Binary files /dev/null and b/docs/documentation/analysis/mission_analysis/figures/acceleration/PP_for_gif.pptx differ diff --git a/docs/documentation/analysis/mission_analysis/figures/acceleration/acceleration.drawio b/docs/documentation/analysis/mission_analysis/figures/acceleration/acceleration.drawio new file mode 100644 index 0000000000000000000000000000000000000000..e2c9f9e4e859540a3704b6c09cc603bb52f480e2 --- /dev/null +++ b/docs/documentation/analysis/mission_analysis/figures/acceleration/acceleration.drawio @@ -0,0 +1,77 @@ +<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="<font style="font-size: 18px;">Compute performance<br>data using set_segment_end_conditions</font>" 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="<font style="font-size: 18px;">Yes</font>" 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="<font style="font-size: 18px;">No</font>" 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="<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);">&nbsp;</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>" 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="<font style=""><font style="font-size: 18px;">h</font><font style=""><font style="font-size: 9px;">end, i</font><font style="font-size: 18px;">&nbsp;</font><span style="font-size: 18px;">= h</span><font style="font-size: 9px;">start</font><span style="font-size: 18px;">&nbsp;+ Δh</span><font style="font-size: 9px;">i</font></font></font>" 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="<font style=""><span style="font-size: 18px;">Compute Δh</span><font style="font-size: 9px;">i</font></font>" 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> diff --git a/docs/documentation/analysis/mission_analysis/figures/acceleration/acceleration.png b/docs/documentation/analysis/mission_analysis/figures/acceleration/acceleration.png new file mode 100644 index 0000000000000000000000000000000000000000..f9fea516b41e2dd9395ba8660218fc1556a24f5a --- /dev/null +++ b/docs/documentation/analysis/mission_analysis/figures/acceleration/acceleration.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e8c81a6e85a4f82e8347ad7891ef5262b8cc6bdc09c4601d478b910f6a496e4 +size 32131 diff --git a/docs/documentation/analysis/mission_analysis/figures/acceleration/acceleration.svg b/docs/documentation/analysis/mission_analysis/figures/acceleration/acceleration.svg new file mode 100644 index 0000000000000000000000000000000000000000..19adb8b8811499df8ea2600158f248a664b9461c --- /dev/null +++ b/docs/documentation/analysis/mission_analysis/figures/acceleration/acceleration.svg @@ -0,0 +1,4 @@ +<?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="<mxfile host="Electron" modified="2025-01-22T15:10:02.927Z" 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="Nayg6E22_kPXE1fj6PBs" version="22.0.2" type="device"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">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==</diagram></mxfile>" 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 diff --git a/docs/documentation/analysis/mission_analysis/figures/acceleration/iteration.gif b/docs/documentation/analysis/mission_analysis/figures/acceleration/iteration.gif new file mode 100644 index 0000000000000000000000000000000000000000..bf95add9286a42ac935dc38e38ed7da0be351da4 Binary files /dev/null and b/docs/documentation/analysis/mission_analysis/figures/acceleration/iteration.gif differ diff --git a/docs/documentation/analysis/mission_analysis/figures/mission_profile.png b/docs/documentation/analysis/mission_analysis/figures/mission_profile.png new file mode 100644 index 0000000000000000000000000000000000000000..f39a710ce4fd20a9ab6dfc822dfbedac73e477d9 --- /dev/null +++ b/docs/documentation/analysis/mission_analysis/figures/mission_profile.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38988f840774e65c1645ce9584394aed3beb50469cffe08ee0c96ca955017719 +size 60706 diff --git a/docs/documentation/analysis/mission_analysis/figures/transition_altitude.png b/docs/documentation/analysis/mission_analysis/figures/transition_altitude.png new file mode 100644 index 0000000000000000000000000000000000000000..c1aa28b66e9dfc38176773ff2859d3bb1f81701d --- /dev/null +++ b/docs/documentation/analysis/mission_analysis/figures/transition_altitude.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6abf3139435c76d8c9118a2fe7e31790fe74a8befdd026fa7ad50481da4ddf6 +size 150526 diff --git a/docs/documentation/analysis/mission_analysis/getting_started.md b/docs/documentation/analysis/mission_analysis/getting_started.md new file mode 100644 index 0000000000000000000000000000000000000000..db54daa790b9087e3546c065ce5cbdf193d2df48 --- /dev/null +++ b/docs/documentation/analysis/mission_analysis/getting_started.md @@ -0,0 +1,478 @@ + +# Getting started {#getting_started} + +Tickets :ticket: please: We are about to start! In this guide, we will show you how to set up your first mission using our **mission_analysis** tool. + + +## Step-by-step + +To be able to execute **mission_analysis**, you have to provide the following data beside your [Aircraft Exchange File](#acxml): + +- `mission_data` (e.g. `design_mission.xml`) +- `aero_data` (polar files) +- `engine_data` (engine maps) + +!!! note + Those files are generated by [Create Mission XML](../../sizing/create_mission_xml/index.md), [Aerodynamic Assessment](../../sizing/aerodynamic_analysis/index.md) and [Propulsion Design](../../sizing/propulsion_design/index.md) and shall not be edited manually! + +To do so, you can either use: + +- a pre-calculated aircraft configuration (e.g. from the `Aircraft References` repository), +- an aircraft project in which the [Sizing Tools](../../sizing/sizing.md) and the [Aerodynamic Assessment](../../sizing/aerodynamic_analysis/index.md) tool have already been executed at least once. + +Once your aircraft is ready, you only need to follow these steps to start your calculation: + +1. Head over to `mission_analysis_conf` (more details [here](#config_file)). Assuming this file represents the version of the develop branch, edit the following nodes within `control_settings`: + - set `aircraft exchange file_name` and `aircraft exchange file_directory` to your respective settings, + - set the `plot_output` to false if you don't have `inkscape` or `gnuplot` installed or define `inkscape_path` and `gnuplot_path` if their directories are not registered in your system environments. +2. Open your terminal within the `mission_analysis` folder and run the **mission_analysis** executable. +3. Fasten your seatbelt: We are ready for takeoff! :airplane: + +If everything is set up correctly, your first `design_mission` should land a few seconds later :star: + +## First iteration results + +!!! note + If you are using a pre-calculated aircraft, **mission_analysis** will generate its results using parameters from the previous calculations. Therefore, the behavior for an initial execution can not be observed. Continue with [Further Iterations](#further_iterations). + +Due to many dependencies between the [sizing tools](../../sizing/sizing.md), performance data and component parameters are quite off within the first iteration. This can lead to an unstable aircraft configuration that will fail the `design_mission` (e.g. wrongly sized engines can't climb to the initial cruise altitude). To avoid this, the [low-fidelity 3D Standard Mission](methods.md/#lowfi) (`design_mission::breguet`) is triggered if no previous mission calculation can be found. Unlike the ordinary mission calculation, this sub-version of the `design_mission` finishes after a rough estimation of the fuel consumption. Once this method is finished, the `masses_cg_inertia/maximum_takeoff_mass/mass_properties/mass` node is updated and this block is written into the [Aircraft Exchange File](#acxml): + +```xml +<mission description="Mission data" tool_level="0"> + <design_mission description="Data of design mission"> + <range description="Traveled range from break release to end of taxi at destination"> + <value>4500000</value> + <unit>m</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>5000000</upper_boundary> + </range> + <loaded_mission_energy description="Amount of energy loaded into tanks (including reserves) for the mission"> + <mission_energy ID="0" description="Amount of energy loaded into tanks (including reserves) for specified energy carrier"> + <consumed_energy description="Energy amount"> + <value>7.0e+11</value> + <unit>J</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1e+13</upper_boundary> + </consumed_energy> + <energy_carrier_ID description="See energy carrier specification node"> + <value>0</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>5</upper_boundary> + </energy_carrier_ID> + </mission_energy> + </loaded_mission_energy> + <in_flight_energy description="Amount of energy needed for in-flight segments (all segments from takeoff to landing)"> + <trip_energy ID="0" description="Amount of energy needed for trip segments (all segments from takeoff to landing) for specified energy carrier"> + <consumed_energy description="Energy amount"> + <value>5.5e+11</value> + <unit>J</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1e+13</upper_boundary> + </consumed_energy> + <energy_carrier_ID description="See energy carrier specification node"> + <value>0</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>5</upper_boundary> + </energy_carrier_ID> + </trip_energy> + </in_flight_energy> + <taxi_energy description="Amount of energy needed for taxiing specified energy carrier"> + <taxi_out_energy ID="0" description="Amount of energy needed for taxiing at origin for specified energy carrier"> + <consumed_energy description="Energy amount"> + <value>1.0+10</value> + <unit>J</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1e+13</upper_boundary> + </consumed_energy> + <energy_carrier_ID description="See energy carrier specification node"> + <value>0</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>5</upper_boundary> + </energy_carrier_ID> + </taxi_out_energy> + <taxi_in_energy ID="0" description="Amount of energy needed for taxiing at destination for specified energy carrier"> + <consumed_energy description="Energy amount"> + <value>5.0e9</value> + <unit>J</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1e+13</upper_boundary> + </consumed_energy> + <energy_carrier_ID description="See energy carrier specification node"> + <value>0</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>5</upper_boundary> + </energy_carrier_ID> + </taxi_in_energy> + </taxi_energy> + </design_mission> +</mission> +``` + + +## Further iterations {#further_iterations} + +After the initial loop, we expect a robuster behavior which we can use to calculate the flight segments with an increased resolution. To achieve this, every segment is split into little time and way increments (only a few seconds/meters per increment) aiming for the trajectory points that were written into the `mission file`. In each increment, all relevant parameters are saved into a `mission profile`. After the calculation is done, said `mission profile` is exported as a [CSV file](#csv_file) into the `mission_data` directory. Within the [Aircraft Exchange File](#acxml) the `masses_cg_inertia/maximum_takeoff_mass/mass_properties/mass` node is updated when calculating a `design_mission`; for a `study_mission` it's the `mission/study_mission/takeoff_mass` node. Having a higher resolution also increases the amount of data in the `mission` block: + + +```xml +<mission description="Mission data" tool_level="0"> + <design_mission description="Data of design mission"> + <range description="Traveled range from break release to end of taxi at destination"> + <value>4500000</value> + <unit>m</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>5000000</upper_boundary> + </range> + <loaded_mission_energy description="Amount of energy loaded into tanks (including reserves) for the mission"> + <mission_energy ID="0" description="Amount of energy loaded into tanks (including reserves) for specified energy carrier"> + <consumed_energy description="Energy amount"> + <value>7.0e+11</value> + <unit>J</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1e+13</upper_boundary> + </consumed_energy> + <energy_carrier_ID description="See energy carrier specification node"> + <value>0</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>5</upper_boundary> + </energy_carrier_ID> + </mission_energy> + </loaded_mission_energy> + <in_flight_energy description="Amount of energy needed for in-flight segments (all segments from takeoff to landing)"> + <trip_energy ID="0" description="Amount of energy needed for trip segments (all segments from takeoff to landing) for specified energy carrier"> + <consumed_energy description="Energy amount"> + <value>5.5e+11</value> + <unit>J</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1e+13</upper_boundary> + </consumed_energy> + <energy_carrier_ID description="See energy carrier specification node"> + <value>0</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>5</upper_boundary> + </energy_carrier_ID> + </trip_energy> + <takeoff_energy ID="0" description="Amount of energy needed for takeoff segment for specified energy carrier"> + <consumed_energy description="Energy amount"> + <value>8.9e+9</value> + <unit>J</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1e+13</upper_boundary> + </consumed_energy> + <energy_carrier_ID description="See energy carrier specification node"> + <value>0</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>5</upper_boundary> + </energy_carrier_ID> + </takeoff_energy> + <landing_energy ID="0" description="Amount of energy needed for landing segment for specified energy carrier"> + <consumed_energy description="Energy amount"> + <value>8.9e+9</value> + <unit>J</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1e+13</upper_boundary> + </consumed_energy> + <energy_carrier_ID description="See energy carrier specification node"> + <value>0</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>5</upper_boundary> + </energy_carrier_ID> + </landing_energy> + </in_flight_energy> + <taxi_energy description="Amount of energy needed for taxiing specified energy carrier"> + <taxi_out_energy ID="0" description="Amount of energy needed for taxiing at origin for specified energy carrier"> + <consumed_energy description="Energy amount"> + <value>1.0e+10</value> + <unit>J</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1e+13</upper_boundary> + </consumed_energy> + <energy_carrier_ID description="See energy carrier specification node"> + <value>0</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>5</upper_boundary> + </energy_carrier_ID> + </taxi_out_energy> + <taxi_in_energy ID="0" description="Amount of energy needed for taxiing at destination for specified energy carrier"> + <consumed_energy description="Energy amount"> + <value>5.6e+10</value> + <unit>J</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1e+13</upper_boundary> + </consumed_energy> + <energy_carrier_ID description="See energy carrier specification node"> + <value>0</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>5</upper_boundary> + </energy_carrier_ID> + </taxi_in_energy> + </taxi_energy> + <block_time description="Block time for the whole mission: Time from break release to end of taxiing after landing"> + <value>21000.0</value> + <unit>s</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>45000</upper_boundary> + </block_time> + <flight_time description="Flight time for the whole mission"> + <value>20000.0</value> + <unit>s</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>44500</upper_boundary> + </flight_time> + <takeoff_engine_derate description="Engine power demand"> + <value>1</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1</upper_boundary> + </takeoff_engine_derate> + <cruise description="Characteristics of the cruise segment"> + <average_lift_coefficient description="Lift coefficient CL_average: Arithmetic mean over the entire cruise flight"> + <value>0.52</value> + <unit>1</unit> + <lower_boundary>-0.01</lower_boundary> + <upper_boundary>1</upper_boundary> + </average_lift_coefficient> + <minimum_lift_coefficient description="Minimum cruise flight lift coefficient CL_min"> + <value>0.49</value> + <unit>1</unit> + <lower_boundary>-0.01</lower_boundary> + <upper_boundary>1</upper_boundary> + </minimum_lift_coefficient> + <maximum_lift_coefficient description="Maximum cruise flight lift coefficient CL_max"> + <value>0.56</value> + <unit>1</unit> + <lower_boundary>-0.01</lower_boundary> + <upper_boundary>1</upper_boundary> + </maximum_lift_coefficient> + <top_of_climb_mass description="Total aircraft mass at top of climb (= start of initial cruise altitude (ICA))"> + <value>77000.0</value> + <unit>kg</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>150000</upper_boundary> + </top_of_climb_mass> + <top_of_descend_mass description="Total aircraft mass at top of descend (TOD)"> + <value>66000.0</value> + <unit>kg</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>150000</upper_boundary> + </top_of_descend_mass> + <top_of_climb_range description="Flown range from takeoff to top of climb (= start of initial cruise altitude (ICA))"> + <value>220000.0</value> + <unit>kg</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>500000</upper_boundary> + </top_of_climb_range> + <top_of_descend_range description="Flown range from takeoff to top of descend"> + <value>4300000.0</value> + <unit>kg</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>5000000</upper_boundary> + </top_of_descend_range> + <cruise_steps description="Cruise step information"> + <cruise_step ID="0" description="Data of a cruise step"> + <relative_end_of_cruise_step description="End of cruise step relative to total cruise length"> + <value>0.5</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1</upper_boundary> + </relative_end_of_cruise_step> + <altitude description="Altitude of cruise step"> + <value>10058.4</value> + <unit>m</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>15000</upper_boundary> + </altitude> + </cruise_step> + <cruise_step ID="1" description="Data of a cruise step"> + <relative_end_of_cruise_step description="End of cruise step relative to total cruise length"> + <value>1</value> + <unit>1</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>1</upper_boundary> + </relative_end_of_cruise_step> + <altitude description="Altitude of cruise step"> + <value>10668.0</value> + <unit>m</unit> + <lower_boundary>0</lower_boundary> + <upper_boundary>15000</upper_boundary> + </altitude> + </cruise_step> + </cruise_steps> + </cruise> + </design_mission> +</mission> +``` + +## Additional Output + +Beside the output written into the [aircraft XML](#acxml), **mission_analysis** generates a few more files you and even other tools can work with + + +### Mission Data CSV {#csv_file} + +Remember that nice graph from this tool's [introduction](index.md)? This is a simple visualization of this CSV file we described above. Depending on the amount of engines, used energy carriers and other inputs, the CSV file may differ a bit, but usually you can expect the following parameters there: + +- Time [s] +- Range [m] +- Altitude [m] +- FL [100 ft] +- Mode name [-] +- Total mass [kg] +- Energy carrier (ID) +- Thrust [N] +- Fuelflow [kg/s] +- Fuel consumed (kerosene | ID = 0) [kg] +- Energy consumed (kerosene | ID = 0) [J] +- Mach [-] +- CAS [m/s] +- TAS [m/s] +- TAS [kts] +- ROC [fpm] +- SAR [m/kg] +- Aero Config [-] +- C_L [-] +- L over D [-] +- Spoiler Factor [-] +- Reynolds Number [-] +- Engine Rating [-] +- Engine N1 (PW1127G-JM | ID = 0) [-] +- Engine N1 (PW1127G-JM | ID = 1) [-] +- Shaft power offtake [W] +- Bleed [kg/s] +- Angle of attack [deg] +- Glidepath angle [deg] +- Incidence angle (stabilizer) [deg] + +Beside being a neat dataset to show-off, [Ecological Assessment](../ecological_assessment/index.md) can go through it to calculate the ecological impact of an aircraft flying the displayed mission. + + +### Reporting + +If you don't want to edit your data on your own, but need to see some basic characteristics of your mission, you can simply go to the `reporting` directory next to your [Aircraft Exchange File](#acxml). Within `report_html`, we already provide many graphs and useful insights which might come in handy. If something went wrong or you need to know what **mission_analysis** has done in detail, there is also a `.log` file next to your executable in which the shell output is tracked. + + +## Mission Configuration {#configuration} + +Now that we have successfully generated our first mission output, let's see how you can tweak our tool a little bit :sunglasses: + + +### Aircraft Exchange File {#acxml} + +Within the `requirements_and_specifications` block of the `aircraft_exchange_file`, the following nodes can affect the behavior of **mission_analysis** (descriptions to be found within that file): + +```plaintext +requirements_and_specifications +└── mission_files + ├── design_mission_file + ├── study_mission_file + ├── requirements_mission_file +└── design_specification + ├── propulsion + ├── skinning + │ ├── thickness + ├── configuration + │ ├── tank_definition + ├── energy_carriers +└── requirements + ├── top_level_aircraft_requirements + │ ├── maximum_structrual_payload_mass + │ ├── design_mission + │ ├── study_mission + │ ├── takeoff_distance + │ ├── landing_field_length + │ ├── icao_aerodrome_reference_code (once 4D missions are ready) + │ ├── flight_envelope + │ │ ├── maximum_operating_mach_number + │ │ ├── maximum_operating_velocity + │ │ ├── maximum_approach_speed + │ │ ├── maximum_operating_altitude + │ │ ├── maximum_altitude_one_engine_inoperative + │ │ ├── climb_or_descend_segment_gradient + ├── additional_requirements + │ ├── landing_gear +``` + +The `mission_files` node simply saves the names of said files. Within `design_specification`, we extract everything from the propulsion system (including tanks) in order to analyze fuel consumption and thrust generation. In the `top_level_aircraft_requirements` node, we can find performance maxima and characteristics for `design_mission` and `study_mission`. The later provide nodes for the mission planning (initial cruise altitude and speed, fuel planning etc.). In `additional_requirements`, the `landing_gear` node tells us with which `friction_coefficient` and `braking_coefficient` our aircraft will be slowed down after touchdown. + + +### Configuration File {#config_file} + +The `control_settings` are standardized in UNICADO and will not be described in detail here. The program settings are structured like this (descriptions are in the `mission_analysis_conf.xml`): + +```plaintext +Program Settings +└── Program Specific + ├── Specific Air Range Plot + ├── Exit If Fuel Limit Reached + │ ├── Enable + │ ├── Allowed Relative Overshoot + ├── Exit If Maximum Takeoff Mass Limit Reached + │ ├── Enable + │ ├── Allowed Relative Overshoot +└── General + ├── Fuel Planning + │ ├── Fuel Estimation + │ │ ├── Fuel Estimation Switch + │ │ ├── Joint Aviation Requirements Parameters + │ │ │ ├── Contingency Fuel + │ │ │ ├── Use Additional Fuel + │ │ │ ├── Extra Fuel + │ │ ├── Federal Aviation Regulations Parameter + │ │ │ ├── Use Additional Fuel + │ ├── Fuel Flow Factor Taxiing + │ ├── Holding + │ │ ├── Holding Mach Number + │ │ ├── Holding Altitude + │ │ ├── Use Economical Speed + ├── Increase Engine Rating During Climb + ├── Polar Switch Mission Point + │ ├── Polar Switch Selector + │ ├── Absolute Range Flown + │ ├── Relative Range Flown + │ ├── Absolute Time Passed + │ ├── Relative Time Passed + ├── Glideslope Interception Distance + ├── Use Breguet Estimation In Cruise + ├── Iterate Top Of descend Mass + ├── Landing + │ ├── Rotation Time + │ ├── Thrust Reverser + │ │ ├── Enable + │ │ ├── Deactivation Speed + │ │ ├── Efficiency + │ ├── Runway Exit Speed +└── Mode + ├── Mission Methods + │ ├── Fidelity Level + │ ├── Mission Type + │ ├── Center Of Gravity Method + ├── Rate Of Climb Switch +└── Precision + ├── Acceleration Increment + ├── Mach Acceleration Increment + ├── Altitude Increment + ├── Way Increment + ├── Specific Air Range Check Increment +``` + + +In the `program_specific` node, you can specify if the specific air range (SAR) is plotted (when plotting is turned on in the `control_Settings`). In addition, you can allow the tool to exceed the maximum takeoff mass and fuel mass during the design loop. This can be useful when operating at extreme conditions where fluctuation above the maxima shall not trigger an exit immediately. + + +In `general` you can decide how the needed fuel is estimated and you can tell **mission_analysis** in which way it shall behave in different flight segments. + + +The `mode` node lets you choose the methods that are applied. Using the keyword `low`/`mid` you will trigger the low-fidelity/mid-fidelity version of the [Standard Mission](methods.md) method. It also has three sub-methods to differentiate between `design_mission`, `study_mission` and `requirements_mission` which can be selected in the `mission_type` node. Please mind that the low-fidelity method only accepts the `design_mission`. The `rate_of_climb_switch` will only affect the [Climb to Ceiling](mission_steps.md/#climb_to_ceiling_subparagraph) step of the `requirements_mission`. With this option, **mission_analysis** calculates the optimum rate of climb towards service ceiling. + + +Finally, in `precision` you can set the parameters which will define the before mentioned increments of your mission profile. diff --git a/docs/documentation/analysis/mission_analysis/index.md b/docs/documentation/analysis/mission_analysis/index.md new file mode 100644 index 0000000000000000000000000000000000000000..8fad77ed00dd8ef6bb6fe5fe86f014dd27280a47 --- /dev/null +++ b/docs/documentation/analysis/mission_analysis/index.md @@ -0,0 +1,61 @@ + +# 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). diff --git a/docs/documentation/analysis/mission_analysis/methods.md b/docs/documentation/analysis/mission_analysis/methods.md new file mode 100644 index 0000000000000000000000000000000000000000..1d1c41bfc861f2bbb8a6cd7e44c98a6aa950c816 --- /dev/null +++ b/docs/documentation/analysis/mission_analysis/methods.md @@ -0,0 +1,110 @@ + +# 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: diff --git a/docs/documentation/analysis/mission_analysis/mission_steps.md b/docs/documentation/analysis/mission_analysis/mission_steps.md new file mode 100644 index 0000000000000000000000000000000000000000..31312ddd5fbc2fa21481c2a19b066075f2280ac6 --- /dev/null +++ b/docs/documentation/analysis/mission_analysis/mission_steps.md @@ -0,0 +1,232 @@ +# 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. diff --git a/mkdocs.yml b/mkdocs.yml index 36be4cf3ce2028ecdce42e320c4c094691ab7be4..a21c7bd94ef6980ab6e112791e27410f5f5be9d2 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -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