(actuator-disk-gui)=
# Actuator disk model

*The actuator disk model in Flow360 provides a simplified representation of a propulsor using a momentum source term distributed across a disk-shaped region.*

---

## Available Parameters

| *Parameter* | *Description* | *Applicable* |
|-------------|---------------|--------------|
| **Assigned volumes** | Cylinder entities defining disk location and dimensions | always |
| **Unit** | Choose units used for actuator disk definition | always |
| **Input method** | Choose how to define the loading: upload a distribution file or specify a uniform value | always |
| **File upload** | Upload a file defining the actuator disk | **Input method** is `Upload file` |
| **Inner radius** | Radius at which the force-per-area value is first given. The region inside it is still loaded with the same value, see [Inner radius](#inner-radius) | **Input method** is `Uniform` |
| **Outer radius** | Outer radius of the loading, which is also the radius of the disk | **Input method** is `Uniform` |
| **Force per area value** | Constant thrust force per unit area applied up to the outer radius | **Input method** is `Uniform` |
| **Reference velocity** | Optional reference velocity vector [Vx, Vy, Vz] for power output calculation | always |

---

## Detailed Descriptions

### Assigned volumes

*The cylinder entities that define the location and dimensions of the disk. The cylinder's center, axis, and height are used as the actuator disk's center, thrust axis, and thickness respectively. The radius of the disk is the last radius of the loading distribution, not the cylinder's radius.*

- **Required**
>**Notes:** 
>- The cylinder axis defines the direction of the thrust
>- Ensure the cylinder is sized appropriately for your application
>- Mesh nodes closer to the axis than the cylinder's [Inner radius](../../../04.entities-browser/04.volumes/01.cylinder.md#inner-radius) receive no actuator disk force. Set it to the hub radius to leave the hub region unloaded, see {ref}`Inner radius in the knowledge base <bet_inner_radius>`.

### Unit

*Specifies units of the values specified in the uploaded file.*

- **Required**
>**Notes:** 
>- Arrays for radius, thrust, and circumferential must all have the same length
>- Positive thrust means the axial force follows the same direction as the thrust axis
>- Positive circumferential force follows the same direction as the thrust axis with the right hand rule
>- In the GUI, you can either input values directly or upload JSON/CSV files with the distribution data

### Input method

*Selects how the disk loading is defined. Two options are available:*

- **Upload file** *(default)*: import a radial distribution of `radius`, `thrust`, and `circumferential` values from a JSON or CSV file (see [File upload](#file-upload) below).
- **Uniform**: specify a single force-per-area value, with no circumferential (swirl) component, and an **Inner radius** and **Outer radius**. Flow360 turns this into a two-point loading distribution, with the same value at both radii. The solver applies the value over the whole disk up to the **Outer radius** (see [Inner radius](#inner-radius) below). The setup form prompts you with: "Specify a uniform force-per-area value across the disk (no swirl)."

>**Notes:** 
>- The **Uniform** option is the quickest way to set up a constant-loading disk when a detailed radial distribution is not needed.
>- For the uniform input, the radii use the **Radius** unit and the loading uses the **Force per area** unit selected under [Unit](#unit) above.
>- Because there is no swirl, the integrated **Torque** of a uniform disk is zero (see [Integrated values](#integrated-values)).

### File upload

*A window for uploading a file defining the behaviour of the actuator disk.*

- **Options:**
  - `CSV Format`
  
    CSV files can be uploaded with or without headers. If headers are present, they must be: `radius, thrust, circumferential`

      Example with headers:
      ```
      radius, thrust, circumferential
      0, 1, 0 
      1, 2, 20
      10, 1, 1
      ```

      Example without headers:
      ```
      0, 1, 0 
      1, 2, 20
      10, 1, 1
      ```

  - `JSON Format`
    ```json
    {
        "force_per_area": {
            "radius": [0, 1, 10],
            "thrust": [1, 2, 1],
            "circumferential": [0, 20, 1]
        }
    }
    ```

### Inner radius

*The first radius of the loading distribution created by the **Uniform** input.*

- **Required** when **Input method** is `Uniform`.
>**Notes:**
>- Below the first radius of a loading distribution, the solver applies the force-per-area value given at that radius. With the **Uniform** input, the disk is therefore loaded with the same value from the axis to the **Outer radius**, whatever this **Inner radius** is.
>- To leave the hub region unloaded, set the Inner radius of the assigned cylinder instead, see [Assigned volumes](#assigned-volumes).
>- The [Integrated values](#integrated-values) start at this radius, see the note there.

### Outer radius

*Outer radius of the region over which the uniform loading is applied. It is also the radius of the actuator disk.*

- **Required** when **Input method** is `Uniform`.

### Force per area value

*Constant thrust force per unit area applied uniformly up to the outer radius, with no circumferential (swirl) component.*

- **Required** when **Input method** is `Uniform`.
>**Notes:** 
>- Uses the **Force per area** unit selected under [Unit](#unit).

### Reference velocity

*An optional velocity vector [Vx, Vy, Vz] used as the reference velocity for actuator disk power output calculations.*

- **Optional** (default: not set)
- When provided, the solver uses this fixed velocity vector instead of the local flow velocity when computing the actuator disk power output.

---

## Integrated values

*A live readout displayed in the setup form once a valid loading is defined. Flow360 integrates the force-per-area distribution over the disk so you can sanity-check the total loading before running the case.*

| *Value* | *Description* |
|---------|---------------|
| **Thrust** | Total axial thrust, obtained by integrating the thrust (axial) force-per-area over the disk area |
| **Torque** | Total torque, obtained by integrating the circumferential (swirl) force-per-area over the disk |

- The values update automatically as you edit the loading, whether it comes from an uploaded file or from the uniform input.
>**Notes:** 
>- The readout is computed in the browser for quick feedback during setup; the solver performs its own integration at run time.
>- The **Torque** reflects only the circumferential (swirl) loading, so it is zero for a uniform disk or for any distribution with no circumferential component.
>- The readout integrates the loading distribution from its first radius to its last, while the solver loads the disk from the Inner radius of the assigned cylinder, applying the first value below the first radius. The readout matches the applied loading only when the first radius of the distribution equals the cylinder's Inner radius, for example when both are 0.
>- Thrust is shown in N and torque in N·m.

---

<details>
<summary><h3 style="display:inline-block"> 💡 Tips</h3></summary>

**When to Use Actuator Disk Model**
- For propellers or fans where detailed blade modeling is unnecessary
- In preliminary design studies requiring quick turnaround
- When only the thrust and torque effects matter, not detailed wake structures
- For wind turbine analysis where detailed blade aerodynamics are less important
- In applications where the general influence of a propulsor on flow is needed, but not blade-specific phenomena

**Comparison with BET Disk Model**

| Feature | Actuator Disk | BET Disk |
|---------|--------------|----------|
| Complexity | Lower | Higher |
| Setup Time | Fast | Moderate |
| Computational Cost | Lower | Higher |
| Accuracy | Basic | More detailed |
| Wake Prediction | General structure | Blade-specific effects |
| Required Inputs | Thrust/pressure | Detailed blade geometry |

**Implementation Tips**
- Consider upgrading to BET Disk for more accurate wake prediction
- Ensure adequate mesh resolution around the disk
  - Typically 10-20 cells across the disk radius
  - Maintain refined mesh downstream to capture wake development
- Start with uniform loading for initial studies
- Base thrust and pressure values on experimental or analytical data when possible
- For accurate flow-field predictions, include swirl effects

**Limitations**

- Cannot capture blade-specific effects
- Simplified wake structure
- No inherent modeling of performance variation with flow conditions
- Less accurate than BET Disk or fully-resolved blade simulations
- May oversimplify flow-field effects in cases with complex inflow conditions

</details>

---

<details>
<summary><h3 style="display:inline-block"> ❓ Frequently Asked Questions</h3></summary>

- **When should I use Actuator Disk instead of BET Disk?**  
  > Use Actuator Disk for preliminary design studies requiring quick turnaround, cases where detailed wake structures aren't needed, or applications where only the thrust and torque effects matter. Use BET Disk when blade-specific aerodynamics are important.

- **How do I determine appropriate thrust values?**  
  > Thrust values can be determined from experimental data, analytical calculations, or known performance metrics of your propulsor. Typically, you'd convert a known thrust to a pressure by dividing by the disk area.

- **Can I model non-uniform loading?**  
  > Yes, by specifying different thrust values across the radial positions, you can create custom radial distributions to model tip effects or other non-uniform loading patterns.

- **Does the actuator disk model capture tip vortices?**  
  > Not directly. The model produces a simplified wake structure without capturing detailed blade-specific phenomena like tip vortices. For those effects, consider the BET Disk model or fully-resolved blade simulations.

- **How does this model handle different flow conditions?**  
  > The model applies the specified force distribution regardless of inflow conditions. It doesn't inherently account for performance variations with flow speed or angle. You would need to manually update the force distribution for different operating conditions.

- **Can I use this model for contra-rotating propellers?**  
  > Yes, by creating two actuator disk models with opposite swirl directions, positioned in sequence along the flow path.

- **How do I import data from existing propeller analysis?**  
  > You can prepare your data in CSV or JSON format and upload it through the GUI. This is useful when you have force distributions from other analysis tools or experimental data.

</details>

---

<details>
<summary><h3 style="display:inline-block"> 🐍 Python Example Usage</h3></summary>

```{seealso}
Python API reference: {py:class}`~flow360.ActuatorDisk`, {py:class}`~flow360.Cylinder` and {py:class}`~flow360.ForcePerArea`.

For a worked example, see {doc}`/python_api/example_library/notebooks/DARPA_SUBOFF_AD`.
```

Below is an example of how to configure an Actuator Disk model using the Flow360 Python API:

```python
# Example (for reference only, not included in GUI documentation)
actuator_disk = fl.ActuatorDisk(
    entities = fl.Cylinder(
        name="actuator_disk",
        center=(0,0,0)*fl.u.mm,
        axis=(-1,0,0),
        height = 30 * fl.u.mm,
        outer_radius=5.0 * fl.u.mm,
    ),
    force_per_area = fl.ForcePerArea(
        radius=[0, 1] * fl.u.mm,
        thrust=[4.1, 5.5] * fl.u.Pa,
        circumferential=[4.1, 5.5] * fl.u.Pa,
    ),
    # Optional: fix the reference velocity used for power output calculations.
    # Useful for hover or near-zero freestream cases.
    reference_velocity=[0, 0, -10] * fl.u.m / fl.u.s,
)
```

</details>
