Skip to main content

Toroidal Propeller Workflow

PropellerThis functionality requires the Propeller add-on to be enabled. 5.3.0This functionality requires CAESES version 5.3.0 or later.

Toroidal propellers — also known as looped-blade or ring propellers — feature blades that sweep forward and reconnect at the tip to form a continuous closed loop. Unlike conventional open-screw designs, this geometry eliminates the free blade tip and the tip vortex it generates: the primary driver of cavitation and underwater radiated noise in traditional propellers. The result is a significantly quieter, lower-vibration propulsor that has gained traction in autonomous underwater vehicles (AUVs), unmanned surface vessels (USVs), small craft, and aerial drones where acoustics and efficiency are critical.

Designing a toroidal propeller parametrically requires two interlocking center surfaces whose pitch, rake, skew, and chord distributions must be coordinated so that the blade tips connect cleanly. In this tutorial, you will build a fully-parametric toroidal propeller from scratch using the dedicated Toroidal Propeller Workflow in CAESES.

Toroidal Propeller Model

This project starts from scratch and utilizes the propeller workflow, which enhances propeller design in CAESES. It empowers users to boost their productivity by providing a structured workflow, making it easy to parameterize the propeller model, as demonstrated in this tutorial. Additionally, a key goal of this tutorial is to familiarize you with the propeller workflow so that you feel comfortable experimenting with and adjusting its settings.

Before proceeding, it is recommended to review the General Overview of the Propeller Workflow. It may also be helpful to check out the Advanced Propeller Workflow Tutorial, as although there are some differences between the two tutorials, many design strategies are similar.

To start, navigate to the Model workspace > Propeller tab > Workflows category > *Propeller > Toroidal Propeller Workflow in the Propeller tab of CAESES.

Propeller Workflows

Once clicked, you should see the layout below, providing an overview of the project structure and this tutorial. Simply follow the step-by-step process by clicking the green plus buttons as you go.

Steps of the Propeller Workflow

set project units

Before starting this tutorial, set the Project Units to millimeters.

project units

Animations in this Tutorial

Throughout this tutorial, various animations illustrate the impact of different Design Variables on the final propeller geometry. If some visualizations appear more advanced than the current step, don’t worry, you’ll be guided to that point soon!

Two Center Surfaces

The Center Surface is a critical component in Propeller Workflows, as it incorporates essential radial distributions typical in propeller design. To generate the toroidal blade shape, two Center Surfaces are required. These surfaces are positioned opposite each other to form the toroidal model shape, with distributions defined to align at matching endpoints, as illustrated in the figure below. Each of the four radial distributions (Pitch, Rake, Skew and Chord) includes a pair of functions for the two Center Surfaces: continuous lines represent Center Surface 1, while dotted lines represent Center Surface 2.

Center Surface GUI

Defining two Center Surfaces is the first step in this workflow. Click the two plus buttons in the propeller Component GUI to create the surfaces. Adjust the radiusHub parameter from 0.2 to 0.167. For each distribution, navigate to the Center Surfaces Component GUI, click the plus button to create a 3rd-degree B-Spline Curve and select the required number of control points.

info

The scope structure for radial distributions follows the naming convention 0x_functionName for Center Surface 1 and 0x_functionName_01 for Center Surface 2. Design variables impacting each distribution are organized within their respective scopes.

note

Any design variables not covered in the tutorial and autogenerated by the workflow can be deleted as needed.

Pitch Functions with 3 Points

The Pitch functions are normalized to the diameter (P/D). For the two functions, four Design Variables are used to adjust pitch either globally or locally at the hub and/ or tip regions.

ParameterFunctionalityRange (Default Value)Effect
pitchDeltaHub1Modifies pitch at hub[0.15, 0.25] (0.20)Center Surf. 1
pitchDeltaHub2Modifies pitch at hub[0.15, 0.25] (0.25)Center Surf. 2
pitchDeltaTipModifies pitch at tip[0.05, 0.15] (0.10)Center Surf. 1 & 2
pitchMaxTranslates pitch[1.00, 1.60] (1.30)Center Surf. 1 & 2

