{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DARPA SUBOFF Actuator Disk\n",
    "\n",
    "This notebook demonstrates the setup of an actuator disk in Flow360 using the DARPA SUBOFF geometry, configured for liquid operating conditions. The actuator disk is positioned at the aft end of the hull.\n",
    "\n",
    "![DARPA SUBOFF geometry](figures/darpa_geo.png)\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": "33751567"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Create Project from geometry\n",
    "Load Python libraries that are used throughout the notebook and Flow360 client.\n",
    "For this project we are starting from the geometry of the DARPA SUBOOF model. The geometry file is in the class `DARPA_SUBOFF` as a download link which gets the STEP file \"DARPA.STEP\". To use your own geometry, replace the file path in `from_geometry` with the path to your CAD file."
   ],
   "id": "0608628e"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "import flow360 as fl\n",
    "from flow360.examples import DARPA_SUBOFF\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from scipy.integrate import trapezoid\n",
    "\n",
    "DARPA_SUBOFF.get_files()\n",
    "project = fl.Project.from_geometry(\n",
    "    DARPA_SUBOFF.geometry,\n",
    "    name=\"Tutorial DARPA Actuator Disk from Python\",\n",
    ")\n",
    "geo = project.geometry\n",
    "geo.group_faces_by_tag(\"faceId\")  # group faces by faceId"
   ],
   "execution_count": 1,
   "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\">[20:16:16] </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: The file <span style=\"font-weight: bold\">(</span>DARPA.STEP<span style=\"font-weight: bold\">)</span> is being downloaded, please wait.                                           \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m[20:16:16]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: The file \u001b[1m(\u001b[0mDARPA.STEP\u001b[1m)\u001b[0m is being downloaded, please wait.                                           \n"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f37c2987b5494b17934d742cbf0e22b7",
       "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\">[20:16:33] </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        = Tutorial DARPA Actuator Disk from Python                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>        id          = geo-<span style=\"color: #ffff00; text-decoration-color: #ffff00\">feb73017-72fb-40e7-a974-c0509ab8f39a</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\">fa790634-10b7-40ca-a6a9-fdb62f9556fc</span>                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>                                                                                                        \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m[20:16:33]\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 DARPA Actuator Disk from Python                                          \n",
       "\u001b[2;36m           \u001b[0m        id          = geo-\u001b[93mfeb73017-72fb-40e7-a974-c0509ab8f39a\u001b[0m                                          \n",
       "\u001b[2;36m           \u001b[0m        status      = uploaded                                                                          \n",
       "\u001b[2;36m           \u001b[0m        project id  = prj-\u001b[93mfa790634-10b7-40ca-a6a9-fdb62f9556fc\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": "f73f6f36648e456ba0a1ca178d0ef835",
       "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\">[20:17:03] </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: Regrouping face entities under `faceId` tag <span style=\"font-weight: bold\">(</span>previous `groupByBodyId`<span style=\"font-weight: bold\">)</span>.                           \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m[20:17:03]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: Regrouping face entities under `faceId` tag \u001b[1m(\u001b[0mprevious `groupByBodyId`\u001b[1m)\u001b[0m.                           \n"
      ]
     },
     "metadata": {}
    }
   ],
   "id": "881341eb"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Define Actuator Disk\n",
    "To define the actuator disk these steps are required:\n",
    "- Find force distribution along the radius of the actuator disk.\n",
    "- Define a volume zone where the actuator disk where the volumetric forces are applied inside the solver iterations. This zone can intersect any surface and only the nodes in the fluid zone will be affected. If an inner surface is present (like in this case), it is recommended to place the inner radius of the actuator disk volume to intersect with the surface. This is to prevent a hub vortex to appear close to the surface due to jump in pressure forces at the hub, creating circulating regions not realistic.\n",
    "- Define an axisymmetric refinement inside the actuator disk region to properly capture the volumetric forces discontinuities. This refinement cannot intersect any surface.\n",
    "\n",
    "Optionally:\n",
    "- Add volumetric refinements around the actuator disk for proper wake capturing.\n",
    "- Add surface refinements close to the actuator disk inner radius."
   ],
   "id": "a0934750"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1 Find force distributions\n",
    "The axial and circumferential force distributions are the external pressure forces that are applied to each control volume over the actuator disk radius. The input for the actuator disk is a pressure distribution. Axial distribution will act on the axial momentum creating a downwash and circumferential distribution will act perpendicular to the axial direction by adding a swirl velocity on the wake. These distributions can be found from two sources:\n",
    "- Radial thrust and torque distributions provided from manufacturer or measured experimentally. For this cases, we need to convert the thrust and torque distributions to pressure distributions.\n",
    "- Approximated distributions based from total thrust and torque. These approximations range from simple uniform distributions to more advanced analytical formulations based on vortex theory.\n",
    "\n",
    "First, we define the geometry of the rotor and operating conditions:"
   ],
   "id": "f8f9e33b"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "# Define geometry\n",
    "R_out = 0.3  # Outer radius of the actuator disk\n",
    "R_hub = 0.0597 / 2  # Blade root radius\n",
    "R_in = (\n",
    "    R_hub * 0.98\n",
    ")  # Inner radius of the actuator disk, smaller than the blade root radius to prevent hub vortex affecting the surface flow\n",
    "NBlades = 5  # Number of blades\n",
    "\n",
    "# Define operating conditions\n",
    "thrust = 2000  # Thrust force\n",
    "torque = 100  # Torque force\n",
    "omega = 100 * 2 * np.pi / 60  # Rotation rate\n",
    "rho = 1000  # Density\n",
    "Uinf = 5  # Freestream velocity"
   ],
   "execution_count": 2,
   "outputs": [],
   "id": "df82e275"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If thrust and torque radial distributions are given:**\n",
    "\n",
    "We would read the data from a dataset and convert the force distribution to pressure distribution. However, for this example, we assume a triangular distribution with a maximum value at 70% radial location for both of them. We follow this method:"
   ],
   "id": "e4872ec2"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "# Read or input the thrust and torque radial distributions\n",
    "r_from_data = [R_in, R_out * 0.7, R_out]\n",
    "thrust_max = (2 * thrust) / (R_out - R_in)\n",
    "torque_max = (2 * torque) / (R_out - R_in)\n",
    "thrust_radial = [0, thrust_max, 0]  # Triangular distribution\n",
    "torque_radial = [0, torque_max, 0]  # Triangular distribution\n",
    "\n",
    "# Convert to pressure force distributions\n",
    "r_from_data = np.array(r_from_data)\n",
    "thrust_radial_from_data = np.array(thrust_radial)\n",
    "torque_radial_from_data = np.array(torque_radial)\n",
    "f_ax_from_data = thrust_radial_from_data / (2 * np.pi * r_from_data)\n",
    "f_cir_from_data = torque_radial_from_data / (2 * np.pi * r_from_data**2)"
   ],
   "execution_count": 3,
   "outputs": [],
   "id": "559fd770"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If thrust and torque radial distributions are not given:**\n",
    "\n",
    "We can approximate with a realistic distribution from the Betz-Prandtl vortex theory described [here](https://simcloud-public-1.s3.amazonaws.com/publications/Electra_Joint_Paper/Electra_FC_Impact_of_Propulsion_Modeling_Approach_on_High_Lift_Force_Prediction_of_Propeller_Blown_Wings.pdf)."
   ],
   "id": "7a3c6632"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "# Radial discretization\n",
    "n_points = 200\n",
    "r_theory = np.linspace(R_in, R_out, n_points)\n",
    "xi = r_theory / R_out\n",
    "\n",
    "# Step 1: Compute axial velocity through disk\n",
    "v_ax = 0.5 * (np.sqrt((2 * thrust) / (rho * np.pi * R_out**2) + Uinf**2) + Uinf)\n",
    "\n",
    "# Step 2: Wake advance ratio\n",
    "lambda_w = v_ax / (omega * R_out)\n",
    "\n",
    "# Step 3: Compute Prandtl tip-loss and hub-loss functions\n",
    "f_tip = (NBlades / 2) * (1 - xi) * np.sqrt(1 + 1 / lambda_w**2)\n",
    "f_hub = (NBlades / 2) * (xi - R_in / R_out) * np.sqrt(1 + 1 / lambda_w**2)\n",
    "F_tip = (2 / np.pi) * np.arccos(np.exp(-f_tip))\n",
    "F_hub = (2 / np.pi) * np.arccos(np.exp(-f_hub))\n",
    "F = F_tip * F_hub\n",
    "\n",
    "# Step 4: Non-dimensional circulation (Gamma_1)\n",
    "gamma_tmp = (F * xi**2) / (lambda_w**2 + xi**2)\n",
    "\n",
    "# Step 5: Compute local body forces per unit area\n",
    "f_ax = NBlades * (rho * omega * gamma_tmp) / (2 * np.pi)\n",
    "f_cir = NBlades * (rho * v_ax * gamma_tmp) / (2 * np.pi * r_theory)\n",
    "\n",
    "# Step 6: Scale thrust and torque\n",
    "integrand_thrust = f_ax * 2 * np.pi * r_theory\n",
    "integrand_torque = f_cir * r_theory * 2 * np.pi * r_theory\n",
    "thrust_tmp = trapezoid(integrand_thrust, r_theory)\n",
    "torque_tmp = trapezoid(integrand_torque, r_theory)\n",
    "K_thrust = thrust / thrust_tmp\n",
    "K_torque = torque / torque_tmp\n",
    "f_ax_from_theory = K_thrust * f_ax\n",
    "f_cir_from_theory = K_torque * f_cir"
   ],
   "execution_count": 4,
   "outputs": [],
   "id": "b5f8f7ee"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As a final step we define the pressure distributions that will be used for the actuator disk model. Furthermore, we can check that our distributions give the desired total thrust and torque by integrating them over the radius."
   ],
   "id": "b0c9ffde"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "data_is_given = False\n",
    "if data_is_given:\n",
    "    r = r_from_data\n",
    "    f_ax = f_ax_from_data\n",
    "    f_cir = f_cir_from_data\n",
    "else:\n",
    "    r = r_theory\n",
    "    f_ax = f_ax_from_theory\n",
    "    f_cir = f_cir_from_theory\n",
    "\n",
    "thrust_check = trapezoid(f_ax * 2 * np.pi * r, r)  # Pressure force integrated over the radius\n",
    "torque_check = trapezoid(f_cir * r * 2 * np.pi * r, r)  # Pressure force integrated over the radius\n",
    "\n",
    "print(f\"Desired thrust: {thrust}, computed thrust: {thrust_check}\")\n",
    "print(f\"Desired torque: {torque}, computed torque: {torque_check}\")"
   ],
   "execution_count": 5,
   "outputs": [
    {
     "output_type": "stream",
     "text": [
      "Desired thrust: 2000, computed thrust: 2000.0000000000002\n",
      "Desired torque: 100, computed torque: 100.00000000000003\n"
     ],
     "name": "stdout"
    }
   ],
   "id": "382eb5eb"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2 Define volumetric zone for the actuator disk\n",
    "In this zone the volumetric source termns will be applied. The actuator disk is aligned with axis (-1, 0, 0) (negative x-direction) and is centered around x = 4.2609 m. The height of the actuator disk is recommended to be 10% of the outer radius. The inner radius is smaller than the blade root radius to prevent the artificial hub vortex to affect the surface flow.\n",
    "\n",
    "**The pressure distributions found previously are used here.**"
   ],
   "id": "7687b7e7"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "with fl.SI_unit_system:\n",
    "    x_AD = 4.2609  # x-location of the actuator disk center\n",
    "    AD_zone = fl.Cylinder(\n",
    "        name=\"AD\",\n",
    "        axis=(-1, 0, 0),\n",
    "        center=(x_AD, 0, 0),\n",
    "        inner_radius=R_in,\n",
    "        outer_radius=R_out,\n",
    "        height=R_out * 0.1,\n",
    "    )\n",
    "\n",
    "    AD_model = fl.ActuatorDisk(\n",
    "        name=\"AD_model\",\n",
    "        volumes=AD_zone,\n",
    "        force_per_area=fl.ForcePerArea(\n",
    "            radius=r,\n",
    "            thrust=f_ax,\n",
    "            circumferential=f_cir,\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\">           </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": "7410ce8d"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3 Define the axisymmetric refinement\n",
    "The zone where the actuator disk model is applied will be discretised with a structured cylindrical mesh. This results in a more accurate discretisation since the nodes are aligned with the strong gradients. It is recommended to place >= 30 nodes in the axial direction and x2 spatial distance in the radial and circumferential directions. For higher disk loading cases this values will change with more nodes required the higher the disk loading."
   ],
   "id": "95d39dc8"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "d_axial = R_out * 0.1 / 30  # 30 nodes in the axial direction\n",
    "d_radial = d_axial * 2  # x2 spatial distance in the radial direction\n",
    "d_circumferential = d_axial * 2  # x2 spatial distance in the circumferential direction"
   ],
   "execution_count": 7,
   "outputs": [],
   "id": "9bc115fc"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The surface close to the inner radius of this region will grow layers until the growth is stopped due to the presence of the refinement. Depending on the surface elements length and the axisymmetric refinement spacings, this can lead to bad quality meshes close to the surface. Therefore, the inner radius for this region must be chosen with care since we want to accurately predict the boundary layer but also have the axisymmetric refinement.\n",
    "\n",
    "One solution is to force a number of layers that we want to have between the surface and the refinement region by changing the inner radius of the axisymmetric refinement. The amount of layers needed until isotropy is influenced by the first layer thickness, surface element length and the growth rate so playing with these values will give the desired mesh."
   ],
   "id": "1ee7fe00"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "first_layer_thickness = 1e-5\n",
    "growth_rate = 1.2\n",
    "surface_elements_length = 0.001\n",
    "n_layers = 20\n",
    "\n",
    "total_height = first_layer_thickness * growth_rate**n_layers\n",
    "\n",
    "inner_radius = R_hub + total_height"
   ],
   "execution_count": 8,
   "outputs": [],
   "id": "95808c07"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can now define the axisymmetric refinement region which has a modified inner radius to fit the specified layers."
   ],
   "id": "14889087"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "with fl.SI_unit_system:\n",
    "    refinements = [\n",
    "        fl.AxisymmetricRefinement(\n",
    "            name=\"AD_axisym\",\n",
    "            spacing_axial=d_axial,\n",
    "            spacing_radial=d_radial,\n",
    "            spacing_circumferential=d_circumferential,\n",
    "            entities=[\n",
    "                fl.Cylinder(\n",
    "                    name=\"AD_axisym\",\n",
    "                    axis=(1, 0, 0),\n",
    "                    center=(x_AD, 0, 0),\n",
    "                    inner_radius=inner_radius,\n",
    "                    outer_radius=R_out,\n",
    "                    height=R_out * 0.1,\n",
    "                ),\n",
    "            ],\n",
    "        )\n",
    "    ]"
   ],
   "execution_count": 9,
   "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": "0b8e94cb"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.4 Surface and Volume Refinements\n",
    "It is possible to use surface refinements to force the maximum surface element length between the surface and the axisymmetric refinement and control the number of layers to fit. Additionally, the influence of the actuator disk wake on the surface will be captured more accurately.\n",
    "\n",
    "Besides, volumetric refinements around the actuator disk volume region will capture the wake with more accuracy."
   ],
   "id": "f9a900f6"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "with fl.SI_unit_system:\n",
    "    faces_close_to_AD = [\n",
    "        geo[f\"body00001_face000{n:02d}\"] for n in [2, 4, 19, 21]\n",
    "    ]  # Surface faces close to axisymmetric refinement\n",
    "    surface_refinement = fl.SurfaceRefinement(\n",
    "        name=\"surface_refinement\",\n",
    "        max_edge_length=1 * fl.u.mm,\n",
    "        faces=faces_close_to_AD,\n",
    "    )\n",
    "\n",
    "    height = R_out * 3  # Height of the volume refinement\n",
    "    front_space = R_out * 0.5  # Space in front of the actuator disk to the volume refinement\n",
    "    center_volume = x_AD + (height / 2 - front_space)\n",
    "    volume_refinement = fl.UniformRefinement(\n",
    "        name=\"volume_refinement\",\n",
    "        spacing=10 * fl.u.mm,\n",
    "        entities=[\n",
    "            fl.Cylinder(\n",
    "                name=\"volume_refinement\",\n",
    "                axis=(1, 0, 0),\n",
    "                center=(center_volume, 0, 0),\n",
    "                outer_radius=R_out * 1.5,\n",
    "                height=height,\n",
    "            )\n",
    "        ],\n",
    "    )\n",
    "\n",
    "    L = 4.3562\n",
    "    height_general = L * 2\n",
    "    front_space_general = 0.5\n",
    "    center_general = height_general / 2 - front_space_general\n",
    "    general_refinement = fl.UniformRefinement(\n",
    "        name=\"general_refinement\",\n",
    "        spacing=20 * fl.u.mm,\n",
    "        entities=[\n",
    "            fl.Cylinder(\n",
    "                name=\"general_refinement\",\n",
    "                axis=(1, 0, 0),\n",
    "                center=(center_general, 0, 0),\n",
    "                outer_radius=R_out * 2,\n",
    "                height=height_general,\n",
    "            )\n",
    "        ],\n",
    "    )\n",
    "    refinements += [\n",
    "        surface_refinement,\n",
    "        volume_refinement,\n",
    "        general_refinement,\n",
    "    ]"
   ],
   "execution_count": 10,
   "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": "9009c27a"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The mesh looks like:\n",
    "\n",
    "![DARPA MESH](figures/DARPA_mesh.png)\n",
    "\n",
    "Taking a zoom view around the axisymmetric refinement close to the hull we can visually check that the specified number of layers to fit inside the gap between the outer radius of the hull and the inner radius of the refinement is correct.\n",
    "\n",
    "![DARPA MESH ZOOM](figures/DARPA_zoom_mesh.png)"
   ],
   "id": "05b3d9f4"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Use Liquid Condition\n",
    "\n",
    "For this example we want to simulate the veihcle in free water conditions. To do this, the class fl.LiquidOperatingCondition() is used:"
   ],
   "id": "e22bd4c0"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "with fl.SI_unit_system:\n",
    "    operating_condition = fl.LiquidOperatingCondition(velocity_magnitude=5, alpha=0 * fl.u.deg)"
   ],
   "execution_count": 11,
   "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": "c52871fd"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. Define SimulationParams\n",
    "- The simulation parameters are defined in the python class fl.SimulationParams()\n",
    "- Reference geometry for the non-dimensionalisation of the coefficients are specified\n",
    "- Operating conditions are specified using LiquidOperating condition.\n",
    "- Time settings are defined to run a steady simulation.\n",
    "- Actuator Disk model is included in the model definitions."
   ],
   "id": "ed62a488"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "with fl.SI_unit_system:\n",
    "    farfield = fl.AutomatedFarfield()\n",
    "    params = fl.SimulationParams(\n",
    "        meshing=fl.MeshingParams(\n",
    "            defaults=fl.MeshingDefaults(\n",
    "                boundary_layer_first_layer_thickness=first_layer_thickness,\n",
    "                surface_max_edge_length=20 * fl.u.mm,\n",
    "            ),\n",
    "            refinements=refinements,  # All refinements previously defined\n",
    "            volume_zones=[farfield],  # Farfield volume zone\n",
    "        ),\n",
    "        operating_condition=operating_condition,  # Liquid operating condition\n",
    "        time_stepping=fl.Steady(max_steps=5000),\n",
    "        models=[\n",
    "            fl.Fluid(\n",
    "                navier_stokes_solver=fl.NavierStokesSolver(),\n",
    "                turbulence_model_solver=fl.SpalartAllmaras(),\n",
    "            ),\n",
    "            fl.Freestream(surfaces=farfield.farfield),\n",
    "            fl.Wall(surfaces=geo[\"*\"]),\n",
    "            AD_model,  # Actuator disk model\n",
    "        ],\n",
    "        reference_geometry=fl.ReferenceGeometry(\n",
    "            moment_center=(0, 0, 0),\n",
    "            moment_length=(3.81, 3.81, 3.81),\n",
    "            area=45.604,\n",
    "        ),\n",
    "        outputs=[\n",
    "            fl.VolumeOutput(\n",
    "                output_fields=[\n",
    "                    \"primitiveVars\",\n",
    "                    \"Cp\",\n",
    "                    \"qcriterion\",\n",
    "                ],\n",
    "            ),\n",
    "            fl.SurfaceOutput(\n",
    "                surfaces=geo[\"*\"],\n",
    "                output_fields=[\n",
    "                    \"primitiveVars\",\n",
    "                    \"Cp\",\n",
    "                    \"Cf\",\n",
    "                    \"CfVec\",\n",
    "                    \"yPlus\",\n",
    "                ],\n",
    "            ),\n",
    "        ],\n",
    "    )"
   ],
   "execution_count": 12,
   "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": "919ae459"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. Run Case\n",
    "Run the case specifying parameters and the case name."
   ],
   "id": "c09f0d6a"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "case = project.run_case(\n",
    "    params=params,\n",
    "    name=\"Tutorial DARPA Actuator Disk from Python\",\n",
    ")"
   ],
   "execution_count": 13,
   "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\">[20:17:06] </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        = Tutorial DARPA Actuator Disk from Python                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>        id          = case-<span style=\"color: #ffff00; text-decoration-color: #ffff00\">01625cd5-4a98-453d-bf97-b94a81babda7</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\">fa790634-10b7-40ca-a6a9-fdb62f9556fc</span>                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span>                                                                                                        \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m[20:17:06]\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        = Tutorial DARPA Actuator Disk from Python                                          \n",
       "\u001b[2;36m           \u001b[0m        id          = case-\u001b[93m01625cd5-4a98-453d-bf97-b94a81babda7\u001b[0m                                         \n",
       "\u001b[2;36m           \u001b[0m        status      = pending                                                                           \n",
       "\u001b[2;36m           \u001b[0m        project id  = prj-\u001b[93mfa790634-10b7-40ca-a6a9-fdb62f9556fc\u001b[0m                                          \n",
       "\u001b[2;36m           \u001b[0m                                                                                                        \n"
      ]
     },
     "metadata": {}
    }
   ],
   "id": "fa37b01c"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7. Post Processing\n",
    "Once the simulation is finished, we will monitor the convergence of residuals over the pseudo steps:\n"
   ],
   "id": "cfe4fc89"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "case.wait()\n",
    "results = case.results\n",
    "non_linear = results.nonlinear_residuals\n",
    "non_linear = non_linear.as_dataframe()\n",
    "non_linear.plot(\"pseudo_step\", [\"0_cont\", \"1_momx\", \"2_momy\", \"3_momz\", \"4_nuHat\"], logy=True)\n",
    "plt.show()"
   ],
   "execution_count": 14,
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "927ec65b71624441932dd15764e8d2e9",
       "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": "a6dec97e9433420aabaebd0d90f67d9c",
       "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\">[20:29:01] </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: Saved to <span style=\"color: #800080; text-decoration-color: #800080\">/tmp/tmp1fkdwydy/</span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\">197e50bd-f6d7-45a4-b99a-5dd0958f8902.csv</span>                                \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m[20:29:01]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: Saved to \u001b[35m/tmp/tmp1fkdwydy/\u001b[0m\u001b[95m197e50bd-f6d7-45a4-b99a-5dd0958f8902.csv\u001b[0m                                \n"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "image/png": "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iy/y4IMP9u778Morr/Dxxx/z2muv8eSTTwJcsrJ7//79vPnmm7zzzju0trbS1dWFu7v7iK2yOFTezjqqukONqaOTkd1UXQghhBAXMyo1NZ2dnRw5coRly5b13VitZtmyZezbt29I13j++ec5e/YsxcXFbNiwgQcffPCSgcZsNtPc3NzvMRK0GjWq7indLR2dI3IPIYQQQlzeqISa2tparFYrRqOx33Gj0UhlZeWI3PP555/Hw8Oj9xESEjIi9wF6dzJtbusYsXsIIYSY3J5//nlmzZqFm5sbBoOBVatWkZOTM9bNmlAm1OynHvfdd99l16hZv349TU1NvY+zZ8+OWHvUamUUr7VdemqEEEJcnR07drB27Vr279/P559/TldXFzfeeCMmk2msmzZhjEqo8fX1RaPRUFVV1e94VVUV/v7+I3JPvV6Pu7s7f/7zn5kzZw5Lly4dkftAX09Na7t5xO4hhBBictuyZQv33Xcf06ZNIyUlhc2bN1NaWsqRI0eG9HqVSsWrr77KrbfeirOzMwkJCezbt4/8/HwWL16Mi4sL8+bNo6CgoN/rfve73xEVFYVOpyMuLo4///nP13Td4uJi1Go1hw8f7nedjRs3EhYWhm0EtxQalVCj0+lIT09n69atvcdsNhtbt25l7ty5I3rvtWvXkpWVxaFDh0bsHhptd0+N1NQIIcS4Y7fbaetqG5OH3W6/6nY3NTUB4O3tPeTX/OxnP+Pee+8lMzOT+Ph4vv71r/Pwww+zfv16Dh8+jN1u59FHH+09//333+fxxx/n+9//PqdOneLhhx/m/vvvZ9u2bVd93fDwcJYtW8brr7/e7xqvv/469913H2r1yEWPYZv91NraSn5+fu/nRUVFZGZm4u3tTWhoKOvWrWPNmjXMnDmT2bNns3HjRkwmU+9sqJGyadMmNm3aNKLTrbXdPTUmCTVCCDHutFvayfhrxpjc+8DXD+Ds4HzFr7PZbHzve99j/vz5JCUlDfl1999/P3fffTcATzzxBHPnzuWpp55i+fLlADz++OP93nc3bNjAfffdx3e/+10A1q1bx/79+9mwYQNLliy56ut++9vf5jvf+Q4vvvgier2eo0ePcvLkST788MMr/l5ciWGLS4cPHyYtLY20tDRA+cakpaX1zlC655572LBhA08//TSpqalkZmayZcuWAcXDw200emq03T01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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {}
    }
   ],
   "id": "e722701f"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Then, we can monitor the drag force on the hull and also compute the actuator disk thrust and torque. To do so, we need to dimensionalise the forces based on the case reference quantities like length, density, reference velocity and area. Note that here the reference velocity for actuator disk output is the reference velocity magnitude and if this is not defined, then, the velocity magintude. This is the case since we are using `LiquidOperationCondition`, if we use `AerospaceCondition` then the reference velocity is the speed of sound."
   ],
   "id": "d074f72d"
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "# Get the reference quantities\n",
    "length_unit = project.length_unit\n",
    "density = case.params.operating_condition.material.density\n",
    "U_ref = (\n",
    "    case.params.operating_condition.reference_velocity_magnitude\n",
    "    or case.params.operating_condition.velocity_magnitude\n",
    ")\n",
    "A_ref = case.params.reference_geometry.area\n",
    "\n",
    "# Body force coefficients\n",
    "body_forces = case.results.total_forces.as_dataframe().iloc[-1]\n",
    "CD = body_forces[\"CD\"]\n",
    "\n",
    "# Actuator disk force coefficients\n",
    "actuator_disk_output = case.results.actuator_disks.as_dataframe().iloc[-1]\n",
    "C_p = actuator_disk_output[\"Disk0_Power\"]\n",
    "C_t = actuator_disk_output[\"Disk0_Force\"]\n",
    "C_q = actuator_disk_output[\"Disk0_Moment\"]\n",
    "\n",
    "# Dimensionalise the forces\n",
    "drag_force = (CD * 0.5 * density * U_ref**2 * A_ref).to(\"N\")\n",
    "power = (C_p * density * U_ref**3 * length_unit**2).to(\"W\")\n",
    "thrust = (C_t * density * U_ref**2 * length_unit**2).to(\"N\")\n",
    "torque = (C_q * density * U_ref**2 * length_unit**3).to(\"N*m\")\n",
    "\n",
    "print(f\"Drag force: {drag_force}\")\n",
    "print(f\"Power: {power}\")\n",
    "print(f\"Thrust: {thrust}\")\n",
    "print(f\"Torque: {torque}\")"
   ],
   "execution_count": 15,
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ad8c98e233314b0e943d9c64166cd61b",
       "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\">[20:29:04] </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: Saved to <span style=\"color: #800080; text-decoration-color: #800080\">/tmp/tmp1fkdwydy/</span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\">de46f561-2831-4eda-91e6-3fcfeaf7a15d.csv</span>                                \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m[20:29:04]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: Saved to \u001b[35m/tmp/tmp1fkdwydy/\u001b[0m\u001b[95mde46f561-2831-4eda-91e6-3fcfeaf7a15d.csv\u001b[0m                                \n"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "93cd62b9440444458b2de819804ecdb0",
       "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\">[20:29:05] </span><span style=\"color: #008080; text-decoration-color: #008080\">INFO</span>: Saved to <span style=\"color: #800080; text-decoration-color: #800080\">/tmp/tmp1fkdwydy/</span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\">9ab4120a-1436-41fa-8acb-22bc902462f6.csv</span>                                \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m[20:29:05]\u001b[0m\u001b[2;36m \u001b[0m\u001b[36mINFO\u001b[0m: Saved to \u001b[35m/tmp/tmp1fkdwydy/\u001b[0m\u001b[95m9ab4120a-1436-41fa-8acb-22bc902462f6.csv\u001b[0m                                \n"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "text": [
      "Drag force: 379.51182943493876 N\n",
      "Power: 10889.669869904938 W\n",
      "Thrust: 1998.5858964472352 N\n",
      "Torque: -99.929914791825 N*m\n"
     ],
     "name": "stdout"
    }
   ],
   "id": "2c796b8d"
  }
 ],
 "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
}