{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Time-Accurate BET eVTOL Simulation\n",
    "\n",
    "This notebook sets up a time-accurate simulation of a **BET ([Blade Element Theory](../../../knowledge_base/Simulation/propellers_and_rotation/propellers_and_rotation.rst)) eVTOL** using the Flow360 Python API.\n",
    "\n",
    "![image](figures/bet_evtol_with_refinement_boxes.png)\n",
    "\n",
    "\n",
    "The setup demonstrates how to:\n",
    "* Load geometry from an example library.\n",
    "* Define custom geometric entities for refinement zones.\n",
    "* Set up an unsteady (time-accurate) simulation using the Spalart-Allmaras DDES turbulence model.\n",
    "* Incorporate the BETLine model to represent the propellers in a time accuraet fashion.\n",
    "\n",
    "**Note:** The settings in this example are by no means a validation setup; they are crafted to showcase the capabilities of Flow360 and we have intentionally reduced node count and example FC cost. For rigorous validation, modify the settings as needed."
   ],
   "id": "1d7aa2d1142d9ce3"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Imports and Project Setup\n",
    "\n",
    "First, we import the necessary Flow360 libraries and the specific `BETEVTOL` example module to retrieve the geometry and BET disk configuration files. We then create a new project and upload the geometry to the Flow360 cloud."
   ],
   "id": "f5067b7880533951"
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-12-12T14:36:27.993271Z",
     "start_time": "2025-12-12T14:35:10.024262Z"
    }
   },
   "source": [
    "import flow360 as fl\n",
    "from flow360.examples import BETEVTOL\n",
    "\n",
    "# Fetch all necessary files (geometry, BET disk data, etc.)\n",
    "BETEVTOL.get_files()\n",
    "\n",
    "# Create the project from the BET eVTOL example geometry\n",
    "project = fl.Project.from_geometry(BETEVTOL.geometry, name=\"Time-Accurate BET eVTOL Simulation\")\n",
    "\n",
    "# Get the geometry object for configuration\n",
    "geometry = project.geometry\n",
    "\n",
    "# Group all edges and faces by their tags for simple reference later ('*' selects all entities)\n",
    "geometry.group_edges_by_tag(\"edgeId\")\n",
    "geometry.group_faces_by_tag(\"faceId\")"
   ],
   "execution_count": 1,
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ed4167911a204774bdfc9dc04cc55c9e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">[07:35:37] </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: Geometry successfully submitted:                                                                  \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>        type        = Geometry                                                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>        name        = BET eVTOL                                                                         \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>        id          = geo-<span style=\"color: #ffff00; text-decoration-color: #ffff00\">84ea4b8a-74e3-42e9-aef4-e27bdfbee250</span>                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>        status      = uploaded                                                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>        project id  = prj-<span style=\"color: #ffff00; text-decoration-color: #ffff00\">f913bbc9-e28f-4792-a936-67d84cb58450</span>                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>                                                                                                        \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m[07:35:37]\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        = BET eVTOL                                                                         \n",
       "\u001b[2;36m           \u001b[0m        id          = geo-\u001b[93m84ea4b8a-74e3-42e9-aef4-e27bdfbee250\u001b[0m                                          \n",
       "\u001b[2;36m           \u001b[0m        status      = uploaded                                                                          \n",
       "\u001b[2;36m           \u001b[0m        project id  = prj-\u001b[93mf913bbc9-e28f-4792-a936-67d84cb58450\u001b[0m                                          \n",
       "\u001b[2;36m           \u001b[0m                                                                                                        \n"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: Waiting for geometry to be processed.                                                             \n",
       "</pre>\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": "e9ca4c4e5e0a4dbcb681393dc2a67a93",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">[07:36:27] </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: Regrouping face entities under `faceId` tag <span style=\"font-weight: bold\">(</span>previous `faceName`<span style=\"font-weight: bold\">)</span>.                                \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m[07:36:27]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: Regrouping face entities under `faceId` tag \u001b[1m(\u001b[0mprevious `faceName`\u001b[1m)\u001b[0m.                                \n"
      ]
     },
     "metadata": {}
    }
   ],
   "id": "e53b06d51b6d0007"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "--- \n",
    "## 2. Define Refinement Entities and Slice Outputs\n",
    "\n",
    "We define the geometric entities that will be used to control the mesh refinement around the eVTOL body and the BET propellers. We also define cross-sectional slices for flow visualization post-processing. All entities are defined within the `SI_unit_system` context for consistency."
   ],
   "id": "1d369a27dc6e2425"
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-12-12T14:36:28.253480Z",
     "start_time": "2025-12-12T14:36:28.050512Z"
    }
   },
   "source": [
    "with fl.SI_unit_system:\n",
    "    # Define two nested boxes for uniform volumetric refinement around the body\n",
    "    box1 = fl.Box(name=\"Box 1\", center=[2, 0, 0.5], size=[12, 16, 4])\n",
    "    box2 = fl.Box(name=\"Box 2\", center=[8, 0, 0.5], size=[24, 32, 8])\n",
    "\n",
    "    # Define eight cylindrical zones for axisymmetric refinement around the BET propellers\n",
    "    cylinder1 = fl.Cylinder(\n",
    "        name=\"BET 1\",\n",
    "        center=[-1.95, -6, 0.57],\n",
    "        axis=[-1, 0, 0],\n",
    "        outer_radius=1.5,\n",
    "        height=0.2,\n",
    "    )\n",
    "    cylinder2 = fl.Cylinder(\n",
    "        name=\"BET 2\",\n",
    "        center=[-1.95, -2.65, 0.51],\n",
    "        axis=[-1, 0, 0],\n",
    "        outer_radius=1.5,\n",
    "        height=0.2,\n",
    "    )\n",
    "    cylinder3 = fl.Cylinder(\n",
    "        name=\"BET 3\",\n",
    "        center=[-1.95, 2.65, 0.51],\n",
    "        axis=[-1, 0, 0],\n",
    "        outer_radius=1.5,\n",
    "        height=0.2,\n",
    "    )\n",
    "    cylinder4 = fl.Cylinder(\n",
    "        name=\"BET 4\",\n",
    "        center=[-1.95, 6, 0.57],\n",
    "        axis=[-1, 0, 0],\n",
    "        outer_radius=1.5,\n",
    "        height=0.2,\n",
    "    )\n",
    "    cylinder5 = fl.Cylinder(\n",
    "        name=\"BET 5\",\n",
    "        center=[2.7, -6, 1.06],\n",
    "        axis=[0, 0, 1],\n",
    "        outer_radius=1.5,\n",
    "        height=0.2,\n",
    "    )\n",
    "    cylinder6 = fl.Cylinder(\n",
    "        name=\"BET 6\",\n",
    "        center=[2.7, -2.65, 1.06],\n",
    "        axis=[0, 0, 1],\n",
    "        outer_radius=1.5,\n",
    "        height=0.2,\n",
    "    )\n",
    "    cylinder7 = fl.Cylinder(\n",
    "        name=\"BET 7\",\n",
    "        center=[2.7, 2.65, 1.06],\n",
    "        axis=[0, 0, 1],\n",
    "        outer_radius=1.5,\n",
    "        height=0.2,\n",
    "    )\n",
    "    cylinder8 = fl.Cylinder(\n",
    "        name=\"BET 8\",\n",
    "        center=[2.7, 6, 1.06],\n",
    "        axis=[0, 0, 1],\n",
    "        outer_radius=1.5,\n",
    "        height=0.2,\n",
    "    )\n",
    "\n",
    "    # Define slices for flow field output along the BET locations\n",
    "    slices = [\n",
    "        fl.Slice(name=f\"Slice BET {i+1}\", normal=[0, 1, 0], origin=[0, originY, 0])\n",
    "        for i, originY in enumerate([-6, -2.65, 2.65, 6])\n",
    "    ]\n",
    "\n",
    "    # Define the automated farfield boundary\n",
    "    farfield = fl.AutomatedFarfield(name=\"Farfield\")"
   ],
   "execution_count": 2,
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">[07:36:28] </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: using: SI unit system for unit inference.                                                         \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m[07:36:28]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: using: SI unit system for unit inference.                                                         \n"
      ]
     },
     "metadata": {}
    }
   ],
   "id": "90700eb579157d03"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "--- \n",
    "## 3. Configure Meshing Parameters\n",
    "\n",
    "We specify the details for the mesh generation, including boundary layer settings and the application of the previously defined refinement entities."
   ],
   "id": "8bd8af86c822c7f4"
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-12-12T14:36:28.500394Z",
     "start_time": "2025-12-12T14:36:28.481030Z"
    }
   },
   "source": [
    "with fl.SI_unit_system:\n",
    "    meshing_params = fl.MeshingParams(\n",
    "        defaults=fl.MeshingDefaults(\n",
    "            # Global surface meshing and boundary layer thickness\n",
    "            surface_max_edge_length=0.05,\n",
    "            boundary_layer_first_layer_thickness=0.01 * fl.u.mm,\n",
    "        ),\n",
    "        volume_zones=[farfield],  # Use the automated farfield boundary\n",
    "        refinements=[\n",
    "            # Axisymmetric refinement for the BET zones\n",
    "            fl.AxisymmetricRefinement(\n",
    "                name=\"BET refinement\",\n",
    "                spacing_axial=0.01,\n",
    "                spacing_radial=0.03,\n",
    "                spacing_circumferential=0.03,\n",
    "                entities=[\n",
    "                    cylinder1,\n",
    "                    cylinder2,\n",
    "                    cylinder3,\n",
    "                    cylinder4,\n",
    "                    cylinder5,\n",
    "                    cylinder6,\n",
    "                    cylinder7,\n",
    "                    cylinder8,\n",
    "                ],\n",
    "            ),\n",
    "            # Uniform refinements for the inner (Box 1) and outer (Box 2) regions\n",
    "            fl.UniformRefinement(name=\"Uniform refinement 0.05\", spacing=0.05, entities=box1),\n",
    "            fl.UniformRefinement(name=\"Uniform refinement 0.1\", spacing=0.1, entities=box2),\n",
    "        ],\n",
    "    )"
   ],
   "execution_count": 3,
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: using: SI unit system for unit inference.                                                         \n",
       "</pre>\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": {}
    }
   ],
   "id": "ce7a71a9eafe6217"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "--- \n",
    "## 4. Define Boundary Conditions and Physics Models\n",
    "\n",
    "We define the reference geometry, flight conditions, and the physics models for the simulation. This includes the turbulence model (Spalart-Allmaras DDES) and the four BETDisk models to replicate the propellers. Note that since we are doing a time accurate simulation, they are now called BETLine."
   ],
   "id": "a46ee280c49c3637"
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-12-12T14:36:28.762174Z",
     "start_time": "2025-12-12T14:36:28.517584Z"
    }
   },
   "source": [
    "with fl.SI_unit_system:\n",
    "    # Reference properties for force and moment coefficients\n",
    "    ref_geo = fl.ReferenceGeometry(\n",
    "        area=16.8, moment_center=[0, 0, 0], moment_length=[1.4, 1.4, 1.4]\n",
    "    )\n",
    "\n",
    "    # Operating flight condition: 70 m/s at 15 degrees angle of attack\n",
    "    op_cond = fl.AerospaceCondition(velocity_magnitude=70, alpha=15 * fl.u.deg)\n",
    "\n",
    "    # Fluid model with DDES turbulence closure for unsteady accuracy\n",
    "    fluid_model = fl.Fluid(\n",
    "        navier_stokes_solver=fl.NavierStokesSolver(relative_tolerance=0.01),\n",
    "        turbulence_model_solver=fl.SpalartAllmaras(\n",
    "            relative_tolerance=0.01,\n",
    "            rotation_correction=True,\n",
    "            hybrid_model=fl.DetachedEddySimulation(),  # DDES for accurate flow separation\n",
    "        ),\n",
    "    )\n",
    "\n",
    "    # Define physics models including\n",
    "    models_list = [\n",
    "        fl.Wall(name=\"Wall\", surfaces=[geometry[\"*\"]]),\n",
    "        fl.Freestream(name=\"Freestream\", surfaces=[farfield.farfield]),\n",
    "        fluid_model,\n",
    "    ]"
   ],
   "execution_count": 4,
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: using: SI unit system for unit inference.                                                         \n",
       "</pre>\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": {}
    }
   ],
   "id": "fcdb738080b786f7"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Add the BET disks to the models list\n",
    "\n",
    "the `BETDisk` class has a wide variety of ways of giving the code the propeller information (twist and chord distributions, airfoil data, operating conditions, etc) it needs. For more information on the `BETDisk` class please see the [Volume Models](../../API_reference/volume_models/volume_model_index.rst) documentation.\n",
    "For more information on the BET model in Flow360 please see the [BET documentation](../../../knowledge_base/Simulation/propellers_and_rotation/propellers_and_rotation.rst).\n",
    "\n",
    "In this example we use the `from_file` method to load all of the necessary information from the example files provided in the `BETEVTOL` module.\n",
    "\n",
    "The BETEVTOL class contains the URLs to download the geometry and the BET disk files. Our example EVTOL has 8 propellers grouped in symmetrical pairs: 1&3, 2&4, 5&7, and 6&8. Each pair uses the same BET disk file, so we only need to load 4 unique BET disks definitions.\n",
    "\n",
    "The BETEVTOL.extra[\"diskXY\"] calls are simply accessing the files for the diskXY example files stored in the `BETEVTOL` class.\n",
    "\n",
    "This could also be done by providing the file paths directly to the `from_file` method if the files were stored locally.\n",
    "\n",
    "So here we load the four unique BET disks from the example files and append them to the `models_list` created above.\n",
    "\n"
   ],
   "id": "c607181e5f862d5c"
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-12-12T14:36:28.967883Z",
     "start_time": "2025-12-12T14:36:28.783745Z"
    }
   },
   "source": [
    "# Append The four BET disks loaded from the example files to the models_list\n",
    "models_list.append(fl.BETDisk.from_file(BETEVTOL.extra[\"disk13\"]))\n",
    "models_list.append(fl.BETDisk.from_file(BETEVTOL.extra[\"disk24\"]))\n",
    "models_list.append(fl.BETDisk.from_file(BETEVTOL.extra[\"disk57\"]))\n",
    "models_list.append(fl.BETDisk.from_file(BETEVTOL.extra[\"disk68\"]))"
   ],
   "execution_count": 5,
   "outputs": [],
   "id": "4683a1e3d342e6f6"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "--- \n",
    "## 5. Configure Time Stepping and Outputs\n",
    "\n",
    "Since this is a time-accurate simulation, we specify the `Unsteady` time-stepping settings, including the time step size and the adaptive CFL number control. We also define the desired output fields for surfaces and slices."
   ],
   "id": "b2a595f12abd9243"
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-12-12T14:36:29.011587Z",
     "start_time": "2025-12-12T14:36:29.001741Z"
    }
   },
   "source": [
    "with fl.SI_unit_system:\n",
    "    # Unsteady time marching parameters\n",
    "    time_model = fl.Unsteady(\n",
    "        steps=1000,\n",
    "        step_size=0.0004,\n",
    "        max_pseudo_steps=30,  # Max inner iterations per physical time step\n",
    "        CFL=fl.AdaptiveCFL(\n",
    "            min=1, max=3000, max_relative_change=50, convergence_limiting_factor=0.1\n",
    "        ),\n",
    "    )\n",
    "\n",
    "    # Define desired output fields\n",
    "    outputs_list = [\n",
    "        fl.SurfaceOutput(\n",
    "            name=\"Surface output\",\n",
    "            output_fields=[\n",
    "                \"Cp\",\n",
    "                \"yPlus\",\n",
    "                \"Cf\",\n",
    "                \"CfVec\",\n",
    "            ],  # Pressure, wall spacing, skin friction\n",
    "            surfaces=[geometry[\"*\"]],\n",
    "        ),\n",
    "        fl.SliceOutput(\n",
    "            name=\"Slice output\",\n",
    "            output_fields=[\"Cp\", \"Mach\", \"vorticity\"],\n",
    "            slices=[*slices],  # Uses the slices defined in section 2\n",
    "        ),\n",
    "    ]"
   ],
   "execution_count": 6,
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">[07:36:29] </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: using: SI unit system for unit inference.                                                         \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m[07:36:29]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: using: SI unit system for unit inference.                                                         \n"
      ]
     },
     "metadata": {}
    }
   ],
   "id": "a5c3c6523798da19"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "--- \n",
    "## 6. Construct Final Simulation Parameters\n",
    "\n",
    "The sub-components defined in the previous steps are combined into the single final `SimulationParams` object, which holds all the configuration data."
   ],
   "id": "74a894035cd2131e"
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-12-12T14:36:29.101291Z",
     "start_time": "2025-12-12T14:36:29.067801Z"
    }
   },
   "source": [
    "with fl.SI_unit_system:\n",
    "    params = fl.SimulationParams(\n",
    "        meshing=meshing_params,\n",
    "        reference_geometry=ref_geo,\n",
    "        operating_condition=op_cond,\n",
    "        models=models_list,\n",
    "        time_stepping=time_model,\n",
    "        outputs=outputs_list,\n",
    "    )"
   ],
   "execution_count": 7,
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: using: SI unit system for unit inference.                                                         \n",
       "</pre>\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": {}
    }
   ],
   "id": "86195ef61dfe9f6a"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "--- \n",
    "## 7. Run the Case\n",
    "\n",
    "Submit the case to the Flow360 cloud using the defined parameters. The solver will now proceed with meshing and then the time-accurate fluid simulation."
   ],
   "id": "80de562ed30870c6"
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-12-12T14:36:32.151386Z",
     "start_time": "2025-12-12T14:36:29.209606Z"
    }
   },
   "source": [
    "case = project.run_case(params, name=\"Time-accurate DDES with BET\")"
   ],
   "execution_count": 8,
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: using: SI unit system for unit inference.                                                         \n",
       "</pre>\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": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">[07:36:31] </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: Successfully submitted:                                                                           \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>        type        = Case                                                                              \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>        name        = BET eVTOL case                                                                    \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>        id          = case-<span style=\"color: #ffff00; text-decoration-color: #ffff00\">62f2cfff-cd08-462a-bc26-37ba64b7ecc7</span>                                         \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>        status      = pending                                                                           \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>        project id  = prj-<span style=\"color: #ffff00; text-decoration-color: #ffff00\">f913bbc9-e28f-4792-a936-67d84cb58450</span>                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>                                                                                                        \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m[07:36:31]\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        = BET eVTOL case                                                                    \n",
       "\u001b[2;36m           \u001b[0m        id          = case-\u001b[93m62f2cfff-cd08-462a-bc26-37ba64b7ecc7\u001b[0m                                         \n",
       "\u001b[2;36m           \u001b[0m        status      = pending                                                                           \n",
       "\u001b[2;36m           \u001b[0m        project id  = prj-\u001b[93mf913bbc9-e28f-4792-a936-67d84cb58450\u001b[0m                                          \n",
       "\u001b[2;36m           \u001b[0m                                                                                                        \n"
      ]
     },
     "metadata": {}
    }
   ],
   "id": "6d595c1b3e449b24"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "While we wait for the case to finish, we invite you to monitor the case in the Flow360 GUI. Once finished, you can easily post-process the results after completion.\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ],
   "id": "62f39ee66ea4fc2a"
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-12-12T15:29:08.749768Z",
     "start_time": "2025-12-12T14:36:32.277384Z"
    }
   },
   "source": [
    "# wait until the case finishes execution\n",
    "case.wait()\n",
    "\n",
    "results = case.results\n",
    "\n",
    "# total forces contain the CL and CD history\n",
    "total_forces = case.results.total_forces.as_dataframe()\n",
    "ax = total_forces.plot(\"physical_step\", [\"CL\", \"CD\"], ylim=(0, 2))\n",
    "ax.grid(True)"
   ],
   "execution_count": 9,
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "84856cb545864982af51941f45332aa1",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "494c5395dd644178945a3fa775b3d7e4",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">[08:29:08] </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: Saved to C:\\Users\\user\\AppData\\Local\\Temp\\tmp4klip3t7\\<span style=\"color: #ffff00; text-decoration-color: #ffff00\">b0b3926f-4e92-4d46-a47b-c12642e68009</span>.csv   \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m[08:29:08]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: Saved to C:\\Users\\user\\AppData\\Local\\Temp\\tmp4klip3t7\\\u001b[93mb0b3926f-4e92-4d46-a47b-c12642e68009\u001b[0m.csv   \n"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "image/png": "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njChRGcItWnTxrnO+PHjTei555575OzZs9K7d2+zTT3QXKBp15MecyZ3FxR8i3r2H+raP6hn/6Cey089B9kKM5cIAAAggDiXEAAAsDwCCwAAsDwCCwAAsDwCCwAAsDwCyyXMmDFD4uPjzYwlPb/R+vXrA12kUkOntl9++eVSqVIlqVWrlpmmvmvXLrd19IzcY8aMMUcprlixovzhD3/Ic6BBnXmmU+L1JJu6HT2RZmZmpp9fTenx4osvOg8X4EA9+87hw4flT3/6k6nLqKgoadu2rTlUg4POY9BZlHogTH1cz5O2e/dut23okblvu+02cwAuPeilns0+OTk5AK/GmvQUMHp4Cz3MhdZhkyZNzIlzXeeIUM/eW7lypVx33XXmsCH6HZH7BMO+qtOtW7fKFVdcYfabenTcl156SXxCZwnBs7lz59rCw8Nts2fPtm3fvt02evRoW5UqVWzHjx8PdNFKhQEDBtjee+8927Zt22xbtmyxDR482NagQQNbcnKyc517773XFhcXZ1u2bJltw4YNtu7du9t69uzpfDwzM9PWpk0bW79+/WybN2+2LVy40FajRg3bhAkTAvSqrG39+vW2+Ph4W7t27WwPPvig837q2TdOnz5ta9iwoe2OO+6wrVu3zvbrr7/aFi9ebNuzZ49znRdffNFWuXJl24IFC2w//vij7fe//72tUaNGtvPnzzvXGThwoK19+/a2tWvX2v773//amjZtahs+fHiAXpX1PP/887bq1avbvv76a9u+ffts8+fPt1WsWNH2+uuvO9ehnr2nf9d/+9vfbF988YUmP9uXX37p9rgv6jQxMdFWu3Zt22233Wa++z/55BNbVFSU7Z///KetuAgsBejatattzJgxzttZWVm2unXr2qZMmRLQcpVWJ06cMH8kK1asMLfPnj1rCwsLM19GDjt27DDrrFmzxvkHFhwcbDt27JhznZkzZ9piYmJsaWlpAXgV1nXu3Dlbs2bNbEuXLrVdddVVzsBCPfvOY489Zuvdu3e+j2dnZ9tiY2NtL7/8svM+rf+IiAjzxa1+/vlnU/c//PCDc51vv/3WFhQUZDt8+HAJv4LSYciQIbY777zT7b4bb7zR7AQV9Vx8uQOLr+r0zTfftFWtWtXte0P/bpo3b17sMtMllI/09HTZuHGjaRJz0APi6e01a9YEtGylVWJiormsVq2audT61VOWu9ZxixYtpEGDBs461kttcnc9m/eAAQPM6Ru2b9/u99dgZdrlo106rvWpqGff+b//+z9zlO+bb77ZdJt17NhR3n77befj+/btMwfUdK1rPU+Kdie71rU2pet2HHR9/X7RU5LAfsBRPV3LL7/8Ym7/+OOPsmrVKhk0aJC5TT37nq/qVNe58sorzal8XL9LdDjAmTNnilXGUnm2Zn84efKk6Ud1/QJXenvnzp0BK1dppeec0jEVvXr1ch7lWP849EOd+8SVWsf6mGMdT++B4zHY6SkvNm3aJD/88EOex6hn3/n1119l5syZ5hQleuRure8HHnjA1K+essRRV57q0rWuNey4Cg0NNUGeurZ7/PHHTVjWYK0n3NXv4ueff96MnVDUs+/5qk71Usce5d6G47GqVasWuYwEFvjt1/+2bdvMryT4lp7uXc/ZpScVtcLpLMp68NZfly+88IK5rS0s+rmeNWuWCSzwjU8//VQ+/vhjc1qX1q1by5YtW8wPHh0sSj2XX3QJ5aNGjRom2eeeSaG39ezSKLyxY8fK119/Ld9//73Ur1/feb/Wo3a96fmj8qtjvfT0Hjgeg73L58SJE9KpUyfza0eXFStWyPTp0811/XVDPfuGzp5o1aqV230tW7Y0M6xc66qg7w291PfLlc7G0tkX1LWdzlDTVpZbb73VdFXefvvt8te//tV5Ul3q2fd8Vacl+V1CYMmHNvF27tzZ9KO6/rrS2z169Aho2UoLHdelYeXLL7+U7777Lk8zodZvWFiYWx1rP6d++TvqWC9/+ukntz8SbUnQKXW5dxzl1TXXXGPqSH+FOhZtBdDmc8d16tk3tEsz99R8HWfRsGFDc10/4/ql7FrX2rWh/fuuda3hUYOmg/596PeLjheASGpqqttJdJX+gNQ6UtSz7/mqTnUdnT6t4+Zcv0uaN29erO4go9jDdsv4tGYdIf3++++b0dH33HOPmdbsOpMC+bvvvvvMFLnly5fbjh496lxSU1PdptvqVOfvvvvOTLft0aOHWXJPt7322mvN1OhFixbZatasyXTbS3CdJaSoZ99NGw8NDTXTbnfv3m37+OOPbdHR0bZ//etfblND9Xviq6++sm3dutU2dOhQj1NDO3bsaKZGr1q1yszuKs/TbXMbOXKkrV69es5pzToNV6fZjx8/3rkO9Vy0mYR62AJddPc/bdo0c/23337zWZ3qzCKd1nz77bebac26H9W/EaY1+8Ebb7xhvuj1eCw6zVnnnqNw9A/C06LHZnHQP4T777/fTIPTD/UNN9xgQo2r/fv32wYNGmTm8uuX1sMPP2zLyMgIwCsqvYGFevadf//73ybc6Y+ZFi1a2N566y23x3V66FNPPWW+tHWda665xrZr1y63dU6dOmW+5PXYIjp1fNSoUWZnArukpCTz+dXv3sjISFvjxo3N8UNcp8pSz977/vvvPX4na0D0ZZ3qMVx0+r9uQ4OnBiFfCNJ/itdGAwAAULIYwwIAACyPwAIAACyPwAIAACyPwAIAACyPwAIAACyPwAIAACyPwAIAACyPwAIAACyPwALATXx8vLz22msltv0+ffqYM+/6yh133CHXX3+9z7YHwJpCA10AAOXLF198YU7GaDUafPTEbgsWLAh0UQB4QGAB4FfVqlULdBEAlEJ0CQHljHbJjB071iyVK1eWGjVqyFNPPaUnQnWuk5qaKnfeeadUqlRJGjRoIG+99Zbzsauvvto811VCQoKEh4c7T03/5ptvSrNmzSQyMlJq164tN910U75dQmlpafLYY49JXFycRERESNOmTeXdd981j2VlZcldd90ljRo1kqioKHOK+tdff73Ir/2zzz6Ttm3bmm1Vr15d+vXrJykpKfLMM8/IBx98IF999ZUEBQWZZfny5eY5Bw8elFtuuUWqVKliwtbQoUNl//79ebqkJk2aJDVr1pSYmBi59957JT09vcjlBJAXgQUoh3TnHBoaKuvXrzcBYNq0afLOO+84H586dap06dJFNm/eLPfff7/cd999smvXLvPY3XffLXPmzDFBw+Ff//qX1KtXz4SZDRs2yAMPPCDPPvusec6iRYvkyiuvzLcsI0aMkE8++USmT58uO3bskH/+859SsWJF81h2drbUr19f5s+fLz///LNMnDhRnnjiCfn000+9fs1Hjx6V4cOHmyCm/48GkhtvvNEEtUceecSEkoEDB5r1dOnZs6dkZGTIgAEDTHD773//K//73/9M2XQ910CiQc2xTX0t2u2lAQaAD/nknM8ASo2rrrrK1rJlS3MqeYfHHnvM3KcaNmxo+9Of/uR8TNerVauWbebMmeb2+fPnbVWrVrXNmzfPuU67du1szzzzjLn++eefm9POJyUl5fv/P/jgg+a6nrpev4aWLl1a6PKPGTPG9oc//MF5e+TIkbahQ4de8nkbN240/9f+/fs9Pu5pOx999JGtefPmbnWVlpZmi4qKsi1evNj5vGrVqtlSUlKc62hdVaxY0ZaVlVXo1wWgYLSwAOVQ9+7dTbeHQ48ePWT37t2mC0a1a9fO+ZiuFxsbKydOnDC3tZvn9ttvl9mzZ5vbmzZtkm3btpmuEdW/f39p2LChNG7c2Kz38ccfmy4mT7Zs2SIhISFy1VVX5VvWGTNmSOfOnU13i7ZuaPfUgQMHvH7N7du3l2uuucZ0Cd18883y9ttvy5kzZwp8zo8//ih79uwxLSz6f+ui3UIXLlyQvXv3um07OjrarT6Tk5NNdxIA3yCwAMgj9yweDS3aPeOg3UJLly6VQ4cOyXvvvWe6gjSkKN25a4jRrpE6deqYbhzdoesMnNx0LElB5s6da7prdBzLkiVLTMAZNWpUkcaHaDDSMn/77bfSqlUreeONN8yYmH379uX7HA0dGpb0/3VdfvnlF/njH//odRkAFB2BBSiH1q1b53Z77dq1ZpCs7tQLQ1spdIyLtlLoeBYdF+JKx8fogNaXXnpJtm7dagapfvfddx63o0FoxYoVHv8fHTOiY0l0HE3Hjh3NgFzXlg1vafDq1auXGV+i43N0oPCXX35pHtPrjhYmh06dOpmWp1q1apn/23XRAcuuLTHnz593q09tjdGBxAB8g8AClEPapTJu3DgzKFZbQrS14cEHH/RqG9rK8uKLL5pBqzfccIPz/q+//toMoNWWiN9++00+/PBDE0q0NcPTQepGjhxpAo8e/0RbO3TgqmNQrYYoHcS7ePFi06qhs5l++OGHIoe0F154wWxPX78OjNXZTS1btnSWRcOV1snJkyfNgNvbbrvNzKLSmUE66NZRPh1UrK1LDtrio61AOjB44cKF8vTTT5uZVMHBfMUCvsJfE1AO6cwcbRHo2rWrjBkzxoSVe+65x6tt6IwbbUnRSx3X4qDTfzUMaDeRhoFZs2aZUNS6dWuP25k5c6aZ9qytKC1atJDRo0ebqcbqz3/+s5nJM2zYMOnWrZucOnXKrFcUOt145cqVMnjwYLnsssvkySefNLOhBg0aZB7X/1dDlbYc6XgZbd3RcSn6HJ3areXQ16PBRMew6PYcdGyMhiudDaVl/f3vf2+mSgPwnSAdeevD7QGwOD0OSocOHYp9+H3t5mnSpIlp8dCuk/KKI+QC/sGRbgF4RbtKtKVDWyh0tlF5DisA/IcuIQBe0a4Snf2jLSva3WMVOi7FMfXY01KUqdAArIMuIQBlQmZmptsh83PTQbU65gZA6URgAQAAlkeXEAAAsDwCCwAAsDwCCwAAsDwCCwAAsDwCCwAAsDwCCwAAsDwCCwAAEKv7f8NbSSBHIk+lAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {}
    }
   ],
   "id": "2accb452df00422f"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can also look at the results in the Flow360 GUI.\n",
    "\n",
    "![GUI_image](figures/bet_evtol_surface_view.png)"
   ],
   "id": "581217daa35c2b6c"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "flow360",
   "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.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}