In the tables below, you can see how the control points of these two B-Spline curves are defined.

Pitch Function for Center Surface 1

Coordinatesp00p01p02
X|propeller|centerSurf1.getRadiusHub()0.7|propeller|centerSurf1.getRadiusMax()
YpitchMax - pitchDeltaHub1pitchMaxpitchMax - pitchDeltaTip

Pitch Function for Center Surface 2

Coordinatesp00p01p02
X|propeller|centerSurf2.getRadiusHub()0.7|propeller|centerSurf2.getRadiusMax()
Y|propeller|00_functions|01_pitch|pitchMax - pitchDeltaHub2|propeller|00_functions|01_pitch|pitchMax|propeller|00_functions|01_pitch|pitchMax - |propeller|00_functions|01_pitch|pitchDeltaTip

Visualization of pitchDeltaHub Parameters

Visualization of pitchDeltaHub parameters

Visualization of pitchDeltaTip Parameter

Visualization of pitchDeltaTip parameters

Visualization of pitchMax Parameter

Visualization of pitchMax parameter

Rake Functions with 5 Points

The Rake functions are controlled by two Design Variables that shift the rake angle (forward or backward) and adjust the rake magnitude.

ParameterFunctionalityRange (Default Value)Effect
rakeDeltaShifts rake angle[-0.1, 0.1] (0.0)Center Surf. 1 & 2
rakeMaxModifies rake magnitude[ 0.1, 0.3] (0.2)Center Surf. 1 & 2

In the tables below, you can see how the control points of these two B-Spline curves are defined.

Rake Function 1

Coordinatesp00p01p02p03p04
X|propeller|centerSurf1.getRadiusHub()0.350.9p04:X|propeller|centerSurf1.getRadiusMax()
Y0p04:Y / 4-rakeMax + p04:Y-rakeMax / 4 + p04:YrakeDelta

Rake Function 2

Coordinatesp00p01p02p03p04
X|propeller|centerSurf2.getRadiusHub()0.350.9p04:X|propeller|centerSurf2.getRadiusMax()
Y0p04:Y / 4|propeller|00_functions|02_rake|rakeMax + p04:Y:|propeller|00_functions|02_rake|rakeMax / 4 + p04:Y|propeller|00_functions|02_rake|rakeDelta

In the animation below, you can see the effect of the rakeMax parameter on the propeller model.

Visualization of rakeMax parameters

The animation below, shows the effect of the rakeDelta parameter on the propeller model.

Visualization of rakeDelta parameter

Skew Functions with 4 Points

The Skew functions are controlled by two Design Variables that shift the skew angle and adjust the skew magnitude.

ParameterFunctionalityRange / Default ValueEffect
skewDeltaShifts skew angle[-0.100, 0.100] (0.000)Center Surf. 1 & 2
skewMaxModifies skew magnitude[ 0.175, 0.225] (0.200)Center Surf. 1 & 2

In the tables below, you can see how the control points of these two B-Spline curves are defined.

Skew Function 1

Coordinatesp00p01p02p03
X|propeller|centerSurf1.getRadiusHub()0.80.9|propeller|centerSurf1.getRadiusMax()
Y-skewMax * 0.75-skewMax + skewDelta / 1.5p03:YskewDelta

Skew Function 2

Coordinatesp00p01p02p03
X|propeller|centerSurf2.getRadiusHub()0.80.9|propeller|centerSurf2.getRadiusMax()
Y|propeller|00_functions|03_skew|skewMax * 0.75|propeller|00_functions|03_skew|skewMax + |propeller|00_functions|03_skew|skewDelta / 1.5p03:Y|propeller|00_functions|03_skew|skewDelta

Visualization of skewDelta Parameter

Visualization of skewDelta parameter

Visualization of skewMax Parameter

Visualization of skewMax parameters

Chord Functions with 5 Points

