1 Introduction

Rotor design optimization is an area of research with many applications from engine optimization for aircraft to turbine design for windmills. One area of research by Wernick et al. [16, 17] involves the optimization of a fan rotor placed at the aerodynamic interface plane (AIP) of a boundary layer ingestion (BLI) inlet. The goal of the study performed by Wernick and Chen is to optimize the performance of the fan in order to help achieve the performance goals set out by NASA for future generation aircraft designs [4].

There are many different optimization schemes available that can be used to predict an optimal design. The study performed by Wernick and Chen [16] utilized an approach called the Response Surface Method (RSM) which was described in [1, 3, 16]. The optimization approach in the study performed by Wernick et al. [17] utilized the Tabu search [8] combined with the Nelder-Mead Simplex (NMS) [3, 5, 12] approach. Some of the more popular optimization schemes are genetic algorithms which utilize the concepts behind the theory of natural selection to predict an optimal result. Variations of genetic algorithms were used by Mengitsu et al. [6, 11, 14]. Regardless of the optimization scheme used, the engineer must be able to generate a mesh to describe the rotor designs predicted by the optimization algorithm which can be used in a computational fluid dynamics (CFD) code to compute the objective function. The mesh generation step may occur between optimization iterations or to generate the final optimized design. The number of times the engineer will need to generate a new mesh will vary depending on the optimization scheme. For example, the RSM algorithm will only require a small number of mesh generation steps relative to the Tabu Search, the NMS approach, or an approach using a genetic algorithm. In fact, it is impossible to predict the exact number of mesh generation steps used in genetic algorithms due to the random nature of the algorithm.

One approach to mesh generation is to generate the mesh by hand using a computer aided design tool. Generating the mesh by hand will allow the engineer the most flexibility in the mesh design which can help the engineer maximize the quality of the mesh. In [16], the design geometries were manually constructed using the software called PointWise [6]. This approach was reasonable since only a single design variable was considered. However, if more design variables are included in the study, or if a more complex optimization algorithm is considered, then constructing meshes between design steps by hand will quickly become overwhelming. For their second optimization study, Wernick et al. [17] developed a tool called the Blade Altering Toolbox (BAT) which was integrated in the optimization schemes in order to automate the geometric construction and meshing of new designs. The BAT tool drastically improved the efficiency of the studies and allowed them to examine more designs with different parameters.

When developing meshing tools, the most difficult challenge is making sure the interior of the mesh is of high enough quality to produce accurate results in a numerical physics solver such as a CFD tool. Aqilah et al. [2] examined the impact of mesh quality on the accuracy of CFD results when computing the lift and drag of an airfoil. They made the claim that the most significant mesh parameters when determining the quality of a mesh are the orthogonality, skewness, smoothness, and the aspect ratio. Juretić and Gosman [10] pointed out that an increase in skewness could hurt the accuracy of interpolation onto a cell face, deviation from orthogonality could reduce the accuracy of computing the surface-normal gradient, and a lack of uniformity, or smoothness, in the mesh could reduce the order of accuracy of the surface-normal gradient to first order. Wang [15] performed a study on meshing for aero related CFD applications and concluded that the Jacobian, or cell volume, is a significant parameter when determining the mesh quality of quadrilateral meshes.

High end meshing tools that can produce high quality meshes often use an elliptic solver to fill the interior of the mesh such as the approach described in [13]. Solving the elliptic equations often require iterative approaches which can be computationally expensive. The goal of the BAT code was to create a fast, easy, and computationally inexpensive way to redesign and re-mesh a given geometry while maintaining the overall mesh quality of the original, unaltered mesh. The BAT should also be easily integrated into any custom geometric rotor design optimization code. This paper outlines the algorithm behind the BAT code.

2 The Blade Altering Toolbox (BAT)

The BAT code algorithm alters the geometry of a baseline blade and then re-meshes the new geometry maintaining the number of nodes describing the original geometry. Currently the BAT code has two primary capabilities. The first capability is blade twisting which rotates the angle of attack of each span-wise cross-section of the rotor based on the provided twist angles inputted by the user. The second capability is blade stretching which either increases or decreases the chord length of each span-wise cross-section based on a percent change in chord length provided by the user. To use the two capabilities, the user must enter the respective parameter values at chosen radial locations on the blade. The blade is extracted from the original mesh and the inputted parameters are then interpolated onto the blade’s leading edge using either a linear or a higher order polynomial fit which is chosen by the user. The polynomial fit uses a least-squares error minimization approach to best assure the smoothness of the given parameter across the span. This initial interpolation is used to setup the respective algorithms.

The following subsections describe in detail the different features of the code. The code works in the cylindrical coordinate system where the X-axis is defined as the axial direction, and the Y-axis and Z-axis are defined to correspond to the radial, or span-wise, and tangential axes of the rotor using the standard Cartesian to cylindrical coordinate relations. See Fig. 1. The algorithm is also designed specifically for structured meshes. The coordinates are that the I-component is associated with the axial direction, the J-component corresponds to the radial direction, and the K-component corresponds to the tangential direction.

Fig. 1
figure 1

Definition of coordinate axes

2.1 Blade Twisting

The blade twisting algorithm begins by rotating the blade in order to align the radial surface normal of the blade tip with the Y-axis. See Fig. 2. This is done so that the twisting only occurs in the X and Z planes. The code then assigns a twist angle to all nodes on the blade surface with respect to the leading edge. Equations (1) and (2) below are used to compute the new X and Z coordinates of the twisted blade,

$$\begin{aligned} x_{{\rm b},{\rm new}}= & {} x_{{\rm LE}}+(x_{{\rm b},{\rm old}} - x_{{\rm LE}})\cos(\alpha ) - (z_{{\rm b},{\rm old}} - z_{{\rm LE}})\sin(\alpha ), \end{aligned}$$
(1)
$$\begin{aligned} z_{{\rm b},{\rm new}}= & {} z_{{\rm LE}}+(x_{{\rm b},{\rm old}} - x_{{\rm LE}})\sin(\alpha ) + (z_{{\rm b},{\rm old}} - z_{{\rm LE}})\cos(\alpha ). \end{aligned}$$
(2)
Fig. 2
figure 2

Definition of radial normal

The twist angle associated with the surface node is given as \(\alpha\). The X and Z coordinates of the blade are described with \(x_{\rm b}\) and \(z_{\rm b}\), respectively. The subscript new refers to the altered coordinate while the subscript old refers to the original coordinate. Because the mesh nodes describing the blade’s surface do not necessarily lie on the same radial plane as the nodes on the leading edge where the twist angles are defined, reference coordinates were assigned to each point using a linear interpolation between existing points on the leading edge based on the corresponding radial coordinate of the specified node. The variables \(x_{{\rm LE}}\) and \(z_{{\rm LE}}\) describe the reference coordinates associated with the leading edge. After the twisting procedure is complete, the blade is then rotated such that the radial surface normal of the blade tip is returned to its original orientation. The steps are outlined below visually in Figs. 3a–c.

Fig. 3
figure 3

Visualization of twisting Steps 1–3

2.2 Blade Stretching

The blade stretching algorithm treats the chord as a vector beginning at the leading edge and ending at the trailing edge. A chord vector is assigned to each node on the blade’s surface and is computed by taking the difference in the values of reference coordinates associated with the leading and trailing edges. This is shown in Eq. (3):

$$\begin{aligned} \mathbf {{\textbf {c}}} = \langle c_x,c_y,c_z \rangle = \langle x_{{\rm TE}} - x_{{\rm LE}},y_{{\rm TE}} - y_{{\rm LE}},z_{{\rm TE}} - z_{{\rm LE}} \rangle. \end{aligned}$$
(3)

The altered chord can be defined as the sum of the original chord plus the original chord multiplied by the percent change. If the percent change is positive, the chord is stretched. If the percent change is negative, then the chord is contracted. This is summarized in Eq. (4) where \(\mathbf {{\textbf {c}}}_{{\rm new}}\) and \(\mathbf {{\textbf {c}}}_{{\rm old}}\) are respectively the altered and unaltered chord vectors, and p is the percent change. Equation (4) can then be used to compute the chord components of the new chord vector, \(\mathbf {{\textbf {c}}}_{{\rm new}}\),

$$\begin{aligned} \mathbf {{\textbf {c}}}_{{\rm new}} = \mathbf {{\textbf {c}}}_{{\rm old}} + p \mathbf {{\textbf {c}}}_{{\rm old}}. \end{aligned}$$
(4)

The next step is to reform the points between the leading and trailing edges of the blade. To achieve this, the blade stretching algorithm keeps the ratio of the X, Y, and Z component distances between each point and the leading edge over the respective chord length components equivalent. This is shown in Eqs. (5), (6), and (7):

