1 Introduction

The Deforming-Spatial-Domain/Stabilized Space–Time (DSD/SST) formulation [18] is a general-purpose moving-mesh method for computation of flows with moving interfaces. Its stabilization components are the Streamline-Upwind/Petrov-Galerkin (SUPG) [9] and Pressure-Stabilizing/ Petrov-Galerkin (PSPG) [1, 10] methods. The ST variational multiscale (ST-VMS) method [7] is a shorter name for the VMS version of the DSD/SST method, which was originally called “DSD/SST-VMST” (i.e. the version with the VMS turbulence model) in [6]. The VMS components are from the residual-based VMS method given in [1114]. The original DSD/SST formulation was named “DSD/SST-SUPS” in [6] (i.e. the version with the SUPG/PSPG stabilization), which was also called “ST-SUPS” in [8].

The Arbitrary Lagrangian–Eulerian (ALE) finite element formulation [15] is the most commonly used moving-mesh approach in computation of flow problems with moving interfaces, including fluid–structure interaction (FSI) problems (see, for example, [1634]). However, the DSD/SST formulation has also been applied to some of the most challenging moving-interface problems, including FSI (see, for example, [5, 7, 8, 3549] and references therein).

An ST method will naturally involve more computational cost per time step than an ALE method. However, as the stability and accuracy analysis reported in [6, 7, 50] for the DSD/SST formulation of the advection equation shows, versions of the DSD/SST method with higher-order basis functions in time have also higher-order accuracy in time. Consequently, the DSD/SST versions with higher-order basis functions in time can attain the desired accuracy with larger time steps. This, in some cases, might make those higher-order versions more computationally efficient than the lower-order ones. Considerations for parallel-computing efficiency also make the higher-order versions more favorable, because increasing the computational cost per time step is better for parallel efficiency than increasing the number of time steps. Furthermore, when higher-order spatial basis functions (such as NURBS [18, 21, 51, 52]) are used, it is much more effective to use also higher-order temporal basis functions. The DSD/SST method motivated a number of ideas and studies [5357] on increasing the computational efficiency in iterative solution of the large, coupled linear equation systems encountered in every nonlinear iteration of every time step of a DSD/SST computation.

Moving-mesh methods require mesh update methods. Mesh update typically consists of moving the mesh for as long as possible and remeshing as needed. With the key objectives being to maintain the element quality near solid surfaces and to minimize frequency of remeshing, a number of advanced mesh update methods [5, 35, 40, 58, 59] were developed in conjunction with the DSD/SST method, including those that minimize the deformation of the layers of small elements placed near solid surfaces. The ST context, with higher-order functions in time, gives us more effective ways of mesh moving and remeshing (see [42, 4547, 60]). Temporal versions of the NURBS basis functions are very good choices for higher-order functions in time (see [42, 4547, 60]).

The DSD/SST method was earlier applied to flows involving two objects in fast, rotational relative motion. This was accomplished with the Shear–Slip Mesh Update Method (SSMUM) [37, 61, 62]. The SSMUM was first introduced for computation of flow around two high-speed trains passing each other in a tunnel (see [37]). The challenge was to accurately and efficiently update the meshes used in computations based on the DSD/SST formulation and involving two objects in fast, linear relative motion. The idea behind the SSMUM was to restrict the mesh moving and remeshing to a thin layer of elements between the objects in relative motion. The mesh update at each time step can be accomplished by a “shear” deformation of the elements in this layer, followed by a “slip” in node connectivities. The slip in the node connectivities, to an extent, un-does the deformation of the elements and results in elements with better shapes than those that were shear-deformed. Because the remeshing consists of simply re-defining the node connectivities, both the projection errors and the mesh generation cost are minimized. A few years after the high-speed train computations, the SSMUM was implemented for objects in fast, rotational relative motion and applied to computation of flow past a rotating propeller [61] and flow around a helicopter with its rotor in motion [62].

The ST-SUPS computation of wind-turbine rotor aerodynamics was first reported in [28], followed by the first ST-VMS computation in [63], and numerical performance studies for ST-SUPS and ST-VMS computation of rotor aerodynamics in [64]. The rotor geometry was that of the NREL 5MW offshore baseline wind turbine. All this work, which was reviewed in [8, 33], was done as part of a collaboration with Bazilevs et al. , who, starting with what they reported also in [28], have done the most extensive work in modeling of wind-turbines, including the FSI and tower effects (see [8, 29, 33, 6570]). To handle the interaction between the rotor and tower, in [6870] the authors used a sliding-interface approach, which was first proposed in [52]. This technique requires no remeshing, however, the presence of sliding interfaces, where the kinematics and tractions are imposed weakly, requires additional computer implementation.

