Skip to content
Snippets Groups Projects
Commit 6edcfe5b authored by Duc Bui Tien's avatar Duc Bui Tien
Browse files

sketch graph, logs and report

add drag and drop for modules and click function for config
parent c516f74b
Branches
Tags
2 merge requests!2UnicadoGuiBackend,!1New UnicadoGUI Branch
......@@ -8,7 +8,9 @@
"name": "unicadowebapp",
"version": "0.0.1",
"dependencies": {
"@sveltestrap/sveltestrap": "^6.2.4"
"@rollup/plugin-dsv": "^3.0.2",
"@sveltestrap/sveltestrap": "^6.2.4",
"layercake": "^8.0.2"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.0.0",
......@@ -494,6 +496,51 @@
"url": "https://opencollective.com/popperjs"
}
},
"node_modules/@rollup/plugin-dsv": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@rollup/plugin-dsv/-/plugin-dsv-3.0.4.tgz",
"integrity": "sha512-F7XgBf/kAFvdiheh5EE8uPzn8hxYpAy+688tTy5eUAbJMJraS5ftPjRFPlZuzsrhN3YAeRnC8Fnd2WYbg3Bvvw==",
"dependencies": {
"@rollup/pluginutils": "^5.0.1",
"@types/d3-dsv": "^3.0.0",
"d3-dsv": "2.0.0",
"tosource": "^2.0.0-alpha.3"
},
"peerDependencies": {
"rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
},
"peerDependenciesMeta": {
"rollup": {
"optional": true
}
}
},
"node_modules/@rollup/pluginutils": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
"integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
"dependencies": {
"@types/estree": "^1.0.0",
"estree-walker": "^2.0.2",
"picomatch": "^2.3.1"
},
"engines": {
"node": ">=14.0.0"
},
"peerDependencies": {
"rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
},
"peerDependenciesMeta": {
"rollup": {
"optional": true
}
}
},
"node_modules/@rollup/pluginutils/node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
},
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.10.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.10.0.tgz",
......@@ -763,6 +810,11 @@
"integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
"dev": true
},
"node_modules/@types/d3-dsv": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz",
"integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g=="
},
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
......@@ -905,6 +957,11 @@
"periscopic": "^3.1.0"
}
},
"node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
......@@ -932,6 +989,121 @@
"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
}
},
"node_modules/d3-array": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
"integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
"dependencies": {
"internmap": "1 - 2"
},
"engines": {
"node": ">=12"
}
},
"node_modules/d3-color": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
"integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
"engines": {
"node": ">=12"
}
},
"node_modules/d3-dsv": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-2.0.0.tgz",
"integrity": "sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w==",
"dependencies": {
"commander": "2",
"iconv-lite": "0.4",
"rw": "1"
},
"bin": {
"csv2json": "bin/dsv2json",
"csv2tsv": "bin/dsv2dsv",
"dsv2dsv": "bin/dsv2dsv",
"dsv2json": "bin/dsv2json",
"json2csv": "bin/json2dsv",
"json2dsv": "bin/json2dsv",
"json2tsv": "bin/json2dsv",
"tsv2csv": "bin/dsv2dsv",
"tsv2json": "bin/dsv2json"
}
},
"node_modules/d3-format": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
"integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
"engines": {
"node": ">=12"
}
},
"node_modules/d3-interpolate": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
"integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
"dependencies": {
"d3-color": "1 - 3"
},
"engines": {
"node": ">=12"
}
},
"node_modules/d3-path": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
"integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
"engines": {
"node": ">=12"
}
},
"node_modules/d3-scale": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
"integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
"dependencies": {
"d3-array": "2.10.0 - 3",
"d3-format": "1 - 3",
"d3-interpolate": "1.2.0 - 3",
"d3-time": "2.1.1 - 3",
"d3-time-format": "2 - 4"
},
"engines": {
"node": ">=12"
}
},
"node_modules/d3-shape": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
"integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
"dependencies": {
"d3-path": "^3.1.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/d3-time": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
"integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
"dependencies": {
"d3-array": "2 - 3"
},
"engines": {
"node": ">=12"
}
},
"node_modules/d3-time-format": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
"integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
"dependencies": {
"d3-time": "1 - 3"
},
"engines": {
"node": ">=12"
}
},
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
......@@ -1146,6 +1318,17 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
......@@ -1188,6 +1371,14 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
"node_modules/internmap": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
"integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
"engines": {
"node": ">=12"
}
},
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
......@@ -1247,6 +1438,21 @@
"node": ">=6"
}
},
"node_modules/layercake": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/layercake/-/layercake-8.0.2.tgz",
"integrity": "sha512-rkXJCXNev6kRxD0VCIDs9vnT2F91dtewqBlaK4K/njvgfyQj5NDHfyYmgqj6Y4wnbaNCMVUqhD1bq1NGzb6xfA==",
"dependencies": {
"d3-array": "^3.2.4",
"d3-color": "^3.1.0",
"d3-scale": "^4.0.2",
"d3-shape": "^3.2.0"
},
"peerDependencies": {
"svelte": "3 - 4",
"typescript": "^5.0.2"
}
},
"node_modules/locate-character": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
......@@ -1433,7 +1639,6 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"engines": {
"node": ">=8.6"
},
......@@ -1536,7 +1741,7 @@
"version": "4.10.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.10.0.tgz",
"integrity": "sha512-t2v9G2AKxcQ8yrG+WGxctBes1AomT0M4ND7jTFBCVPXQ/WFTvNSefIrNSmLKhIKBrvN8SG+CZslimJcT3W2u2g==",
"dev": true,
"devOptional": true,
"dependencies": {
"@types/estree": "1.0.5"
},
......@@ -1587,6 +1792,11 @@
"queue-microtask": "^1.2.2"
}
},
"node_modules/rw": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
"integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="
},
"node_modules/sade": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
......@@ -1599,6 +1809,11 @@
"node": ">=6"
}
},
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/sander": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz",
......@@ -1809,6 +2024,14 @@
"node": ">=8.0"
}
},
"node_modules/tosource": {
"version": "2.0.0-alpha.3",
"resolved": "https://registry.npmjs.org/tosource/-/tosource-2.0.0-alpha.3.tgz",
"integrity": "sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==",
"engines": {
"node": ">=10"
}
},
"node_modules/totalist": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
......@@ -1828,7 +2051,6 @@
"version": "5.3.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
"integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
......
......@@ -21,6 +21,8 @@
},
"type": "module",
"dependencies": {
"@sveltestrap/sveltestrap": "^6.2.4"
"@sveltestrap/sveltestrap": "^6.2.4",
"@rollup/plugin-dsv": "^3.0.2",
"layercake": "^8.0.2"
}
}
/// <reference types="@sveltejs/kit" />
declare module '*.csv';
<script>
import {Styles} from "@sveltestrap/sveltestrap";
import { LayerCake, Svg } from 'layercake';
import Line from './_components/Line.svelte';
import Area from './_components/Area.svelte';
import AxisX from './_components/AxisX.svelte';
import AxisY from './_components/AxisY.svelte';
import points from './_data/points.csv';
const xKey = 'myX';
const yKey = 'myY';
points.forEach((/** @type {{ [columnName: string]: number; }} */ row) => {
row[yKey] = +row[yKey];
});
</script>
<h1>Welcome to the UNICADO WebApp</h1>
<p>Visit <a href="https://kit.svelte.dev">kit.svelte.dev</a> to read the documentation</p>
<div class="chart-container">
<LayerCake
padding={{ right: 10, bottom: 20, left: 25 }}
x={xKey}
y={yKey}
yDomain={[0, null]}
data={points}
debug={true}
>
<Svg>
<AxisX />
<AxisY />
<Line />
<Area />
</Svg>
</LayerCake>
</div>
<Styles/>
\ No newline at end of file
<Styles/>
<style>
.chart-container {
width: 80%;
height: 80vh;
margin: 25px auto;
}
</style>
\ No newline at end of file
<script>
import {Styles} from "@sveltestrap/sveltestrap";
import {Container, Styles, TabContent, TabPane} from "@sveltestrap/sveltestrap";
import {onMount} from "svelte";
let tabs = ["convergenceLoop", "calculatePolar","createMissionXML","empennageSizing","engineSizing","fuselageDesign","initialSizing","landingGearDesign","propulsionIntegration","wingDesign"]
let dict = {}
onMount(async ()=>{
for (const element of tabs) {
const res = await fetch("http://127.0.0.1:8000/log/"+element+".log");
//const data = await res.json();
res.text().then(function (text) {
let lineBreak = "\n";
text = text.split(lineBreak).reverse().join(lineBreak);
dict[element]=text;
});
}
})
</script>
<h1>Welcome to the UNICADO WebApp</h1>
<p>Visit <a href="https://kit.svelte.dev">kit.svelte.dev</a> to read the documentation</p>
<TabContent vertical pills>
{#each tabs as tab}
{#if tab =="convergenceLoop"}
<TabPane tabId="{tab}" tab={tab} active>
<Container md>
<p style="white-space: pre-line">
{dict[tab]}
</p>
</Container>
</TabPane>
{:else}
<TabPane tabId={tab} tab={tab}>
<Container md>
<p style="white-space: pre-line">
{dict[tab]}
</p>
</Container>
</TabPane>
{/if}
{/each}
</TabContent>
<Styles/>
\ No newline at end of file
<script>
import {
Alert,
Button,
ButtonGroup,
Col,
Container,
Icon,
ListGroup,
ListGroupItem,
ListGroupItem, Modal, ModalBody, ModalFooter, ModalHeader,
Row,
Styles
} from "@sveltestrap/sveltestrap";
......@@ -18,6 +19,13 @@
let StudySteps = [];
let PostprocessSteps = [];
let dropIndex = null;
let changed = false;
let open = false;
let saveAlert = false;
let modalModule = {
name: '',
response: {}}
const toggle = () => (open = !open);
onMount(async ()=>{
const res = await fetch("http://127.0.0.1:8000/modules");
const data = await res.json();
......@@ -33,6 +41,10 @@
StudySteps = data["StudyMission"];
SizingSteps = data["SizingLoop"];
PostprocessSteps = data["PostprocessingSteps"]
changed = false;
changed=changed;
saveAlert = false;
saveAlert = saveAlert;
}
async function startModel(){
const res = fetch("http://127.0.0.1:8000/start/convergenceLoop")
......@@ -50,7 +62,18 @@
}
})
.then(response => response.json())
changed = false;
changed=changed;
saveAlert = false;
saveAlert = saveAlert;
}
async function getModuleConf(module){
const res = await fetch("http://127.0.0.1:8000/modules/"+module+"/config");
const data = await res.json();
modalModule.name = module;
modalModule.response = data;
modalModule=modalModule;
}
function dragStart(event, itemIndex) {
const data = {itemIndex};
......@@ -83,13 +106,24 @@
SizingSteps=SizingSteps;
StudySteps=StudySteps;
PostprocessSteps=PostprocessSteps;
changed = true;
saveAlert = true;
saveAlert = saveAlert;
changed=changed;
}
</script>
<Container>
<h2>Simulationsmodel</h2>
<Alert color="primary" isOpen={saveAlert} toggle={() => (saveAlert = false)}>
Changes in Model please save or reload before starting!.
</Alert>
<ButtonGroup>
<Button color="dark" outline on:click={startModel}><Icon name="play-fill" /> Start </Button>
<Button color="dark" outline on:click={uploadModel}><Icon name="cloud-upload" /> Save </Button>
{#if changed}
<Button color="danger" outline on:click={uploadModel} active><Icon name="cloud-upload" /> Save </Button>
{:else}
<Button color="dark" outline on:click={uploadModel}><Icon name="cloud-upload" /> Save </Button>
{/if}
<Button color="dark" outline on:click={loadModel}><Icon name="cloud-download" /> Load </Button>
</ButtonGroup>
<Row class="py-3">
......@@ -99,7 +133,9 @@
{#each SetupSteps as item}
<div class="item" data-item={item}>
<li class="list-group-item list-group-item-action"
draggable="true" on:dragstart={event=>dragStart(event,SetupSteps.indexOf(item))}>{item}</li>
draggable="true" on:dragstart={event=>dragStart(event,SetupSteps.indexOf(item))} on:click={getModuleConf(item),toggle}>
{item}
</li>
</div>
{/each}
</ul>
......@@ -110,7 +146,7 @@
{#each SizingSteps as item}
<div class="item" data-item={item}>
<li class="list-group-item list-group-item-action"
draggable="true" on:dragstart={event=>dragStart(event,SizingSteps.indexOf(item))}>{item}</li>
draggable="true" on:dragstart={event=>dragStart(event,SizingSteps.indexOf(item))} on:click={getModuleConf(item),toggle}>{item}</li>
</div>
{/each}
</ul>
......@@ -121,7 +157,7 @@
{#each StudySteps as item}
<div class="item" data-item={item}>
<li class="list-group-item list-group-item-action"
draggable="true" on:dragstart={event=>dragStart(event,StudySteps.indexOf(item))}>{item}</li>
draggable="true" on:dragstart={event=>dragStart(event,StudySteps.indexOf(item))} on:click={getModuleConf(item),toggle}>{item}</li>
</div>
{/each}
</ul>
......@@ -132,11 +168,21 @@
{#each PostprocessSteps as item}
<div class="item" data-item={item}>
<li class="list-group-item list-group-item-action"
draggable="true" on:dragstart={event=>dragStart(event,PostprocessSteps.indexOf(item))}>{item}</li>
draggable="true" on:dragstart={event=>dragStart(event,PostprocessSteps.indexOf(item))} on:click={getModuleConf(item),toggle}>{item}</li>
</div>
{/each}
</ul>
</Col>
</Row>
<Modal isOpen={open} toggle={toggle} scrollable>
<ModalHeader toggle={toggle}>{modalModule.name}</ModalHeader>
<ModalBody>
{JSON.stringify(modalModule.response)}
</ModalBody>
<ModalFooter>
<Button color="primary" on:click={toggle}>Do Something</Button>
<Button color="secondary" on:click={toggle}>Cancel</Button>
</ModalFooter>
</Modal>
</Container>
<Styles/>
\ No newline at end of file
<script>
import {Styles} from "@sveltestrap/sveltestrap";
import {Container, Styles, TabContent, TabPane} from "@sveltestrap/sveltestrap";
let tabs = ["convergenceLoop","empennageSizing","engineSizing","fuselageDesign","landingGearDesign","propulsionIntegration","wingDesign"]
</script>
<h1>Report of empennageSizing: CeRAS-CSR-02</h1>
<!-- Begin CeRAS Report -->
<!-- ################################################################################################### -->
<div id="wrapper">
<h1>Report CeRAS-CSR-02</h1>
<h2>wing (MainWing):</h2>
<table>
<tr>
<td> x-offest </td><td>12.53</td><td>m</td>
</tr>
<tr>
<td>z-offset</td><td>-1.27</td><td>m</td>
</tr>
</table>
<h2>parameter tailplane (Stabiliser):</h2>
<table>
<tr>
<td>x-offest </td><td>31.67</td><td>m</td>
</tr>
<tr>
<td>z-offset</td><td>1.65</td><td>m</td>
</tr>
<tr>
<td>reference area</td><td>32.8</td><td>m&sup2;</td>
</tr>
<tr>
<td>volume coefficient</td><td>1.0236</td><td></td>
</tr>
<tr>
<td>span width</td><td>12.85</td><td>m</td>
</tr>
<tr>
<td>aspect ratio</td><td>5.04</td><td></td>
</tr>
<tr>
<td>inner thickness</td><td>3.98</td><td>m</td>
</tr>
<tr>
<td>outside thickness</td><td>1.12</td><td>m</td>
</tr>
<tr>
<td>taper ratio</td><td>0.28</td><td></td>
</tr>
<tr>
<td>leading edge sweep</td><td>32</td><td>deg</td>
</tr>
<tr>
<td>torsion</td><td>0</td><td>deg</td>
</tr>
<tr>
<td>V-position</td><td>0</td><td>deg</td>
</tr>
<tr>
<td>airfoil (inner)</td><td>n0012.dat</td><td></td>
</tr>
<tr>
<td>airfoil (outer)</td><td>n0012.dat</td><td></td>
</tr>
</table>
<h2>parameter fin (Fin):</h2>
<table>
<tr>
<td>x-offest </td><td>29.87</td><td>m</td>
</tr>
<tr>
<td>z-offset</td><td>1.65</td><td>m</td>
</tr>
<tr>
<td>reference area</td><td>25.42</td><td>m&sup2;</td>
</tr>
<tr>
<td>volume coefficient</td><td>0.096</td><td></td>
</tr>
<tr>
<td>span width</td><td>6.95</td><td>m</td>
</tr>
<tr>
<td>aspect ratio</td><td>1.9</td><td></td>
</tr>
<tr>
<td>inner thickness</td><td>5.78</td><td>m</td>
</tr>
<tr>
<td>outside thickness</td><td>1.53</td><td>m</td>
</tr>
<tr>
<td>taper ratio</td><td>0.26</td><td></td>
</tr>
<tr>
<td>leading edge sweep</td><td>39</td><td>deg</td>
</tr>
<tr>
<td>airfoil (inner)</td><td>n0012.dat</td><td></td>
</tr>
<tr>
<td>airfoil (outer)</td><td>n0012.dat</td><td></td>
</tr>
</table>
</div>
<TabContent vertical pills>
{#each tabs as tab}
{#if tab =="convergenceLoop"}
<TabPane tabId="{tab}" tab={tab} active>
<Container md>
<p style="white-space: pre-line">
<slot prop={tab} />
</p>
</Container>
</TabPane>
{:else}
<TabPane tabId={tab} tab={tab}>
<Container md>
<p style="white-space: pre-line">
<slot prop={tab} />
</p>
</Container>
</TabPane>
{/if}
{/each}
</TabContent>
<Styles/>
\ No newline at end of file
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
// @ts-ignore
import dsv from '@rollup/plugin-dsv';
export default defineConfig({
plugins: [sveltekit()]
plugins: [sveltekit(), dsv()]
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment