mirror of
https://gitlab.com/Anson-Projects/projects.git
synced 2025-06-16 06:56:46 +00:00
1832 lines
63 KiB
HTML
1832 lines
63 KiB
HTML
<!DOCTYPE html>
|
||
|
||
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
|
||
|
||
<head>
|
||
<meta charset="utf-8"/>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/>
|
||
<meta name="generator" content="distill" />
|
||
|
||
<style type="text/css">
|
||
/* Hide doc at startup (prevent jankiness while JS renders/transforms) */
|
||
body {
|
||
visibility: hidden;
|
||
}
|
||
</style>
|
||
|
||
<!--radix_placeholder_import_source-->
|
||
<!--/radix_placeholder_import_source-->
|
||
|
||
<style type="text/css">code{white-space: pre;}</style>
|
||
<style type="text/css" data-origin="pandoc">
|
||
pre > code.sourceCode { white-space: pre; position: relative; }
|
||
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
|
||
pre > code.sourceCode > span:empty { height: 1.2em; }
|
||
.sourceCode { overflow: visible; }
|
||
code.sourceCode > span { color: inherit; text-decoration: inherit; }
|
||
div.sourceCode { margin: 1em 0; }
|
||
pre.sourceCode { margin: 0; }
|
||
@media screen {
|
||
div.sourceCode { overflow: auto; }
|
||
}
|
||
@media print {
|
||
pre > code.sourceCode { white-space: pre-wrap; }
|
||
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
|
||
}
|
||
pre.numberSource code
|
||
{ counter-reset: source-line 0; }
|
||
pre.numberSource code > span
|
||
{ position: relative; left: -4em; counter-increment: source-line; }
|
||
pre.numberSource code > span > a:first-child::before
|
||
{ content: counter(source-line);
|
||
position: relative; left: -1em; text-align: right; vertical-align: baseline;
|
||
border: none; display: inline-block;
|
||
-webkit-touch-callout: none; -webkit-user-select: none;
|
||
-khtml-user-select: none; -moz-user-select: none;
|
||
-ms-user-select: none; user-select: none;
|
||
padding: 0 4px; width: 4em;
|
||
color: #aaaaaa;
|
||
}
|
||
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
|
||
div.sourceCode
|
||
{ }
|
||
@media screen {
|
||
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
|
||
}
|
||
code span.al { color: #ad0000; } /* Alert */
|
||
code span.an { color: #5e5e5e; } /* Annotation */
|
||
code span.at { color: #20794d; } /* Attribute */
|
||
code span.bn { color: #ad0000; } /* BaseN */
|
||
code span.bu { } /* BuiltIn */
|
||
code span.cf { color: #007ba5; } /* ControlFlow */
|
||
code span.ch { color: #20794d; } /* Char */
|
||
code span.cn { color: #8f5902; } /* Constant */
|
||
code span.co { color: #5e5e5e; } /* Comment */
|
||
code span.cv { color: #5e5e5e; font-style: italic; } /* CommentVar */
|
||
code span.do { color: #5e5e5e; font-style: italic; } /* Documentation */
|
||
code span.dt { color: #ad0000; } /* DataType */
|
||
code span.dv { color: #ad0000; } /* DecVal */
|
||
code span.er { color: #ad0000; } /* Error */
|
||
code span.ex { } /* Extension */
|
||
code span.fl { color: #ad0000; } /* Float */
|
||
code span.fu { color: #4758ab; } /* Function */
|
||
code span.im { } /* Import */
|
||
code span.in { color: #5e5e5e; } /* Information */
|
||
code span.kw { color: #007ba5; } /* Keyword */
|
||
code span.op { color: #5e5e5e; } /* Operator */
|
||
code span.ot { color: #007ba5; } /* Other */
|
||
code span.pp { color: #ad0000; } /* Preprocessor */
|
||
code span.sc { color: #20794d; } /* SpecialChar */
|
||
code span.ss { color: #20794d; } /* SpecialString */
|
||
code span.st { color: #20794d; } /* String */
|
||
code span.va { color: #111111; } /* Variable */
|
||
code span.vs { color: #20794d; } /* VerbatimString */
|
||
code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */
|
||
</style>
|
||
|
||
<!--radix_placeholder_meta_tags-->
|
||
<title>Air Propulsion Simulation</title>
|
||
|
||
<meta property="description" itemprop="description" content="Simulating the performance of an air propulsion system as an alternative to solid rocket motors."/>
|
||
|
||
|
||
<!-- https://schema.org/Article -->
|
||
<meta property="article:published" itemprop="datePublished" content="2021-04-01"/>
|
||
<meta property="article:created" itemprop="dateCreated" content="2021-04-01"/>
|
||
<meta name="article:author" content="Anson Biggs"/>
|
||
|
||
<!-- https://developers.facebook.com/docs/sharing/webmasters#markup -->
|
||
<meta property="og:title" content="Air Propulsion Simulation"/>
|
||
<meta property="og:type" content="article"/>
|
||
<meta property="og:description" content="Simulating the performance of an air propulsion system as an alternative to solid rocket motors."/>
|
||
<meta property="og:locale" content="en_US"/>
|
||
|
||
<!-- https://dev.twitter.com/cards/types/summary -->
|
||
<meta property="twitter:card" content="summary"/>
|
||
<meta property="twitter:title" content="Air Propulsion Simulation"/>
|
||
<meta property="twitter:description" content="Simulating the performance of an air propulsion system as an alternative to solid rocket motors."/>
|
||
|
||
<!--/radix_placeholder_meta_tags-->
|
||
|
||
<!--radix_placeholder_rmarkdown_metadata-->
|
||
|
||
<script type="text/json" id="radix-rmarkdown-metadata">
|
||
{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["title","description","author","repository_url","date","fig_width","fig_align","output","categories","bibliography"]}},"value":[{"type":"character","attributes":{},"value":["Air Propulsion Simulation"]},{"type":"character","attributes":{},"value":["Simulating the performance of an air propulsion system as an alternative to solid rocket motors. \n"]},{"type":"list","attributes":{},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["name","url"]}},"value":[{"type":"character","attributes":{},"value":["Anson Biggs"]},{"type":"character","attributes":{},"value":["https://ansonbiggs.com"]}]}]},{"type":"character","attributes":{},"value":["https://gitlab.com/lander-team/air-prop-simulation"]},{"type":"character","attributes":{},"value":["04-01-2021"]},{"type":"integer","attributes":{},"value":[6]},{"type":"character","attributes":{},"value":["center"]},{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["distill::distill_article"]}},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["self_contained"]}},"value":[{"type":"logical","attributes":{},"value":[false]}]}]},{"type":"character","attributes":{},"value":["Julia","Capstone"]},{"type":"character","attributes":{},"value":["../../citations.bib"]}]}
|
||
</script>
|
||
<!--/radix_placeholder_rmarkdown_metadata-->
|
||
|
||
<script type="text/json" id="radix-resource-manifest">
|
||
{"type":"character","attributes":{},"value":["AeroTech_F10.csv","AeroTech_G8ST.csv","air-propulsion-simulation_files/anchor-4.2.2/anchor.min.js","air-propulsion-simulation_files/bowser-1.9.3/bowser.min.js","air-propulsion-simulation_files/distill-2.2.21/template.v2.js","air-propulsion-simulation_files/figure-html5/unnamed-chunk-4-J1.png","air-propulsion-simulation_files/figure-html5/unnamed-chunk-5-1.png","air-propulsion-simulation_files/figure-html5/unnamed-chunk-5-2.png","air-propulsion-simulation_files/figure-html5/unnamed-chunk-5-J1.png","air-propulsion-simulation_files/figure-html5/unnamed-chunk-5-J2.png","air-propulsion-simulation_files/figure-html5/unnamed-chunk-5-J3.png","air-propulsion-simulation_files/figure-html5/unnamed-chunk-5-J4.png","air-propulsion-simulation_files/figure-html5/unnamed-chunk-6-J1.png","air-propulsion-simulation_files/figure-html5/unnamed-chunk-7-J1.png","air-propulsion-simulation_files/figure-html5/unnamed-chunk-8-J1.png","air-propulsion-simulation_files/header-attrs-2.7/header-attrs.js","air-propulsion-simulation_files/jquery-1.11.3/jquery.min.js","air-propulsion-simulation_files/popper-2.6.0/popper.min.js","air-propulsion-simulation_files/tippy-6.2.7/tippy-bundle.umd.min.js","air-propulsion-simulation_files/tippy-6.2.7/tippy-light-border.css","air-propulsion-simulation_files/tippy-6.2.7/tippy.css","air-propulsion-simulation_files/tippy-6.2.7/tippy.umd.min.js","air-propulsion-simulation_files/webcomponents-2.0.0/webcomponents.js","Estes_F15.csv","figure/-J2.png","figure/-J3.png","figure/-J4.png"]}
|
||
</script>
|
||
<!--radix_placeholder_navigation_in_header-->
|
||
<!--/radix_placeholder_navigation_in_header-->
|
||
<!--radix_placeholder_distill-->
|
||
|
||
<style type="text/css">
|
||
|
||
body {
|
||
background-color: white;
|
||
}
|
||
|
||
.pandoc-table {
|
||
width: 100%;
|
||
}
|
||
|
||
.pandoc-table>caption {
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.pandoc-table th:not([align]) {
|
||
text-align: left;
|
||
}
|
||
|
||
.pagedtable-footer {
|
||
font-size: 15px;
|
||
}
|
||
|
||
d-byline .byline {
|
||
grid-template-columns: 2fr 2fr;
|
||
}
|
||
|
||
d-byline .byline h3 {
|
||
margin-block-start: 1.5em;
|
||
}
|
||
|
||
d-byline .byline .authors-affiliations h3 {
|
||
margin-block-start: 0.5em;
|
||
}
|
||
|
||
.authors-affiliations .orcid-id {
|
||
width: 16px;
|
||
height:16px;
|
||
margin-left: 4px;
|
||
margin-right: 4px;
|
||
vertical-align: middle;
|
||
padding-bottom: 2px;
|
||
}
|
||
|
||
d-title .dt-tags {
|
||
margin-top: 1em;
|
||
grid-column: text;
|
||
}
|
||
|
||
.dt-tags .dt-tag {
|
||
text-decoration: none;
|
||
display: inline-block;
|
||
color: rgba(0,0,0,0.6);
|
||
padding: 0em 0.4em;
|
||
margin-right: 0.5em;
|
||
margin-bottom: 0.4em;
|
||
font-size: 70%;
|
||
border: 1px solid rgba(0,0,0,0.2);
|
||
border-radius: 3px;
|
||
text-transform: uppercase;
|
||
font-weight: 500;
|
||
}
|
||
|
||
d-article table.gt_table td,
|
||
d-article table.gt_table th {
|
||
border-bottom: none;
|
||
}
|
||
|
||
.html-widget {
|
||
margin-bottom: 2.0em;
|
||
}
|
||
|
||
.l-screen-inset {
|
||
padding-right: 16px;
|
||
}
|
||
|
||
.l-screen .caption {
|
||
margin-left: 10px;
|
||
}
|
||
|
||
.shaded {
|
||
background: rgb(247, 247, 247);
|
||
padding-top: 20px;
|
||
padding-bottom: 20px;
|
||
border-top: 1px solid rgba(0, 0, 0, 0.1);
|
||
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
||
}
|
||
|
||
.shaded .html-widget {
|
||
margin-bottom: 0;
|
||
border: 1px solid rgba(0, 0, 0, 0.1);
|
||
}
|
||
|
||
.shaded .shaded-content {
|
||
background: white;
|
||
}
|
||
|
||
.text-output {
|
||
margin-top: 0;
|
||
line-height: 1.5em;
|
||
}
|
||
|
||
.hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
d-article {
|
||
padding-top: 2.5rem;
|
||
padding-bottom: 30px;
|
||
}
|
||
|
||
d-appendix {
|
||
padding-top: 30px;
|
||
}
|
||
|
||
d-article>p>img {
|
||
width: 100%;
|
||
}
|
||
|
||
d-article h2 {
|
||
margin: 1rem 0 1.5rem 0;
|
||
}
|
||
|
||
d-article h3 {
|
||
margin-top: 1.5rem;
|
||
}
|
||
|
||
d-article iframe {
|
||
border: 1px solid rgba(0, 0, 0, 0.1);
|
||
margin-bottom: 2.0em;
|
||
width: 100%;
|
||
}
|
||
|
||
/* Tweak code blocks */
|
||
|
||
d-article div.sourceCode code,
|
||
d-article pre code {
|
||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||
}
|
||
|
||
d-article pre,
|
||
d-article div.sourceCode,
|
||
d-article div.sourceCode pre {
|
||
overflow: auto;
|
||
}
|
||
|
||
d-article div.sourceCode {
|
||
background-color: white;
|
||
}
|
||
|
||
d-article div.sourceCode pre {
|
||
padding-left: 10px;
|
||
font-size: 12px;
|
||
border-left: 2px solid rgba(0,0,0,0.1);
|
||
}
|
||
|
||
d-article pre {
|
||
font-size: 12px;
|
||
color: black;
|
||
background: none;
|
||
margin-top: 0;
|
||
text-align: left;
|
||
white-space: pre;
|
||
word-spacing: normal;
|
||
word-break: normal;
|
||
word-wrap: normal;
|
||
line-height: 1.5;
|
||
|
||
-moz-tab-size: 4;
|
||
-o-tab-size: 4;
|
||
tab-size: 4;
|
||
|
||
-webkit-hyphens: none;
|
||
-moz-hyphens: none;
|
||
-ms-hyphens: none;
|
||
hyphens: none;
|
||
}
|
||
|
||
d-article pre a {
|
||
border-bottom: none;
|
||
}
|
||
|
||
d-article pre a:hover {
|
||
border-bottom: none;
|
||
text-decoration: underline;
|
||
}
|
||
|
||
d-article details {
|
||
grid-column: text;
|
||
margin-bottom: 0.8em;
|
||
}
|
||
|
||
@media(min-width: 768px) {
|
||
|
||
d-article pre,
|
||
d-article div.sourceCode,
|
||
d-article div.sourceCode pre {
|
||
overflow: visible !important;
|
||
}
|
||
|
||
d-article div.sourceCode pre {
|
||
padding-left: 18px;
|
||
font-size: 14px;
|
||
}
|
||
|
||
d-article pre {
|
||
font-size: 14px;
|
||
}
|
||
|
||
}
|
||
|
||
figure img.external {
|
||
background: white;
|
||
border: 1px solid rgba(0, 0, 0, 0.1);
|
||
box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
|
||
padding: 18px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
/* CSS for d-contents */
|
||
|
||
.d-contents {
|
||
grid-column: text;
|
||
color: rgba(0,0,0,0.8);
|
||
font-size: 0.9em;
|
||
padding-bottom: 1em;
|
||
margin-bottom: 1em;
|
||
padding-bottom: 0.5em;
|
||
margin-bottom: 1em;
|
||
padding-left: 0.25em;
|
||
justify-self: start;
|
||
}
|
||
|
||
@media(min-width: 1000px) {
|
||
.d-contents.d-contents-float {
|
||
height: 0;
|
||
grid-column-start: 1;
|
||
grid-column-end: 4;
|
||
justify-self: center;
|
||
padding-right: 3em;
|
||
padding-left: 2em;
|
||
}
|
||
}
|
||
|
||
.d-contents nav h3 {
|
||
font-size: 18px;
|
||
margin-top: 0;
|
||
margin-bottom: 1em;
|
||
}
|
||
|
||
.d-contents li {
|
||
list-style-type: none
|
||
}
|
||
|
||
.d-contents nav > ul {
|
||
padding-left: 0;
|
||
}
|
||
|
||
.d-contents ul {
|
||
padding-left: 1em
|
||
}
|
||
|
||
.d-contents nav ul li {
|
||
margin-top: 0.6em;
|
||
margin-bottom: 0.2em;
|
||
}
|
||
|
||
.d-contents nav a {
|
||
font-size: 13px;
|
||
border-bottom: none;
|
||
text-decoration: none
|
||
color: rgba(0, 0, 0, 0.8);
|
||
}
|
||
|
||
.d-contents nav a:hover {
|
||
text-decoration: underline solid rgba(0, 0, 0, 0.6)
|
||
}
|
||
|
||
.d-contents nav > ul > li > a {
|
||
font-weight: 600;
|
||
}
|
||
|
||
.d-contents nav > ul > li > ul {
|
||
font-weight: inherit;
|
||
}
|
||
|
||
.d-contents nav > ul > li > ul > li {
|
||
margin-top: 0.2em;
|
||
}
|
||
|
||
|
||
.d-contents nav ul {
|
||
margin-top: 0;
|
||
margin-bottom: 0.25em;
|
||
}
|
||
|
||
.d-article-with-toc h2:nth-child(2) {
|
||
margin-top: 0;
|
||
}
|
||
|
||
|
||
/* Figure */
|
||
|
||
.figure {
|
||
position: relative;
|
||
margin-bottom: 2.5em;
|
||
margin-top: 1.5em;
|
||
}
|
||
|
||
.figure img {
|
||
width: 100%;
|
||
}
|
||
|
||
.figure .caption {
|
||
color: rgba(0, 0, 0, 0.6);
|
||
font-size: 12px;
|
||
line-height: 1.5em;
|
||
}
|
||
|
||
.figure img.external {
|
||
background: white;
|
||
border: 1px solid rgba(0, 0, 0, 0.1);
|
||
box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
|
||
padding: 18px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.figure .caption a {
|
||
color: rgba(0, 0, 0, 0.6);
|
||
}
|
||
|
||
.figure .caption b,
|
||
.figure .caption strong, {
|
||
font-weight: 600;
|
||
color: rgba(0, 0, 0, 1.0);
|
||
}
|
||
|
||
/* Citations */
|
||
|
||
d-article .citation {
|
||
color: inherit;
|
||
cursor: inherit;
|
||
}
|
||
|
||
div.hanging-indent{
|
||
margin-left: 1em; text-indent: -1em;
|
||
}
|
||
|
||
/* Citation hover box */
|
||
|
||
.tippy-box[data-theme~=light-border] {
|
||
background-color: rgba(250, 250, 250, 0.95);
|
||
}
|
||
|
||
.tippy-content > p {
|
||
margin-bottom: 0;
|
||
padding: 2px;
|
||
}
|
||
|
||
|
||
/* Tweak 1000px media break to show more text */
|
||
|
||
@media(min-width: 1000px) {
|
||
.base-grid,
|
||
distill-header,
|
||
d-title,
|
||
d-abstract,
|
||
d-article,
|
||
d-appendix,
|
||
distill-appendix,
|
||
d-byline,
|
||
d-footnote-list,
|
||
d-citation-list,
|
||
distill-footer {
|
||
grid-template-columns: [screen-start] 1fr [page-start kicker-start] 80px [middle-start] 50px [text-start kicker-end] 65px 65px 65px 65px 65px 65px 65px 65px [text-end gutter-start] 65px [middle-end] 65px [page-end gutter-end] 1fr [screen-end];
|
||
grid-column-gap: 16px;
|
||
}
|
||
|
||
.grid {
|
||
grid-column-gap: 16px;
|
||
}
|
||
|
||
d-article {
|
||
font-size: 1.06rem;
|
||
line-height: 1.7em;
|
||
}
|
||
figure .caption, .figure .caption, figure figcaption {
|
||
font-size: 13px;
|
||
}
|
||
}
|
||
|
||
@media(min-width: 1180px) {
|
||
.base-grid,
|
||
distill-header,
|
||
d-title,
|
||
d-abstract,
|
||
d-article,
|
||
d-appendix,
|
||
distill-appendix,
|
||
d-byline,
|
||
d-footnote-list,
|
||
d-citation-list,
|
||
distill-footer {
|
||
grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];
|
||
grid-column-gap: 32px;
|
||
}
|
||
|
||
.grid {
|
||
grid-column-gap: 32px;
|
||
}
|
||
}
|
||
|
||
|
||
/* Get the citation styles for the appendix (not auto-injected on render since
|
||
we do our own rendering of the citation appendix) */
|
||
|
||
d-appendix .citation-appendix,
|
||
.d-appendix .citation-appendix {
|
||
font-size: 11px;
|
||
line-height: 15px;
|
||
border-left: 1px solid rgba(0, 0, 0, 0.1);
|
||
padding-left: 18px;
|
||
border: 1px solid rgba(0,0,0,0.1);
|
||
background: rgba(0, 0, 0, 0.02);
|
||
padding: 10px 18px;
|
||
border-radius: 3px;
|
||
color: rgba(150, 150, 150, 1);
|
||
overflow: hidden;
|
||
margin-top: -12px;
|
||
white-space: pre-wrap;
|
||
word-wrap: break-word;
|
||
}
|
||
|
||
/* Include appendix styles here so they can be overridden */
|
||
|
||
d-appendix {
|
||
contain: layout style;
|
||
font-size: 0.8em;
|
||
line-height: 1.7em;
|
||
margin-top: 60px;
|
||
margin-bottom: 0;
|
||
border-top: 1px solid rgba(0, 0, 0, 0.1);
|
||
color: rgba(0,0,0,0.5);
|
||
padding-top: 60px;
|
||
padding-bottom: 48px;
|
||
}
|
||
|
||
d-appendix h3 {
|
||
grid-column: page-start / text-start;
|
||
font-size: 15px;
|
||
font-weight: 500;
|
||
margin-top: 1em;
|
||
margin-bottom: 0;
|
||
color: rgba(0,0,0,0.65);
|
||
}
|
||
|
||
d-appendix h3 + * {
|
||
margin-top: 1em;
|
||
}
|
||
|
||
d-appendix ol {
|
||
padding: 0 0 0 15px;
|
||
}
|
||
|
||
@media (min-width: 768px) {
|
||
d-appendix ol {
|
||
padding: 0 0 0 30px;
|
||
margin-left: -30px;
|
||
}
|
||
}
|
||
|
||
d-appendix li {
|
||
margin-bottom: 1em;
|
||
}
|
||
|
||
d-appendix a {
|
||
color: rgba(0, 0, 0, 0.6);
|
||
}
|
||
|
||
d-appendix > * {
|
||
grid-column: text;
|
||
}
|
||
|
||
d-appendix > d-footnote-list,
|
||
d-appendix > d-citation-list,
|
||
d-appendix > distill-appendix {
|
||
grid-column: screen;
|
||
}
|
||
|
||
/* Include footnote styles here so they can be overridden */
|
||
|
||
d-footnote-list {
|
||
contain: layout style;
|
||
}
|
||
|
||
d-footnote-list > * {
|
||
grid-column: text;
|
||
}
|
||
|
||
d-footnote-list a.footnote-backlink {
|
||
color: rgba(0,0,0,0.3);
|
||
padding-left: 0.5em;
|
||
}
|
||
|
||
|
||
|
||
/* Anchor.js */
|
||
|
||
.anchorjs-link {
|
||
/*transition: all .25s linear; */
|
||
text-decoration: none;
|
||
border-bottom: none;
|
||
}
|
||
*:hover > .anchorjs-link {
|
||
margin-left: -1.125em !important;
|
||
text-decoration: none;
|
||
border-bottom: none;
|
||
}
|
||
|
||
/* Social footer */
|
||
|
||
.social_footer {
|
||
margin-top: 30px;
|
||
margin-bottom: 0;
|
||
color: rgba(0,0,0,0.67);
|
||
}
|
||
|
||
.disqus-comments {
|
||
margin-right: 30px;
|
||
}
|
||
|
||
.disqus-comment-count {
|
||
border-bottom: 1px solid rgba(0, 0, 0, 0.4);
|
||
cursor: pointer;
|
||
}
|
||
|
||
#disqus_thread {
|
||
margin-top: 30px;
|
||
}
|
||
|
||
.article-sharing a {
|
||
border-bottom: none;
|
||
margin-right: 8px;
|
||
}
|
||
|
||
.article-sharing a:hover {
|
||
border-bottom: none;
|
||
}
|
||
|
||
.sidebar-section.subscribe {
|
||
font-size: 12px;
|
||
line-height: 1.6em;
|
||
}
|
||
|
||
.subscribe p {
|
||
margin-bottom: 0.5em;
|
||
}
|
||
|
||
|
||
.article-footer .subscribe {
|
||
font-size: 15px;
|
||
margin-top: 45px;
|
||
}
|
||
|
||
|
||
.sidebar-section.custom {
|
||
font-size: 12px;
|
||
line-height: 1.6em;
|
||
}
|
||
|
||
.custom p {
|
||
margin-bottom: 0.5em;
|
||
}
|
||
|
||
/* Styles for listing layout (hide title) */
|
||
.layout-listing d-title, .layout-listing .d-title {
|
||
display: none;
|
||
}
|
||
|
||
/* Styles for posts lists (not auto-injected) */
|
||
|
||
|
||
.posts-with-sidebar {
|
||
padding-left: 45px;
|
||
padding-right: 45px;
|
||
}
|
||
|
||
.posts-list .description h2,
|
||
.posts-list .description p {
|
||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
|
||
}
|
||
|
||
.posts-list .description h2 {
|
||
font-weight: 700;
|
||
border-bottom: none;
|
||
padding-bottom: 0;
|
||
}
|
||
|
||
.posts-list h2.post-tag {
|
||
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
|
||
padding-bottom: 12px;
|
||
}
|
||
.posts-list {
|
||
margin-top: 60px;
|
||
margin-bottom: 24px;
|
||
}
|
||
|
||
.posts-list .post-preview {
|
||
text-decoration: none;
|
||
overflow: hidden;
|
||
display: block;
|
||
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
||
padding: 24px 0;
|
||
}
|
||
|
||
.post-preview-last {
|
||
border-bottom: none !important;
|
||
}
|
||
|
||
.posts-list .posts-list-caption {
|
||
grid-column: screen;
|
||
font-weight: 400;
|
||
}
|
||
|
||
.posts-list .post-preview h2 {
|
||
margin: 0 0 6px 0;
|
||
line-height: 1.2em;
|
||
font-style: normal;
|
||
font-size: 24px;
|
||
}
|
||
|
||
.posts-list .post-preview p {
|
||
margin: 0 0 12px 0;
|
||
line-height: 1.4em;
|
||
font-size: 16px;
|
||
}
|
||
|
||
.posts-list .post-preview .thumbnail {
|
||
box-sizing: border-box;
|
||
margin-bottom: 24px;
|
||
position: relative;
|
||
max-width: 500px;
|
||
}
|
||
.posts-list .post-preview img {
|
||
width: 100%;
|
||
display: block;
|
||
}
|
||
|
||
.posts-list .metadata {
|
||
font-size: 12px;
|
||
line-height: 1.4em;
|
||
margin-bottom: 18px;
|
||
}
|
||
|
||
.posts-list .metadata > * {
|
||
display: inline-block;
|
||
}
|
||
|
||
.posts-list .metadata .publishedDate {
|
||
margin-right: 2em;
|
||
}
|
||
|
||
.posts-list .metadata .dt-authors {
|
||
display: block;
|
||
margin-top: 0.3em;
|
||
margin-right: 2em;
|
||
}
|
||
|
||
.posts-list .dt-tags {
|
||
display: block;
|
||
line-height: 1em;
|
||
}
|
||
|
||
.posts-list .dt-tags .dt-tag {
|
||
display: inline-block;
|
||
color: rgba(0,0,0,0.6);
|
||
padding: 0.3em 0.4em;
|
||
margin-right: 0.2em;
|
||
margin-bottom: 0.4em;
|
||
font-size: 60%;
|
||
border: 1px solid rgba(0,0,0,0.2);
|
||
border-radius: 3px;
|
||
text-transform: uppercase;
|
||
font-weight: 500;
|
||
}
|
||
|
||
.posts-list img {
|
||
opacity: 1;
|
||
}
|
||
|
||
.posts-list img[data-src] {
|
||
opacity: 0;
|
||
}
|
||
|
||
.posts-more {
|
||
clear: both;
|
||
}
|
||
|
||
|
||
.posts-sidebar {
|
||
font-size: 16px;
|
||
}
|
||
|
||
.posts-sidebar h3 {
|
||
font-size: 16px;
|
||
margin-top: 0;
|
||
margin-bottom: 0.5em;
|
||
font-weight: 400;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.sidebar-section {
|
||
margin-bottom: 30px;
|
||
}
|
||
|
||
.categories ul {
|
||
list-style-type: none;
|
||
margin: 0;
|
||
padding: 0;
|
||
}
|
||
|
||
.categories li {
|
||
color: rgba(0, 0, 0, 0.8);
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.categories li>a {
|
||
border-bottom: none;
|
||
}
|
||
|
||
.categories li>a:hover {
|
||
border-bottom: 1px solid rgba(0, 0, 0, 0.4);
|
||
}
|
||
|
||
.categories .active {
|
||
font-weight: 600;
|
||
}
|
||
|
||
.categories .category-count {
|
||
color: rgba(0, 0, 0, 0.4);
|
||
}
|
||
|
||
|
||
@media(min-width: 768px) {
|
||
.posts-list .post-preview h2 {
|
||
font-size: 26px;
|
||
}
|
||
.posts-list .post-preview .thumbnail {
|
||
float: right;
|
||
width: 30%;
|
||
margin-bottom: 0;
|
||
}
|
||
.posts-list .post-preview .description {
|
||
float: left;
|
||
width: 45%;
|
||
}
|
||
.posts-list .post-preview .metadata {
|
||
float: left;
|
||
width: 20%;
|
||
margin-top: 8px;
|
||
}
|
||
.posts-list .post-preview p {
|
||
margin: 0 0 12px 0;
|
||
line-height: 1.5em;
|
||
font-size: 16px;
|
||
}
|
||
.posts-with-sidebar .posts-list {
|
||
float: left;
|
||
width: 75%;
|
||
}
|
||
.posts-with-sidebar .posts-sidebar {
|
||
float: right;
|
||
width: 20%;
|
||
margin-top: 60px;
|
||
padding-top: 24px;
|
||
padding-bottom: 24px;
|
||
}
|
||
}
|
||
|
||
|
||
/* Improve display for browsers without grid (IE/Edge <= 15) */
|
||
|
||
.downlevel {
|
||
line-height: 1.6em;
|
||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
|
||
margin: 0;
|
||
}
|
||
|
||
.downlevel .d-title {
|
||
padding-top: 6rem;
|
||
padding-bottom: 1.5rem;
|
||
}
|
||
|
||
.downlevel .d-title h1 {
|
||
font-size: 50px;
|
||
font-weight: 700;
|
||
line-height: 1.1em;
|
||
margin: 0 0 0.5rem;
|
||
}
|
||
|
||
.downlevel .d-title p {
|
||
font-weight: 300;
|
||
font-size: 1.2rem;
|
||
line-height: 1.55em;
|
||
margin-top: 0;
|
||
}
|
||
|
||
.downlevel .d-byline {
|
||
padding-top: 0.8em;
|
||
padding-bottom: 0.8em;
|
||
font-size: 0.8rem;
|
||
line-height: 1.8em;
|
||
}
|
||
|
||
.downlevel .section-separator {
|
||
border: none;
|
||
border-top: 1px solid rgba(0, 0, 0, 0.1);
|
||
}
|
||
|
||
.downlevel .d-article {
|
||
font-size: 1.06rem;
|
||
line-height: 1.7em;
|
||
padding-top: 1rem;
|
||
padding-bottom: 2rem;
|
||
}
|
||
|
||
|
||
.downlevel .d-appendix {
|
||
padding-left: 0;
|
||
padding-right: 0;
|
||
max-width: none;
|
||
font-size: 0.8em;
|
||
line-height: 1.7em;
|
||
margin-bottom: 0;
|
||
color: rgba(0,0,0,0.5);
|
||
padding-top: 40px;
|
||
padding-bottom: 48px;
|
||
}
|
||
|
||
.downlevel .footnotes ol {
|
||
padding-left: 13px;
|
||
}
|
||
|
||
.downlevel .base-grid,
|
||
.downlevel .distill-header,
|
||
.downlevel .d-title,
|
||
.downlevel .d-abstract,
|
||
.downlevel .d-article,
|
||
.downlevel .d-appendix,
|
||
.downlevel .distill-appendix,
|
||
.downlevel .d-byline,
|
||
.downlevel .d-footnote-list,
|
||
.downlevel .d-citation-list,
|
||
.downlevel .distill-footer,
|
||
.downlevel .appendix-bottom,
|
||
.downlevel .posts-container {
|
||
padding-left: 40px;
|
||
padding-right: 40px;
|
||
}
|
||
|
||
@media(min-width: 768px) {
|
||
.downlevel .base-grid,
|
||
.downlevel .distill-header,
|
||
.downlevel .d-title,
|
||
.downlevel .d-abstract,
|
||
.downlevel .d-article,
|
||
.downlevel .d-appendix,
|
||
.downlevel .distill-appendix,
|
||
.downlevel .d-byline,
|
||
.downlevel .d-footnote-list,
|
||
.downlevel .d-citation-list,
|
||
.downlevel .distill-footer,
|
||
.downlevel .appendix-bottom,
|
||
.downlevel .posts-container {
|
||
padding-left: 150px;
|
||
padding-right: 150px;
|
||
max-width: 900px;
|
||
}
|
||
}
|
||
|
||
.downlevel pre code {
|
||
display: block;
|
||
border-left: 2px solid rgba(0, 0, 0, .1);
|
||
padding: 0 0 0 20px;
|
||
font-size: 14px;
|
||
}
|
||
|
||
.downlevel code, .downlevel pre {
|
||
color: black;
|
||
background: none;
|
||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||
text-align: left;
|
||
white-space: pre;
|
||
word-spacing: normal;
|
||
word-break: normal;
|
||
word-wrap: normal;
|
||
line-height: 1.5;
|
||
|
||
-moz-tab-size: 4;
|
||
-o-tab-size: 4;
|
||
tab-size: 4;
|
||
|
||
-webkit-hyphens: none;
|
||
-moz-hyphens: none;
|
||
-ms-hyphens: none;
|
||
hyphens: none;
|
||
}
|
||
|
||
.downlevel .posts-list .post-preview {
|
||
color: inherit;
|
||
}
|
||
|
||
|
||
|
||
</style>
|
||
|
||
<script type="application/javascript">
|
||
|
||
function is_downlevel_browser() {
|
||
if (bowser.isUnsupportedBrowser({ msie: "12", msedge: "16"},
|
||
window.navigator.userAgent)) {
|
||
return true;
|
||
} else {
|
||
return window.load_distill_framework === undefined;
|
||
}
|
||
}
|
||
|
||
// show body when load is complete
|
||
function on_load_complete() {
|
||
|
||
// add anchors
|
||
if (window.anchors) {
|
||
window.anchors.options.placement = 'left';
|
||
window.anchors.add('d-article > h2, d-article > h3, d-article > h4, d-article > h5');
|
||
}
|
||
|
||
|
||
// set body to visible
|
||
document.body.style.visibility = 'visible';
|
||
|
||
// force redraw for leaflet widgets
|
||
if (window.HTMLWidgets) {
|
||
var maps = window.HTMLWidgets.findAll(".leaflet");
|
||
$.each(maps, function(i, el) {
|
||
var map = this.getMap();
|
||
map.invalidateSize();
|
||
map.eachLayer(function(layer) {
|
||
if (layer instanceof L.TileLayer)
|
||
layer.redraw();
|
||
});
|
||
});
|
||
}
|
||
|
||
// trigger 'shown' so htmlwidgets resize
|
||
$('d-article').trigger('shown');
|
||
}
|
||
|
||
function init_distill() {
|
||
|
||
init_common();
|
||
|
||
// create front matter
|
||
var front_matter = $('<d-front-matter></d-front-matter>');
|
||
$('#distill-front-matter').wrap(front_matter);
|
||
|
||
// create d-title
|
||
$('.d-title').changeElementType('d-title');
|
||
|
||
// create d-byline
|
||
var byline = $('<d-byline></d-byline>');
|
||
$('.d-byline').replaceWith(byline);
|
||
|
||
// create d-article
|
||
var article = $('<d-article></d-article>');
|
||
$('.d-article').wrap(article).children().unwrap();
|
||
|
||
// move posts container into article
|
||
$('.posts-container').appendTo($('d-article'));
|
||
|
||
// create d-appendix
|
||
$('.d-appendix').changeElementType('d-appendix');
|
||
|
||
// flag indicating that we have appendix items
|
||
var appendix = $('.appendix-bottom').children('h3').length > 0;
|
||
|
||
// replace footnotes with <d-footnote>
|
||
$('.footnote-ref').each(function(i, val) {
|
||
appendix = true;
|
||
var href = $(this).attr('href');
|
||
var id = href.replace('#', '');
|
||
var fn = $('#' + id);
|
||
var fn_p = $('#' + id + '>p');
|
||
fn_p.find('.footnote-back').remove();
|
||
var text = fn_p.html();
|
||
var dtfn = $('<d-footnote></d-footnote>');
|
||
dtfn.html(text);
|
||
$(this).replaceWith(dtfn);
|
||
});
|
||
// remove footnotes
|
||
$('.footnotes').remove();
|
||
|
||
// move refs into #references-listing
|
||
$('#references-listing').replaceWith($('#refs'));
|
||
|
||
$('h1.appendix, h2.appendix').each(function(i, val) {
|
||
$(this).changeElementType('h3');
|
||
});
|
||
$('h3.appendix').each(function(i, val) {
|
||
var id = $(this).attr('id');
|
||
$('.d-contents a[href="#' + id + '"]').parent().remove();
|
||
appendix = true;
|
||
$(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('d-appendix'));
|
||
});
|
||
|
||
// show d-appendix if we have appendix content
|
||
$("d-appendix").css('display', appendix ? 'grid' : 'none');
|
||
|
||
// localize layout chunks to just output
|
||
$('.layout-chunk').each(function(i, val) {
|
||
|
||
// capture layout
|
||
var layout = $(this).attr('data-layout');
|
||
|
||
// apply layout to markdown level block elements
|
||
var elements = $(this).children().not('details, div.sourceCode, pre, script');
|
||
elements.each(function(i, el) {
|
||
var layout_div = $('<div class="' + layout + '"></div>');
|
||
if (layout_div.hasClass('shaded')) {
|
||
var shaded_content = $('<div class="shaded-content"></div>');
|
||
$(this).wrap(shaded_content);
|
||
$(this).parent().wrap(layout_div);
|
||
} else {
|
||
$(this).wrap(layout_div);
|
||
}
|
||
});
|
||
|
||
|
||
// unwrap the layout-chunk div
|
||
$(this).children().unwrap();
|
||
});
|
||
|
||
// remove code block used to force highlighting css
|
||
$('.distill-force-highlighting-css').parent().remove();
|
||
|
||
// remove empty line numbers inserted by pandoc when using a
|
||
// custom syntax highlighting theme
|
||
$('code.sourceCode a:empty').remove();
|
||
|
||
// load distill framework
|
||
load_distill_framework();
|
||
|
||
// wait for window.distillRunlevel == 4 to do post processing
|
||
function distill_post_process() {
|
||
|
||
if (!window.distillRunlevel || window.distillRunlevel < 4)
|
||
return;
|
||
|
||
// hide author/affiliations entirely if we have no authors
|
||
var front_matter = JSON.parse($("#distill-front-matter").html());
|
||
var have_authors = front_matter.authors && front_matter.authors.length > 0;
|
||
if (!have_authors)
|
||
$('d-byline').addClass('hidden');
|
||
|
||
// article with toc class
|
||
$('.d-contents').parent().addClass('d-article-with-toc');
|
||
|
||
// strip links that point to #
|
||
$('.authors-affiliations').find('a[href="#"]').removeAttr('href');
|
||
|
||
// add orcid ids
|
||
$('.authors-affiliations').find('.author').each(function(i, el) {
|
||
var orcid_id = front_matter.authors[i].orcidID;
|
||
if (orcid_id) {
|
||
var a = $('<a></a>');
|
||
a.attr('href', 'https://orcid.org/' + orcid_id);
|
||
var img = $('<img></img>');
|
||
img.addClass('orcid-id');
|
||
img.attr('alt', 'ORCID ID');
|
||
img.attr('src','data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg==');
|
||
a.append(img);
|
||
$(this).append(a);
|
||
}
|
||
});
|
||
|
||
// hide elements of author/affiliations grid that have no value
|
||
function hide_byline_column(caption) {
|
||
$('d-byline').find('h3:contains("' + caption + '")').parent().css('visibility', 'hidden');
|
||
}
|
||
|
||
// affiliations
|
||
var have_affiliations = false;
|
||
for (var i = 0; i<front_matter.authors.length; ++i) {
|
||
var author = front_matter.authors[i];
|
||
if (author.affiliation !== " ") {
|
||
have_affiliations = true;
|
||
break;
|
||
}
|
||
}
|
||
if (!have_affiliations)
|
||
$('d-byline').find('h3:contains("Affiliations")').css('visibility', 'hidden');
|
||
|
||
// published date
|
||
if (!front_matter.publishedDate)
|
||
hide_byline_column("Published");
|
||
|
||
// document object identifier
|
||
var doi = $('d-byline').find('h3:contains("DOI")');
|
||
var doi_p = doi.next().empty();
|
||
if (!front_matter.doi) {
|
||
// if we have a citation and valid citationText then link to that
|
||
if ($('#citation').length > 0 && front_matter.citationText) {
|
||
doi.html('Citation');
|
||
$('<a href="#citation"></a>')
|
||
.text(front_matter.citationText)
|
||
.appendTo(doi_p);
|
||
} else {
|
||
hide_byline_column("DOI");
|
||
}
|
||
} else {
|
||
$('<a></a>')
|
||
.attr('href', "https://doi.org/" + front_matter.doi)
|
||
.html(front_matter.doi)
|
||
.appendTo(doi_p);
|
||
}
|
||
|
||
// change plural form of authors/affiliations
|
||
if (front_matter.authors.length === 1) {
|
||
var grid = $('.authors-affiliations');
|
||
grid.children('h3:contains("Authors")').text('Author');
|
||
grid.children('h3:contains("Affiliations")').text('Affiliation');
|
||
}
|
||
|
||
// remove d-appendix and d-footnote-list local styles
|
||
$('d-appendix > style:first-child').remove();
|
||
$('d-footnote-list > style:first-child').remove();
|
||
|
||
// move appendix-bottom entries to the bottom
|
||
$('.appendix-bottom').appendTo('d-appendix').children().unwrap();
|
||
$('.appendix-bottom').remove();
|
||
|
||
// hoverable references
|
||
$('span.citation[data-cites]').each(function() {
|
||
var refHtml = $('#ref-' + $(this).attr('data-cites')).html();
|
||
window.tippy(this, {
|
||
allowHTML: true,
|
||
content: refHtml,
|
||
maxWidth: 500,
|
||
interactive: true,
|
||
interactiveBorder: 10,
|
||
theme: 'light-border',
|
||
placement: 'bottom-start'
|
||
});
|
||
});
|
||
|
||
// clear polling timer
|
||
clearInterval(tid);
|
||
|
||
// show body now that everything is ready
|
||
on_load_complete();
|
||
}
|
||
|
||
var tid = setInterval(distill_post_process, 50);
|
||
distill_post_process();
|
||
|
||
}
|
||
|
||
function init_downlevel() {
|
||
|
||
init_common();
|
||
|
||
// insert hr after d-title
|
||
$('.d-title').after($('<hr class="section-separator"/>'));
|
||
|
||
// check if we have authors
|
||
var front_matter = JSON.parse($("#distill-front-matter").html());
|
||
var have_authors = front_matter.authors && front_matter.authors.length > 0;
|
||
|
||
// manage byline/border
|
||
if (!have_authors)
|
||
$('.d-byline').remove();
|
||
$('.d-byline').after($('<hr class="section-separator"/>'));
|
||
$('.d-byline a').remove();
|
||
|
||
// remove toc
|
||
$('.d-contents').remove();
|
||
|
||
// move appendix elements
|
||
$('h1.appendix, h2.appendix').each(function(i, val) {
|
||
$(this).changeElementType('h3');
|
||
});
|
||
$('h3.appendix').each(function(i, val) {
|
||
$(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('.d-appendix'));
|
||
});
|
||
|
||
|
||
// inject headers into references and footnotes
|
||
var refs_header = $('<h3></h3>');
|
||
refs_header.text('References');
|
||
$('#refs').prepend(refs_header);
|
||
|
||
var footnotes_header = $('<h3></h3');
|
||
footnotes_header.text('Footnotes');
|
||
$('.footnotes').children('hr').first().replaceWith(footnotes_header);
|
||
|
||
// move appendix-bottom entries to the bottom
|
||
$('.appendix-bottom').appendTo('.d-appendix').children().unwrap();
|
||
$('.appendix-bottom').remove();
|
||
|
||
// remove appendix if it's empty
|
||
if ($('.d-appendix').children().length === 0)
|
||
$('.d-appendix').remove();
|
||
|
||
// prepend separator above appendix
|
||
$('.d-appendix').before($('<hr class="section-separator" style="clear: both"/>'));
|
||
|
||
// trim code
|
||
$('pre>code').each(function(i, val) {
|
||
$(this).html($.trim($(this).html()));
|
||
});
|
||
|
||
// move posts-container right before article
|
||
$('.posts-container').insertBefore($('.d-article'));
|
||
|
||
$('body').addClass('downlevel');
|
||
|
||
on_load_complete();
|
||
}
|
||
|
||
|
||
function init_common() {
|
||
|
||
// jquery plugin to change element types
|
||
(function($) {
|
||
$.fn.changeElementType = function(newType) {
|
||
var attrs = {};
|
||
|
||
$.each(this[0].attributes, function(idx, attr) {
|
||
attrs[attr.nodeName] = attr.nodeValue;
|
||
});
|
||
|
||
this.replaceWith(function() {
|
||
return $("<" + newType + "/>", attrs).append($(this).contents());
|
||
});
|
||
};
|
||
})(jQuery);
|
||
|
||
// prevent underline for linked images
|
||
$('a > img').parent().css({'border-bottom' : 'none'});
|
||
|
||
// mark non-body figures created by knitr chunks as 100% width
|
||
$('.layout-chunk').each(function(i, val) {
|
||
var figures = $(this).find('img, .html-widget');
|
||
if ($(this).attr('data-layout') !== "l-body") {
|
||
figures.css('width', '100%');
|
||
} else {
|
||
figures.css('max-width', '100%');
|
||
figures.filter("[width]").each(function(i, val) {
|
||
var fig = $(this);
|
||
fig.css('width', fig.attr('width') + 'px');
|
||
});
|
||
|
||
}
|
||
});
|
||
|
||
// auto-append index.html to post-preview links in file: protocol
|
||
// and in rstudio ide preview
|
||
$('.post-preview').each(function(i, val) {
|
||
if (window.location.protocol === "file:")
|
||
$(this).attr('href', $(this).attr('href') + "index.html");
|
||
});
|
||
|
||
// get rid of index.html references in header
|
||
if (window.location.protocol !== "file:") {
|
||
$('.distill-site-header a[href]').each(function(i,val) {
|
||
$(this).attr('href', $(this).attr('href').replace("index.html", "./"));
|
||
});
|
||
}
|
||
|
||
// add class to pandoc style tables
|
||
$('tr.header').parent('thead').parent('table').addClass('pandoc-table');
|
||
$('.kable-table').children('table').addClass('pandoc-table');
|
||
|
||
// add figcaption style to table captions
|
||
$('caption').parent('table').addClass("figcaption");
|
||
|
||
// initialize posts list
|
||
if (window.init_posts_list)
|
||
window.init_posts_list();
|
||
|
||
// implmement disqus comment link
|
||
$('.disqus-comment-count').click(function() {
|
||
window.headroom_prevent_pin = true;
|
||
$('#disqus_thread').toggleClass('hidden');
|
||
if (!$('#disqus_thread').hasClass('hidden')) {
|
||
var offset = $(this).offset();
|
||
$(window).resize();
|
||
$('html, body').animate({
|
||
scrollTop: offset.top - 35
|
||
});
|
||
}
|
||
});
|
||
}
|
||
|
||
document.addEventListener('DOMContentLoaded', function() {
|
||
if (is_downlevel_browser())
|
||
init_downlevel();
|
||
else
|
||
window.addEventListener('WebComponentsReady', init_distill);
|
||
});
|
||
|
||
</script>
|
||
|
||
<!--/radix_placeholder_distill-->
|
||
<script src="air-propulsion-simulation_files/header-attrs-2.7/header-attrs.js"></script>
|
||
<script src="air-propulsion-simulation_files/jquery-1.11.3/jquery.min.js"></script>
|
||
<script src="air-propulsion-simulation_files/popper-2.6.0/popper.min.js"></script>
|
||
<link href="air-propulsion-simulation_files/tippy-6.2.7/tippy.css" rel="stylesheet" />
|
||
<link href="air-propulsion-simulation_files/tippy-6.2.7/tippy-light-border.css" rel="stylesheet" />
|
||
<script src="air-propulsion-simulation_files/tippy-6.2.7/tippy.umd.min.js"></script>
|
||
<script src="air-propulsion-simulation_files/anchor-4.2.2/anchor.min.js"></script>
|
||
<script src="air-propulsion-simulation_files/bowser-1.9.3/bowser.min.js"></script>
|
||
<script src="air-propulsion-simulation_files/webcomponents-2.0.0/webcomponents.js"></script>
|
||
<script src="air-propulsion-simulation_files/distill-2.2.21/template.v2.js"></script>
|
||
<!--radix_placeholder_site_in_header-->
|
||
<!--/radix_placeholder_site_in_header-->
|
||
|
||
|
||
</head>
|
||
|
||
<body>
|
||
|
||
<!--radix_placeholder_front_matter-->
|
||
|
||
<script id="distill-front-matter" type="text/json">
|
||
{"title":"Air Propulsion Simulation","description":"Simulating the performance of an air propulsion system as an alternative to solid rocket motors.","authors":[{"author":"Anson Biggs","authorURL":"https://ansonbiggs.com","affiliation":" ","affiliationURL":"#","orcidID":""}],"publishedDate":"2021-04-01T00:00:00.000-07:00","citationText":"Biggs, 2021"}
|
||
</script>
|
||
|
||
<!--/radix_placeholder_front_matter-->
|
||
<!--radix_placeholder_navigation_before_body-->
|
||
<!--/radix_placeholder_navigation_before_body-->
|
||
<!--radix_placeholder_site_before_body-->
|
||
<!--/radix_placeholder_site_before_body-->
|
||
|
||
<div class="d-title">
|
||
<h1>Air Propulsion Simulation</h1>
|
||
<!--radix_placeholder_categories-->
|
||
<div class="dt-tags">
|
||
<div class="dt=tag">Julia</div>
|
||
<div class="dt=tag">Capstone</div>
|
||
</div>
|
||
<!--/radix_placeholder_categories-->
|
||
<p><p>Simulating the performance of an air propulsion system as an alternative to solid rocket motors.</p></p>
|
||
</div>
|
||
|
||
<div class="d-byline">
|
||
Anson Biggs <a href="https://ansonbiggs.com" class="uri">https://ansonbiggs.com</a>
|
||
|
||
<br/>04-01-2021
|
||
</div>
|
||
|
||
<div class="d-article">
|
||
<p>For my team was tasked with designing a system capable of moving mining equipment and materials around the surface of the Moon using a propolsive landing. The system had to be tested on earth with something that was feasible for our team to build in 2 semesters. One of the first considerations my capstone advisor wanted was to test the feasibility of an air propulsion system instead of the obvious solution that of using solid rocket motors. This document is really just <em>napkin math</em> to determine if the system is even feasibly and is not mean’t to be a rigorous study of an air propulsion system which would easily keep a capstone team busy by itself.</p>
|
||
<div class="layout-chunk" data-layout="l-body">
|
||
<details>
|
||
<summary>
|
||
Show code
|
||
</summary>
|
||
<div class="sourceCode" id="cb1"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="kw">using</span> Plots</span>
|
||
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a>plotly()</span>
|
||
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a>theme(<span class="op">:</span>ggplot2)<span class="op">;</span> <span class="co"># In true R spirit</span></span>
|
||
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a><span class="kw">using</span> Unitful</span>
|
||
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a><span class="kw">using</span> DataFrames</span>
|
||
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a><span class="kw">using</span> Measurements</span>
|
||
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a><span class="kw">using</span> Measurements<span class="op">:</span> value<span class="op">,</span> uncertainty</span>
|
||
<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a><span class="kw">using</span> CSV</span></code></pre></div>
|
||
</details>
|
||
</div>
|
||
<p>An off the shelf paintball gun tank was used for the pressure vessel. This was chosen because they are very high pressure for their weight, and are designed to be bumped around.</p>
|
||
<div class="layout-chunk" data-layout="l-body">
|
||
<div class="sourceCode" id="cb2"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Tank https://www.amazon.com/Empire-Paintball-BASICS-Pressure-Compressed/dp/B07B6M48SR/</span></span>
|
||
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>V <span class="op">=</span> (<span class="fl">85</span> ± <span class="fl">5</span>)u<span class="st">"inch^3"</span></span>
|
||
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a>P0 <span class="op">=</span> (<span class="fl">4200.0</span> ± <span class="fl">300</span>)u<span class="st">"psi"</span></span>
|
||
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a>Wtank <span class="op">=</span> (<span class="fl">2.3</span> ± <span class="fl">0.2</span>)u<span class="st">"lb"</span></span>
|
||
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a>Pmax <span class="op">=</span> (<span class="fl">250</span> ± <span class="fl">50</span>)u<span class="st">"psi"</span> <span class="co"># Max Pressure that can come out the nozzle</span></span></code></pre></div>
|
||
</div>
|
||
<p>The nozzle diameter was changed until the air prop system had a <em>burn time</em> similar to a G18ST rocket motor.</p>
|
||
<div class="layout-chunk" data-layout="l-body">
|
||
<div class="sourceCode" id="cb3"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Params</span></span>
|
||
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a>d_nozzle <span class="op">=</span> ((<span class="fl">1</span> <span class="op">//</span> <span class="fl">18</span>) ± <span class="fl">0.001</span>)u<span class="st">"inch"</span></span>
|
||
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a>a_nozzle <span class="op">=</span> (<span class="cn">pi</span> <span class="op">/</span> <span class="fl">4</span>) <span class="op">*</span> d_nozzle<span class="op">^</span><span class="fl">2</span></span></code></pre></div>
|
||
</div>
|
||
<p>These are just universal values for what a normal day would look like in Arizona. <span class="citation" data-cites="cengel_thermodynamics">(<a href="#ref-cengel_thermodynamics" role="doc-biblioref">Çengel and Boles 2015</a>)</span></p>
|
||
<div class="layout-chunk" data-layout="l-body">
|
||
<div class="sourceCode" id="cb4"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Universal Stuff</span></span>
|
||
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a>P_amb <span class="op">=</span> (<span class="fl">1</span> ± <span class="fl">0.2</span>)u<span class="st">"atm"</span></span>
|
||
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a>γ <span class="op">=</span> <span class="fl">1.4</span> ± <span class="fl">0.05</span></span>
|
||
<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a>R <span class="op">=</span> <span class="fl">287.05</span>u<span class="st">"J/(kg * K)"</span></span>
|
||
<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a>T <span class="op">=</span> (<span class="fl">300</span> ± <span class="fl">20</span>)u<span class="st">"K"</span></span></code></pre></div>
|
||
</div>
|
||
<p>This is the actual simulation. Maybe throw some references in and explain some equations.</p>
|
||
<p>The following equations also came from <span class="citation" data-cites="cengel_thermodynamics">(<a href="#ref-cengel_thermodynamics" role="doc-biblioref">Çengel and Boles 2015</a>)</span></p>
|
||
<p>The rocket equation is pretty sick<span class="citation" data-cites="sutton_rocket_2001">(<a href="#ref-sutton_rocket_2001" role="doc-biblioref">Sutton and Biblarz 2001</a>, eq: 2-14)</span>:</p>
|
||
<p><span class="math display">\[T = \dot{m} \cdot v_\text{Exit} + A_\text{Nozzle} \cdot (P - P_\text{Ambient}) \]</span> And thats about all you need to get to the Moon<span class="citation" data-cites="curtis_orbital">(<a href="#ref-curtis_orbital" role="doc-biblioref">Curtis 2020</a>)</span>.</p>
|
||
<div class="layout-chunk" data-layout="l-body">
|
||
<div class="sourceCode" id="cb5"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a>df <span class="op">=</span> <span class="kw">let</span></span>
|
||
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a>t <span class="op">=</span> <span class="fl">0.0</span>u<span class="st">"s"</span></span>
|
||
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a>P <span class="op">=</span> P0 <span class="op">|></span> u<span class="st">"Pa"</span></span>
|
||
<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a>M <span class="op">=</span> V <span class="op">*</span> (P <span class="op">/</span> (R <span class="op">*</span> T)) <span class="op">|></span> u<span class="st">"kg"</span></span>
|
||
<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a>ts <span class="op">=</span> <span class="fl">1</span>u<span class="st">"ms"</span></span>
|
||
<span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a>df <span class="op">=</span> DataFrame(Thrust<span class="op">=</span>(<span class="fl">0</span> ± <span class="fl">0</span>)u<span class="st">"N"</span><span class="op">,</span> Pressure<span class="op">=</span>P0<span class="op">,</span> <span class="dt">Time</span><span class="op">=</span><span class="fl">0.0</span>u<span class="st">"s"</span><span class="op">,</span> Mass<span class="op">=</span>M)</span>
|
||
<span id="cb5-7"><a href="#cb5-7" aria-hidden="true" tabindex="-1"></a> <span class="kw">while</span> M <span class="op">></span> <span class="fl">0.005</span>u<span class="st">"kg"</span></span>
|
||
<span id="cb5-8"><a href="#cb5-8" aria-hidden="true" tabindex="-1"></a> <span class="co"># while t < 30u"s"</span></span>
|
||
<span id="cb5-9"><a href="#cb5-9" aria-hidden="true" tabindex="-1"></a> <span class="co"># Calculate what is leaving tank</span></span>
|
||
<span id="cb5-10"><a href="#cb5-10" aria-hidden="true" tabindex="-1"></a> P <span class="op">=</span> minimum([P<span class="op">,</span> Pmax])</span>
|
||
<span id="cb5-11"><a href="#cb5-11" aria-hidden="true" tabindex="-1"></a> ve <span class="op">=</span> sqrt((<span class="fl">2</span> <span class="op">*</span> γ <span class="op">/</span> (γ <span class="op">-</span> <span class="fl">1</span>)) <span class="op">*</span> R <span class="op">*</span> T <span class="op">*</span> (<span class="fl">1</span> <span class="op">-</span> P_amb <span class="op">/</span> P)<span class="op">^</span>((γ <span class="op">-</span> <span class="fl">1</span>) <span class="op">/</span> γ)) <span class="op">|></span> u<span class="st">"m/s"</span></span>
|
||
<span id="cb5-12"><a href="#cb5-12" aria-hidden="true" tabindex="-1"></a> ρ <span class="op">=</span> P <span class="op">/</span> (R <span class="op">*</span> T) <span class="op">|></span> u<span class="st">"kg/m^3"</span></span>
|
||
<span id="cb5-13"><a href="#cb5-13" aria-hidden="true" tabindex="-1"></a> ṁ <span class="op">=</span> ρ <span class="op">*</span> a_nozzle <span class="op">*</span> ve <span class="op">|></span> u<span class="st">"kg/s"</span></span>
|
||
<span id="cb5-14"><a href="#cb5-14" aria-hidden="true" tabindex="-1"></a> </span>
|
||
<span id="cb5-15"><a href="#cb5-15" aria-hidden="true" tabindex="-1"></a> Thrust <span class="op">=</span> ṁ <span class="op">*</span> ve <span class="op">+</span> a_nozzle <span class="op">*</span> (P <span class="op">-</span> P_amb) <span class="op">|></span> u<span class="st">"N"</span></span>
|
||
<span id="cb5-16"><a href="#cb5-16" aria-hidden="true" tabindex="-1"></a> </span>
|
||
<span id="cb5-17"><a href="#cb5-17" aria-hidden="true" tabindex="-1"></a> <span class="co"># Calculate what is still in the tank</span></span>
|
||
<span id="cb5-18"><a href="#cb5-18" aria-hidden="true" tabindex="-1"></a> M <span class="op">=</span> M <span class="op">-</span> ṁ <span class="op">*</span> ts <span class="op">|></span> u<span class="st">"kg"</span></span>
|
||
<span id="cb5-19"><a href="#cb5-19" aria-hidden="true" tabindex="-1"></a> P <span class="op">=</span> (M <span class="op">*</span> R <span class="op">*</span> T) <span class="op">/</span> V <span class="op">|></span> u<span class="st">"Pa"</span></span>
|
||
<span id="cb5-20"><a href="#cb5-20" aria-hidden="true" tabindex="-1"></a> t <span class="op">=</span> t <span class="op">+</span> ts</span>
|
||
<span id="cb5-21"><a href="#cb5-21" aria-hidden="true" tabindex="-1"></a> </span>
|
||
<span id="cb5-22"><a href="#cb5-22" aria-hidden="true" tabindex="-1"></a> df_step <span class="op">=</span> DataFrame(Thrust<span class="op">=</span>Thrust<span class="op">,</span> Pressure<span class="op">=</span>P<span class="op">,</span> <span class="dt">Time</span><span class="op">=</span>t<span class="op">,</span> Mass<span class="op">=</span>M)</span>
|
||
<span id="cb5-23"><a href="#cb5-23" aria-hidden="true" tabindex="-1"></a> <span class="cn">append</span><span class="op">!</span>(df<span class="op">,</span> df_step)</span>
|
||
<span id="cb5-24"><a href="#cb5-24" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span>
|
||
<span id="cb5-25"><a href="#cb5-25" aria-hidden="true" tabindex="-1"></a> df</span>
|
||
<span id="cb5-26"><a href="#cb5-26" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span></span></code></pre></div>
|
||
</div>
|
||
<p>breakdown of the data</p>
|
||
<div class="layout-chunk" data-layout="l-body">
|
||
"
|
||
<table class="\"data-frame\"">
|
||
<thead>
|
||
<tr>
|
||
<th>
|
||
</th>
|
||
<th>
|
||
variable
|
||
</th>
|
||
<th>
|
||
mean
|
||
</th>
|
||
<th>
|
||
min
|
||
</th>
|
||
<th>
|
||
median
|
||
</th>
|
||
<th>
|
||
max
|
||
</th>
|
||
<th>
|
||
nmissing
|
||
</th>
|
||
<th>
|
||
eltype
|
||
</th>
|
||
</tr>
|
||
<tr>
|
||
<th>
|
||
</th>
|
||
<th>
|
||
Symbol
|
||
</th>
|
||
<th>
|
||
Quantity
|
||
</th>
|
||
<th>
|
||
Quantity
|
||
</th>
|
||
<th>
|
||
Quantity
|
||
</th>
|
||
<th>
|
||
Quantity
|
||
</th>
|
||
<th>
|
||
Int64
|
||
</th>
|
||
<th>
|
||
DataType
|
||
</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<p>
|
||
4 rows × 7 columns
|
||
</p>
|
||
<tr>
|
||
<th>
|
||
1
|
||
</th>
|
||
<td>
|
||
Thrust
|
||
</td>
|
||
<td>
|
||
20.0±2.0 N
|
||
</td>
|
||
<td>
|
||
0.0±0.0 N
|
||
</td>
|
||
<td>
|
||
21.1±4.7 N
|
||
</td>
|
||
<td>
|
||
21.1±4.7 N
|
||
</td>
|
||
<td>
|
||
0
|
||
</td>
|
||
<td>
|
||
Quantity{Measurement{Float64}, 𝐋 𝐌 𝐓^-2, FreeUnits{(N,), 𝐋 𝐌 𝐓^-2, nothing}}
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<th>
|
||
2
|
||
</th>
|
||
<td>
|
||
Pressure
|
||
</td>
|
||
<td>
|
||
2020.0±520.0 psi
|
||
</td>
|
||
<td>
|
||
40.0±160.0 psi
|
||
</td>
|
||
<td>
|
||
2010.0±570.0 psi
|
||
</td>
|
||
<td>
|
||
4200.0±300.0 psi
|
||
</td>
|
||
<td>
|
||
0
|
||
</td>
|
||
<td>
|
||
Quantity{Measurement{Float64}, 𝐌 𝐋^-1 𝐓^-2, FreeUnits{(psi,), 𝐌 𝐋^-1 𝐓^-2, nothing}}
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<th>
|
||
3
|
||
</th>
|
||
<td>
|
||
Time
|
||
</td>
|
||
<td>
|
||
10.1515 s
|
||
</td>
|
||
<td>
|
||
0.0 s
|
||
</td>
|
||
<td>
|
||
10.1515 s
|
||
</td>
|
||
<td>
|
||
20.303 s
|
||
</td>
|
||
<td>
|
||
0
|
||
</td>
|
||
<td>
|
||
Quantity{Float64, 𝐓, FreeUnits{(s,), 𝐓, nothing}}
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<th>
|
||
4
|
||
</th>
|
||
<td>
|
||
Mass
|
||
</td>
|
||
<td>
|
||
0.225±0.066 kg
|
||
</td>
|
||
<td>
|
||
0.005±0.018 kg
|
||
</td>
|
||
<td>
|
||
0.224±0.071 kg
|
||
</td>
|
||
<td>
|
||
0.468±0.053 kg
|
||
</td>
|
||
<td>
|
||
0
|
||
</td>
|
||
<td>
|
||
Quantity{Measurement{Float64}, 𝐌, FreeUnits{(kg,), 𝐌, nothing}}
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>"</p>
|
||
</div>
|
||
<p>Heres the results plotted. Notice the massive error once the tank starts running low.</p>
|
||
<div class="layout-chunk" data-layout="l-body-outset">
|
||
<details>
|
||
<summary>
|
||
Show code
|
||
</summary>
|
||
<div class="sourceCode" id="cb6"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a>thrust_values <span class="op">=</span> df.Thrust .<span class="op">|></span> ustrip .<span class="op">|></span> value<span class="op">;</span></span>
|
||
<span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a>thrust_uncertainties <span class="op">=</span> df.Thrust .<span class="op">|></span> ustrip .<span class="op">|></span> uncertainty<span class="op">;</span></span>
|
||
<span id="cb6-4"><a href="#cb6-4" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb6-5"><a href="#cb6-5" aria-hidden="true" tabindex="-1"></a>air <span class="op">=</span> DataFrame(Thrust<span class="op">=</span>thrust_values<span class="op">,</span> Uncertainty<span class="op">=</span>thrust_uncertainties<span class="op">,</span> <span class="dt">Time</span><span class="op">=</span>df.<span class="dt">Time</span> .<span class="op">|></span> u<span class="st">"s"</span> .<span class="op">|></span> ustrip)<span class="op">;</span></span>
|
||
<span id="cb6-6"><a href="#cb6-6" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb6-7"><a href="#cb6-7" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb6-8"><a href="#cb6-8" aria-hidden="true" tabindex="-1"></a>plot(df.<span class="dt">Time</span> .<span class="op">|></span> ustrip<span class="op">,</span> thrust_values<span class="op">,</span> </span>
|
||
<span id="cb6-9"><a href="#cb6-9" aria-hidden="true" tabindex="-1"></a> title<span class="op">=</span><span class="st">"Thrust Over Time"</span><span class="op">,</span> </span>
|
||
<span id="cb6-10"><a href="#cb6-10" aria-hidden="true" tabindex="-1"></a> ribbon<span class="op">=</span>(thrust_uncertainties<span class="op">,</span> thrust_uncertainties)<span class="op">,</span> </span>
|
||
<span id="cb6-11"><a href="#cb6-11" aria-hidden="true" tabindex="-1"></a> fillalpha<span class="op">=</span><span class="fl">.2</span><span class="op">,</span>label<span class="op">=</span><span class="st">"Thrust"</span><span class="op">,</span></span>
|
||
<span id="cb6-12"><a href="#cb6-12" aria-hidden="true" tabindex="-1"></a> xlabel<span class="op">=</span><span class="st">"Time (s)"</span><span class="op">,</span> </span>
|
||
<span id="cb6-13"><a href="#cb6-13" aria-hidden="true" tabindex="-1"></a> ylabel<span class="op">=</span><span class="st">"Thrust (N)"</span><span class="op">,</span></span>
|
||
<span id="cb6-14"><a href="#cb6-14" aria-hidden="true" tabindex="-1"></a> size <span class="op">=</span> (<span class="fl">1200</span><span class="op">,</span> <span class="fl">800</span>)<span class="op">,</span></span>
|
||
<span id="cb6-15"><a href="#cb6-15" aria-hidden="true" tabindex="-1"></a> )</span></code></pre></div>
|
||
</details>
|
||
<div class="figure"><span id="fig:unnamed-chunk-7"></span>
|
||
<img src="air-propulsion-simulation_files/figure-html5/unnamed-chunk-7-J1.png" alt="Air Proplsion Simulation" width="350" />
|
||
<p class="caption">
|
||
Figure 1: Air Proplsion Simulation
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<p>Here the air prop is plotted along with rocket motors that are being</p>
|
||
<div class="layout-chunk" data-layout="l-body-outset">
|
||
<details>
|
||
<summary>
|
||
Show code
|
||
</summary>
|
||
<div class="sourceCode" id="cb7"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a>f10 <span class="op">=</span> CSV.<span class="cn">read</span>(<span class="st">"AeroTech_F10.csv"</span><span class="op">,</span> DataFrame)<span class="op">;</span></span>
|
||
<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a>f15 <span class="op">=</span> CSV.<span class="cn">read</span>(<span class="st">"Estes_F15.csv"</span><span class="op">,</span> DataFrame)<span class="op">;</span></span>
|
||
<span id="cb7-4"><a href="#cb7-4" aria-hidden="true" tabindex="-1"></a>g8 <span class="op">=</span> CSV.<span class="cn">read</span>(<span class="st">"AeroTech_G8ST.csv"</span><span class="op">,</span> DataFrame)<span class="op">;</span></span>
|
||
<span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb7-6"><a href="#cb7-6" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb7-7"><a href="#cb7-7" aria-hidden="true" tabindex="-1"></a>plot(air.<span class="dt">Time</span><span class="op">,</span> air.Thrust<span class="op">,</span> label<span class="op">=</span><span class="st">"Air Propulsion"</span><span class="op">,</span> fillalpha<span class="op">=</span><span class="fl">.1</span><span class="op">,</span> legend<span class="op">=:</span>topleft<span class="op">,</span> size <span class="op">=</span> (<span class="fl">1200</span><span class="op">,</span> <span class="fl">800</span>))<span class="op">;</span></span>
|
||
<span id="cb7-8"><a href="#cb7-8" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb7-9"><a href="#cb7-9" aria-hidden="true" tabindex="-1"></a><span class="kw">for</span> (d<span class="op">,</span> l) <span class="kw">in</span> [(f10<span class="op">,</span> <span class="st">"F10"</span>)<span class="op">,</span> (f15<span class="op">,</span> <span class="st">"F15"</span>)<span class="op">,</span> (g8<span class="op">,</span> <span class="st">"G8ST"</span>)]</span>
|
||
<span id="cb7-10"><a href="#cb7-10" aria-hidden="true" tabindex="-1"></a> plot<span class="op">!</span>(d[<span class="op">!,</span><span class="st">"Time (s)"</span>]<span class="op">,</span> d[<span class="op">!,</span> <span class="st">"Thrust (N)"</span>]<span class="op">,</span> label<span class="op">=</span>l)<span class="op">;</span></span>
|
||
<span id="cb7-11"><a href="#cb7-11" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span></span>
|
||
<span id="cb7-12"><a href="#cb7-12" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb7-13"><a href="#cb7-13" aria-hidden="true" tabindex="-1"></a>title<span class="op">!</span>(<span class="st">"Propulsion Comparison"</span>)<span class="op">;</span></span>
|
||
<span id="cb7-14"><a href="#cb7-14" aria-hidden="true" tabindex="-1"></a>xlabel<span class="op">!</span>(<span class="st">"Time (s)"</span>)<span class="op">;</span></span>
|
||
<span id="cb7-15"><a href="#cb7-15" aria-hidden="true" tabindex="-1"></a>ylabel<span class="op">!</span>(<span class="st">"Thrust (N)"</span>)</span></code></pre></div>
|
||
</details>
|
||
<div class="figure"><span id="fig:unnamed-chunk-8"></span>
|
||
<img src="air-propulsion-simulation_files/figure-html5/unnamed-chunk-8-J1.png" alt="Rocket Motor Data: [@thrustcurve]" width="350" />
|
||
<p class="caption">
|
||
Figure 2: Rocket Motor Data: <span class="citation" data-cites="thrustcurve">(<a href="#ref-thrustcurve" role="doc-biblioref">Coker, n.d.</a>)</span>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<p>Big conclusion about things.</p>
|
||
<div class="sourceCode" id="cb8"><pre class="sourceCode r distill-force-highlighting-css"><code class="sourceCode r"></code></pre></div>
|
||
<div id="refs" class="references csl-bib-body hanging-indent" role="doc-bibliography">
|
||
<div id="ref-thrustcurve" class="csl-entry" role="doc-biblioentry">
|
||
Coker, John. n.d. <span>“Rocket <span>Motor</span> <span>Data</span>.”</span> <a href="https://www.thrustcurve.org/">https://www.thrustcurve.org/</a>.
|
||
</div>
|
||
<div id="ref-curtis_orbital" class="csl-entry" role="doc-biblioentry">
|
||
Curtis, Howard D. 2020. <em>Orbital Mechanics for Engineering Students</em>. Fourth edition. Butterworth-Heinemann Publications.
|
||
</div>
|
||
<div id="ref-cengel_thermodynamics" class="csl-entry" role="doc-biblioentry">
|
||
Çengel, Yunus A., and Michael A. Boles. 2015. <em>Thermodynamics: An Engineering Approach</em>. Eighth edition. New York: McGraw-Hill Education.
|
||
</div>
|
||
<div id="ref-sutton_rocket_2001" class="csl-entry" role="doc-biblioentry">
|
||
Sutton, George P., and Oscar Biblarz. 2001. <em>Rocket Propulsion Elements</em>. 7th ed. New York: John Wiley & Sons.
|
||
</div>
|
||
</div>
|
||
<!--radix_placeholder_article_footer-->
|
||
<!--/radix_placeholder_article_footer-->
|
||
</div>
|
||
|
||
<div class="d-appendix">
|
||
</div>
|
||
|
||
<!-- dynamically load mathjax for compatibility with self-contained -->
|
||
<script>
|
||
(function () {
|
||
var script = document.createElement("script");
|
||
script.type = "text/javascript";
|
||
script.src = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
|
||
document.getElementsByTagName("head")[0].appendChild(script);
|
||
})();
|
||
</script>
|
||
|
||
<!--radix_placeholder_site_after_body-->
|
||
<!--/radix_placeholder_site_after_body-->
|
||
<!--radix_placeholder_appendices-->
|
||
<div class="appendix-bottom">
|
||
<h3 id="references">References</h3>
|
||
<div id="references-listing"></div>
|
||
<h3 id="updates-and-corrections">Corrections</h3>
|
||
<p>If you see mistakes or want to suggest changes, please <a href="https://gitlab.com/lander-team/air-prop-simulation">create an issue</a> on the source repository.</p>
|
||
</div>
|
||
<!--/radix_placeholder_appendices-->
|
||
<!--radix_placeholder_navigation_after_body-->
|
||
<!--/radix_placeholder_navigation_after_body-->
|
||
|
||
</body>
|
||
|
||
</html>
|