The DSD/SST formulation, like most stabilized formulations, involves stabilization parameters that play an important role in determining the accuracy of the formulation. For the ST-SUPS method, these stabilization parameters are called \(\tau _\mathrm{SUPG }, \tau _\mathrm{PSPG }\) and \(\nu _\mathrm{LSIC }\), the last one being the stabilization parameter embedded in the “least squares on incompressibility constraint (LSIC)” stabilization. For the ST-VMS method, they are called \(\tau _\mathrm{M }\) (\(\tau _\mathrm{SUPS }\) in [8, 33, 44]) and \(\nu _\mathrm{C }\) (\(\nu _\mathrm{LSIC }\) in [8, 33, 44]). There are various ways of defining the stabilization parameters (see, for example, [1, 4, 5, 7185]). The ones used with the DSD/SST formulation in recent years have mostly been those given in [4, 5]. They involve two different element length definitions. For the advection-dominated limit it is \(h_\mathrm{UGN }\) (originating from [71]), and for the diffusion-dominated limit \(h_\mathrm{RGN }\) (originating from [4]).

The ST-VMS computations of wind-turbine rotor aerodynamics in [63] included tests with two definitions of \(\nu _\mathrm{LSIC }\): the one given by Eq. (17) in [6] (originating from Eq. (17) in [5]), which is called “TC2,” and the one given by Eq. (18) in [6] (originating from [14]), which is called “TGI.” The computations in [64] involved a third definition, given by Eq. (1) in [64], which is called “LHC.” The computations in [63] showed that both better subgrid scale modeling and better mesh refinement (which is what [63] had compared to [28]) were important in obtaining correct torque values in this class of problems. For that reason, the rotor aerodynamics computations in [64] included extensive mesh refinement studies. In this paper, we introduce a new element length definition for the diffusion-dominated limit, which posseses better stabilization features and which we will call “\(h_\mathrm{RGNT }\).”

The DSD/SST computations in [28, 63, 64] did not include a wind-turbine tower, and therefore a mesh update method was not required. The presence of a tower in our computations here requires a mesh update method that can handle the fast, rotational relative motion between the rotor and tower. The SSMUM would have been one option, but we decided to use a mesh update method that is more general. We use NURBS basis functions for the temporal representation of the rotor motion, mesh motion and also in remeshing. This is essentially the same computational technology used in the ST-VMS computations of flapping-wing aerodynamics reported in [42, 4547]. We name it “ST/NURBS Mesh Update Method (STNMUM)” in this paper.

The rotor surface geometry is a NURBS surface, generated by starting from the quadratic NURBS patches that were created by Bazilevs et al.  [28] and generating a quadratic NURBS surface with \(G^2\) and \(G^1\) continuity between the patches around and along the blade, respectively. The motion of the rotor surface mesh created from the NURBS geometry is represented by quadratic temporal NURBS basis functions, with sufficient number of temporal patches for one rotation. This enables us to represent the circular paths associated with the rotor motion exactly and, with a “secondary mapping” [68, 42], specify a constant angular velocity corresponding to the invariant speeds along those paths.

Given the motion of the surface mesh, we compute meshes that serve as temporal-control points. This is done by creating with an automatic mesh generator a new mesh at the central control point of the temporal patch, and computing the meshes at the other two control points by using the mesh moving technique [5, 35, 40, 58, 59] mentioned earlier. The STNMUM allows us to do mesh computations with longer time in between, but get the mesh-related information for each ST slab, such as the coordinates and their time derivatives, from the temporal representation whenever we need. This approach where the mesh-related information is computed “directly” will be called in this paper “Direct Temporal Representation (DTR).” As an alternative approach, we can get the mesh-related data after first computing the finite element meshes associated with each ST slab by interpolation from the temporal NURBS representation of the mesh. We will call this approach “Interpolated-Mesh Temporal Representation (IMTR).” For better mesh resolution, we use layers of thin elements near the blade surfaces. These layers of elements are created with a special mesh generation process and are not part of what we create with the automatic mesh generation process. They undergo rigid-body motion with the rotor.

We perform the ST-VMS computations of the wind-turbine rotor and tower aerodynamics with a given wind speed and a specified rotor speed. We test both the DTR and IMTR approaches. For comparison purposes, we compute the rotor aerodynamics also without the tower. The rotation representation with constant angular velocity and the new element length definition for the diffusion-dominated limit are given in Sect. 2. The rotor and tower geometries are described in Sect. 3. The problem setup, mesh generation and computations are presented in Sect. 4. The concluding remarks are given in Sect. 5.

2 Computational techniques

2.1 Rotation representation with constant angular velocity

We use quadratic NURBS functions, as described in [68, 42], to represent a circular arc. We discretize time and position as follows:

$$\begin{aligned}&t = \sum \limits _{\alpha =1}^{n_\mathrm{ent }} T^\alpha (\varTheta _t(\theta ))t^{\alpha },\end{aligned}$$
(1)
$$\begin{aligned}&\mathbf{x}= \sum \limits _{\alpha =1}^{n_\mathrm{ent }} T^\alpha (\varTheta _x(\theta )) \mathbf{x}^{\alpha }. \end{aligned}$$
(2)