$$\begin{aligned} \frac{x_{{\rm new}}-x_{{\rm LE}}}{c_{x,{{\rm new}}}}= & {} \frac{x_{{{\rm old}}}-x_{{\rm LE}}}{c_{x,{{\rm old}}}}, \end{aligned}$$
(5)
$$\begin{aligned} \frac{y_{{\rm new}}-y_{{\rm LE}}}{c_{y,{{\rm new}}}}= & {} \frac{y_{{{\rm old}}}-y_{{\rm LE}}}{c_{y,{{\rm old}}}}, \end{aligned}$$
(6)
$$\begin{aligned} \frac{z_{{\rm new}}-z_{{\rm LE}}}{c_{z,{{\rm new}}}}= & {} \frac{z_{{{\rm old}}}-z_{{\rm LE}}}{c_{z,{{\rm old}}}}. \end{aligned}$$
(7)

The altered X, Y, and Z coordinates are then solved for using Eqs. (5), (6), and (7). The results are shown in Eqs. (8), (9), and (10):

$$\begin{aligned} x_{{\rm new}}= & {} \frac{c_{x,{{\rm new}}}}{c_{x,{{\rm old}}}}(x_{{{\rm old}}} - x_{{\rm LE}}) + x_{{\rm LE}}, \end{aligned}$$
(8)
$$\begin{aligned} y_{{\rm new}}= & {} \frac{c_{y,{{\rm new}}}}{c_{y,{{\rm old}}}}(y_{{{\rm old}}} - y_{{\rm LE}}) + y_{{\rm LE}}, \end{aligned}$$
(9)
$$\begin{aligned} z_{{\rm new}}= & {} \frac{c_{z,{{\rm new}}}}{c_{z,{{\rm old}}}}(z_{{{\rm old}}} - z_{{\rm LE}}) + z_{{\rm LE}}. \end{aligned}$$
(10)

Equations (8), (9), and (10) are used to compute the updated X, Y, and Z coordinates for each node. Similar to the procedure used in the blade twisting, the chord lengths and the leading edge coordinates are interpolated based on the radial position of the node using the chord stretching data applied to the leading edge.

2.3 Maintaining Hub Exit Plane

When the deformations are applied to the blade, the exit plane of the mesh will end up moving as a result. A linear mapping of the points is applied in order to force the altered mesh to match the exit plane of the original design. This is done by maintaining the ratio between the axial distance separating two adjacent points and the axial distance between the trailing edge of the blade and the end of the mesh. The algorithm can be summarized by Eq. (11):

$$\begin{aligned} \frac{x_{i,{{\rm new}}} - x_{i-1,{{\rm new}}}}{x_{{\rm EP}} - x_{{\rm TE},{{\rm new}}}} = \frac{x_{i,{{\rm old}}} - x_{i-1,{{\rm old}}}}{x_{{\rm EP}} - x_{{\rm TE},{{\rm old}}}}. \end{aligned}$$
(11)

Equation (12) solves for the altered axial coordinate,

$$\begin{aligned} x_{i,{{\rm new}}} = \Bigg(\frac{x_{i,{{\rm old}}} - x_{i-1,{{\rm old}}}}{x_{{\rm EP}} - x_{{\rm TE},{{\rm old}}}}\Bigg)\Bigg(x_{{\rm EP}} - x_{{\rm TE},{{\rm new}}}\Bigg) + x_{i-1,{{\rm new}}}. \end{aligned}$$
(12)

The subscript i is the axial node location, and the subscript EP represents the exit plane coordinate.

Note that this and the above procedures are only performed on the regions of the mesh that correspond to the blade’s pressure and suction surfaces. In other words, the aforementioned procedures are applied to the constant tangential planes of the rotor’s mesh corresponding to the blade surfaces. The interior of the mesh is updated using the mesh restoration procedure described in the following subsection.

2.4 Reconstructing the Mesh

The mesh reconstruction method described in this section was designed and was only tested on blade geometries with an H-grid meshing approach. The mesh reconstruction is performed by first computing the axial, x, and tangential, \(\theta\), deformations on the mesh walls associated with the pressure and suction surface of the blade relative to the unaltered mesh. This includes the blade’s surfaces and the surface regions in front of and behind the blade’s surfaces in the axial direction. The deformations of the pressure and suction surfaces of the mesh are then propagated into the interior of the mesh using a weighted averaging described in Eqs. (13), (14), and (15) where \(w_1\) and \(w_{n_k }\) are the weighting terms applied to each point and \(\Delta _k\) is the change in either the axial or tangential coordinate with respect to the unaltered geometry at the point with the tangential computational index k. The weights written in Eqs. (13) and (14) are defined such that \(w_1=1\) when \(k=1\) and \(w_1=0\) when \(k=n_k\), and \(w_{n_k }=0\) when \(k=1\) and \(w_{n_k}=1\) when \(k=n_k\),

$$\begin{aligned} w_1= & {} \frac{k-n_k}{1-n_k}, \end{aligned}$$
(13)
$$\begin{aligned} w_{n_k}= & {} \frac{k-1}{n_k-1}, \end{aligned}$$
(14)
$$\begin{aligned} \Delta _k= & {} \frac{w_1\Delta _1 + w_{n_k}\Delta _{n_k}}{w_1 + w_{n_k}}. \end{aligned}$$
(15)

The algorithm fixes the axial, I, and radial, J, components and computes the weighting terms. The weighting terms are then used to compute the deformations at each node along the constant I and J lines using Eq. (15). The procedure is then repeated at each combination of I and J. The computed axial and tangential deformations of each point are then added to the respective coordinates of the unaltered geometry.

The next step is to reconstruct the radial, r, coordinate. This is done by first generating a function of the radius in terms of the axial direction, r(x). r(x) is defined as the radius of the unaltered mesh at the tangential mid-plane when \(k=\frac{n_k}{2}\), rounded up if \(n_k\) is odd, for each I and J coordinate. The function r(x) is then used to compute the radius at each point on the altered mesh using a linear interpolation between the two nearest values of x. This approach assures that the radial coordinates of the casing and hub of the altered mesh closely matches the radial coordingate of the casing and hub of the original geometry. Any deviations in radius of the altered casing and hub will be proportional to the resolution of the mesh. These deviations will be negligible in most applications. It should also be noted that this procedure assumes that the unaltered casing and hub are rotationally symmetric.

This algorithm was created as a simple implementation to the code but has its limitations. The mesh reconstruction algorithm described in this section struggles when the twisting angle used for the blade twisting is large. The limitation is dependent on the unaltered mesh and other input parameters such as if the twisting occurs at the casing, hub, or a combination. Based on test cases, the reconstruction algorithm can handle twisting up to around 35 degrees which is likely well beyond the needs of most applications for this tool. This twisting limit is based on a combination of twisting at the casing and hub. No limitations were observed in the stretching capabilities as long as the blade was not stretched beyond the boundaries of the hub.

3 Examples

Three examples will be described in this section. All three cases use NASA’s SDT2-R4 [18] as the baseline since this was the geometry used in the study performed by Wernick and Chen [16]. Case 1 examines only the twisting algorithm with a twist angle of 15 degrees at the hub and −15 degrees at the blade tip near the casing, netting 30 degrees total. Case 2 looks only at the stretching algorithm with a 10% increase in the chord length at the hub and a 10% contraction in chord length at the blade tip near the casing. Case 3 examines a combination of Case 1 and Case 2. Table 1 summarizes the inputs of the three cases.

3.1 Examining Performance Qualities

Table 1 Summary of Example Cases 1–3

Five performance parameters computed in Pointwise were used to compare the three cases to the baseline [6]. The Jacobian was selected to make sure no negative volumes exist. The volume ratio, cell non-orthogonality, centroid skewness, and the aspect ratio were chosen in addition to the Jacobian to compare general geometric features of the four meshes. The volume ratio compares the ratio of the volume of a cell to its neighboring cells. The cell non-orthogonality is a measure of how much a cell’s wall deviates from orthogonality with respect to neighboring cells. The centroid skewness is a measure of the skewness of the angles associated with a cell. The aspect ratio compares the lengths of the sides of each cell where a value of 1 means the cell is a cube. Table 2 provides a list of the max, min, and average values of performance characteristics of a mesh taken from Pointwise. Tables 3, 4, and 5 contain the same data for each of the test cases and compares their values to that of the baseline. The “Variation from base” section in Tables 3, 4, and 5 refer to the percent differences of the altered designs compared to the unaltered baseline data.

