NREL 5MW Example - Uniform Flow
In the tests/NREL5MWTest example case, the NREL 5MW wind turbine is simulated using the ADM, with a uniform inflow of 20 m/s. To make the example case more interesting, the wind turbine is initially placed such that the rotor plane is parallel to the wind direction, and the yaw controller slowly rotates the turbine such that it faces the wind direction. As the rotor gradually takes up more wind, the pitch controller adjusts the pitch angle to protect the wind turbine above rated conditions.
This example shows the usage of user-defined sections (see Sec. -sections), field averaging (see Sec. -averaging and -phaseAveraging) and the acquisition of mechanical energy budgets (see Sec. -keBudgets).
The simulation is run for 500 s with adaptive time stepping and checkpoint files written every 100 s. These parameters are set in the
control.dat file as follows:
-startFrom startTime
-startTime 0
-endTime 500
-cfl 0.8
-adjustTimeStep 1 // adjust time step based on CFL and write frequency
-timeStep 0.5 // initial time step
-intervalType adjustableTime // time step adjusted based on write frequency
-timeInterval 100 // write frequency
The domain extends from -250 to 250 m in the x and y directions, while it goes from -90 to 210 m in the z. The wind turbine, which has a hub-height
of 90 m, is such that the rotor center is located at (0, 0, 0), as defined in the turbines/windFarmProperties file. The rotor is represented using
the ADM, and turbine data are written to file at every iteration. In order initially misalign the wind turbine by 90 degrees, the user should modify
the direction of the rotor plane in the turbines/NREL5MW file as follows:
rotorDir (0.0 1.0 0.0)
and note that all turbine controls are activated. The initial state of the wind turbine (rotation and pitch) corresponds to the turbine state when
the wind is stationary at 9 m/s, so the controller will try to adjust to the new condition. Moreover, the initial misalignment angle should be
changed to 90 degrees inside the yawControllerParameters in the turbines/control/fiveRegionsNREL file as follows:
initialFlowAngle 90
Finally, the inflow wind speed should be changed from 5 m/s (as per the original test case) to 20 m/s. This is done by editing the kLeft
boundary condition in the boundary/U fileas follows:
kLeft fixedValue (20.0 0.0 0.0)
Sections, averages and mechanical energy budgets are activated in the control.dat file as follows:
-sections 1 // TOSCA reads inside sampling/surfaces
-averaging 1 // write avgCs, avgNut, avgP, avgU and avgUU at checkpoints
-avgPeriod 0.5 // cumulate averages every 0.5 s
-avgStartTime 100 // start averaging after 100 s
-keBudgets 1 // TOSCA reads sampling/keBudgets file
The sampling/surfaces directory contains the userSections directory, where three arbitrary sections are defined, as well as
curvilinear sections defined inside iSections and jSections files. As the mesh is cartesian, these correspond to y-normal and
z-normal slices, respectively. Only one section is defined per file in this case, both cutting the rotor plane at the hub height.
The sampling/keBudgets file, only activated to show its usage (it has no real meaning, similarly to the field averaging, as the
simulation is unsteady), contains three boxes of size 80x80x80 m, centered at the rotor center, 80 m and 160 m downstream. These can
be defined as follows:
avgStartTime 0
avgPeriod 2
debug 0
cartesian 1
boxArray
{
B1
(
boxCenter (0.0 0.0 0.0)
sizeXYZ (80.0 80.0 80.0)
)
B2
(
boxCenter (80.0 0.0 0.0)
sizeXYZ (80.0 80.0 80.0)
)
B3
(
boxCenter (160.0 0.0 0.0)
sizeXYZ (80.0 80.0 80.0)
)
}
At this point, after copying the tosca and tosca2PV executables inside the case directory, the simulation can be started using 4 processors:
mpirun -np 4 ./tosca
While the simulation runs, the user can open the postProcessing/turbines/A1 file to monitor the behavior of the wind turbine. As can be noticed,
the yaw controller slowly rotates the turbine such that it faces the wind direction, while the commanded pich gradually increases.
After the simulation has completed, the results can be visualized using the tosca2PV executable:
./tosca2PV
Notably, the average fields are now written for both the curvilinear and user-defined sections, as testified by the tosca2PV output.
The following plot, created from the content of the postProcessing/turbines/0.00/A1 file, shows the adjustment of the wind turbine variables
to the initial 90 degs misalignment.
Interstingly, the controller switches off the wind turbine for a few seconds, during the transition phase. As designed, the controller drives the wind turbine to face the wind direction, while the pitch controller adjusts the pitch angle to protect the wind turbine above rated conditions, while the power output adjusts to 5 MW.
After running the tosca2PV executable, the user can visualize the results using ParaView. In particular, the executables creates the XMF directory,
which contains the NREL5MW.xmf file (where all saved 3D fields from all checkpoints are contained) as well as the iSections, jSections and
userSections directories. The first two will contain, in addition to the sliced average fields, also the instantaneous sections saved during the
simulation. Conversely, userSections will only contain the average fields for the user-defined sections (three in this case). The following image shows
the average velocity magnitude on all sections defined in the simulation, as well as the final position of the rotor disk. This is written at every
checkpoint file inside the postProcessing/turbines/0.00 directory.
By loading the instantaneous z-normal sections inside the postProcessing/jSections/0.00 directory into ParaView, the
user can create the following video, which shows the evolution of the instantaneous velocity and pressure fields over time.
Finally, the mechanical energy budgets are written inside the postProcessing/keBoxes/0.00 directory, where file for each box is created. This utility,
just shown here for demonstration purposes, can be used to track the mechanical energy budgets of the flow moving through e.g. a wind farm, by suitably
defining the boxes and plotting the various contributions to the mechanical energy equation box by box.