Here \(n_\mathrm{ent }\) is the number of temporal element nodes, \(T^\alpha \) is the basis function, \(\varTheta _t(\theta )\) and \(\varTheta _x(\theta )\) are the secondary mappings for time and position, and \(t^{\alpha }\) and \(\mathbf{x}^{\alpha }\) are the time and position values corresponding to the basis function \(T^\alpha \). The basis functions could be finite element or NURBS basis functions. For the circular arc, \(n_\mathrm{ent }=3\) and they are quadratic NURBS. The secondary mapping concept above was introduced in [6], and the velocity can be expressed as follows:

$$\begin{aligned}&\frac{d\mathbf{x}}{dt}= \left( \sum \limits _{\alpha =1}^{n_\mathrm{ent }} \frac{dT^\alpha }{d\varTheta _x} \frac{d\varTheta _x}{d\theta } \mathbf{x}^{\alpha }\right) \left( \sum \limits _{\alpha =1}^{n_\mathrm{ent }} \frac{dT^\alpha }{d\varTheta _t} \frac{d\varTheta _t}{d\theta } t^{\alpha } \right) ^{-1}, \end{aligned}$$
(3)

leading to

$$\begin{aligned}&\frac{d\mathbf{x}}{dt}\!=\! \left( \sum \limits _{\alpha =1}^{n_\mathrm{ent }} \frac{dT^\alpha }{d\varTheta _x} \mathbf{x}^{\alpha }\right) \left( \sum \limits _{\alpha =1}^{n_\mathrm{ent }} \frac{dT^\alpha }{d\varTheta _t} t^{\alpha } \right) ^{-1} \left( \frac{d\varTheta _x}{d\theta } \frac{d\theta }{d\varTheta _t} \right) .\quad \end{aligned}$$
(4)

Thus, the speed along the path can be specified only by modifying the secondary mapping. For a circular arc, two methods were introduced in [7, 42] and also described in [8]; one is modifying the secondary mapping for position and the other one is modifying both such that \(\frac{dt}{d\theta }\) is constant. We note that, in theory, the secondary mapping selections do not make any difference as long as the relationship \(\frac{d\varTheta _x}{d\varTheta _t}\) is the same.

In our implementation, to keep the process general, we search for the parametric coordinate \(\theta \) by using an iterative solution method [7, 8, 42]. We use the latter set of the secondary mappings, having constant \(\frac{dt}{d\theta }\).

Remark 1

When we use a secondary mapping for discretization of unknowns, the selection of the mappings affects the numerical integration accuracy in the physical domain.

For the IMTR, we find the parametric coordinate corresponding to each time level and interpolate the position to obtain the corresponding mesh. For the DTR, we first calculate time corresponding to each integration point, including the time step size because of the jump term, and then calculate \(\varTheta _x\) and \(\varTheta _t\) to interpolate the position and velocity from Eqs. (2) and (4).

2.2 Element length definition for the diffusion-dominated limit

The element length definition for the diffusion-dominated limit is used in calculating the diffusion-dominated limit of the stabilization parameters \(\tau _\mathrm{SUPG }, \tau _\mathrm{PSPG }\) and \(\tau _\mathrm{M }\) (\(= \tau _\mathrm{SUPS }\)), and, directly or indirectly (through \(\tau _\mathrm{SUPS }\)), in calculating all options of \(\nu _\mathrm{LSIC }\) and \(\nu _\mathrm{C }\) (\(= \nu _\mathrm{LSIC }\)) except for TGI. That includes the option that was defined in [64] as a component of the LHC version, which was named in [8] “HRGN”:

$$\begin{aligned}&\nu _\mathrm{LSIC-HRGN }=\frac{h_\mathrm{RGN }^2}{\tau _\mathrm{SUPS }}. \end{aligned}$$
(5)

The element length definition introduced in [4] for the diffusion-dominated limit is expressed as follows:

$$\begin{aligned}&h_\mathrm{RGN }= 2 \left( \sum _{a=1}^{{n}_\mathrm en } \left| \mathbf{r} \cdot \pmb {\nabla }N_a\right| \right) ^{-1}, \end{aligned}$$
(6)

where \(n_\mathrm{en }\) is the number of ST element nodes, \(N_a\) is the ST basis functions associated with the ST node \(a\), and

$$\begin{aligned}&\mathbf{r} = \frac{\pmb {\nabla }\Vert \mathbf{u}^h\Vert }{\left\| \pmb {\nabla }\Vert \mathbf{u}^h\Vert \right\| } \end{aligned}$$
(7)

represents the solution gradient. Here \({\pmb {\nabla }\Vert \mathbf{u}^h\Vert }\) is calculated as

$$\begin{aligned} {\pmb {\nabla }\Vert \mathbf{u}^h\Vert }&= \pmb {\nabla }\left( \left( \left\| \mathbf{u}^h\right\| ^2\right) ^{\frac{1}{2}}\right) = \frac{1}{2\Vert \mathbf{u}^h\Vert } \pmb {\nabla }\left( \left\| \mathbf{u}^h\right\| ^2\right) , \end{aligned}$$
(8)
$$\begin{aligned} {\pmb {\nabla }\Vert \mathbf{u}^h\Vert }&= \pmb {\nabla }\mathbf{u}^h \cdot \frac{\mathbf{u}^h}{\Vert \mathbf{u}^h\Vert }, \end{aligned}$$
(9)

resulting in

$$\begin{aligned}&\mathbf{r}= \frac{\pmb {\nabla }\mathbf{u}^h \cdot \mathbf{u}^h}{\Vert \pmb {\nabla }\mathbf{u}^h \cdot \mathbf{u}^h\Vert }. \end{aligned}$$
(10)

This expression becomes ill defined when \(\pmb {\nabla }\mathbf{u}^h \cdot \mathbf{u}^h = \mathbf{0}\).

We introduce a new element length definition for the diffusion-dominated limit:

$$\begin{aligned}&h_\mathrm{RGNT }= \left( \sum _{i=1}^{n} w_i^2 \frac{1}{h_i^2} \right) ^{-\frac{1}{2}}, \end{aligned}$$
(11)

where \(h_i > 0\) is element length for the \(i^{th}\) direction, \(w_i \ge 0\) is the weight for that direction, \(n\) is the number of directions, and

$$\begin{aligned}&\sum _{i=1}^n w_i = 1. \end{aligned}$$
(12)

Equation (11) is well defined if the element length for at least one of the directions is nonzero.

We define the element length and weight for each of the \(n\) directions based on an \({n_\mathrm{sd}}\times n\) tensor \(\mathbf{R}\):

$$\begin{aligned} h_i&= 2 \left\| \mathbf{R}_i\right\| \left( \sum _{a=1}^{{n}_\mathrm en } \left| \mathbf{R}_i \cdot \pmb {\nabla }N_a\right| \right) ^{-1}, \end{aligned}$$
(13)
$$\begin{aligned} {w}_i&= \frac{\left\| \mathbf{R}_i\right\| }{\left\| \mathbf{R}\right\| }, \end{aligned}$$
(14)

where \({n_\mathrm{sd}}\) is the number of space dimensions, \(\mathbf{R}_i\) is the \(i^{th}\) column vector of \(\mathbf{R}\), the vector norm is \(L^2\), and the matrix norm is Frobenius. From Eqs. (11), (13) and (14) we obtain

$$\begin{aligned}&h_\mathrm{RGNT }= 2 \left\| \mathbf{R}\right\| \left( \sum _{i=1}^{n} \left( \sum _{a=1}^{{n}_\mathrm en }\left| \mathbf{R}_i \cdot \pmb {\nabla }N_a\right| \right) ^{2} \right) ^{-\frac{1}{2}}, \end{aligned}$$
(15)

which is well defined if at least one of the column vectors is nonzero. We propose to define the tensor \(\mathbf{R}\) as

$$\begin{aligned}&\mathbf{R}_i =\pmb {\nabla }u_i, \end{aligned}$$
(16)

with \(n = {n_\mathrm{sd}}\). If all column vectors are zero, which implies uniformness in the flow field, to make the expression for \(h_\mathrm{RGNT }\) well defined, we define \(\mathbf{R}\) as

$$\begin{aligned}&\mathbf{R}_i = \pmb {\nabla }N_i, \end{aligned}$$
(17)

with \(n = n_\mathrm{en }\). The following is a brief justification for Eq. (17). Suppose where there is uniformness in the flow field we change only one coefficient, \(\left( u_b\right) _i\), which means that the solution gradient is in the \(\pmb {\nabla }N_b\) direction. Therefore, it is reasonable to assume that there is an equal chance of having a solution gradient in all \(\pmb {\nabla }N_b\) directions. Therefore we use all those directions as the column vectors of \(\mathbf{R}\). As an alternative to the definition given by Eq. (17), we propose

$$\begin{aligned}&\mathbf{R}_i = \pmb {\nabla }N_i - \left( \frac{\mathbf{u}^h}{\Vert \mathbf{u}^h\Vert } \cdot \pmb {\nabla }N_i \right) \frac{\mathbf{u}^h}{\Vert \mathbf{u}^h\Vert }, \end{aligned}$$
(18)

and this is based on the assumption that there is an equal chance of having a solution gradient in all \(\pmb {\nabla }N_b\) directions perpendicular to \(\mathbf{u}^h\). In this alternative option, \(\mathbf{u}^h = \mathbf{0}\) would revert the definition back to the one given by Eq. (17).

With the new element length \(h_\mathrm{RGNT }\) for the diffusion-dominated limit, the HRGN option of \(\nu _\mathrm{LSIC }\) becomes

$$\begin{aligned}&\nu _\mathrm{LSIC-HRGN }= \frac{h_\mathrm{RGNT }^2}{\tau _\mathrm{SUPS }} . \end{aligned}$$
(19)

