diff --git a/.codespellrc b/.codespellrc
new file mode 100644
index 0000000..3d4af4b
--- /dev/null
+++ b/.codespellrc
@@ -0,0 +1,7 @@
+[codespell]
+skip = .git,*.pdf,*.png,*.jpg,*.jpeg,*.gif,*.svg,*.bmp,*.tiff,*.pyc,venv,.venv,.ipynb_checkpoints
+check-filenames = true
+quiet-level = 2
+ignore-words-list = flexcompute,flow360,CL,CD,CMy,CFD,API,CFx,CFz,CFy
+ignore-regex = [a-f0-9]{40}
+builtin = clear,rare,informal
\ No newline at end of file
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..f5654a5
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,17 @@
+# Linguist-vendored files
+docs/* linguist-vendored
+notebooks/* linguist-vendored
+tests/* linguist-vendored
+
+# Disable linguist detection for IPython notebooks
+*.ipynb linguist-detectable=false
+
+# Mark IPython notebooks as generated files
+*.ipynb linguist-generated=true
+
+# Specify merge attributes for CHANGELOG.md
+CHANGELOG.md merge=union
+
+# Specify diff and merge attributes for IPython notebooks
+*.ipynb diff=jupyternotebook
+*.ipynb merge=jupyternotebook
diff --git a/.gitconfig b/.gitconfig
new file mode 100644
index 0000000..3eb8764
--- /dev/null
+++ b/.gitconfig
@@ -0,0 +1,13 @@
+[diff "jupyternotebook"]
+ command = git-nbdiffdriver diff
+[merge "jupyternotebook"]
+ driver = git-nbmergedriver merge %O %A %B %L %P
+ name = jupyter notebook merge driver
+[difftool "nbdime"]
+ cmd = git-nbdifftool diff \"$LOCAL\" \"$REMOTE\" \"$BASE\"
+[difftool]
+ prompt = false
+[mergetool "nbdime"]
+ cmd = git-nbmergetool merge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
+[mergetool]
+ prompt = false
diff --git a/.github/workflows/lint-notebooks.yml b/.github/workflows/lint-notebooks.yml
new file mode 100644
index 0000000..95d14d9
--- /dev/null
+++ b/.github/workflows/lint-notebooks.yml
@@ -0,0 +1,85 @@
+name: "lint-notebooks"
+
+on:
+ push:
+ branches: [ develop ]
+ pull_request:
+ branches: [ develop ]
+
+permissions:
+ contents: read
+ pull-requests: write
+
+jobs:
+ lint:
+ name: Run notebook linting and spell check
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0 # required for changed-files action
+
+ - name: Install uv
+ uses: astral-sh/setup-uv@v5
+
+ - name: Run ruff format check
+ run: uvx ruff format --check --diff .
+
+ - name: Run ruff lint check
+ run: uvx ruff check .
+
+ - name: Get changed notebook files
+ id: changed_notebooks
+ if: github.event_name == 'pull_request'
+ uses: tj-actions/changed-files@v46
+ with:
+ files: |
+ **.ipynb
+
+ - name: Run spell check on changed notebooks
+ id: spellcheck
+ if: github.event_name == 'pull_request' && steps.changed_notebooks.outputs.any_changed == 'true'
+ continue-on-error: true
+ run: |
+ uvx python spellcheck.py ${{ steps.changed_notebooks.outputs.all_changed_files }} > spellcheck_output.txt || true
+
+ - name: Prepare spellcheck comment body
+ id: prepare_comment
+ if: >
+ github.event_name == 'pull_request' &&
+ steps.changed_notebooks.outputs.any_changed == 'true' &&
+ steps.spellcheck.outcome == 'success' &&
+ hashFiles('spellcheck_output.txt') != ''
+ run: |
+ echo "" > comment_body.txt
+ echo "" >> comment_body.txt
+ cat spellcheck_output.txt >> comment_body.txt
+ echo "Generated by GitHub Action run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> comment_body.txt
+
+ - name: Find existing comment
+ uses: peter-evans/find-comment@v3
+ id: find_comment
+ if: steps.prepare_comment.outcome == 'success'
+ with:
+ issue-number: ${{ github.event.pull_request.number }}
+ comment-author: 'github-actions[bot]'
+ body-includes: ''
+
+ - name: Post or Update spell check comment
+ if: steps.prepare_comment.outcome == 'success'
+ uses: peter-evans/create-or-update-comment@v4
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+ repository: ${{ github.repository }}
+ issue-number: ${{ github.event.pull_request.number }}
+ comment-id: ${{ steps.find_comment.outputs.comment-id }}
+ body-path: comment_body.txt
+ edit-mode: replace
+
+ - name: Determine success on spellchecking errors
+ if: steps.spellcheck.outputs.spell_error_found == 'true'
+ uses: actions/github-script@v3
+ with:
+ script: |
+ core.setFailed('Found issues with spelling')
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..96ffa7c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,60 @@
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+# dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+pip-wheel-metadata/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# pyenv
+.python-version
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+.idea
\ No newline at end of file
diff --git a/README.md b/README.md
index 9ee0877..3407c9d 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,11 @@
-# flow360-notebooks
-flow360-notebooks
+# Flow360 - example notebooks
+In this repository you will find notebooks that will take you through using multiple Flow360 features with its python client. They can be found in the notebooks folder.
+
+## Related references
+
+| Reference | URL |
+|-------------------------|------------------------------------------------------------------------------|
+| Flow360 Documentation | https://docs.flexcompute.com/projects/flow360/en/latest/ |
+| Python API Guide | https://docs.flexcompute.com/projects/flow360/en/latest/api_guide/index.html |
+| Flow360 Python API repo | https://github.com/flexcompute/Flow360 |
+
diff --git a/notebooks/notebook_tutorial_2D_crm.ipynb b/notebooks/notebook_tutorial_2D_crm.ipynb
new file mode 100644
index 0000000..2168933
--- /dev/null
+++ b/notebooks/notebook_tutorial_2D_crm.ipynb
@@ -0,0 +1,1736 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "75280adb-51fc-4e3e-a767-341228758714",
+ "metadata": {},
+ "source": [
+ "# **RANS CFD on 2D CRM Airfoil**\n",
+ "This notebook shows how to set up and run a 2D CRM airfoil simulation using Flow360 python API.\n",
+ "\n",
+ ">Note: the cost of running the case shown in this notebook is less than 1 FlexCredit.\n",
+ "\n",
+ "Geometry for this tutorial was created using Engineering Sketch Pad (ESP) and is already provided.\n",
+ "\n",
+ "We will walk through all the steps such as importing modules, creating a project and assigning simulation parameters.\n",
+ "\n",
+ "Additionally, we will use the function `fl.operating_condition_from_mach_reynolds()`, which is often utilized when running workshop cases and allows us to define operating conditions using mach and reynolds number.\n",
+ "\n",
+ "In order to get a closer look at how we describe each parameter, we will first split the simulation parameters into smaller parts, which will be assembled later on."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8355df66-8b7b-457a-8905-1c6d673cfab7",
+ "metadata": {},
+ "source": [
+ "As a first step, we will import all dependencies."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "f1a1793f-0e6c-4836-938a-cf857de32099",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# flow360 imports\n",
+ "import flow360 as fl\n",
+ "from flow360.examples import Tutorial2DCRM\n",
+ "from flow360.log import log, set_logging_level\n",
+ "\n",
+ "log.log_to_file = False\n",
+ "set_logging_level(\"INFO\")"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "id": "68120cff-2504-42e7-ba5d-1cdf88571dda",
+ "metadata": {},
+ "source": [
+ "## Project creation\n",
+ "We then begin by creating a project variable, which will be used to do operations on the geometry as well as running the case, which includes creating surface and volume meshes."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "7fcf1076-2485-4ed0-a642-347010c4953c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "3fb32c13e8e7482489073792fdd370b2",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Output()"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "
\n"
+ ],
+ "text/plain": []
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "[13:41:45] INFO : Geometry successfully submitted: \n",
+ " type = Geometry \n",
+ " name = Tutorial 2D CRM from Python \n",
+ " id = geo-b7b5a67b-dfbc-4c9b-b6ec-8a88903506e4 \n",
+ " status = uploaded \n",
+ " \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m[13:41:45]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: Geometry successfully submitted: \n",
+ "\u001b[2;36m \u001b[0m type = Geometry \n",
+ "\u001b[2;36m \u001b[0m name = Tutorial 2D CRM from Python \n",
+ "\u001b[2;36m \u001b[0m id = geo-\u001b[93mb7b5a67b-dfbc-4c9b-b6ec-8a88903506e4\u001b[0m \n",
+ "\u001b[2;36m \u001b[0m status = uploaded \n",
+ "\u001b[2;36m \u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : Waiting for geometry to be processed. \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: Waiting for geometry to be processed. \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "416603e3df5e43db8e15c93ccf61d1af",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Output()"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " \n"
+ ],
+ "text/plain": []
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "[13:42:10] WARNING : Could not find face grouping info in the draft's simulation settings. Please remember to group \n",
+ " them if relevant features are used. \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m[13:42:10]\u001b[0m\u001b[2;36m \u001b[0m\u001b[33mWARNING\u001b[0m: \u001b[37mCould not find face grouping info in the draft's simulation settings. Please remember to group \u001b[0m\n",
+ "\u001b[2;36m \u001b[0m\u001b[37mthem if relevant features are used.\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " WARNING : Could not find edge grouping info in the draft's simulation settings. Please remember to group \n",
+ " them if relevant features are used. \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[33mWARNING\u001b[0m: \u001b[37mCould not find edge grouping info in the draft's simulation settings. Please remember to group \u001b[0m\n",
+ "\u001b[2;36m \u001b[0m\u001b[37mthem if relevant features are used.\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "[13:42:12] INFO : >> Available attribute tags for grouping **faces**: \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m[13:42:12]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Available attribute tags for grouping **faces**: \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Tag '0' : faceName. Grouping with this tag results in: \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Tag \u001b[32m'0'\u001b[0m: faceName. Grouping with this tag results in: \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 0 : wingTrailing \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m0\u001b[0m: wingTrailing \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0001_face0001' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0001_face0001'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 1 : wing \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m1\u001b[0m: wing \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0001_face0002' , 'body0001_face0003' , 'body0001_face0004' , \n",
+ " 'body0001_face0005' , 'body0001_face0006' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0001_face0002'\u001b[0m, \u001b[32m'body0001_face0003'\u001b[0m, \u001b[32m'body0001_face0004'\u001b[0m, \n",
+ "\u001b[2;36m \u001b[0m\u001b[32m'body0001_face0005'\u001b[0m, \u001b[32m'body0001_face0006'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 2 : flapTrailing \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m2\u001b[0m: flapTrailing \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0002_face0001' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0002_face0001'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 3 : flap \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m3\u001b[0m: flap \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0002_face0002' , 'body0002_face0003' , 'body0002_face0004' , \n",
+ " 'body0002_face0005' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0002_face0002'\u001b[0m, \u001b[32m'body0002_face0003'\u001b[0m, \u001b[32m'body0002_face0004'\u001b[0m, \n",
+ "\u001b[2;36m \u001b[0m\u001b[32m'body0002_face0005'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 4 : slatTrailing \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m4\u001b[0m: slatTrailing \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0003_face0001' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0003_face0001'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 5 : slat \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m5\u001b[0m: slat \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0003_face0002' , 'body0003_face0003' , 'body0003_face0004' , \n",
+ " 'body0003_face0005' , 'body0003_face0006' , 'body0003_face0007' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0003_face0002'\u001b[0m, \u001b[32m'body0003_face0003'\u001b[0m, \u001b[32m'body0003_face0004'\u001b[0m, \n",
+ "\u001b[2;36m \u001b[0m\u001b[32m'body0003_face0005'\u001b[0m, \u001b[32m'body0003_face0006'\u001b[0m, \u001b[32m'body0003_face0007'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Tag '1' : groupName. Grouping with this tag results in: \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Tag \u001b[32m'1'\u001b[0m: groupName. Grouping with this tag results in: \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 0 : wing \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m0\u001b[0m: wing \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0001_face0001' , 'body0001_face0002' , 'body0001_face0003' , \n",
+ " 'body0001_face0004' , 'body0001_face0005' , 'body0001_face0006' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0001_face0001'\u001b[0m, \u001b[32m'body0001_face0002'\u001b[0m, \u001b[32m'body0001_face0003'\u001b[0m, \n",
+ "\u001b[2;36m \u001b[0m\u001b[32m'body0001_face0004'\u001b[0m, \u001b[32m'body0001_face0005'\u001b[0m, \u001b[32m'body0001_face0006'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 1 : flap \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m1\u001b[0m: flap \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0002_face0001' , 'body0002_face0002' , 'body0002_face0003' , \n",
+ " 'body0002_face0004' , 'body0002_face0005' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0002_face0001'\u001b[0m, \u001b[32m'body0002_face0002'\u001b[0m, \u001b[32m'body0002_face0003'\u001b[0m, \n",
+ "\u001b[2;36m \u001b[0m\u001b[32m'body0002_face0004'\u001b[0m, \u001b[32m'body0002_face0005'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 2 : slat \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m2\u001b[0m: slat \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0003_face0001' , 'body0003_face0002' , 'body0003_face0003' , \n",
+ " 'body0003_face0004' , 'body0003_face0005' , 'body0003_face0006' , 'body0003_face0007' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0003_face0001'\u001b[0m, \u001b[32m'body0003_face0002'\u001b[0m, \u001b[32m'body0003_face0003'\u001b[0m, \n",
+ "\u001b[2;36m \u001b[0m\u001b[32m'body0003_face0004'\u001b[0m, \u001b[32m'body0003_face0005'\u001b[0m, \u001b[32m'body0003_face0006'\u001b[0m, \u001b[32m'body0003_face0007'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Available attribute tags for grouping **edges**: \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Available attribute tags for grouping **edges**: \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Tag '0' : edgeName. Grouping with this tag results in: \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Tag \u001b[32m'0'\u001b[0m: edgeName. Grouping with this tag results in: \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 0 : wingtrailingEdge \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m0\u001b[0m: wingtrailingEdge \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0001_edge0001' , 'body0001_edge0002' , 'body0001_edge0008' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0001_edge0001'\u001b[0m, \u001b[32m'body0001_edge0002'\u001b[0m, \u001b[32m'body0001_edge0008'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 1 : symmetry \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m1\u001b[0m: symmetry \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0001_edge0003' , 'body0001_edge0004' , 'body0001_edge0006' , \n",
+ " 'body0001_edge0007' , 'body0001_edge0009' , 'body0001_edge0010' , 'body0001_edge0011' , 'body0001_edge0012' ,\n",
+ " 'body0002_edge0003' , 'body0002_edge0004' , 'body0002_edge0006' , 'body0002_edge0007' , 'body0002_edge0008' ,\n",
+ " 'body0002_edge0009' , 'body0003_edge0003' , 'body0003_edge0004' , 'body0003_edge0006' , 'body0003_edge0007' ,\n",
+ " 'body0003_edge0009' , 'body0003_edge0010' , 'body0003_edge0012' , 'body0003_edge0013' , 'body0003_edge0014' ,\n",
+ " 'body0003_edge0015' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0001_edge0003'\u001b[0m, \u001b[32m'body0001_edge0004'\u001b[0m, \u001b[32m'body0001_edge0006'\u001b[0m, \n",
+ "\u001b[2;36m \u001b[0m\u001b[32m'body0001_edge0007'\u001b[0m, \u001b[32m'body0001_edge0009'\u001b[0m, \u001b[32m'body0001_edge0010'\u001b[0m, \u001b[32m'body0001_edge0011'\u001b[0m, \u001b[32m'body0001_edge0012'\u001b[0m,\n",
+ "\u001b[2;36m \u001b[0m\u001b[32m'body0002_edge0003'\u001b[0m, \u001b[32m'body0002_edge0004'\u001b[0m, \u001b[32m'body0002_edge0006'\u001b[0m, \u001b[32m'body0002_edge0007'\u001b[0m, \u001b[32m'body0002_edge0008'\u001b[0m,\n",
+ "\u001b[2;36m \u001b[0m\u001b[32m'body0002_edge0009'\u001b[0m, \u001b[32m'body0003_edge0003'\u001b[0m, \u001b[32m'body0003_edge0004'\u001b[0m, \u001b[32m'body0003_edge0006'\u001b[0m, \u001b[32m'body0003_edge0007'\u001b[0m,\n",
+ "\u001b[2;36m \u001b[0m\u001b[32m'body0003_edge0009'\u001b[0m, \u001b[32m'body0003_edge0010'\u001b[0m, \u001b[32m'body0003_edge0012'\u001b[0m, \u001b[32m'body0003_edge0013'\u001b[0m, \u001b[32m'body0003_edge0014'\u001b[0m,\n",
+ "\u001b[2;36m \u001b[0m\u001b[32m'body0003_edge0015'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 2 : wingleadingEdge \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m2\u001b[0m: wingleadingEdge \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0001_edge0005' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0001_edge0005'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 3 : flaptrailingEdge \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m3\u001b[0m: flaptrailingEdge \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0002_edge0001' , 'body0002_edge0002' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0002_edge0001'\u001b[0m, \u001b[32m'body0002_edge0002'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 4 : flapleadingEdge \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m4\u001b[0m: flapleadingEdge \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0002_edge0005' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0002_edge0005'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 5 : slattrailingEdge \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m5\u001b[0m: slattrailingEdge \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0003_edge0001' , 'body0003_edge0002' , 'body0003_edge0005' , \n",
+ " 'body0003_edge0008' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0003_edge0001'\u001b[0m, \u001b[32m'body0003_edge0002'\u001b[0m, \u001b[32m'body0003_edge0005'\u001b[0m, \n",
+ "\u001b[2;36m \u001b[0m\u001b[32m'body0003_edge0008'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : >> Boundary 6 : slatFrontLEadingEdge \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: >> Boundary \u001b[1;36m6\u001b[0m: slatFrontLEadingEdge \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : IDs: [ 'body0003_edge0011' ] \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: IDs: \u001b[1m[\u001b[0m\u001b[32m'body0003_edge0011'\u001b[0m\u001b[1m]\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Download files associated with the tutorial\n",
+ "Tutorial2DCRM.get_files()\n",
+ "\n",
+ "# Create project variable\n",
+ "project = fl.Project.from_geometry(Tutorial2DCRM.geometry, name=\"Tutorial 2D CRM from Python\")\n",
+ "\n",
+ "# Create geometry variable\n",
+ "geometry = project.geometry\n",
+ "\n",
+ "# Show face and edge groupings for the geometry\n",
+ "geometry.show_available_groupings(verbose_mode=True)\n",
+ "geometry.group_faces_by_tag(\"faceName\")\n",
+ "geometry.group_edges_by_tag(\"edgeName\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c9de57b4-6536-4c07-b856-d4182c1191ae",
+ "metadata": {},
+ "source": [
+ "## Defining simulation parameters\n",
+ "Once the geometry is processed, we can create separate variables for:\n",
+ "- [Entities and volume zones](#Entities-and-volume-zones)\n",
+ "- [Meshing parameters](#Meshing-parameters)\n",
+ "- [Reference geometry](#Reference-geometry)\n",
+ "- [Operating condition](#Operating-condition)\n",
+ "- [Time stepping](#Time-stepping)\n",
+ "- [Models](#Models)\n",
+ "- [Outputs](#Outputs)\n",
+ "\n",
+ "A helpful statement we will use is `with fl.SI_unit_system:`, which allows us to automatically assign SI units to parameters. \n",
+ "\n",
+ "We still need to manually define the unit for angle as there is no default angle unit when using `with fl.SI_unit_system:`."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b2418b1b-fa40-4d87-803a-33cd7a0efbe6",
+ "metadata": {},
+ "source": [
+ "### Entities and volume zones\n",
+ "Cylinder entities are used for creating mesh refinements.\n",
+ "\n",
+ "Farfield volume zone is used for defining volume zones and models."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "fafd03cd-8a5c-49fb-85a9-31c4682b2654",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ " INFO : using: SI unit system for unit inference. \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: using: SI unit system for unit inference. \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Choosing a unit system\n",
+ "with fl.SI_unit_system:\n",
+ " # Cylinder entities used for mesh refinements\n",
+ " cylinders = [\n",
+ " fl.Cylinder(\n",
+ " name=f\"cylinder{i + 1}\",\n",
+ " axis=[0, 1, 0],\n",
+ " center=[0.7, 0.5, 0],\n",
+ " outer_radius=outer_radius,\n",
+ " height=1.0,\n",
+ " )\n",
+ " for i, outer_radius in enumerate([1.1, 2.2, 3.3, 4.5])\n",
+ " ]\n",
+ " cylinder5 = fl.Cylinder(\n",
+ " name=\"cylinder5\", axis=[-1, 0, 0], center=[6.5, 0.5, 0], outer_radius=6.5, height=10\n",
+ " )\n",
+ "\n",
+ " # Farfield used for creating a volume zone and assigning appropriate models\n",
+ " farfield = fl.AutomatedFarfield(name=\"farfield\", method=\"quasi-3d\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c0a2c8c1-5716-493c-b5f3-db48f65bf422",
+ "metadata": {},
+ "source": [
+ "### Meshing parameters\n",
+ "In this section we will assign settings so that our mesh will have sufficient level of refinement for this case.\n",
+ "\n",
+ "Default settings describe how the the mesh will be created globally, while refinements allow for much more precise control of the mesh in regions of interest.\n",
+ "\n",
+ "Here we will utilize the previously created cylinder entities, farfield, and we will also refer to geometry's faces and edges, which were grouped in the [Project creation](#Project-creation) step."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "1c9d7fd3-9963-43d7-b67a-40ffe4be1617",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ " INFO : using: SI unit system for unit inference. \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: using: SI unit system for unit inference. \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "with fl.SI_unit_system:\n",
+ " meshing_params = fl.SimulationParams(\n",
+ " meshing=fl.MeshingParams(\n",
+ " # Default settings for meshing\n",
+ " defaults=fl.MeshingDefaults(\n",
+ " surface_edge_growth_rate=1.17,\n",
+ " surface_max_edge_length=1.1,\n",
+ " curvature_resolution_angle=12 * fl.u.deg,\n",
+ " boundary_layer_growth_rate=1.17,\n",
+ " boundary_layer_first_layer_thickness=1.8487111e-06,\n",
+ " ),\n",
+ " # Adjust all spacings in refinement regions\n",
+ " refinement_factor=1.35,\n",
+ " # Adjust narrow gap treatment strength for two surfaces in close proximity\n",
+ " gap_treatment_strength=0.5,\n",
+ " # Crete new volume zones\n",
+ " volume_zones=[farfield],\n",
+ " # Additional fine-tunning for refinements on top of defaults\n",
+ " refinements=[\n",
+ " # Uniform spacing refinement inside specified region of mesh\n",
+ " fl.UniformRefinement(name=\"refinement1\", spacing=0.1, entities=[cylinders[0]]),\n",
+ " fl.UniformRefinement(name=\"refinement2\", spacing=0.15, entities=[cylinders[1]]),\n",
+ " fl.UniformRefinement(name=\"refinement3\", spacing=0.225, entities=[cylinders[2]]),\n",
+ " fl.UniformRefinement(name=\"refinement4\", spacing=0.275, entities=[cylinders[3]]),\n",
+ " fl.UniformRefinement(name=\"refinement5\", spacing=0.325, entities=[cylinder5]),\n",
+ " # Refine surface elements for given faces\n",
+ " fl.SurfaceRefinement(name=\"wing\", max_edge_length=0.74, faces=[geometry[\"wing\"]]),\n",
+ " fl.SurfaceRefinement(\n",
+ " name=\"flap-slat\",\n",
+ " max_edge_length=0.55,\n",
+ " faces=[geometry[\"flap\"], geometry[\"slat\"]],\n",
+ " ),\n",
+ " fl.SurfaceRefinement(\n",
+ " name=\"trailing\",\n",
+ " max_edge_length=0.36,\n",
+ " faces=[\n",
+ " # '*' allows us to select all faces faces ending with 'Trailing'\n",
+ " geometry[\"*Trailing\"],\n",
+ " ],\n",
+ " ),\n",
+ " # Grows anisotropic layers orthogonal to the specified edges\n",
+ " fl.SurfaceEdgeRefinement(\n",
+ " name=\"edges\",\n",
+ " method=fl.HeightBasedRefinement(value=0.0007),\n",
+ " edges=[\n",
+ " # Similarly as above, we can select multiple edges using '*' expression\n",
+ " geometry[\"*trailingEdge\"],\n",
+ " geometry[\"*leadingEdge\"],\n",
+ " ],\n",
+ " ),\n",
+ " fl.SurfaceEdgeRefinement(\n",
+ " name=\"symmetry\", method=fl.ProjectAnisoSpacing(), edges=[geometry[\"symmetry\"]]\n",
+ " ),\n",
+ " ],\n",
+ " ),\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "105505a6-153b-48e1-8bb5-2f17ace1f4a9",
+ "metadata": {},
+ "source": [
+ "### Reference geometry\n",
+ "Now we will define the `reference_geometry` which is used to report forces such as drag and lift."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "49bcc4fe-fbee-49e8-a300-4aef42cedbef",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ " INFO : using: SI unit system for unit inference. \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: using: SI unit system for unit inference. \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "with fl.SI_unit_system:\n",
+ " reference_geometry_params = fl.SimulationParams(\n",
+ " # Create geometrical related reference values\n",
+ " reference_geometry=fl.ReferenceGeometry(\n",
+ " moment_center=[0.25, 0, 0], moment_length=[1, 1, 1], area=0.01\n",
+ " )\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cf0d7a08-2427-4a48-8363-0da388f4e73b",
+ "metadata": {},
+ "source": [
+ "### Operating condition\n",
+ "Next up is the definition of flow conditions with the help of `fl.operating_condition_from_mach_reynolds()` function, which does not require knowledge of air properties in desired conditions and instead allows the usage of mach number in conjunction with reynolds number. This is particularly useful for conducting workshop cases as we can easily simulate flow conditions for different values of reynolds number. Viscosity as well as density are going to be automatically calculated based on input parameters."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "48bb6d71-298a-442e-80ff-9f6170ac6aab",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ " INFO : using: SI unit system for unit inference. \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: using: SI unit system for unit inference. \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " INFO : Density and viscosity were calculated based on input data, ThermalState will be automatically \n",
+ " created. \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: Density and viscosity were calculated based on input data, ThermalState will be automatically \n",
+ "\u001b[2;36m \u001b[0mcreated. \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "with fl.SI_unit_system:\n",
+ " operating_condition_params = fl.SimulationParams(\n",
+ " # Create operating conditions using mach and reynolds number\n",
+ " operating_condition=fl.operating_condition_from_mach_reynolds(\n",
+ " mach=0.2,\n",
+ " reynolds=5e6,\n",
+ " temperature=272.1,\n",
+ " alpha=16 * fl.u.deg,\n",
+ " beta=0 * fl.u.deg,\n",
+ " project_length_unit=1 * fl.u.m,\n",
+ " ),\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3e60f956-5534-4fbb-8cf8-38e449a59c3e",
+ "metadata": {},
+ "source": [
+ "### Time stepping\n",
+ "Even though our simulation will be run as a Steady State case, the solver will use information about time stepping, so we define it accordingly.\n",
+ "\n",
+ "`max_steps` is the maximum amount of pseudo time steps in one physical step, which can be interpreted as the maximum number of iterations.\n",
+ "\n",
+ "CFL is the Courant–Friedrichs–Lewy condition and `RampCFL` specifies its initial and final value, as well as the amount of pseudo time steps before achieving the final value."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "00010667-5cc8-4ad0-8715-02e489e3cabb",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ " INFO : using: SI unit system for unit inference. \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: using: SI unit system for unit inference. \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "with fl.SI_unit_system:\n",
+ " time_stepping_params = fl.SimulationParams(\n",
+ " # Time stepping settings for Steady State simulation\n",
+ " time_stepping=fl.Steady(\n",
+ " max_steps=3000, CFL=fl.RampCFL(initial=20, final=300, ramp_steps=500)\n",
+ " ),\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e9d1ecc4-3bfc-4f0b-aeef-0ee14846627e",
+ "metadata": {},
+ "source": [
+ "### Models\n",
+ "This parameter is used to define solver settings, numerical models and boundary conditions within our simulation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "ab7f6a83-1144-4e6c-85f1-a4fe4ab2061d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ " INFO : using: SI unit system for unit inference. \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: using: SI unit system for unit inference. \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "with fl.SI_unit_system:\n",
+ " models_params = fl.SimulationParams(\n",
+ " # Solver settings, numerical models and boundary conditions\n",
+ " models=[\n",
+ " # Create wall boundary condition\n",
+ " fl.Wall(\n",
+ " surfaces=[\n",
+ " # Here we use '*' to select all surfaces\n",
+ " geometry[\"*\"],\n",
+ " ],\n",
+ " name=\"wall\",\n",
+ " ),\n",
+ " # Create freestream boundary condition\n",
+ " fl.Freestream(surfaces=farfield.farfield, name=\"Freestream\"),\n",
+ " # Create slip wall boundary condition\n",
+ " fl.SlipWall(surfaces=farfield.symmetry_planes, name=\"slipwall\"),\n",
+ " # Create fluid volume model\n",
+ " fl.Fluid(\n",
+ " # Set up compressible Navier-Stokes solver\n",
+ " navier_stokes_solver=fl.NavierStokesSolver(\n",
+ " absolute_tolerance=1e-11,\n",
+ " linear_solver=fl.LinearSolver(max_iterations=35),\n",
+ " kappa_MUSCL=0.33,\n",
+ " ),\n",
+ " # Set up turbulence solver based on the Spalart-Allmaras model\n",
+ " turbulence_model_solver=fl.SpalartAllmaras(\n",
+ " absolute_tolerance=1e-10,\n",
+ " linear_solver=fl.LinearSolver(max_iterations=25),\n",
+ " equation_evaluation_frequency=1,\n",
+ " ),\n",
+ " ),\n",
+ " ],\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7a9009cf-79e9-457a-911d-d57c9d0222d5",
+ "metadata": {},
+ "source": [
+ "### Outputs\n",
+ "Here we will specify which outputs we want Flow360 to produce for us."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "5f4475e3-1c53-4771-8d31-2eb0d45e53b2",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ " INFO : using: SI unit system for unit inference. \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: using: SI unit system for unit inference. \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "with fl.SI_unit_system:\n",
+ " outputs_params = fl.SimulationParams(\n",
+ " outputs=[\n",
+ " # Specify the list of volume output variables\n",
+ " fl.VolumeOutput(\n",
+ " name=\"fl.VolumeOutput\",\n",
+ " output_fields=[\n",
+ " \"primitiveVars\",\n",
+ " \"vorticity\",\n",
+ " \"residualNavierStokes\",\n",
+ " \"residualTurbulence\",\n",
+ " \"Cp\",\n",
+ " \"Mach\",\n",
+ " \"qcriterion\",\n",
+ " \"mut\",\n",
+ " ],\n",
+ " ),\n",
+ " # Specify the list of surface output variables\n",
+ " fl.SurfaceOutput(\n",
+ " name=\"fl.SurfaceOutput\",\n",
+ " surfaces=geometry[\"*\"],\n",
+ " output_fields=[\n",
+ " \"primitiveVars\",\n",
+ " \"Cp\",\n",
+ " \"Cf\",\n",
+ " \"CfVec\",\n",
+ " \"yPlus\",\n",
+ " ],\n",
+ " ),\n",
+ " ],\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "03324835-4bcb-4a21-8a4c-477335747ab9",
+ "metadata": {},
+ "source": [
+ "### Combining parameters\n",
+ "After we created multiple instances of `SimulationParams` class, we can create one final instance, which will contain all of the parameters defined by us previously.\n",
+ "Flow360 allows us to refer to each parameter specified within `SimulationParams`, for example using `meshing_params.meshing`, we can access meshing parameters within that variable."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "a5c42863-7b89-4888-b829-0ed9632ef6cd",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ " INFO : using: SI unit system for unit inference. \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: using: SI unit system for unit inference. \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "with fl.SI_unit_system:\n",
+ " params = fl.SimulationParams(\n",
+ " meshing=meshing_params.meshing,\n",
+ " reference_geometry=reference_geometry_params.reference_geometry,\n",
+ " operating_condition=operating_condition_params.operating_condition,\n",
+ " time_stepping=time_stepping_params.time_stepping,\n",
+ " models=models_params.models,\n",
+ " outputs=outputs_params.outputs,\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1eb241f7-a458-4196-a1a9-55f1b5de788f",
+ "metadata": {},
+ "source": [
+ "## Running the case\n",
+ "With all of our parameters defined, we can pass them to our project and run the case."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "9e6f9fea-b904-4dfa-85f0-f89a97449efb",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ " INFO : using: SI unit system for unit inference. \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: using: SI unit system for unit inference. \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "[13:42:16] INFO : Successfully submitted: \n",
+ " type = Case \n",
+ " name = Case of tutorial 2D CRM from Python \n",
+ " id = case-13380c76-571b-4401-94f1-0dfeb000af1d \n",
+ " status = pending \n",
+ " \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m[13:42:16]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: Successfully submitted: \n",
+ "\u001b[2;36m \u001b[0m type = Case \n",
+ "\u001b[2;36m \u001b[0m name = Case of tutorial 2D CRM from Python \n",
+ "\u001b[2;36m \u001b[0m id = case-\u001b[93m13380c76-571b-4401-94f1-0dfeb000af1d\u001b[0m \n",
+ "\u001b[2;36m \u001b[0m status = pending \n",
+ "\u001b[2;36m \u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "CaseMeta(name='Case of tutorial 2D CRM from Python', user_id='AIDAXWCOWJGJJBXX543AQ', id='case-13380c76-571b-4401-94f1-0dfeb000af1d', parent_id=None, solver_version='release-25.2.6', status=, tags=None, created_at=None, updated_at=datetime.datetime(2025, 4, 8, 11, 42, 14, 918000, tzinfo=datetime.timezone.utc), updated_by=None, deleted=False, cloud_path_prefix=None, case_mesh_id='vm-5284bdf5-f00b-47aa-ba22-c6a72884ea61', supportStorageSize=None, realFlexUnit=0.0, metadataProcessed=False, elapsedTimeInSeconds=None, oriRealFlexUnit=None, clonedFrom=None, exampleResource=False, caseFinishTime=None, unitSystem=None, userEmail='auto_test_1@flexcompute.com', highPriority=False, restoreAt=None, storageSize=0, internal=False, parentFolders=[{'userId': 'AIDAXWCOWJGJJBXX543AQ', 'name': 'ROOT.FLOW360', 'tags': None, 'id': 'ROOT.FLOW360', 'parentFolderId': None, 'createdAt': '2023-09-01T09:14:15.293797Z', 'updatedAt': '2023-09-01T09:14:15.293797Z'}], refId='vm-5284bdf5-f00b-47aa-ba22-c6a72884ea61', running=False, nodesInfo=None, estFlexUnit=0.0, caseName='Case of tutorial 2D CRM from Python', estWorkUnit=0.0, combinedStatus='pending', success=False, userDataUploaded=None, storageStatus='STANDARD', retryCount=None, caseStatus='pending', storageClass='STANDARD', computeCost=0.0, casePriority=None, viewed=None, objectRefId='case-13380c76-571b-4401-94f1-0dfeb000af1d', parentFolderId='ROOT.FLOW360', caseTags=None, caseParentId=None, meshNodeSize=0, events=None, meshSize=0, nodeSize=0, currentProgress=None, errorType=None, caseStartTime=None, estimationDuration=0.0, standardAge=None, caseSubmitTime='2025-04-08T11:42:14.918Z', projectId='prj-ccde584b-5089-4daa-b743-18bd84135edd')"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "project.run_case(params=params, name=\"Case of tutorial 2D CRM from Python\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e219c6bf-b105-4fd7-b2cd-afb9e3bed721",
+ "metadata": {},
+ "source": [
+ "## Post processing\n",
+ "After we have successfully run the simulation, we can post process our results.\n",
+ "\n",
+ "We will do so by first, downloading the results of interest from the server.\n",
+ "\n",
+ "To do that we will create a variable containing information about the case. \n",
+ ">Note: we will use the `wait()` method, which will wait with the execution of the rest of the code until the case has finished running."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "b7921723-0f67-4f06-a90d-ed49c5600e00",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "5b7cbfd5eea84b1d9e99c202063c4c47",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Output()"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " \n"
+ ],
+ "text/plain": []
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "case = project.case\n",
+ "case.wait()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4ce6ac7b-6495-4758-8858-f36d0d4291a8",
+ "metadata": {},
+ "source": [
+ "Next we can download the results.\n",
+ "We will be looking at the post processing of these quantities:\n",
+ "- total forces\n",
+ "- nonlinear residuals\n",
+ "- CFL\n",
+ "- total CD along the X axis"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "c713f8f6-3ec5-40a3-b927-adb1e2202ae0",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "c4e4a4b8b17142cfa59159bc5216e39a",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Output()"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " \n"
+ ],
+ "text/plain": []
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "[14:03:54] INFO : Saved to \n",
+ " /var/folders/qk/mywsrvps5gl_f3yjx2k1v1xm0000gn/T/tmp5n0q1cf1/ dd1d867e-e8e7-4d69-b869-7959e57aaaeb.csv \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m[14:03:54]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: Saved to \n",
+ "\u001b[2;36m \u001b[0m\u001b[35m/var/folders/qk/mywsrvps5gl_f3yjx2k1v1xm0000gn/T/tmp5n0q1cf1/\u001b[0m\u001b[95mdd1d867e-e8e7-4d69-b869-7959e57aaaeb.csv\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "7d8cf3e81ff64002b23ec8e3c82dfc36",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Output()"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " \n"
+ ],
+ "text/plain": []
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "[14:03:56] INFO : Saved to \n",
+ " /var/folders/qk/mywsrvps5gl_f3yjx2k1v1xm0000gn/T/tmp5n0q1cf1/ 4ed7c5e7-07a7-45a2-aa83-39fe124178d1.csv \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m[14:03:56]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: Saved to \n",
+ "\u001b[2;36m \u001b[0m\u001b[35m/var/folders/qk/mywsrvps5gl_f3yjx2k1v1xm0000gn/T/tmp5n0q1cf1/\u001b[0m\u001b[95m4ed7c5e7-07a7-45a2-aa83-39fe124178d1.csv\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "42b57873fb4a4de3882cc7d2316fc0f3",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Output()"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " \n"
+ ],
+ "text/plain": []
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "[14:03:57] INFO : Saved to \n",
+ " /var/folders/qk/mywsrvps5gl_f3yjx2k1v1xm0000gn/T/tmp5n0q1cf1/ 20b36f43-8eff-455f-b63a-9bec9404f16b.csv \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m[14:03:57]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: Saved to \n",
+ "\u001b[2;36m \u001b[0m\u001b[35m/var/folders/qk/mywsrvps5gl_f3yjx2k1v1xm0000gn/T/tmp5n0q1cf1/\u001b[0m\u001b[95m20b36f43-8eff-455f-b63a-9bec9404f16b.csv\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "e1ca97280fe246b7b4456d6c80ddfbd6",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Output()"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " \n"
+ ],
+ "text/plain": []
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "[14:03:58] INFO : Saved to \n",
+ " /var/folders/qk/mywsrvps5gl_f3yjx2k1v1xm0000gn/T/tmp5n0q1cf1/ cfdf3e8f-9f41-40c5-afa2-fde5190bffc8.csv \n",
+ " \n"
+ ],
+ "text/plain": [
+ "\u001b[2;36m[14:03:58]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: Saved to \n",
+ "\u001b[2;36m \u001b[0m\u001b[35m/var/folders/qk/mywsrvps5gl_f3yjx2k1v1xm0000gn/T/tmp5n0q1cf1/\u001b[0m\u001b[95mcfdf3e8f-9f41-40c5-afa2-fde5190bffc8.csv\u001b[0m \n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "total_forces = case.results.total_forces\n",
+ "total_forces = total_forces.as_dataframe()\n",
+ "\n",
+ "nonlinear_residuals = case.results.nonlinear_residuals\n",
+ "nonlinear_residuals = nonlinear_residuals.as_dataframe()\n",
+ "\n",
+ "cfl = case.results.cfl\n",
+ "cfl = cfl.as_dataframe()\n",
+ "\n",
+ "x_slicing_force_distribution = case.results.x_slicing_force_distribution\n",
+ "x_slicing_force_distribution.wait()\n",
+ "x_slicing_force_distribution = x_slicing_force_distribution.as_dataframe()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "38e8a311",
+ "metadata": {},
+ "source": [
+ "In order to obtain the X and Y variable names for our plots, we will print out the dataframe and look at its column names."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "9010c839",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " physical_step pseudo_step 0_NavierStokes_cfl 1_SpalartAllmaras_cfl\n",
+ "0 0 0 20.000000 40.000000\n",
+ "1 0 10 21.113091 42.226182\n",
+ "2 0 20 22.288131 44.576261\n",
+ "3 0 30 23.528567 47.057133\n",
+ "4 0 40 24.838039 49.676077\n",
+ ".. ... ... ... ...\n",
+ "296 0 2960 300.000000 600.000000\n",
+ "297 0 2970 300.000000 600.000000\n",
+ "298 0 2980 300.000000 600.000000\n",
+ "299 0 2990 300.000000 600.000000\n",
+ "300 0 2999 300.000000 600.000000\n",
+ "\n",
+ "[301 rows x 4 columns]\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(cfl)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b684107e-c3b7-460c-9cd2-c4f510283e22",
+ "metadata": {},
+ "source": [
+ "First, we will look at how the residuals change as the pseudo step progresses."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "78cf25c4-a9a0-404d-8c80-f8eebd41e548",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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IqIsJVMpZZtTMGfEc6TKZvdAd3LrGegZPA70qMuJ6+SyTOGMIZacxtmAhjd9HFajVYW5RKhL7KX9ghwnGrVL8JNRQRpfDHFERERERDom0yJVsHKWjup86Y0n4S0Z7gLd6UFPjgM96PZ3o3OgU4W+YDSYXNN32sdiMKHYXowSZ4nay7RNGfGTTY6lSEyJXQt8ssmaQo7wnTmGOCIiIiKiaUQKoCRC1GgEIgHVJ6/D16GmcMpUTrkse5nKKdfJZQmAMq2z3d+uttFwmB3JtXsS8hLr9ZJ7W2Fy2mciEJpZwIUhjoiIiIiIRmYz2ZLtD04nFA1po3cS+PwdKtTJiJ+M5CWqcMooX9dAlzpHKndKM/XRjPClcllcaaN7yVE+WwHybHnJ49TLuZbcKTXixxBHRERERETnzGK0JJunj4Yv5FOBTkbzJNypkBfoQe/AkH187Z4EQeEJedTW5G0a9WMzG8wq0CUCn6wztJvssJvtKkhKARkZRZTWDdK2QfYVzgrt+TjL1UhhNlXzZIgjIiIiIqIJJ03MZat11Y56LZ80Tu8N9MId0PZDR/qG3ibnS0gLx8LJYi9nQ9b6yZTORKEZGQ1MHltdMAcnNlYxxBERERERUdaTtXCJ9XNnYiA8kAx5iRDoDXrhC/vUej9ZlydBTMi6P1nrJ60bpJWD7GVqqIzSyRRQ2TKJ+M+sxcO5YogjIiIiIqIpy27Wpk2OdppnphFAmfKZCIEy9dIb8qp94nJnTycO4AAmCpt9nyU2+yYiIiIiosnIBuzER0REREREpCMMcURERERERDrCEEdERERERKQjDHFEREREREQ6whBHRERERESkIwxxREREREREOsIQR0REREREpCMMcURERERERDrCEEdERERERKQjDHFEREREREQ6whBHRERERESkIwxxREREREREOsIQR0REREREpCMMcURERERERDrCEEdERERERKQjDHFEREREREQ6whBHRERERESkIwxxREREREREOsIQR0REREREpCMMcURERERERDrCEEdERERERKQjDHFEREREREQ6whBHRERERESkIwxxREREREREOsIQR0REREREpCMMcURERERERDrCEEdERERERKQjDHFEREREREQ6whBHRERERESkIwxxREREREREOsIQR0REREREpCMMcURERERERDrCEEdERERERKQjDHFEREREREQ6whBHRERERESkI9MixF177bUoLCzE+9///rTre3t7sWbNGqxYsQJLly7Ff//3f0/aYyQiIiIiIhoNQywWi2GK27RpEzweD37961/j0UcfTV4fiUQQCATgdDrR39+vgty2bdtQXFz8pvfpdruRn5+Pvr4+5OXljfMzICIiIiKibOWe4GwwLUbiLrroIrhcrmHXm0wmFeCEhDnJs9Mg0xIRERERkY5Neoh76aWXcNVVV6GqqgoGgwGPP/74sHPuv/9+zJw5E3a7HevWrcNrr702Zt9fplQuX74cNTU1uPXWW1FSUjJm901ERERERDTlQpxMY5QQJUEtk4cffhi33HIL7rzzTuzYsUOde9lll6G9vT15TmJN29Ctubn5Tb9/QUEBdu3ahYaGBvz2t79FW1vbmD4/IiIiIiKisWTGJLviiivUNpJ77rkHN910E2644QZ1+YEHHsATTzyBX/7yl7jtttvUdTt37jznx1FeXq4C4ssvvzysAEpiuqVsqfNeiYiIiIiIpt1I3OkEg0Fs374dl156afI6o9GoLm/evPmc719G3aTgiZBFiDK1c8GCBRnPvfvuu9VixcRWW1t7zt+fiIiIiIhoSoW4zs5OVUFSRslSyeXW1tZR34+Evg984AN48skn1dq3RAA8ceIE3v72t6sRONl/6UtfwrJlyzLex+23366CXmJrbGw8x2dHRERERESkw+mUE+Fvf/tbxuvXrl076qmYNptNbURERERERJMpq0fipFKktAEYWmxELldUVEza4yIiIiIiIposWR3irFYrVq9ejeeffz55XTQaVZc3bNgwqY+NiIiIiIhoWk6n9Hq9qK+vT16WUv8yxbGoqAh1dXWqvcD111+PNWvWqOmP9957r2pLkKhWSURERERENJ1Meojbtm0bLr744uRlCW1CgtuDDz6ID33oQ+jo6MAdd9yhiplIT7inn356WLETIiIiIiKi6cAQi8Vik/0g9Ej6xEmrAalUmZeXN9kPh4iIiIiIpkk2yOo1cURERERERJSOIY6IiIiIiEhHGOKIiIiIiIh0hCGOiIiIiIhIRxjiiIiIiIiIdIQhjoiIiIiISEcY4oiIiIiIiHSEIY6IiIiIiEhHGOKIiIiIiIh0hCGOiIiIiIhIRxjiiIiIiIiIdIQhjoiIiIiISEcY4oiIiIiIiHSEIY6IiIiIiEhH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EtfEERERERER6QhDHBERERERkY4wxBEREREREekIQxwREREREZGOMMQRERERERHpCEMcERERERGRjjDEERERERER6QhDHBER0Sht2rQJBoMBvb29k/1QiIhoGmOIIyKirPTJT35SBSbZrFYr5s6di+9+97sIh8PQs0gkgh/84AdYuHAhHA4HioqKsG7dOvziF79InnPRRRfhK1/5yqQ+TiIiyl7myX4AREREI7n88svxq1/9CoFAAE8++SS++MUvwmKx4Pbbb4de3XXXXfj5z3+On/70p1izZg3cbje2bduGnp6eyX5oRESkExyJIyKirGWz2VBRUYEZM2bg85//PC699FL8+c9/Tk5tXLt2LXJyclBQUIC3vvWtOHHiRPJr//SnP2HVqlWw2+2YPXu2Ck+JUbzjx4+rEb6dO3cmz5cpknKd3G+CBMf58+erEbOLL75Yfd1Qf/jDH7BkyRL1WGfOnIkf/ehHp31O8vi/8IUv4AMf+ABmzZqF5cuX41Of+hS+9rWvJUcgX3zxRfz4xz9OjkQmvu/evXtxxRVXIDc3F+Xl5fj4xz+Ozs7OtBG8m2++WW35+fkoKSnBt7/9bcRisXP4KRARUbZhiCMiIt2QMBUMBlUYu+aaa3DhhRdi9+7d2Lx5Mz7zmc+owCNefvllfOITn8CXv/xl7N+/X418Pfjgg/jXf/3XUX+vxsZGXHfddbjqqqtU2Pv0pz+N2267Le2c7du344Mf/CA+/OEPY8+ePfjOd76jQpN8r5FIKH3hhRfQ0dGR8XYJbxs2bMBNN92ElpYWtdXW1qqQ+Y53vAMrV65UI3dPP/002tra1PdP9etf/xpmsxmvvfaauq977rknbaomERFNATEiIqIsdP3118fe+973quNoNBp77rnnYjabLfa1r30t1tXVJUNLsU2bNmX82ksuuST2/e9/P+26//mf/4lVVlaq44aGBvX1b7zxRvL2np4edd3GjRvV5dtvvz22ePHitPv4xje+oc6Rc8VHP/rR2Dvf+c60c2699dZhX5dq3759sUWLFsWMRmNs2bJlsc9+9rOxJ598Mu2cCy+8MPblL3857brvfe97sXe9611p1zU2NqrHc+jQoeTXyX3L/6/UxyzXERHR1MGROCIiylp//etf1dRBmRIp0wg/9KEPqdEuKQYi0w4vu+wyNVImI04yYpWwa9cuVQRFvjaxJUa2fD7fqL73gQMHVMGRVDJCNvQcmcaZSi4fOXJEFTDJZPHixWpa5JYtW3DjjTeivb1dPQcZ6TsdeU4bN25Me05SHEUcPXo0ed769euTI5KJx3y6x0NERPrDwiZERJS1ZB3az372M1WdsqqqSk0TTJCCJ//4j/+ophU+/PDD+Od//mc899xzKsR4vV61Bk6mQw4lgdBo1P6GmbpWLBQKTdCzgvr+559/vtqkCuX//u//qvVt3/rWt9Q6uUzkOUnY+7d/+7dht1VWVk7AoyYiomzBEEdERFlLipZIa4GRyPow2aRapYw4/fa3v1UhTgqaHDp0aMSvLS0tVXsZmZOvF6lFTsSiRYuSRVQSZPRs6Dmvvvpq2nVyWYqhmEymUT9PGZ0T/f39ai+hdejImTwnKaIixVNSw+xQW7duHfaY582bd0aPh4iIshunUxIRke40NDSo4CYFTaQi5bPPPqumDEqoEnfccQd+85vfqNG4ffv2qWmPDz30kBqtSxRIkbAn/drkNqkGmbgt4XOf+5y6z1tvvVUFQgmIQwuWfPWrX8Xzzz+P733vezh8+LAqKiKtAxKVJjN5//vfj//8z/9UYUseu1TDlNYJEvwS0yMlqMntUpVSqk9Go1F1Tnd3Nz7ykY/g9ddfV1Mon3nmGdxwww1pge/kyZO45ZZb1GP+3e9+h/vuu08VeCEioqmDIY6IiHTH6XTi4MGDeN/73qfCj1SmlJDz2c9+Vt0ua+VkPZ2EO5myKIFNgpO0Kkj45S9/qapcrl69Wk1p/Jd/+Ze071FXV6dGvh5//HHVBuCBBx7A97///WGjY7///e9VQFy6dKkKj7IWT9brjUQe21/+8hc1NVIe+/XXX6/CmzzWxAibhEAZOZMROhk1lGAm00lllE8C27ve9S4sW7ZMPW5pr5CYHiqkKqff71ftF+T/iQQ4+f9DRERTh0Gqm0z2gyAiIqJzJ33iVqxYgXvvvXeyHwoREY0jjsQRERERERHpCEMcERERERGRjnA6JRERERERkY5wJI6IiIiIiEhHGOKIiIiIiIh0hCGOiIiIiIhIRxjiiIiIiIiIdIQhjoiIiIiISEcY4oiIiIiIiHSEIY6IiIiIiEhHGOKIiIiIiIh0hCGOiIiIiIgI+vH/A0ARTE4Ypvd1AAAAAElFTkSuQmCC",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "nonlinear_residuals.plot(\n",
+ " x=\"pseudo_step\",\n",
+ " y=[\"0_cont\", \"1_momx\", \"2_momy\", \"3_momz\", \"4_energ\", \"5_nuHat\"],\n",
+ " logy=True,\n",
+ " xlim=(10, 3000),\n",
+ " xlabel=\"Pseudo Step\",\n",
+ " ylabel=\"residuals\",\n",
+ " figsize=(10, 5),\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "78d55e8b-6ab0-42e7-9817-7e063c8f20a4",
+ "metadata": {},
+ "source": [
+ "Next are the CFL values for both the Navier-Stokes solver, as well as the turbulence model solver with Spalart-Allmaras model selected."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "af56abbb-4059-4276-a69a-8ad84cd4a37a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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EPkIUACAA3rjjTcUGxurmTNn6plnntGTTz6pV199VbNnz9bf/vY3F16WLl3qQkv37t2D97Mg8uabb+rFF1/UwoULddttt+nyyy/X5MmTC/3c77//vlvz9Oijj7rns6BjoS0/q+mJJ57Qv//9b82bN0+9e/fWOeeco2XLlh3y8Z999ll99tln7nnsNYwaNSoYlGbNmuW2r7/+ujZu3Bi8PGXKFF155ZX6+9//rkWLFumll15yYfCRRx4p8NgWNPv376+ff/5Zl112mS6++GItXry40K8dABDmfAAA7Ofkk0/2tWzZ0peXlxe87u6773bXffTRR74KFSr40tPT/3C/jIwMX9myZX1Tp04tcP3AgQN9l1xyiTv/+uuv+5KTkwvcPnr0aBvaCl7u0qWL78YbbyywT6dOnXzt27cPXq5Vq5bvkUceKbDP8ccf/4f7Hcgtt9ziO+200wq8vvysFqspvx49evgeffTRAte99dZbvpo1axa43/XXX/+Hum+44YZD1gQAiAyMQAEADqhz584FptV16dLFje706NHDTXmz6WlXXHGFG73Zs2eP22f58uXu/Omnn65y5coFTzYitWLFikI/t43YdOrUqcB19vwB6enp2rBhg7p27VpgH7tcmNGeq666SnPnzlXz5s3daNrXX399yPvYiJKNuuV/Xddee60bpQq8/v3rDFxmBAoASo5YrwsAAEQWCw4//vijJk2a5ILHkCFD3HQ7m+q2a9cut88XX3yh2rVrF7ifrVMy0dHRwbVUAdnZ2SF8BXLrmFatWqWxY8fqm2++0YUXXqiePXv+6Xole2225qlfv35/uM3WRAEASgdGoAAABzRjxowCl6dPn+4aR8TExLi1URY4hg8f7tYf/frrr5o4caJatWrlgtKaNWvUpEmTAqe6deu6x6lWrZp27typ3bt3Bx/bRoPya9my5QGfP6BChQqqVauWfvjhhwL72GWroTDsMS666CK98soreu+99/TRRx9p27Zt7ra4uDjl5ub+IXTZeqn9X5edLBQeqM7AZXs9AICSgREoAMABWQgaNGiQ/vrXv7oRp+eee841bRgzZoxWrlzpGkdUqlRJX375peuIZ9PhrGPeHXfc4RpH2HXdunVTWlqaCzYWWAYMGOCm5pUtW1b33nuvmz5nQcmaMeRnjRpsmt1xxx3npuXZNEFrSGHTBgPuvPNOPfDAA2rcuLHrwGdNHyyI2b6HYg0xrDHFMccc48LPBx98oJSUlGB3QGsoMWHCBPfcFgjtddpI21lnnaV69eq5roN2P5vWt2DBAj388MPBx7bHsrrttVst1oTjtddeK9LfDQDAQ14vwgIAhGcTCWvGYA0RrGFEpUqVfPfee69rujBlyhR3u11XpkwZX7t27Xzvvfde8L62z9NPP+1r3ry5Ly4uzletWjVf7969fZMnTw7uYw0amjRp4u5/1lln+V5++eUCTSSMNYioWrWqr1y5cr4BAwb47rrrrgJNJHJzc30PPvigr3bt2u557LaxY8cW6vXZ83Xo0MGXlJTkXp81iPjxxx+Dt3/22WeuvtjYWF/9+vWD148bN8534oknurrtfieccIJ7rAB7DSNGjPCdfvrpvoSEBF+DBg0K/GwAAJEvyv7jZYADAITncaBsVOfpp5/2upSIYk03Ro8erfPOO8/rUgAAxYQ1UAAAAABQSAQoAECJYwfgzd9uPP+pb9++XpcHAIhgTOEDAJQ41k0v0FFvf2XKlPlDi3UAAAqLAAUAAAAAhcQUPgAAAAAoJAIUAAAAABQSAQoAAAAACokABQAAAACFRIACAAAAgEIiQAEAAABAIRGgAAAAAKCQCFAAAAAAoML5f0jMCa3mZcykAAAAAElFTkSuQmCC",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "cfl.plot(\n",
+ " x=\"pseudo_step\",\n",
+ " y=[\"0_NavierStokes_cfl\", \"1_SpalartAllmaras_cfl\"],\n",
+ " xlim=(0, 3000),\n",
+ " figsize=(10, 5),\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b9dd0787-981c-4ea1-b5da-a8388be2255b",
+ "metadata": {},
+ "source": [
+ "Another popular form of data visualisation indicating the convergence status of the solution for aerodynamic applications is monitoring how the CL and CD values change with pseudo steps (iterations)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "8d4c2a4e-40f0-46b5-84da-f0ad037ef237",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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CAAAAECgEIIAAAAABAohCAAAAECgEIIAAAAABAohCAAAAECgEIIAAAAABAohCAAAAECg+CIEzZw5U/369VNeXp7GjRunxYsXe31IAAAAANKU5yHoySef1M0336y7775bH374oUaOHKkJEyZo69atXh8aAAAAgDTkeQiaMWOGrr76al1xxRUaNmyYfve736lDhw567LHHvD40AAAAAGnI0xB04MABLVmyRGeeeWbdAWVk2LffffddLw8NAAAAQJrK8vKLb9++XTU1NerevXvM/eb2559/3mD/yspK++IqKytLynECAAAASB+ehqCWmj59uqZNm9bgfsIQAAAAEGxl4UxgWZa/Q1DXrl2VmZmpLVu2xNxvbvfo0aPB/lOnTrWbKLg2btxozyPq3bt3Uo4XAAAAgL/t2bNHRUVF/g1BOTk5OvroozV//nxNmjTJvq+2tta+fcMNNzTYPzc31764CgoKtGHDBnXq1EmhUEheJ08TxszxFBYWenosSBzOa/rhnKYnzmv64ZymJ85r+inz0Tk1FSATgHr27On/4XCmsjN58mQdc8wxGjt2rB588EHt3bvX7hZ3MKaJQq9eveQn5uR7/QOAxOO8ph/OaXrivKYfzml64rymn0KfnNODVYB8E4Iuuugibdu2TXfddZc2b96sUaNGad68eQ2aJQAAAABAIngeggwz9K2x4W8AAAAAkHaLpaYLM1fp7rvvjpmzhNTHeU0/nNP0xHlNP5zT9MR5TT+5KXpOQ1Y8PeQAAAAAIE1QCQIAAAAQKIQgAAAAAIFCCAIAAAAQKIQgAAAAAIFCCEqQmTNnql+/fsrLy9O4ceO0ePFirw8JTbjnnnsUCoViLkOHDo08vn//fk2ZMkWHHHKICgoK9K//+q/asmVLzGusX79e5513njp06KBDDz1Ut912m6qrqz34boLpjTfe0Pnnn2+vCG3O3zPPPBPzuOn3YtYeKykpUX5+vs4880x9+eWXMfvs3LlTl156qb2wW3Fxsa666iqVl5fH7PPJJ5/opJNOst/XZjXs//iP/0jK9xdUBzuvl19+eYP37sSJE2P24bz6y/Tp03XssceqU6dO9u/KSZMmaeXKlTH7JOp37sKFCzVmzBi7Q9XAgQM1e/bspHyPQRPPOT311FMbvFevvfbamH04p/4ya9YsHXXUUZEFT8ePH68XX3wxvd+npjsc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zL5tfmm7zAfl66+/3m4Nad6sF154of0LPtratWutc845x15fxAQoE6yqqqo8+G6CacGCBfaH5PoX00LZbZN955132h92zR8ozjjjDHvdg2g7duywPxwXFBTYLTyvuOIK+4N2NLPG0Iknnmi/hvlZMeEK3pxX8wHL/ONq/lE1rVr79u1rr0NS/49NnFd/aex8motZZybRv3PNz8+oUaPs3+3mQ3f010Dyzun69evtwNOlSxf7PWbW6jIfeqPXCTI4p/5y5ZVX2r9Xzf9r83vW/LvpBqB0fZ+GzH+8qUEBAAAAQPIxJwgAAABAoBCCAAAAAAQKIQgAAABAoBCCAAAAAAQKIQgAAABAoBCCAAAAAAQKIQgAAABAoBCCAAApZ+HChQqFQtq9e7fXhwIASEGEIABAsy6//HI7cJhLTk6OBg4cqF/+8peqrq5WKqupqdF9992noUOHKj8/X126dNG4ceP0hz/8IbLPqaeeqptuusnT4wQAJF5WO7wmACDNTJw4UX/84x9VWVmpF154QVOmTFF2dramTp2qVDVt2jQ9+uijeuSRR3TMMceorKxMH3zwgXbt2uX1oQEA2hmVIADAQeXm5qpHjx7q27evrrvuOp155pn6xz/+ERmaNnbsWHXs2FHFxcU64YQTtG7dushzn332WY0ZM0Z5eXkaMGCAHT7cKtLatWvtCtPSpUsj+5shbuY+87ouE7wGDx5sV2xOO+00+3n1PfXUUxo+fLh9rP369dNvfvObZr8nc/zXX3+9vvvd76p///4aOXKkrrrqKt16662RCtjrr7+uhx56KFIJc7/u8uXLdc4556igoEDdu3fXZZddpu3bt8dUkG644Qb7UlRUpK5du+rOO++UZVltOAsAgEQhBAEAWsyEkQMHDthhZtKkSTrllFP0ySef6N1339U111xjBwbjzTff1A9+8APdeOON+vTTT+3Ky+zZs3XvvffG/bU2bNigb3/72zr//PPtsPTDH/5QP/vZz2L2WbJkib73ve/p+9//vpYtW6Z77rnHDh3mazXFhLrXXntN27Zta/RxE37Gjx+vq6++Wps2bbIvvXv3tkPa6aefrtGjR9uVo3nz5mnLli3214/2pz/9SVlZWVq8eLH9WjNmzIgZagcA8JAFAEAzJk+ebF1wwQX29draWuuVV16xcnNzrVtvvdXasWOHKW1YCxcubPS5Z5xxhvXv//7vMff97//+r1VSUmJfX7Nmjf38jz76KPL4rl277PsWLFhg3546dao1bNiwmNe4/fbb7X3MvsYll1xinXXWWTH73HbbbQ2eF23FihXWEUccYWVkZFhHHnmk9aMf/ch64YUXYvY55ZRTrBtvvDHmvl/96lfW2WefHXPfhg0b7ONZuXJl5Hnmtc3/r+hjNvcBALxHJQgAcFDPPfecPfTLDGkzw8Auuugiu9pimgmYYWMTJkywKzWm4mEqJq6PP/7YbqJgnute3MpKRUVFXF/7s88+sxsWRDMVmvr7mGF40cztL7/80m6A0Jhhw4bZw9oWLVqkK6+8Ulu3brW/B1Npao75nhYsWBDzPZnmCsbq1asj+x133HGRiph7zM0dDwAgeWiMAAA4KDMPZ9asWXZ3uJ49e9rDvFymYcJPfvITe1jYk08+qV/84hd65ZVX7BBQXl5uzwEyw9nqM4EqI8P5W1z0XJmqqqokfVeyv/6xxx5rX0wXuL/85S/2/J6f//zn9jyhxpjvyYSlX//61w0eKykpScJRAwDaihAEADgo0/TAtMZuipkfYy6mW5ypeDz++ON2CDINEVauXNnkc7t162ZvTWXIPN+IbpJgHHHEEZEmDC5Tvam/z9tvvx1zn7ltmilkZmbG/X2a6pCxd+9ee2tCX/3KjfmeTBMG03whOgzW99577zU45kGDBrXoeAAA7YPhcACAVluzZo0dfExDBNMR7uWXX7aHfJlQYtx1113685//bFeDVqxYYQ9bmzNnjl0tchssmLBk1usxj5lubO5jrmuvvdZ+zdtuu80OVCZg1W94cMstt2j+/Pn61a9+pS+++MJuSmBaX7ud3hrzne98Rw888IAdVsyxm250pvW3CU7u8DYTdMzjpiuc6f5WW1tr77Nz505dfPHFev/99+0hcC+99JKuuOKKmMC0fv163XzzzfYxP/HEE/rtb39rN4gAAPiA15OSAACp0xihvs2bN1uTJk2yGx3k5ORYffv2te666y6rpqYmss+8efOs448/3srPz7cKCwutsWPHWr///e8jj3/66afW+PHj7cdHjRplvfzyyzGNEYx//vOf1sCBA+2GDCeddJL12GOPxTRGMP7+97/bjRCys7OtPn36WPfff3+z35c5htNOO83q1q2bfezmOZdffrm1du3ayD6m0cFxxx1nH5v5eqaRg/HFF19YF154oVVcXGw/NnToUOumm26KNEIwjRGuv/5669prr7W/586dO1t33HFHTKMEAIB3QuY/XgcxAADSiVknaNSoUXrwwQe9PhQAQCMYDgcAAAAgUAhBAAAAAAKF4XAAAAAAAoVKEAAAAIBAIQQBAAAACBRCEAAAAIBAIQQBAAAACBRCEAAAAIBAIQQBAAAACBRCEAAAAIBAIQQBAAAACBRCEAAAAAAFyf8HkPGuWFQbsZcAAAAASUVORK5CYII=",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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dXV1tVsJim9uk002CXkSD36l/wLQ+xzX2uOY1ibHtfY4prXJca09w3JyTNdUASrSGAEAAOhXhCAAAKBfEYJ6SXNzc/jqV7+anlM7HNfa45jWJse19jimtclxrT3NVXpMq7oxAgAAwLpSCQIAAPoVIQgAAOhXhCAAAKBfEYIAAIB+RQjqJZdccknYdNNNw4ABA8Luu+8e7r333krvEj342te+FgqFQqfTVlttVbp/6dKl4ZRTTgkbbLBBGDJkSPjHf/zH8Oqrr3Z6jhdeeCG8//3vD4MGDQqjR48OZ511VlixYkUF3k3/dMcdd4TDDz88XRE6Hr9rr7220/2x38t5550Xxo4dGwYOHBgOPPDA8PTTT3fa5vXXXw9HH310urDb8OHDw2c+85mwcOHCTts88sgjYe+9904/13E17H/913/tk/fXX63puB577LGrfHYPOeSQTts4rvkyderUsOuuu4ahQ4emPyuPOOKIMGPGjE7b9NbP3OnTp4eddtop7VC1+eabhyuuuKJP3mN/szbHdL/99lvls3riiSd22sYxzZdLL700bLfddqUFTydPnhxuvPHG2v6cxu5wvDNXXXVV0tTUlFx++eXJ448/nhx//PHJ8OHDk1dffbXSu0Y3vvrVrybbbLNN8sorr5ROc+fOLd1/4oknJuPGjUtuueWW5P7770/22GOPZM899yzdv2LFimTbbbdNDjzwwOTBBx9MbrjhhmTDDTdMpkyZUqF31P/EP/Nzzz03+fWvfx27WybXXHNNp/u//e1vJy0tLcm1116bPPzww8k//MM/JJtttlmyZMmS0jaHHHJIsv322yd33313cueddyabb7558vGPf7x0//z585ONNtooOfroo5PHHnss+fnPf54MHDgwueyyy/r0vfYnazquxxxzTHrcyj+7r7/+eqdtHNd8Ofjgg5Mf//jH6Z/1Qw89lBx22GHJ+PHjk4ULF/bqz9y//e1vyaBBg5IzzjgjeeKJJ5Lvfve7SX19fTJt2rQ+f8+1bm2O6b777pt+Fyr/rMbPXpFjmj+/+c1vkt/97nfJU089lcyYMSP50pe+lDQ2NqbHuVY/p0JQL9htt92SU045pXS9vb092XjjjZOpU6dWdL/oOQTFL0ndefPNN9MP/S9/+cvSbX/961/TL2R33XVXej1+sOvq6pLZs2eXtrn00kuTYcOGJW1t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18Nll10Wvve974VddtkltLa2hvvvvz+88cYbld41ADKmEgTAGjU3N4cxY8aECRMmhJNOOikceOCB4Te/+U1paNpuu+0WBg8eHIYPHx722muv8Pzzz5cee91114WddtopDBgwIEycODENH8Uq0nPPPZdWmB566KHS9nGIW7wtPm9RDF5bbLFFWrHZf//908d1dfXVV4dtttkm3ddNN900/Pu///tq31Pc/5NPPjl85CMfCZtttlnYfvvtw2c+85lw5plnlipgt99+e7j44otLlbDi6z722GPh0EMPDUOGDAkbbbRR+OQnPxlee+21ThWkU089NT21tLSEDTfcMHzlK18JSZK8g6MAQG8RggBYZzGMLFu2LA0zRxxxRNh3333DI488Eu66665wwgknpIEhuvPOO8OnPvWpcNppp4UnnngirbxcccUV4Zvf/OZav9asWbPChz70oXD44YenYemf//mfwznnnNNpmwceeCB89KMfDR/72MfCo48+Gr72ta+loSO+Vk9iqLv11lvD3Llzu70/hp/JkyeH448/Przyyivpady4cWlI+/u///uw4447ppWjadOmhVdffTV9/XJXXnllaGhoCPfee2/6XBdeeGGnoXYAVFACAKtxzDHHJB/84AfTyx0dHcnNN9+cNDc3J2eeeWYyb968WNpIpk+f3u1jDzjggORb3/pWp9v+53/+Jxk7dmx6eebMmenjH3zwwdL9b7zxRnrbbbfdll6fMmVKsvXWW3d6jrPPPjvdJm4bfeITn0je9773ddrmrLPOWuVx5R5//PHk3e9+d1JXV5e85z3vST772c8mN9xwQ6dt9t133+S0007rdNs3vvGN5KCDDup026xZs9L9mTFjRulx8bnjn1f5PsfbAKg8lSAA1uj6669Ph37FIW1xGNhRRx2VVltiM4E4bOzggw9OKzWx4hErJkUPP/xw2kQhPrZ4KlZWFi9evFav/de//jVtWFAuVmi6bhOH4ZWL159++um0AUJ3tt5663RY29133x0+/elPhzlz5qTvIVaaVie+p9tuu63Te4rNFaJnn322tN0ee+xRqogV93l1+wNA39EYAYA1ivNwLr300rQ73MYbb5wO8yqKDRM+//nPp8PCfvGLX4Qvf/nL4eabb05DwMKFC9M5QHE4W1cxUNXVvfW7uPK5MsuXL++jdxXS1991113TU+wC97//+7/p/J5zzz03nSfUnfieYlj6zne+s8p9Y8eO7YO9BuCdEoIAWKPY9CC2xu5JnB8TT7FbXKx4/OxnP0tDUGyIMGPGjB4fO2rUqPQ8Vobi46PyJgnRu9/97lIThqJYvem6zZ/+9KdOt8XrsZlCfX39Wr/PWB2KFi1alJ7H0Ne1chPfU2zCEJsvlIfBru65555V9nnSpEnrtD8AZMNwOADW28yZM9PgExsixI5wv//979MhXzGUROedd174yU9+klaDHn/88XTY2lVXXZVWi4oNFmJYiuv1xPtiN7bifUUnnnhi+pxnnXVWGqhiwOra8OALX/hCuOWWW8I3vvGN8NRTT6VNCWLr62Knt+58+MMfDv/xH/+RhpW477EbXWz9HYNTcXhbDDrx/tgVLnZ/6+joSLd5/fXXw8c//vFw3333pUPgbrrppnDcccd1CkwvvPBCOOOMM9J9/vnPfx6++93vpg0iAMiBSk9KAqB6GiN0NXv27OSII45IGx00NTUlEyZMSM4777ykvb29tM20adOSPffcMxk4cGAybNiwZLfddkt+8IMflO5/4oknksmTJ6f377DDDsnvf//7To0Rot/+9rfJ5ptvnjZk2HvvvZPLL7+8U2OE6Fe/+lXaCKGxsTEZP358csEFF6z2fcV92H///ZNRo0al+x4fc+yxxybPPfdcaZvY6GCPPfZI9y2+XmzkED311FPJkUcemQwfPjy9b6uttkpOP/30UiOE2Bjh5JNPTk488cT0PY8YMSL50pe+1KlRAgCVU4j/q3QQA4BaEtcJ2mGHHcJFF11U6V0BoBuGwwEAAP2KEAQAAPQrhsMBAAD9ikoQAADQrwhBAABAvyIEAQAA/YoQBAAA9CtCEAAA0K8IQQAAQL8iBAEAAP2KEAQAAPQrQhAAABD6k/8P5E9Ly2lurC4AAAAASUVORK5CYII=",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "total_forces.plot(\n",
+ " x=\"pseudo_step\", y=\"CL\", xlabel=\"Pseudo Step\", ylabel=\"CL\", figsize=(10, 5), style=\"orange\"\n",
+ ")\n",
+ "total_forces.plot(\n",
+ " x=\"pseudo_step\", y=\"CD\", xlabel=\"Pseudo Step\", ylabel=\"CD\", figsize=(10, 5), style=\"lightgreen\"\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "15ffff77-724d-49f3-ae9a-ea60faf663b4",
+ "metadata": {},
+ "source": [
+ "Finally, we will define a graph showcasing how CD varies alongside the X axis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "67f9c7ca-2aba-49d7-b3e0-18133d1f9a28",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1kAAAHACAYAAABQ96KRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABhK0lEQVR4nO3dB3iUVdrG8Ts9JKRQ0oBACKH33kGKItgXu4Iiit21i2vdXdtnWdvaG6Kgrr0hoqIggnTpHUIPCSWF9DLfdQ4mgtKZ5J3J/H/XNSTzZpJ5Mm9C5p5zznP8XC6XSwAAAAAAt/B3z5cBAAAAABiELAAAAABwI0IWAAAAALgRIQsAAAAA3IiQBQAAAABuRMgCAAAAADciZAEAAACAGxGyAAAAAMCNAt35xaqjsrIybdu2TREREfLz83O6HAAAAAAOcblcysnJUb169eTvf+jxKkLWEZiAlZiY6HQZAAAAADzE5s2b1aBBg0N+nJB1BGYEq/yBjIyMdLocAAAAAA7Jzs62AzDlGeFQCFlHUD5F0AQsQhYAAAAAvyMsI6LxBQAAAAC4ESELAAAAANyIkAUAAAAAbsSaLDe1ciwpKVFpaanTpQA4hICAAAUGBrIVAwAAqHSErBNUVFSk7du3Ky8vz+lSABxBWFiYEhISFBwc7HQpAACgGiNkneBGxRs2bLCvkJsNycwTN14lBzxztNm8IJKRkWF/Z5s2bXrYDQQBAABOBCHrBJgnbSZomV755hVyAJ6rRo0aCgoK0saNG+3vbmhoqNMlAQCAaoqXct2AV8QB78DvKgAAqAo84wAAAAAANyJkAQAAAIAbEbJQ6S6//HKdffbZ8iamgclnn33mMV8HAAAA3oOQ5aNOOukk3XzzzZX+OYeSlpamG2+8UcnJyQoJCbHNQ8444wz98MMP8kYPPvigOnTo8Jfjpr3/0KFDq7SL3quvvqru3burZs2aio6OVpcuXfTMM89UbDNgajXhz1zMvlF169ZVv3797G0KCwuP6f7Wrl2rUaNGqUGDBvY8Nm7cWBdddJHmzZtXSd8hAACA5yNkocqlpqaqc+fOmjp1qp544gktWbJEkydP1oABA3T99derOomPj7fho6qMGDHCBuGzzjpLP/74o3777Tfdd999+vzzzzVlypSK27Vu3doGwE2bNtnbnXfeeXr00UfVq1cv5eTkHNV9mSBlzuPq1av1yiuvaPny5fr000/VokUL3Xbbbcf9PZhNvU3XTgAAgHJlZS55FRcOKysry5xR+/bP8vPzXcuXL7dvjbKyMlduYbEjF3PfR+uyyy6z39P+lw0bNrh++uknV9euXV3BwcGu+Ph411133eUqLi4+7OeUlJS4rrjiCldSUpIrNDTU1axZM9czzzzzl/s766yzKq4PHTrUVb9+fdfevXv/UtuePXvsW/O1zX0sXLjwgI+ZYz/++KO9bt6a65MnT3Z16NDB3v+AAQNcO3bscE2aNMnVokULV0REhOuiiy5y5ebmVnydRo0auZ5++ukD7rd9+/auBx54oOK6+bqffvppxfU777zT1bRpU1eNGjVcjRs3dt17772uoqIi+7G33nrrL4+NOfbnr9OzZ0/7dfaXnp7uCgwMdE2bNs1eLygocN12222uevXqucLCwlzdunWr+H6P5IMPPrD399lnn/3lY+bnIzMz075vvk/z/f7ZihUr7Lm/5557jnhf5uu1bt3a1blzZ1dpaekhz2P5OSq/bphzWv7zY5jHKioqyvX555+7WrZs6QoICHC98sorrpCQkAM+z7jpppvsOS73888/u/r06WPPfYMGDVw33njjQX+uDvU7CwAAPFNxSanrl7UZrkcmLXed+sx017+/XOby9GywP/bJcqP84lK1uv9bR+57+b+GKCz46E7ns88+a0cf2rRpo3/9618VowfDhg2z66fGjx+vlStX6qqrrrJ7CZnpZQf7nJiYGDviYKaKffjhh6pTp45mzpypMWPGKCEhQeeff/5f7nv37t121Orhhx9WeHj4Xz5uprcdK1Pff//7X7tXmblPczGjRxMnTtTevXt1zjnn6Pnnn9ddd92l4xUREaFx48bZTafNyJt5bMyxO++8UxdccIGWLl1qv6/vv//e3j4qKuovX+OSSy7R448/rscee6xi0+oPPvjAfs2+ffva6zfccIMdEXr//fftcTMydOqpp9r7NBvoHs6ECRPUvHlzO4r1Z+b+DlbT/swIlJna+Mknn+ihhx467G3NCNmyZcvsY3ywtujHeh7NVMb/+7//0+uvv25/jszP1P3336+PP/5Yo0ePrvgZNY+X+dkx1q1bZx8bU+ubb75pNxo2j5+5vPXWW8d0/wAAwHNGrCYt3a6npqzWhp25FcdLSst0r7wHIcsHmSfbwcHBNpSY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TS1CgwKcLhcAAABegJAF7Mff308NaoWpQS2nKwEAAIC3YjEJAAAAALgRIQsAAAAA3IiQBQAAAABuRMgCAAAAADciZAEAAACAGxGyAAAAAMCNCFkAAAAA4EaELAAAAABwI0IWAAAAALgRIQsAAAAA3IiQBQAAAABuRMgCAAAAADciZAEAAACAGxGyAAAAAMCNAt35xaojl8tl32ZnZztdCgAAAAAHlWeC8oxwKISsI8jJybFvExMTnS4FAAAAgIdkhKioqEN+3M91pBjm48rKyrRt2zZFRETIz89Pvs6kdxM4N2/erMjISKfLQRXhvPsmzrvv4Zz7Js67b+K8Hx8TnUzAqlevnvz9D73yipGsIzAPXoMGDZwuw+OYX0Z+IX0P5903cd59D+fcN3HefRPn/dgdbgSrHI0vAAAAAMCNCFkAAAAA4EaELByTkJAQPfDAA/YtfAfn3Tdx3n0P59w3cd59E+e9ctH4AgAAAADciJEsAAAAAHAjQhYAAAAAuBEhCwAAAADciJAFAAAAAG5EyMJfvPDCC0pKSlJoaKi6d++uOXPmHPb2H374oVq0aGFv37ZtW02aNKnKaoUz5/21115T3759VatWLXsZPHjwEX9OUD1+38u9//778vPz09lnn13pNcLZc56Zmanrr79eCQkJtgtZs2bN+H/eB877M888o+bNm6tGjRpKTEzULbfcooKCgiqrFydu+vTpOuOMM1SvXj37//Vnn312xM/56aef1KlTJ/u7npKSonHjxlVJrdURIQsH+OCDD3Trrbfalp4LFixQ+/btNWTIEKWnpx/09jNnztRFF12k0aNHa+HChfYJl7ksXbq0ymtH1Z1385+wOe8//vijZs2aZf8An3LKKdq6dWuV146qO+/lUlNTdfvtt9ugjep9zouKinTyySfbc/7RRx9p1apV9kWW+vXrV3ntqLrzPnHiRI0dO9befsWKFXrjjTfs1/jHP/5R5bXj+OXm5tpzbQL20diwYYNOO+00DRgwQL/99ptuvvlmXXnllfr2228rvdZqybRwB8p169bNdf3111dcLy0tddWrV8/16KOPHvT2559/vuu000474Fj37t1dV199daXXCufO+5+VlJS4IiIiXG+//XYlVglPOO/mXPfq1cv1+uuvuy677DLXWWedVUXVwolz/tJLL7mSk5NdRUVFVVglnD7v5rYDBw484Nitt97q6t27d6XXisphnvJ/+umnh73NnXfe6WrduvUBxy644ALXkCFDKrm66omRLBzwiuX8+fPt1K9y/v7+9roZrTgYc3z/2xvm1bFD3R7V47z/WV5enoqLi1W7du1KrBSecN7/9a9/KTY21o5eo/qf8y+++EI9e/a00wXj4uLUpk0bPfLIIyotLa3CylHV571Xr172c8qnFK5fv95OER02bFiV1Y2qx3M69wp089eDF9u5c6f9w2n+kO7PXF+5cuVBPyctLe2gtzfHUX3P+5/dddddds73n/9zRvU67zNmzLDThsw0EvjGOTdPrqdOnapLLrnEPsleu3atrrvuOvuiiplKhup53i+++GL7eX369DEznlRSUqJrrrmG6YLV3KGe02VnZys/P9+uz8PRYyQLwAl57LHHbBOETz/91C6oRvWUk5OjESNG2PU4devWdbocVJGysjI7cvnqq6+qc+fOuuCCC3TPPffo5Zdfdro0VCKz7taMWL744ot2Ddcnn3yir7/+Wv/+97+dLg3wGoxkoYJ54hQQEKAdO3YccNxcj4+PP+jnmOPHcntUj/Ne7sknn7Qh6/vvv1e7du0quVI4ed7XrVtnmx+YTlX7PwE3AgMDbUOEJk2aVEHlqMrfddNRMCgoyH5euZYtW9pXvM00tODg4EqvG1V/3u+77z77ooppemCYzsGmicKYMWNsyDbTDVH9HOo5XWRkJKNYx4HfElQwfyzNK5U//PDDAU+izHUzJ/9gzPH9b2989913h7w9qsd5Nx5//HH7qubkyZPVpUuXKqoWTp13s03DkiVL7FTB8suZZ55Z0YXKdJhE9ftd7927t50iWB6ojdWrV9vwRcCqvufdrLP9c5AqD9r7eiigOuI5nZs53XkDnuX99993hYSEuMaNG+davny5a8yYMa7o6GhXWlqa/fiIESNcY8eOrbj9L7/84goMDHQ9+eSTrhUrVrgeeOABV1BQkGvJkiUOfheo7PP+2GOPuYKDg10fffSRa/v27RWXnJwcB78LVPZ5/zO6C1b/c75p0ybbOfSGG25wrVq1yvXVV1+5YmNjXQ899JCD3wUq+7ybv+XmvL/33nuu9evXu6ZMmeJq0qSJ7SgM72H+Ji9cuNBezFP+//znP/b9jRs32o+bc27OfTlzrsPCwlx33HGHfU73wgsvuAICAlyTJ0928LvwXoQs/MXzzz/vatiwoX0Sbdq+/vrrrxUf69+/v31itb///e9/rmbNmtnbm9afX3/9tQNVoyrPe6NGjex/2H++mD/MqN6/7/sjZPnGOZ85c6bdmsM8STft3B9++GHbyh/V97wXFxe7HnzwQRusQkNDXYmJia7rrrvOtWfPHoeqx/H48ccfD/q3uvxcm7fm3P/5czp06GB/Tszv+1tvveVQ9d7Pz/zj7tExAAAAAPBVrMkCAAAAADciZAEAAACAGxGyAAAAAMCNCFkAAAAA4EaELAAAAABwI0IWAAAAALgRIQsAAAAA3IiQBQAAAABuRMgCAOAgSktL1atXL/3tb3874HhWVpYSExN1zz33OFYbAMCz+blcLpfTRQAA4IlWr16tDh066LXXXtMll1xij40cOVKLFi3S3LlzFRwc7HSJAAAPRMgCAOAwnnvuOT344INatmyZ5syZo/POO88GrPbt2ztdGgDAQxGyAAA4DPNncuDAgQoICNCSJUt044036t5773W6LACAByNkAQBwBCtXrlTLli3Vtm1bLViwQIGBgU6XBADwYDS+AADgCN58802FhYVpw4YN2rJli9PlAAA8HCNZAAAcxsyZM9W/f39NmTJFDz30kD32/fffy8/Pz+nSAAAeipEsAAAOIS8vT5dffrmuvfZaDRgwQG+88YZtfvHyyy87XRoAwIMxkgUAwCH8/e9/16RJk2zLdjNd0HjllVd0++232yYYSUlJTpcIAPBAhCwAAA5i2rRpGjRokH766Sf16dPngI8NGTJEJSUlTBsEABwUIQsAAAAA3Ig1WQAAAADgRoQsAAAAAHAjQhYAAAAAuBEhCwAAAADciJAFAAAAAG5EyAIAAAAANyJkAQAAAIAbEbIAAAAAwI0IWQAAAADgRoQsAAAAAHAjQhYAAAAAuBEhCwAAAADkPv8PbuPOk2wTvgAAAAAASUVORK5CYII=",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "x_slicing_force_distribution.plot(\n",
+ " x=\"X\", y=\"totalCumulative_CD_Curve\", xlabel=\"X\", ylabel=\"CD\", figsize=(10, 5)\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9b346ad3-6a9d-4d49-bd94-632b4409ae84",
+ "metadata": {},
+ "source": [
+ "More information can be found on the documentation page for this case, available [here](https://docs.flexcompute.com/projects/flow360/en/latest/tutorials/Multielement_Configuration/Multielement_Configuration.html)."
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "flow360-m20sMBMn-py3.11",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.9"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/ruff.toml b/ruff.toml
new file mode 100644
index 0000000..efc7d50
--- /dev/null
+++ b/ruff.toml
@@ -0,0 +1,44 @@
+target-version = "py39"
+line-length = 100
+extend-include = ["*.ipynb"]
+
+[lint]
+typing-modules = ["flow360.component.types"]
+select = [
+ "B", # flake8-bugbear
+ "C", # flake8-comprehensions
+ "E", # pycodestyle errors
+ "F", # pyflakes
+ "I", # isort
+ "NPY201", # numpy 2.* compatibility check
+ "UP",
+ "W", # pycodestyle warnings
+]
+ignore = [
+ "B006", # allow mutable defaults for notebooks
+ "B007", # Loop control variable not used within loop body
+ "B008", # do not perform function calls in argument defaults
+ "B028", # stacklevel
+ "B904",
+ "B905", # `zip()` without an explicit `strict=` parameter
+ "C408", # Unnecessary `dict` call
+ "C417", # allow map
+ "C901", # too complex
+ "E402", # module level import not at top of file
+ "E501", # line too long (handled by formatter)
+ "E722", # we'll allow bare excepts in notebooks
+ "E731", # allow lambda assignment
+ "F401", # imported but unused (common in notebooks for exploration)
+ "NPY201", # allow numpy<2 for now
+ "UP006", # type annotation with Tuple[float] messes up pydantic
+ "UP007", # use x | y instead of union[x,y] (does not work)
+ "UP035",
+ "UP038",
+]
+
+[format]
+quote-style = "double"
+indent-style = "space"
+skip-magic-trailing-comma = false
+line-ending = "auto"
+docstring-code-format = true
diff --git a/spellcheck.py b/spellcheck.py
new file mode 100644
index 0000000..5c3ee32
--- /dev/null
+++ b/spellcheck.py
@@ -0,0 +1,158 @@
+#!/usr/bin/env python3
+
+import argparse
+import concurrent.futures
+import os
+import re
+import subprocess
+import sys
+from typing import Optional
+
+
+def get_relative_path(notebook: str) -> str:
+ """Get the relative path of the notebook from the current directory."""
+ return os.path.relpath(notebook, os.getcwd())
+
+
+def check_spelling(notebook: str) -> Optional[str]:
+ """
+ Check spelling in a notebook.
+
+ Returns:
+ A formatted Markdown string containing spelling errors for the notebook,
+ using a code block to show codespell's output, or None if no errors were found.
+ """
+ rel_path = get_relative_path(notebook)
+ error_message_block = None
+
+ try:
+ with open(notebook, encoding="utf-8") as f:
+ content = f.read()
+
+ # nbstripout to remove outputs
+ nbstripout_proc = subprocess.run(
+ ["uvx", "nbstripout"],
+ input=content,
+ capture_output=True,
+ text=True,
+ check=True,
+ )
+
+ # remove image tags with base64 data
+ stripped_content = re.sub(
+ r' ]*>| ]*/>',
+ "",
+ nbstripout_proc.stdout,
+ flags=re.DOTALL,
+ )
+
+ # remove any remaining base64 strings that might appear without proper HTML tags
+ stripped_content = re.sub(
+ r"data:image/[^;]+;base64,[A-Za-z0-9+/=]+",
+ "",
+ stripped_content,
+ flags=re.DOTALL,
+ )
+
+ codespell_proc = subprocess.run(
+ ["uvx", "codespell", "-"],
+ input=stripped_content,
+ capture_output=True,
+ text=True,
+ check=False, # codespell exits non-zero on errors, which is expected
+ )
+
+ # filter codespell's config file lines
+ output_lines = []
+ for line in codespell_proc.stdout.splitlines():
+ if line.strip().startswith("Used config files:") or re.match(
+ r"^\s+\d+:\s+\.codespellrc", line
+ ):
+ continue
+ output_lines.append(line.replace("-:", "Line ", 1))
+
+ filtered_output = "\n".join(output_lines).strip()
+
+ if filtered_output:
+ error_message_block = f"**{rel_path}**:\n```\n{filtered_output}\n```"
+
+ except FileNotFoundError:
+ error_message_block = f"**{rel_path}**: Error - File not found."
+ except subprocess.CalledProcessError as e:
+ cmd_str = " ".join(e.cmd)
+ error_message_block = (
+ f"**{rel_path}**: Error running command `{cmd_str}`:\n```\n{e.stderr}\n```"
+ )
+ except Exception as e:
+ error_message_block = f"**{rel_path}**: An unexpected error occurred:\n```\n{str(e)}\n```"
+
+ return error_message_block
+
+
+def main():
+ parser = argparse.ArgumentParser(description="Check spelling in Jupyter notebooks")
+ parser.add_argument("notebooks", nargs="+", help="List of notebook files to check")
+ args = parser.parse_args()
+
+ all_errors: list[str] = []
+ num_files_processed = 0
+ num_files_with_errors = 0
+ num_files_with_processing_errors = 0
+
+ futures = []
+ with concurrent.futures.ProcessPoolExecutor() as executor:
+ for notebook in args.notebooks:
+ futures.append(executor.submit(check_spelling, notebook))
+
+ for future in concurrent.futures.as_completed(futures):
+ num_files_processed += 1
+ try:
+ error_output = future.result()
+ if error_output:
+ all_errors.append(error_output)
+ if (
+ "Error running command" in error_output
+ or "An unexpected error occurred" in error_output
+ or "Error - File not found" in error_output
+ ):
+ num_files_with_processing_errors += 1
+ else:
+ num_files_with_errors += 1
+ except Exception as exc:
+ print(f"An unexpected error occurred processing a task: {exc}", file=sys.stderr)
+ num_files_with_processing_errors += 1
+ all_errors.append(
+ f"**Unknown File**: An unexpected error occurred during processing:\n```\n{exc}\n```"
+ )
+
+ if all_errors:
+ all_errors.sort()
+
+ print("## Spell Check Report\n")
+ print("\n\n---\n\n".join(all_errors))
+
+ summary_lines = []
+ if num_files_with_errors > 0:
+ summary_lines.append(f"Found spelling errors in {num_files_with_errors} file(s).")
+ if num_files_with_processing_errors > 0:
+ summary_lines.append(
+ f"Encountered processing errors in {num_files_with_processing_errors} file(s)."
+ )
+ if not summary_lines and all_errors:
+ summary_lines.append(f"Found issues in {len(all_errors)} file(s).")
+
+ total_notebooks_input = len(args.notebooks)
+ print(f"\n---\nChecked {total_notebooks_input} notebook(s). " + " ".join(summary_lines))
+
+ with open(os.environ["GITHUB_OUTPUT"], "a") as f:
+ print("spell_error_found=true", file=f)
+
+ sys.exit(1)
+ else:
+ total_notebooks_input = len(args.notebooks)
+ print(f"Spell check passed successfully for {total_notebooks_input} notebook(s).")
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ main()