Overall, the grid quality of each mesh is relatively consistent with that of the baseline. Though it is interesting to note that some of the performance parameters in Cases 1 and 3 saw a slight improvement in quality over the baseline. Surfaces are considered more orthogonal when the cell non-orthogonality parameter approaches 0. Cases 1 and 3 both showed a reduction in the average cell non-orthogonality parameter. The centroid skewness parameter is optimal when it equals 0. Cases 1 and 3 both illustrate a decrease in the average of these values bringing their average closer to 0 when compared to the baseline. Similarly, the aspect ratio has an ideal value of 1. Case 1 saw a drop in the average of its aspect ratio bringing the average closer to 1. Case 2 did not see any improvements in its averages, however Case 2 did slightly improve the centroid skewness parameter at its minimum. All three cases saw a reduction in quality of the volume ratio parameter which is stronger when the value is low.

Table 2 Baseline performance data
Table 3 Case 1 performance data
Table 4 Case 2 performance data
Table 5 Case 3 performance data

Figures comparing each design can be found in Figs. 4a, 5, 6, 7, and 8c. The most drastic differences between the altered mesh and the baseline can be seen in the blade and flow exit regions of the mesh as one approaches the casing. These differences are displayed in Figs. 4a–d. Figures 5a, 6a, and 7a compare the full blade passage, with the blade’s surfaces highlighted, of each case with the baseline. Figures 5b, 5c, 6b, 6c, 7b, and 7c compare the blade region at the casing and hub of each case with the baseline. Figures 8a–d compares the radial coordinates of the basline hub to the hubs of the test cases in order to illustrate that the hub remains relatively constant during the transformations.

Fig. 4
figure 4

Blade and exit regions at casing

Fig. 5
figure 5

Case 1 (red) vs. baseline (black)

Fig. 6
figure 6

Case 2 (red) vs. baseline (black)

Fig. 7
figure 7

Case 3 (red) vs. baseline (black)

Fig. 8
figure 8

Comparison of hub radius

3.2 Validation Through CFD

One way to evaluate if the BAT algorithm produced a desired mesh is to check if the outputted meshes had successfully run and converged using a CFD tool. This subsection will examine the performance of the altered meshes described in the previous subsection after running the cases through TURBO, a high end CFD tool specifically developed by Chen and Briley [7] for turbomachinery. One case was run for each of the examples described above. Each case ran a single blade passage of the rotor divided into 4 blocks as shown in Fig. 9 which highlights each block in a different color. The simulation was run for 8 full rotation cycles starting from uniform flow.

Fig. 9
figure 9

Single passage block structure

A common approach to verify the numerical convergence of internal flow is to verify that the inlet and exit mass flow rates associated with the flow approach the same value. This is shown for the baseline case and the 3 test cases in Figs. 10a–d which plot the mass flow history of each case. Figures 10a–d confirm that each case was able to converge.

Fig. 10
figure 10

Mass flow convergence

The BAT code was also applied to an optimization problem by Wernick et al. [17] who sought to optimize a rotor blade which is designed to perform within a highly distorted flow region. The distortion is represented as a region of low total pressure flow which developed due to the shape of the engine’s inlet. Figure 11 shows a total pressure contour of the inlet plane to the rotor in order to illustrate the distorted flow. The BAT code was used to modify the rotor’s geometry and the mesh of the blade passage for each design iteration within the study.

Fig. 11
figure 11

Total pressure profile of distorted flow

The primary target function was to maximize the adiabatic efficiency of the fan. The baseline design of the study performed with an adiabatic efficiency of 0.891 8. The results of the study showed an optimized design with an adiabatic efficiency of 0.935 2, which is a 4.75% improvement from the baseline design. Figures 12a–d compare the outline of the optimized design, in red, with the baseline design, in black. The success of the study illustrates the usefulness of the BAT tool for design optimization. However, the BAT tool can be improved upon with the inclusion of additional design alterations such as modifying the camber line associated with the rotor cross-sections, and the stacking line associated with the rotor itself.

Fig. 12
figure 12

Baseline (black) and optimized (red) rotor comparison

4 Conclusion

The BAT algorithm is a computationally inexpensive and powerful tool that can be used to help automate the design alteration of a given rotor geometry for an optimization procedure. It has been demonstrated in this study that the BAT algorithm can quickly and easily make alterations to a rotor geometry while maintaining the quality of the mesh describing the unaltered geometry. This was shown in Sect. 3. Furthermore, Sect. 3.2 illustrated that the BAT code can be implemented as a subroutine in an optimization scheme to alter the mesh between design iterations with little additional cost to the computational modeling.

Limitations of the BAT code’s algorithm become apparent when the alterations become large. It was concluded in this study that the BAT algorithm fails to produce a usable mesh for twist angles of around 35 degrees or more. However, this limitation is beyond the applications for most optimization studies.