3 Geometry construction for the wind-turbine rotor blade, hub, and tower

The geometry construction for the wind-turbine rotor blade and hub we are using in the computations was described in [28, 63], and also partially in [64]. For completeness we repeat some of that information here. The geometry of the rotor blade is based on the NREL 5MW offshore baseline wind turbine reported in [86]. A 61 m blade is attached to a hub with radius of 2 m, making the total rotor radius, \(R\), 63 m. The blade is composed of several airfoil types. The first portion of the blade is a perfect cylinder. Farther away from the root the cylinder is smoothly blended into a series of DU (Delft University) airfoils. Starting at 44.55 m from the root and all the way to the tip, the NACA64 profile is used. For each cross-section, we use quadratic NURBS to represent the 2D airfoil shape. The weights of the NURBS functions are set to unity. The weights are adjusted near the root to represent the circular cross-sections exactly. The cross-sections are lofted along the blade axis direction, also using quadratic NURBS and unit weights. This geometry-construction process yields a smooth blade surface with a relatively small number of input parameters, which is an advantage of the isogeometric representation. Images of the airfoil types used in the wind-turbine rotor blade and the final blade including the twisting cross-sections can be found in [28, 63, 64].

The tower geometry was created based on the tower design specified for the NREL 5MW offshore baseline wind turbine, which describes a circular tower with a height of 87.6 m, a base diameter of 6 m, and a top diameter of 3.87 m. This geometry was generated by lofting between NURBS curves for the top and base of the tower. The rotor axis is 90\(^\circ \) to the tower, and there is no tilt or precone. The distance between the tower axis and the point where the three blade axes intersect is 5 m. For most of the blade, the clearance from the tower is in the range 2.3 m to 2.8 m.

4 Computations

4.1 Problem setup

We compute the aerodynamics of the rotor with and without its tower for a given rotor shape and wind speed and a specified rotor speed. The rotor and tower geometries are shown in Fig. 1.

Fig. 1
figure 1

Wind-turbine rotor and tower geometries

The wind speed is uniform at 9 m/s and the rotor speed is 1.08 rad/s, giving a tip speed ratio of 7.55 (see [87] for wind-turbine terminology). We use air properties at standard sea-level conditions. The Reynolds number (based on the chord length at \(\frac{3}{4}R\) and the relative velocity there) is approximately 12 million. At the inflow boundary the velocity is set to the wind velocity, at the outflow boundary the stress vector is set to zero, and at the top, side, and bottom boundaries slip conditions are imposed.

4.2 Rotor motion

The circular turbine rotation is represented with temporal NURBS basis functions and secondary mapping, described in Sect. 2.1. Because the 3 blades of the turbine are 120\(^\circ \) apart, rotational geometric periodicity is used such that a full 360\(^\circ \) rotation is defined by 3 identical 120\(^\circ \) segments. Each 120\(^\circ \) segment is divided into 6 patches to keep the mesh distortion under control. Each patch is a 20\(^\circ \) arc, with 3 temporal-control points. The 6 temporal patches and their control points are illustrated in Fig. 2 and Table 1.

Fig. 2
figure 2

Path of a blade tip with temporal patches and control point numbering local to each patch. A control point at the start of a patch and colocated with a control point at the end of the previous patch is in parentheses. For the color code, see Table 1

Table 1 Figure 2 color code for the temporal patches

4.3 Surface mesh

The rotor surface mesh is generated by discretizing the NURBS surface geometry at each knot intersection, subdividing the knot spans into quadrilateral finite elements in a structured way, and subdividing the quadrilateral elements into two triangles. Small adjustments are made to improve the mesh near the hub. The surface mesh position is calculated at each temporal-control point shown in Fig. 2. Figure 3 shows the rotor surface at the three temporal-control points of the first patch. We note that control points 1 and 3 lie on the path traveled by the points on the blades and a portion of the hub at the start and end of the 20\(^\circ \) rotation, but control point 2 lies outside the circular arc. This means that the temporal-control mesh 2 is deformed compared to the temporal-control meshes 1 and 3. A temporal-control mesh 2 has to be generated for the part of the surface between the hub cross-sections rotating with the blades and fixed to the tower. The tower surface mesh is generated from the NURBS representation of the surface by using an unstructured triangular mesh generator and matched with the previously generated hub mesh at the intersection. The rotor surface mesh consists of 34,087 nodes and 68,112 triangles. The tower surface mesh consists of 6,952 nodes and 13,806 triangles.

Fig. 3
figure 3

Rotor surface at the three temporal-control points of the first patch

4.4 Volume mesh

4.4.1 Boundary-layer mesh

