{
"cells": [
{
"cell_type": "markdown",
"id": "3471b94b",
"metadata": {
"cell_style": "center",
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# 2022-11-18 CEED Fluids"
]
},
{
"cell_type": "markdown",
"id": "4159be0e",
"metadata": {
"cell_style": "split",
"slideshow": {
"slide_type": ""
}
},
"source": [
"## Last time\n",
"\n",
"* Equations\n",
" * Conservation\n",
" * Choice of variables\n",
"* SUPG stabilization\n",
"\n",
"## Today\n",
"* Solvers\n",
"* Boundary conditions"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "e82d841d",
"metadata": {
"hideOutput": true,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"using Plots\n",
"default(linewidth=3)\n",
"using LinearAlgebra\n",
"using SparseArrays"
]
},
{
"cell_type": "markdown",
"id": "4c093e63",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Conservation of mass, momentum, and energy"
]
},
{
"cell_type": "markdown",
"id": "31ddd5fa",
"metadata": {},
"source": [
"$$\\newcommand{\\bm}{\\mathbf} \\frac{\\partial \\bm{q}}{\\partial t} + \\nabla \\cdot \\bm{F}(\\bm{q}) -S(\\bm{q}) = 0$$\n"
]
},
{
"cell_type": "markdown",
"id": "b12af1fb",
"metadata": {
"cell_style": "split"
},
"source": [
"$$\\bm{q} = \\begin{pmatrix} \\rho \\\\ \\rho \\bm{ u }\\\\ E \\equiv \\rho e \\end{pmatrix} \\begin{array}{l} \\leftarrow\\textrm{ volume mass density}\\\\ \\leftarrow\\textrm{ momentum density}\\\\ \\leftarrow\\textrm{ energy density} \\end{array}$$\n",
"\n",
"* Equation of state\n",
"\n",
"\\begin{align}\n",
"P &= \\Big(\\underbrace{\\frac{c_p}{c_v}}_{\\gamma} - 1\\Big)\\underbrace{\\left(E - \\frac\\rho 2 \\bm u \\cdot \\bm u - \\rho g z \\right)}_{\\rho e_{\\text{internal}}} \\\\\n",
"T &= e_{\\text{internal}} / c_v\n",
"\\end{align}"
]
},
{
"cell_type": "markdown",
"id": "95677c59",
"metadata": {
"cell_style": "split"
},
"source": [
"\\begin{aligned}\n",
"\\bm{F}(\\bm{q}) &=\n",
"\\underbrace{\\begin{pmatrix}\n",
" \\rho\\bm{u}\\\\\n",
" {\\rho \\bm{u} \\otimes \\bm{u}} + P \\bm{I}_3 \\\\\n",
" {(E + P)\\bm{u}}\n",
"\\end{pmatrix}}_{\\bm F_{\\text{adv}}} +\n",
"\\underbrace{\\begin{pmatrix}\n",
"0 \\\\\n",
"- \\bm{\\sigma} \\\\\n",
" - \\bm{u} \\cdot \\bm{\\sigma} - k \\nabla T\n",
"\\end{pmatrix}}_{\\bm F_{\\text{diff}}},\\\\\n",
"S(\\bm{q}) &=\n",
"- \\begin{pmatrix}\n",
" 0\\\\\n",
" \\rho g \\bm{\\hat{k}}\\\\\n",
" 0\n",
"\\end{pmatrix}.\n",
"\\end{aligned}\n"
]
},
{
"cell_type": "markdown",
"id": "6258796f",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Choice of variables"
]
},
{
"cell_type": "markdown",
"id": "a691a39b",
"metadata": {
"cell_style": "split"
},
"source": [
"## Acoustic wave speed\n",
"\n",
"$$a = \\sqrt{c_p(\\gamma - 1) T}$$\n",
"\n",
"| material | speed |\n",
"|---|---|\n",
"| air | 340 m/s |\n",
"| water | 1500 m/s |\n",
"\n",
"## Mach number\n",
"\n",
"$$\\mathrm{Ma} = \\frac{\\lVert \\bm u \\rVert}{a}$$"
]
},
{
"cell_type": "markdown",
"id": "59d5470a",
"metadata": {
"cell_style": "split",
"slideshow": {
"slide_type": ""
}
},
"source": [
"## Primitive variables\n",
"\n",
"$$\\bm y = \\begin{pmatrix} P \\\\ \\bm u \\\\ T \\end{pmatrix}$$\n",
"\n",
"Using the equation of state, we can write\n",
"$\\bm y(\\bm q)$ or $\\bm q(\\bm y)$. But these transformations are **ill conditioned for $\\mathrm{Ma} \\ll 1$**.\n",
"\n",
"$$ \\frac{\\partial \\bm q}{\\partial t} = \\frac{\\partial \\bm q}{\\partial \\bm y} \\frac{\\partial \\bm y}{\\partial t}$$"
]
},
{
"cell_type": "markdown",
"id": "7e62162b",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Blasius profile (thanks, Leila Ghaffari)\n",
"\n",
"* Take an analytic Blasius profile.\n",
"* `Primitive`: Write $\\bm y$ in a piecewise linear space with nodally exact values.\n",
"* `Conservative`: Write $\\bm q$ in a piecewise linear space with nodally exact values.\n"
]
},
{
"cell_type": "markdown",
"id": "0d446193",
"metadata": {
"cell_style": "split",
"slideshow": {
"slide_type": ""
}
},
"source": [
""
]
},
{
"cell_type": "markdown",
"id": "8bfacbd2",
"metadata": {
"cell_style": "split"
},
"source": [
""
]
},
{
"cell_type": "markdown",
"id": "f5c03d46",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Stabilization\n",
"\n",
"\\begin{align}\n",
" \\int_{\\Omega} \\bm v \\cdot \\left( \\frac{\\partial \\bm{q}}{\\partial t} - \\bm{S}(\\bm{y}) \\right) \\,dV\n",
" - \\int_{\\Omega} \\nabla \\bm v \\!:\\! \\bm{F}(\\bm{y})\\,dV & \\\\\n",
" + \\int_{\\partial \\Omega} \\bm v \\cdot \\bm{F}(\\bm{y}) \\cdot \\widehat{\\bm{n}} \\,dS & \\\\\n",
" + \\int_{\\Omega} \\nabla \\bm v : \\frac{\\partial \\bm F_{\\text{adv}}}{\\partial \\bm q} \\bm \\tau \\left( \\frac{\\partial \\bm{q}}{\\partial t} \\, + \\,\n",
" \\nabla \\cdot \\bm{F} \\, (\\bm{y}) - \\bm{S}(\\bm{y}) \\right) \\,dV &= 0\n",
"\\end{align}\n",
"\n",
"* Boundary term needs to be replaced with actual boundary conditions\n",
"* The strong form term $\\nabla\\cdot \\bm F(\\bm y)$\n",
" * is ill-defined at shocks or discontinuous materials\n",
" * involves the second derivative of velocity and temperature; many ignore for linear elements, but [it's better](https://doi.org/10.1016/S0045-7825(98)00284-9) to use a (lumped) projection."
]
},
{
"cell_type": "markdown",
"id": "8c179315",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Time integration\n",
"\n",
"* Fully implicit $G(t, \\bm y, \\dot{\\bm y}) = 0$ with generalized alpha.\n",
"* Newton method, usually about 3 iterations per time step.\n",
"* Krylov method\n",
" * GMRES when using a strong preconditioner\n",
" * Block Jacobi/incomplete LU\n",
" * BCGS($\\ell$) with a weak preconditioner\n",
" * Point-block Jacobi"
]
},
{
"cell_type": "markdown",
"id": "65cec440",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Boundary conditions (ref: [Mengaldo et al (2014)](https://doi.org/10.2514/6.2014-2923))\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"id": "37956591",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Boundary conditions"
]
},
{
"cell_type": "markdown",
"id": "39e85533",
"metadata": {
"cell_style": "split",
"slideshow": {
"slide_type": ""
}
},
"source": [
"* Unlike solid mechanics, the \"natural\" boundary condition is not physical (it's like a free surface). So we need boundary conditions all around.\n",
"\n",
"## Symmetry (free slip)\n",
"* Normal velocity = 0, no boundary integral\n",
"\n",
"## Wall (no-slip)\n",
"* Total velocity = 0\n",
"* Can prescribe temperature (heat sink) or leave it insulated (more complicated for conservative variables)"
]
},
{
"cell_type": "markdown",
"id": "bc85b9fd",
"metadata": {
"cell_style": "split",
"slideshow": {
"slide_type": ""
}
},
"source": [
"## Freestream boundaries\n",
"\n",
"* Unified way to handle inflow and outflow (sometimes both).\n",
"* Requires solving a \"Riemann problem\"\n",
"\n",
"## Viscous inflow\n",
"\n",
"* Prescribe velocity and temperature, compute boundary integral for energy flux.\n",
"\n",
"## Viscous outflow\n",
"* Prescribe pressure, compute flux with modified ghost pressure $2 P_{\\text{ext}} - P_{\\text{int}}$\n",
"* Compute viscous flux based on interior values"
]
},
{
"cell_type": "markdown",
"id": "0691c146",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Convergence to steady state (from Mengaldo)\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"id": "b6858e51",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Freestream wave test problem\n",
"\n",
"```\n",
"$ mpiexec -n 6 build/fluids-navierstokes -options_file examples/fluids/newtonianwave.yaml\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "2779df0f",
"metadata": {
"cell_style": "split"
},
"source": [
"## HLL\n",
""
]
},
{
"cell_type": "markdown",
"id": "8ed1c6ff",
"metadata": {
"cell_style": "split"
},
"source": [
"## HLLC\n",
""
]
},
{
"cell_type": "markdown",
"id": "5f8c8afe",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Open Problem:\n",
"# Turbulent viscous inflow and outflow with non-reflecting boundary conditions."
]
},
{
"cell_type": "markdown",
"id": "0d14e9eb",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Boundary layers for turbulent flow\n"
]
},
{
"attachments": {
"image.png": {
"image/png": "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"
}
},
"cell_type": "markdown",
"id": "4a0c9d63",
"metadata": {
"cell_style": "split"
},
"source": [
"![image.png](attachment:image.png)"
]
},
{
"cell_type": "markdown",
"id": "8ea22c39",
"metadata": {
"cell_style": "split"
},
"source": [
"* Geometric spacing near the wall\n",
" * Aspect ratio $10$ to $10^5$\n",
" * Wall-resolved or wall-modeled\n",
"* Turbulent boundary layer\n",
"* Far field\n",
"* In unstructured CFD, most elements are close to a wall."
]
},
{
"cell_type": "markdown",
"id": "17e9e4c7",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Running on Alpine"
]
},
{
"cell_type": "markdown",
"id": "4195ebd0",
"metadata": {
"cell_style": "split",
"slideshow": {
"slide_type": ""
}
},
"source": [
"```console\n",
"$ ssh login.rc.colorado.edu\n",
"rc$ module load slurm/alpine\n",
"rc$ acompile\n",
"acompile$ . /projects/jeka2967/activate.bash\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "b22832ce",
"metadata": {
"cell_style": "split"
},
"source": [
"```console\n",
"$ git clone \\\n",
" https://github.com/CEED/libCEED\n",
"$ cd libCEED/examples/fluids\n",
"$ make\n",
"$ mpiexec -n 1 ./navierstokes \\\n",
" -options_file FILE.yaml\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "a2f98b53",
"metadata": {
"slideshow": {
"slide_type": ""
}
},
"source": [
"## Running in Docker\n",
"\n",
"Clone the `libCEED` repository and `cd libCEED/examples/fluids`\n",
"```console\n",
"host$ docker run -it --rm -v $(pwd):/work registry.gitlab.com/micromorph/ratel\n",
"$ make\n",
"$ mpiexec -n 2 ./navierstokes -options_file FILE.yaml\n",
"```"
]
}
],
"metadata": {
"@webio": {
"lastCommId": null,
"lastKernelId": null
},
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Julia 1.7.2",
"language": "julia",
"name": "julia-1.7"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.8.2"
},
"rise": {
"enable_chalkboard": true
}
},
"nbformat": 4,
"nbformat_minor": 5
}