The Chord functions are controlled by four Design Variables that adjust chord either globally or locally at the hub and/ or tip regions.

ParameterFunctionalityRange (Default Value)Effect
chordDeltaHub1Modifies chord at hub[-0.050, 0.000] ( 0.000)Center Surf. 1
chordDeltaHub2Modifies chord at hub[-0.050, 0.000] (-0.050)Center Surf. 2
chordDeltaTipModifies chord at tip[-0.050, 0.050] ( 0.000)Center Surf. 1 & 2
chordMaxTranslates chord[ 0.375, 0.425] ( 0.400)Center Surf. 1 & 2

Chord Function 1

Coordinatesp00p01p02p03p04
X|propeller|centerSurf1.getRadiusHub()0.30.60.85|propeller|centerSurf1.getRadiusMax()
YchordMax - 0.2 + chordDeltaHub1p00:Y + 0.05chordMaxp04:YchordMax - 0.15 + chordDeltaTip

Chord Function 2

Coordinatesp00p01p02p03p04
X|propeller|centerSurf2.getRadiusHub()0.30.60.85|propeller|centerSurf2.getRadiusMax()
Y|propeller|00_functions|04_chord|chordMax - 0.2 + chordDeltaHub2p00:Y + 0.05|propeller|00_functions|04_chord|chordMaxp04:Y|propeller|00_functions|04_chord|chordMax - 0.15 + |propeller|00_functions|04_chord|chordDeltaTip

Visualization of chordDeltaHub Parameter

Visualization of chordDeltaHub parameters

Visualization of chordDeltaTip Parameter

Visualization of chordDeltaTip parameter

Visualization of chordMax Parameter

Visualization of chordMax parameter

Profile Configurator

For this tutorial, a NACA 4-Digit airfoil is used, specifically designed for marine propeller applications.

  • Camberline: The NACA 4-digit camberline is a well-known choice for profile sections, commonly used in aviation and highly suitable for toroidal propellers. This design reduces cavitation and noise, enhancing overall propeller performance.

  • Thickness Distribution: This version includes a thickened edge in the NACA 4-digit section, adjusting the thickness curve to withstand higher mechanical stress. The original thin edges of the NACA 4-digit section were prone to damage in marine environments, making this modification particularly advantageous.

To apply this, click the plus button in the propeller component GUI for the Profile Configurator and select Profile Configurator via Camberline and Thickness.

  • For the Camberline, click the plus button and choose NACA 4 Digits.
  • For the Thickness Curve, select NACA 4 Digit Modified.
info

You can also modify the trailing edge (TE) and leading edge (LE) shape by adjusting the parameters XTrim LE and TE Mod Start on the thickMod Curve, as illustrated in the figure below.

Parameters of thickMod Curve

With the camberline and thickness settings, you can generate a Profile Curve and, by clicking the play button, create a Profile Definition.

Two Blade Surfaces

In the propeller Component GUI, continue by clicking the plus button for both Blade Component 1 and Blade Component 2. Then, click Blade Surface in each component. This will create three objects in each blade component:

  • blade (FPropellerBlade)
  • tipGap (FParameter)
  • bladePrepared (FImageSurface)

For each Profile Parameter parameter, you can add distributions for the following functions in the section. For each function, choose Distribution via B-Spline Curve.

info
  • Design Variables should be placed within each function folder, as they influence the corresponding functions.
  • Both blade Surfaces share the same Profile Parameters, located in the blade1|functions scope.
  • The Profile Parameters, specifically camberPos and maxThicknessPos, remain unchanged and constant at 0.35, while angleOfAttack is set to 0, with no additional twist at the tip.

All Radial Distributions

Below is a figure showing all 2D radial distributions, including those from the Center Surface and Profile Parameters.

All 2D Distributions

Camber

The Camber distribution defines the maximum camber of each profile in the chordwise direction. This function is controlled by a single design variable named camber, ranging from 0.02 to 0.1 with a default value of 0.06. It is designed to achieve the greatest camber in the spanwise direction at the root of the blade, gradually decreasing towards the tip until reaching zero at the tip. The control points below are defined to achieve this functionality.

Coordinatesp00p01p02
X|propeller|00_functions|radiusHub(p02:X - p00:X) * 0.5|propeller|00_functions|radiusMax
Ycambercamber0

Visualization of camber Parameter

Visualization of camber parameters

Max. Thickness

The Max. Thickness distribution describes the maximum thickness of each profile in the chordwise direction. This function is controlled by a design variable named maxThickness, ranging from 0.15 to 0.25 with a default value of 0.2. It is designed for maximum thickness in the spanwise direction at the root of the blade, decreasing towards the tip. The control points below are defined to achieve this functionality.

Coordinatesp00p01p02
X|propeller|00_functions|radiusHub(p02:X - p00:X) * 0.5|propeller|00_functions|radiusMax
YmaxThicknessmaxThickness * 0.25maxThickness * 0.25

Visualization of maxThickness Parameter

Visualization of maxThickness parameters

TE Thickness

For the Trailing Edge (TE) Thickness distribution, a constant distribution will be used, so there is no need to click the plus button. Instead, create a new scope named teThickness_distribution under the functions scope, where the other profile distributions are located. This distribution can be controlled by a single design variable, teThickness_distribution|teThickness, with a range of 0.005 to 0.01.

Coordinatesp00p01p02
X|propeller|centerSurf.getRadiusHub()(p02:X - p00:X) * 0.75|propeller|centerSurf.getRadiusMax()
YteThicknessteThickness * 0.25teThickness * 0.25

Visualization of teThickness Parameter

Visualization of teThickness parameters

Propeller Solid

To proceed, click the plus button in the propeller GUI Component. This will generate a bladeSolid Component along with two Design Variables: absPropellerRadius and NOB, which correspond to the propeller radius and number of blades, with ranges of 100 to 500 millimeters and 2 to 5, respectively.

Next, create a parameter under the bladeSolid Component named D, which corresponds to the Diameter with the following expression: D = absPropellerRadius * 2

Visualization of NOB Parameter

Animation of NOB Parameter

Steps for Propeller Solid Creation

The steps for completing these tasks are shown below:

Steps for Propeller Solid Creation

Hub

By clicking the corresponding plus button in the bladeSolid GUI, you can create a hub BRep that scales with the propeller’s radius. For this tutorial, the auto-configured hub from the workflow is sufficient. However, if you wish to make modifications, you can easily adjust the axial length and/ or radius of the hub using the following parameters, both scaled by the factor 1.5:

axialLength = ||propeller|bladeSolid.getBladeRadius() * 1.5
hubRadius = propeller|bladeSolid.getBladeRadius() * |propeller|bladeSolid.getNormHubRadius() * 1.5

Full Bladed Solid

Next, click the plus button in the bladeSolid GUI for the Full Bladed Solid, which automatically creates three sub-scopes:

  • 02_closedBlade
  • 03_fillet
  • 04_solid

Closed Blade

The two blades are scaled to absPropellerRadius and connected at the tip with a tipFillet Surface. You can use these surfaces as sources in a BRep operation. The blade is closed at the hub through a solid from intersections operation, using a scaled version of the blade & tip surface to the propeller radius, combined with a 99% scaled-down version of the hub geometry, named hubSmall.

Variable Fillet

With BReps for the blade and hub established, proceed to create the Variable Fillet. A general rule is to set the fillet radius on the Pressure Side to 2/3 of the maximum profile thickness at the root and 1/3 on the Suction Side. The fillet should also match the thickness at the trailing edge (TE) and leading edge (LE). The following parameters are defined based on these guidelines:

  • filletScalefactor = 40
  • radiusLE = thicknessRoot / 10
  • radiusSide1 = thicknessRoot / 3
  • radiusSide2 = thicknessRoot * 2 / 3
  • radiusTE = thicknessTE / filletScalefactor
  • thicknessRoot = |propeller|blade|functions|maxThickness_distribution|maxThickness * |propeller|bladeSolid|D
  • thicknessΤΕ = |propeller|blade|functions|teThickness_distribution|teThickness * |propeller|bladeSolid|D
Pressure Side
CoordinateXY
pS1_10|propeller|bladeSolid|03_fillet|radiusLe / |propeller|bladeSolid|03_fillet|filletScalefactor
pS1_20.05pS1_1:Y
pS1_30.5|propeller|bladeSolid|03_fillet|radiusSide1 / |propeller|bladeSolid|03_fillet|filletScalefactor
pS1_40.95pS1_5:Y
pS1_51|propeller|bladeSolid|03_fillet|radiusTe / |propeller|bladeSolid|03_fillet|filletScalefactor
Suction Side
CoordinateXY
pS2_10|propeller|bladeSolid|03_fillet|radiusLe / |propeller|bladeSolid|03_fillet|filletScalefactor
pS2_20.05pS2_1:Y
pS2_30.5|propeller|bladeSolid|03_fillet|radiusSide2 / |propeller|bladeSolid|03_fillet|filletScalefactor
pS2_40.95pS2_5:Y
pS2_51|propeller|bladeSolid|03_fillet|radiusTe / |propeller|bladeSolid|03_fillet|filletScalefactor

Radius Functions

GUI Variable Fillet

Since Chord functions at the hub can differ between blade1 and blade2, bladeFillet1 and bladeFillet2 require adjustment to the Radius Scaling Factor:

  • bladeFillet1|Radius Scaling Factor = filletScalefactor * |propeller|00_functions|04_chord|p00:Y
  • bladeFillet2|Radius Scaling Factor = filletScalefactor * |propeller|00_functions|04_chord01|p00:Y

Variable Fillet GUI

Full Bladed

This completes the Propeller Solid, automatically generating the full propeller geometry with all blades smoothly connected to the hub as a single BRep.

This concludes the propeller modeling. The next step, if desired, is to connect this model to a CFD RANS solver and automatically create an appropriate Flow Domain.

Flow Domain

For the propeller's Flow Domain, click the plus button in the propeller Component GUI, then do the same in the pop-up flowDom Component. After unfolding flowDom, locate the flowDom|domain object, which includes the following parameters:

  • domRadius = |propeller|flowDom.getBladeRadius() * 4
  • zEnd = |propeller|flowDom.getBladeRadius() * 10
  • zStart = -|propeller|flowDom.getBladeRadius() * 5

You can adjust these parameters to your preference, but it is recommended to keep them relative to |propeller|flowDom.getBladeRadius(). Additionally, select the Periodic Cut checkbox to limit the domain to a single blade, making the problem easier to solve. If symmetry is not assumed in your solution, leave the Periodic Cut checkbox unchecked. You may also check the Extend in -Z Axis option if it better suits your setup.

Flow Domain of the Toroidal Propeller

info

In the Toroidal Propeller Workflow, the Flow Domain GUI shows the flag for toroidal propellers is enabled, which is necessary to automatically generate an appropriate periodic flow domain due to the unique shape of toroidal propellers.

Conclusion

This tutorial aims to help you become more familiar with the Toroidal Propeller Workflow and demonstrates how straightforward it is to create a complex shape like a toroidal propeller in CAESES, as well as how to modify default settings. This approach allows you to see firsthand how easily adjustments can be made. You can also customize your own workflow to align with CAESES. Additionally, a parametric model with a minimal set of parameters is introduced here, maintaining a compact design space that enables meaningful designs while also providing the flexibility, freedom and variety needed for toroidal propeller designs. These geometries show great promise in terms of cavitation reduction, noise minimization and efficiency.


Final Setup

CAESES Project File

If you want to take a look at the finalized parametric toroidal propeller model to gain a clearer understanding of the concepts presented, you can find the resulting CAESES project file toroidal-propeller-workflow.cdb here:

Load Final Model