The layers of thin elements near the blades are generated by extruding the NURBS surface geometry into NURBS volume representation, subdividing the knot spans into hexahedral finite elements in a structured way, and subdividing the hexahedral elements into six tetrahedral elements. The resulting boundary-layer mesh for each blade consists of 4 layers with a first-layer thickness of about 2.85\(\times \)10\(^{-2}\) m and a total thickness of about 2.85\(\times \)10\(^{-1}\) m, 52 nodes in the circumferential direction around the blade, and approximately 145 nodes in the longitudinal direction. The tower boundary-layer mesh is generated by extruding the tower surface mesh to layers of prismatic elements, which are then subdivided into 3 tetrahedral elements each. It consists of 4 layers, with a first-layer thickness of 2.85\(\times \)10\(^{-2}\) m and a total thickness of 3.0\(\times \)10\(^{-1}\) m. The blade and tower boundary-layer meshes do not undergo any mesh deformation. This maintains the mesh quality in the boundary-layer regions. Figure 4 illustrates the outer surface of the blade boundary-layer mesh and cutplanes showing the tower and blade boundary-layer meshes.

Fig. 4
figure 4

\(Top\) Outer surface of blade and boundary-layer mesh. \(Middle\) Boundary-layer mesh at \(\frac{3}{4}R\). \(Bottom\) Tower boundary-layer mesh

4.4.2 Overall mesh

Three different meshes are used in the computations: Mesh 1, Mesh 2, and Mesh 3. Mesh 2 has both the rotor and the tower, with boundary-layer mesh only for the blades. Mesh 1 has only the rotor, and is identical to Mesh 2 except the tower is filled with volume elements. Mesh 3 has both the rotor and the tower, with boundary-layer mesh for both the blades and the tower, and a mesh refinement region downstream of the tower. All three meshes have an outer, coarser region, with an inner cylindrical refinement region surrounding the rotor. This inner refinement region includes most of the tower for Mesh 2 and Mesh 3, and the mesh refinement region downstream of the tower for Mesh 3. Figure 5 illustrates, as an example, cut planes of Mesh 3, and Fig. 6 shows zoomed longitudinal cut planes of all three meshes. The inflow and outflow boundaries are at \(3.79R\) and \(10.35R\) from the hub center, respectively. The side, top, and bottom boundaries are at \(2.29R, 3.17R\), and \(1.43R\), respectively (see Fig. 5). The volume mesh is generated once per patch using an automatic mesh generator (a total of 6 times). The mesh is generated at control point 2 of each patch to minimize mesh distortion between control points. We note that only the mesh in the inner cylindrical refinement region surrounding the rotor is generated for each patch. The outer, coarser mesh is generated only once, and is kept the same when the inner meshes are generated for each patch. The mesh moving technique [5, 35, 40, 58, 59] mentioned earlier is used to compute the mesh position for control points 1 and 3. The outer surfaces of the boundary-layer meshes serve as the boundaries where we specify the inner boundary conditions for the mesh motion. The external boundaries of the computational domain serve as the boundaries where we specify the outer boundary conditions, with zero displacement. In the elasticity equations of the mesh moving technique, a Young’s modulus of 1.0, a Poisson’s ratio of \(-\)0.20, and a Jacobian-based stiffening exponent of 1.5 are used. We use 1,500 GMRES [88] iterations for each step of the mesh motion, with diagonal preconditioner. Each 10\(^\circ \) range of motion is computed over 40 steps. Number of nodes and elements for all 6 temporal patches of the 3 volume meshes are given in Table 2.

Fig. 5
figure 5

Cut planes of temporal-control mesh 1 of patch 1 for Mesh 3

Fig. 6
figure 6

Zoomed cut planes of temporal-control mesh 1 of patch 1 for Mesh 1 (\(top\)), Mesh 2 (\(middle\)), and Mesh 3 (\(bottom\))

Table 2 Number of nodes (\(nn\)) and elements (\(ne\)) for the fluid mechanics meshes used in each temporal patch

4.5 Computational conditions

In the ST-VMS computations, \(\tau _\mathrm{M }(= \tau _\mathrm{SUPS }\)) comes from the \(\tau _\mathrm{SUPG }\) definition in [4], specifically the definition given by Eqs. (107)–(109) in [4], which can also be found as the definition given by Eqs. (7)–(9) in [5], with \(h_\mathrm{RGN }(= h_\mathrm{RGNT }\)) given by Eq. (15). For \(\nu _\mathrm{C }(= \nu _\mathrm{LSIC }\)), we use the \(\nu _\mathrm{LSIC-HRGN }\) definition given by Eq. (19). The DTR and IMTR approaches are used on all three meshes. Least-squares projection is used to interpolate the velocity and pressure between temporal patches. Because the boundary-layer meshes and the tower and rotor surface meshes remain identical between temporal patches, the velocity values are transferred exactly for those nodes. The computations performed are summarized in Table 3.

Table 3 Summary of the computations

