The proposed propeller design technology implemented in the OpenVINT 5 algorithm solves the following optimization problem:
where
W(
ξ) is the power required by the propeller;
T(
ξ) is the thrust provided by the propeller;
Tobj is the desired thrust;
ξ is the design parameter vector; and
Ω is the decision space. Unlike OpenVINT 4 [
16], OpenVINT 5 implements new methods primarily focused on reducing computation time, increasing flexibility in propeller geometry, and maintaining global optimum identification during optimization.
Table 1 shows the methods implemented in OpenVINT versions 4 and 5.
2.1. CST Method
The CST parameterization method stands out for its balance of mathematical simplicity, design flexibility, and computational efficiency. The CST method combines a class function
C(
x) (defining global characteristics like thickness or camber) and a shape function
S(
x) (modifying local details). This enables adjustment of specific parameters (leading edge, maximum camber) without altering the rest of the geometry. Consequently, complex shapes can be created with few coefficients, facilitating exploration of optimal designs in optimization processes [
26].
In the CST method, the upper and lower airfoil curves are represented as:
where
Δyte denotes the trailing edge thickness of the airfoil (this term is omitted if the airfoil has a sharp trailing edge).
The class function for defining airfoil geometries is expressed as:
while the shape function for generating arbitrary aerodynamic shapes is:
where
BPn is the Bernstein polynomial given by:
The use of Bernstein polynomials guarantees smooth curves and surfaces, avoiding discontinuities that could cause flow separation.
Thus, the extended equations defining the airfoil’s upper and lower curves are:
where
u is the subscript denoting the upper airfoil curve;
l is the subscript denoting the lower airfoil curve;
Au,r and
Al,r are the coefficients of the Bernstein polynomial components; and
x is a sequence of values between 0 and 1.
The thickness distribution and camber line of the airfoil are determined using:
2.2. Neural Network
The objective of the neural network is to substantially reduce computation time for aerodynamic coefficients of propeller cross-sections while maintaining accuracy comparable to XFOIL.
As in OpenVINT 4, this new version retains the modified ISM, which requires calculation of blade cross-section lift coefficients (
cl) and drag coefficients (
cd) as functions of: effective angle of attack (
α) and local Reynolds number (
Re) [
16]. Therefore, it was considered that the neural network has as input vectors the parameters CST (which describe the geometry of a cross-section of the blade) and as output the contour plots of each aerodynamic coefficient (
cl and
cd) as a function of
α and
Re (see
Figure 1).
One rationale for designing the neural network outputs as images (contour plots) rather than scalar values of
cl and
cd stems from compatibility requirements with the original ISM version (see
Appendix A). This approach enables evaluation of designed propellers under diverse operating conditions (freestream velocities and revolutions per minute). As shown in Algorithm A1 (lines 9–22), the iterative process requires updating
α at each step. Had scalar values been implemented as outputs, this would necessitate executing the neural network repeatedly per iteration to obtain aerodynamic coefficients. The contour plot implementation eliminates this requirement because:
Each plot contains sufficient α-range data for multiple iterations;
Predicted plots from a single inference cover multiple Re;
Identical output plots serve different operating conditions without recomputation.
Furthermore, reference [
22] demonstrates an additional advantage: the neural network implementation effectively eliminated inconsistencies (noise) in training data when using contour-based outputs.
Having defined the input and output data types for the neural network, an architecture combining a multilayer perceptron (MLP) with a variational autoencoder (VAE) decoder was implemented. This hybrid structure has demonstrated efficacy in image prediction from input vectors in prior studies [
22,
31,
32]. The hyperparameter determination process followed these steps:
In [
22], we provide further details on the architecture of the Encoder and Decoder of the VAE used (with the only difference being that in this work, only two layers (images) are considered for input and output, whereas ref. [
22] uses three). Additionally, ref. [
22] provides details on how to perform the hyperparameter selection for the MLP.
The database used for neural network training comprised 1500 airfoils with their respective aerodynamic coefficient contour plots (
cl and
cd). The input data correspond to the CST parameters, considering Bernstein polynomials of degree 5 for each curve, then the input vectors are formed by 12 parameters, 6 parameters for the upper curve (
Au,r) and 6 for the lower curve (
Al,r). To create the database, two subsets (training and testing) were considered. For training, 90% of the data was used, while 10% was allocated for testing (this data allocation ratio has yielded good results in training architectures composed of an MLP and a VAE [
22,
32]). The airfoils in each subset were generated by varying the CST parameters of the CLARK-Y airfoil between −40% and 40% (see
Table 2 and
Figure 4). The CLARK-Y airfoil was selected due to its great use in the design of propellers [
35]. Each subset was created using the Latin Hypercube Sampling technique; this technique ensures that the samples cover most of the design space in both subsets.
The contour plot data were obtained through simulations performed with XFOIL (the script used is shown in
Table 3). Prior to running XFOIL simulations, the coordinates (
x,
y) of each airfoil were extracted using the CST method and saved as dat text files. The values of
α were set to 0°, 1°, 2°, 3°, 4°, 5°, 6°, and 7°, and
Re were 10,000, 50,000, 100,000, 150,000, 200,000, 250,000, 300,000, 350,000, 400,000, 450,000, and 500,000.
To enhance training performance, both the input and output data were normalized [
37,
38]. For the normalization of input parameters, values were scaled to a 0–1 range using a MinMax scaler [
33], with the transformation defined as:
where
Aj,min and
Aj,max represent the minimum and maximum values, respectively, of the parameter
Aj.
For output data normalization, the aerodynamic coefficient values were first scaled to a 0–1 range using:
Subsequently, contour plots were generated using the contourf() function from Python 3.11. matplotlib library. The plots were created with 50 levels in a grayscale colormap (0 for black, 1 for white) [
39]. The resulting images were saved in png format, excluding axes and labels, at a resolution of 256 × 256 pixels. Examples of the normalized plots are shown in
Figure 5.
2.3. Genetic Algorithm and Self-Adaptative Penalty Method
For OpenVINT 5, a real-coded genetic algorithm was implemented. For this encoding scheme, the Simulated Binary Crossover (SBX) operator was employed [
40,
41], defined as:
where
c1 and
c2 are the offspring vectors derived from parent vectors
p1 and
p2; the subscript
j denotes each parameter composing the vectors; and
βj is calculated as:
where
u is a randomly sampled number from a uniform distribution between 0 and 1, and
ηc is the crossover parameter.
The mutation operator employs a polynomial mutation strategy [
41], defined as:
where
vi is the mutated vector derived from
ci;
Ωjl and
Ωju are the minimum and maximum allowable values for parameter
j, respectively; and
δj is calculated as:
where
ηm is the mutation parameter.
Since genetic algorithms do not directly solve constrained optimization problems, a penalty method is required to convert constrained problems into unconstrained formulations. For this new version, the SAPM was selected over penalty functions described in [
42], eliminating the need for user-defined parameters (such as
U∗ specified in [
42]). In SAPM, an adaptive penalty function combines with a distance function to determine objective vector values. The distance function computes distance measures for each dimension of the objective space. The final objective value for each individual is then obtained by summing its distance value and penalty value [
43].
The distance value
di(
ξ) is defined as:
where
rf is the ratio of the number of feasible vectors in the current population to the population size;
(
ξ) is the normalized objective function value for each vector, obtained via:
here,
fimin and
fimax are the minimum and maximum values of the objective function across the current population.
ψ(
ξ) quantifies constraint violations and is calculated as:
where
ϕjmax is the maximum value of the
j-th constraint violation across the current population; and
J is the total number of constraints (inequalities and equalities).
In addition to the distance measure, two penalty functions are incorporated into the fitness value of infeasible vectors. These penalties are formulated as:
The modified final objective value of vector
ξ is formulated as the sum of the distance measure and the penalty function in the
i-th objective function dimension:
The genetic algorithm incorporates an exponential population reduction method [
30], where the population size at each generation
g is defined as:
where
γ is a parameter controlling the decay curve shape (typically set to 5);
Nf is the minimum population size (typically set to 20);
N0 is the initial population size; and
G is the total number of generations.
The implemented genetic algorithm follows these steps:
Initialization: The N0 vectors of the first generation are randomly generated.
Aerodynamic Evaluation: Compute T and W for each vector using the modified ISM.
Fitness Assignment: Calculate the modified objective value for each vector using the self-adaptive penalty method.
Population Size Update: Calculate the next generation’s population size Ng using exponential decay.
Elitism: Transfer the top NE vectors (elite individuals) directly to the next generation population.
Crossover:
Use a tournament selection operator to select two parent vectors.
Generate two offspring vectors via the SBX operator.
Repeat until Ng − NE offspring vectors are created.
Mutation: Apply the polynomial mutation strategy to all Ng − NE offspring vectors.
Population Merge: Combine the mutated offspring vectors with the elite vectors to form the next generation.
Termination: Repeat Steps 2–8 until the maximum number of generations is reached or another stopping criterion is satisfied.
2.4. Code Implimentation
2.4.1. Design Variables
The design variables utilized in the OpenVINT 5 optimization process comprise three propeller characteristics that vary with propeller radius: chord relative to propeller diameter (
c/
d), effective angle of attack of the cross-section (
α), aerodynamic twist (
Δus,
Δls). Following the approach in [
16], smooth variation in these characteristics along the blade is achieved through two second-degree Bézier curves. These curves are defined as:
The control points for the root Bézier curve are defined as:
For the tip Bézier curve, the control points are:
In (29) and (30), ξ is replaced by c/d, α, Δus, and Δls. Here, Δus and Δls represent the combined variation in the CLARK-Y airfoil CST parameters for the upper and lower curves, respectively.
Additional parameters considered as design variables include: propeller diameter (d), number of blades (B), and revolutions per minute (nm). Thus, given , the complete set of design variables in OpenVINT 5 comprises: .
2.4.2. Calculation of the Objective Function
To obtain the calculation of the thrust provided by the propeller and the power required by the propeller, OpenVINT 5 (like version 4) uses a modified version of the ISM (from Algorithm A1). The modification consists of taking the effective angles of attack of each cross-section of the blades as input parameters, and the installation angle becomes a calculated parameter (it becomes an output) (see Algorithm 1). This modification prevents the generation of α values that fall outside the neural network operational range (that is, values with which the neural network was not trained). Additionally, this modification places the calculation of the aerodynamic coefficients outside the loop responsible for computing the local velocities of the cross-sections.
Algorithm 1 shows the pseudocode for calculating
W and
T. In the algorithm, in addition to showing the steps of the ISM (including the modification mentioned above), the process for creating the Bezier curves of the input parameters such as
c/d,
α,
Δus, and
Δls is shown. In Algorithm 1, the inputs are:
Pg—design parameter vectors of the current population; physical properties of the freestream airflow (
V∞—velocity,
ρ—density, and
ν—kinematic viscosity);
N—current population size;
NS—number of blade cross-sectional sections;
—relative position of each
NS-section;
namesDir—list of directory names for storing data of each simulated propeller in the current population. The outputs are: [
T]—thrust generated by the propeller; [
W]—power required by the propeller; [
ϕ]—installation angle or geometric twist of each blade section; and [
ηd], [
ηs]—dynamic and static efficiency of the propeller. Variables enclosed in brackets (for example [
T]) denote arrays storing values for all propellers in the current population.
| Algorithm 1. Run objective function in OpenVINT 5 |
| | , namesDir |
| | Outputs: [T], [W], [ϕ], [ηd], [ηs] |
| 1 | [n] = ∅, [d] = ∅; |
| 2 | [c/d] = ∅, [α] = ∅, [Re] = ∅, [A] = ∅; |
| 3 | for i = 1 to N do |
| 4 | | Create directory namesDiri; |
| 5 | | Get the values of c/d, α, Δus, and Δls of each section of the i-propeller with (27)–(30); |
| 6 | | Get the CST parameters (A) of each section of the i-propeller; |
| 7 | | c/d ⇾ [c/d], A ⇾ [A], α ⇾ [α]; |
| 8 | | From Pi,g extract nm and d; |
| 9 | | d ⇾ [d], nm/60 ⇾ [n]; |
| 10 | | Calculate Re in each section of the blade; |
| 11 | | Re ⇾ [Re]; |
| 12 | Normalize [A]; |
| 13 | [IC] = run_nn([A]); |
| 14 | [cl] = ∅, [cd] = ∅; |
| 15 | for k = 1 to N*NS do |
| 16 | | cl, cd = read_coeffs([α]k, [Re]k, [IC]k); |
| 17 | | cl ⇾ [cl], cd ⇾ [cd]; |
| 18 | [W] = ∅, [T] = ∅, [ηd] = ∅, [ηs] = ∅; |
| 19 | [ϕ] = ∅ |
| 20 | for i = 1 to N do |
| 21 | | Extract the corresponding data from the i-helix of [c/d], [α], [d], [n], [cl] and [cd]; |
| 22 | | ; |
| 23 | | Get ω with (A1) and (A2), respectively; |
| 24 | | for t = 1 to 10 do |
| 25 | | | Iu = ∅; |
| 26 | | | for s = 1 to NS do |
| 27 | | | with (A3); |
| 28 | | | with (A4); |
| 29 | | | with (A5); |
| 30 | | | with (A6); |
| 31 | | | with (A7); |
| 32 | | | ; |
| 33 | | | ; |
| 34 | | | with (A8); |
| 35 | | | with (A9); |
| 36 | | | with (A10); |
| 37 | | | with (A11); |
| 38 | | | ; |
| 39 | | | for s = 1 to NS do |
| 40 | | | [s:end]); |
| 41 | | ϕ ⇾ [ϕ]; |
| 42 | | for s = 1 to NS do |
| 43 | | | with (A12) and (A13), respectively; |
| 44 | | ; |
| 45 | | ; |
| 46 | | Get αp, βp and λp with (A16), (A17) and (A18), respectively; |
| 47 | | Get T, W, ηd and ηs with (A14), (A15), (A19) and (A20), respectively; |
| 48 | | T ⇾ [T], W ⇾ [W], ηd ⇾ [ηd], ηs ⇾ [ηs]; |
| 49 | | Save information in namesDiri; |
| 50 | return Outputs |
2.4.3. Blade Geometry Construction
In OpenVINT 5, the blade geometry is generated through the following steps:
Obtain the airfoil geometry for each section using the CST method;
Calculate the position of the maximum thickness (xt,max) of each airfoil section using (8);
Scale the airfoils of each section according to their corresponding chord length;
Define the blade twist axis, which intersects the chord line at the xt,max point;
Position and rotate the airfoil sections about the twist axis by ϕ degrees (the ϕ value for each section is determined using Algorithm 1).
Figure 6 shows a propeller constructed from the cross-sections generated by OpenVINT. OpenVINT 5 includes functionality to save the blade cross-section coordinates (x, y, z) as DAT text files, enabling seamless integration with SIMENS NX 8.5 software for propeller visualization.
2.4.4. OpenVINT 5 Algorithm
Algorithm 2 shows the pseudocode of OpenVINT 5, while
Figure 7 shows how OpenVINT 5 operates schematically, highlighting the main routines.
| Algorithm 2. OpenVINT 5 algorithm |
| | Inputs: Ω, V∞, ρ, ν, N, G, Tobj, name_case; |
| | Outputs: ξopt, Wopt, Topt, ηd,opt, ηs,opt; |
| 1 | Load the architecture and weights of the neural network; |
| 2 | Create folder name_case; |
| 3 | g = 1; |
| 4 | Create folder name_case/Generation_+str(g); |
| 5 | Initialize the population P1(ξ) with Latin_Hypercube_Sample(N, Ω); |
| 6 | for i = 1 to N0 |
| 7 | | Create folder name_case/Generation_+str(g)/blade_+str(i) (nameDiri); |
| 8 | Run Algorithm 1; |
| 9 | Calculate the modified objective value for each vector using SAPM; |
| 10 | for g = 2 to G; |
| 11 | | Create folder name_case/G+str(g); |
| 12 | | Calculate Ng with (25) and (26); |
| 13 | | Apply elitism operator; |
| 14 | | Apply crossover operator; |
| 15 | | Apply mutation operator; |
| 16 | | Population update Pg(ξ); |
| 17 | | for i = 1 to Ng |
| 18 | | | Create folder name_case/Generation_+str(g)/blade_+str(i); |
| 19 | | Run Algorithm A1; |
| 20 | | | Calculate the modified objective value for each vector using SAPM; |
| 21 | Extract ξopt from PG(ξ); |
| 22 | Create folder name_case/blade_opt; |
| 23 | Save information of optimal blade in name_case/blade_opt; |
| 24 | return Outputs; |
In [
44] the repository of the OpenVINT algorithm scripts is made available to the reader, in addition the scripts used for the training of the neural network are included.