-
Notifications
You must be signed in to change notification settings - Fork 182
Description
Gaussian wake models have 2 errors that do not align with theory
This doesn't fit the typical issue template since it is just comparing code with theory. I will do my best to justify everything with references.
The first reference is the research paper that the Gaussian wake model is based off of:
Bastankhah, Majid, and Fernando Porté-Agel.
"Experimental and theoretical study of wind turbine wakes in yawed conditions."
Journal of Fluid Mechanics 806 (2016): 506-541.
which may be accessed publicly here. The main equations I am looking at are Eq. (6.4)
and Eq. (6.16)
I am specifically referencing the code within the following files:
floris/simulation/wake_velocity/gauss.py(herein referred to as wake_velocity) and
floris/simulation/wake_deflection/gauss.py(herein referred to as wake_deflection)
Error 1 in wake_velocity
The first error occurs in wake_velocity, with respect to Eq. (6.4) where
uR = u_initial * ct_i / ( 2.0 * (1 - np.sqrt(1 - ct_i) ) )This equation does not match up with Eq. (6.4), and it should be
uR = u_initial * ct_i * cosd(yaw_angle) / ( 2.0 * (1 - np.sqrt(1 - ct_i) ) )(note that cosine is multiplied in the numerator)
For additional verification, I also noticed that in wake_deflection lines 150-156,
uR = (
freestream_velocity
* ct_i
* cosd(tilt)
* cosd(yaw_i)
/ (2.0 * (1 - np.sqrt(1 - (ct_i * cosd(tilt) * cosd(yaw_i)))))
)further confirming the inconsistency with theory.
Error 2 in wake_deflection
The first error occurs in wake_deflection, with respect to Eq. (6.16) where
x0 = (
rotor_diameter_i
* (cosd(yaw_i) * (1 + np.sqrt(1 - ct_i * cosd(yaw_i))))
/ (np.sqrt(2) * (
4 * self.alpha * turbulence_intensity_i + 2 * self.beta * (1 - np.sqrt(1 - ct_i))
)) + x_i
)This equation does not match up with Eq. (6.16), and it should be
x0 = (
rotor_diameter_i
* (cosd(yaw_i) * (1 + np.sqrt(1 - ct_i)))
/ (np.sqrt(2) * (
4 * self.alpha * turbulence_intensity_i + 2 * self.beta * (1 - np.sqrt(1 - ct_i))
)) + x_i
)(note that cosine is removed within the square root)
For additional verification, I also noticed that in wake_velocity line 102,
x0 *= rotor_diameter_i * cosd(yaw_angle) * (1 + np.sqrt(1 - ct_i) )further confirming the inconsistency with theory.
Floris version
v3.4 (latest)
I installed by
git clone git@github.com:NREL/floris.gitBefore submitting I made sure to git pull and it appears this has not yet been spotted.