The time-step size is 2.23\(\times \)10\(^{-3}\) s (145 time steps per patch), with 4 nonlinear iterations per time-step. First we develop the flow field for 500 time steps while the rotor is static, ramping up the inflow velocity during the first 300 steps from zero to the wind speed using a cosine ramp. During this flow-development stage of the computation, we use 150, 150, 200, and 400 GMRES iterations for the 4 nonlinear iterations. In computations with the rotor in motion, we use 150, 150, 200, and 400 GMRES iterations for Mesh 1, and 150, 250, 350, and 500 GMRES iterations for Mesh 2 and Mesh 3. With the GMRES iterations in flow computations, we use nodal-block-diagonal preconditioner. The mesh is partitioned based on the METIS algorithm [89] to improve parallel efficiency in the computations.

4.6 Results

Figure 7 shows the torque for Mesh 1 with the DTR approach, for the last 360\(^\circ \) rotation of a blade, with the rotation amount measured from the orientation seen in Fig. 2. For reference purposes, Fig. 7 includes the NREL data for the 5MW offshore wind turbine reported in [86]. The torque is within 8 \(\%\) of the NREL data.

Fig. 7
figure 7

Torque for Mesh 1 with the DTR approach, compared with the NREL data

Figure 8 shows the torque for the last 80\(^\circ \) rotation of a single blade of Mesh 1 with the DTR approach, compared with the torque from an earlier single-blade computation using the TGI option of \(\nu _\mathrm{C }\) (\(= \nu _\mathrm{LSIC }\)). The single-blade computation has the same blade geometry, wind speed, and rotor speed, but has a single-blade mesh in a rotationally-periodic domain. It has a more refined boundary-layer mesh and a time-step size that is approximately 5 times smaller. The higher torque seen for the single-blade computation may be due to the fact that the computation was carried out for a much shorter duration, only 80\(^\circ \) of rotation versus 1,080\(^\circ \) for the Mesh 1 computation. Therefore the current computation likely represents a more settled torque value.

Fig. 8
figure 8

Torque for a single blade of Mesh 1 with the DTR approach, compared with the torque from an earlier single-blade computation using the TGI option of \(\nu _\mathrm{C }(= \nu _\mathrm{LSIC }\))

Figures 9 and 10 show the torque for all three meshes with the DTR and IMTR approaches. As can be seen from these figures, Mesh 1 (no tower) has a very stable torque, while Mesh 2 and Mesh 3 (with tower) exhibit a significant but expected drop in torque each time a blade passes the tower.

Fig. 9
figure 9

Torque for Mesh 1, Mesh 2 and Mesh 3 with the DTR approach

Fig. 10
figure 10

Torque for Mesh 1, Mesh 2 and Mesh 3 with the IMTR approach

Figure 11 shows, for each of the three meshes, the torque obtained with the DTR and IMTR approaches. The figure illustrates that the DTR and IMTR approaches result in a nearly identical torque magnitude for all 3 meshes.

Fig. 11
figure 11

Torque with the DTR and IMTR approaches for Mesh 1 (\(top\)), Mesh 2 (\(middle\)), and Mesh 3 (\(bottom\))

Figure 12 shows the torque for Mesh 1 with the DTR approach, using two different time-step sizes: 2.23\(\times \)10\(^{-3}\) s (145 time steps per patch) and 4.49\(\times \)10\(^{-3}\) s (72 time steps per patch). Doubling the time-step size still yields a comparable torque value, within 10 % of the value for the smaller time-step size.

Fig. 12
figure 12

Torque for Mesh 1 with the DTR approach, using two different time-step sizes: 2.23\(\times \)10\(^{-3}\) s (145 time steps per patch) and 4.49\(\times \)10\(^{-3}\) s (72 time steps per patch)

We also carried out a computation with the convective form of the ST-VMS formulation (see Eq. (8.17) in [7]), but with a smaller time-step size: 4.46\(\times \)10\(^{-4}\) s (725 time steps per patch). Figure 13 shows the torque for Mesh 2 with the DTR approach and the conservative and convective forms of the ST-VMS formulation. The conservative-form computation is with the standard time-step size: \(2.23\times 10^{-3}\) s (145 time steps per patch).

Fig. 13
figure 13

Torque for Mesh 2 with the DTR approach and the conservative and convective forms of the ST-VMS formulation. The time-step sizes: 4.46\(\times \)10\(^{-4}\) s (725 time steps per patch) for the convective form and 2.23\(\times \)10\(^{-3}\) s (145 time steps per patch) for the conservative form. The torques shown are from the same period in a rotation cycle, but the conservative-form torque is from the last 360\(^\circ \) of the computation, and the convective-form torque is from a recently-started, ongoing computation

Figure 14 shows the torque for the individual blades of Mesh 2 with the DTR approach. The figure clearly shows the expected torque drop for each blade as it passes the tower, while the other two blades maintain relatively constant torque.

Fig. 14
figure 14

Torque for the individual blades of Mesh 2 with the DTR approach

Figure 15 shows the torque for 10 equal-length spanwise sections of a blade of Mesh 2 with the DTR approach. Greatest amount of torque is generated in sections 6–9 of the blade, while section 10 at the tip and the other lower sections generate less torque.

Fig. 15
figure 15

Torque for 10 equal-length spanwise sections of a blade of Mesh 2 with the DTR approach

Figure 16 shows a volume rendering of the vorticity for Mesh 2 with the DTR approach. The flow patterns vary considerably along each blade length, illustrating the necessity to carry out the computations in 3D.

Fig. 16
figure 16

Volume rendering of the vorticity (in s\(^{-1}\)) from the last 360\(^\circ \) of the computation for Mesh 2 with the DTR approach

Figure 17 shows the pressure coefficient at \(0.90R\) for the last 0\(^\circ \) orientation of a blade of Mesh 2, with the DTR and IMTR approaches, with the last 0\(^\circ \) orientation being common between the two computations. There is very little difference in the pressure coefficient around the blades between the DTR and IMTR approaches.

Fig. 17
figure 17

Pressure coefficient at \(0.90R\) for the last 0\(^\circ \) orientation of a blade of Mesh 2, with the DTR (\(top\)) and IMTR (\(bottom\)) approaches

Figure 18 shows the pressure coefficient at \(0.90R\) for the last 180\(^\circ \) orientation of a blade of Mesh 1, Mesh 2 and Mesh 3, with the DTR approach, with the last 180\(^\circ \) orientation being common between Mesh 2 and Mesh 3 computations.

Fig. 18
figure 18

Pressure coefficient at \(0.90R\) for the last 180\(^\circ \) orientation of a blade of Mesh 1 (\(top\)), Mesh 2 (\(middle\)), and Mesh 3 (\(bottom\)), with the DTR approach

Table 4 provides the averaged torque for the last 360\(^\circ \) rotation in all 6 computations. The values show that the difference in torque between the DTR and IMTR approaches, and between Mesh 2 and Mesh 3, is rather small. The difference in torque between Mesh 1 and Mesh 2 and 3 illustrates effect of the tower.

Figure 19 shows the vorticity around the tower for Mesh 2 and Mesh 3 with the DTR approach. Mesh 3 is able to represent the wake behind the tower far more effectively, although no vortex shedding is observed at this stage of the computation, possibly due to insufficient computing duration or mesh refinement.

Table 4 Averaged torque (MN\(\cdot \)m) for the last 360\(^\circ \) rotation in all 6 computations
Fig. 19
figure 19

Vorticity (in s\(^{-1}\)) around the tower at a cross-section \(1.1R\) from the hub center for Mesh 2 (\(top\)) and Mesh 3 (\(bottom\)) with the DTR approach. The pictures are from the last time step of the computation

5 Concluding remarks

We presented the ST techniques we have developed for computation of wind-turbine rotor and tower aerodynamics. The main computational challenges are the large Reynolds numbers and rotating turbulent flows, the care and high-resolution meshes needed in computing the correct torque values, and the presence of the tower, which requires a method that can deal with the fast, rotational relative motion between the rotor and tower. The core numerical technology is the ST-VMS method, which is the residual-based VMS version of the DSD/SST method, and which is also called DSD/SST-VMST. In calculating the stabilization parameters embedded in the ST-VMS method used in the computations reported here, we are using a new element length definition for the diffusion-dominated limit, and this has better stabilization features. The rotor geometry is that of the NREL 5MW offshore baseline wind turbine. We compute with a given wind speed and a specified rotor speed. The mesh update technique is based on using NURBS basis functions for the temporal representation of the rotor and mesh motion and in remeshing. We named it “ST/NURBS Mesh Update Method (STNMUM)” in this paper. We used 6 quadratic temporal NURBS patches for a \(1/3\) rotation of the turbine. Using NURBS basis functions for the temporal representation of the rotor motion enables us to represent the circular paths associated with that motion exactly and, with a secondary mapping, specify a constant angular velocity corresponding to the invariant speeds along those paths. Given the rotor surface mesh and its motion, the mesh at the central control point of each patch is created with an automatic mesh generator, and the meshes at the other two control points are computed by using the mesh moving method that is normally used with the DSD/SST method. The STNMUM allows us to do mesh computations with longer time in between, but get the mesh-related information for each ST slab from the temporal representation whenever we need. The automatic mesh generator is used only 6 times. For better mesh resolution, we have layers of thin elements near the blade surfaces, created with a special process outside the automatic mesh generation. These layers of elements undergo rigid-body motion with the rotor. We used two different ways of getting the mesh-related information for each ST slab from the temporal representation: (a) directly as described above, which we call Direct Temporal Representation (DTR), and (b) after first computing the finite element meshes associated with each ST slab by interpolation from the temporal NURBS representation of the mesh, which we call Interpolated-Mesh Temporal Representation (IMTR). We presented results from the computations with and without the tower, with both the DTR and IMTR approaches. We compared the torque values obtained to the NREL data. The results demonstrate that the ST-VMS method and using NURBS basis functions in temporal representation of the mesh provide an accurate and flexible computational technology for computation of wind-turbine rotor and tower aerodynamics.