Skip to content

Theory error in Gaussian wake models #669

@RyanDunn729

Description

@RyanDunn729

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)
$$\frac{u_R}{u_\infty} = \frac{C_T \cos \gamma}{2 ( 1 - \sqrt{1-C_T \cos \gamma} )}$$
and Eq. (6.16)
$$\frac{x_0}{D} = \frac{\cos \gamma (1+\sqrt{1-C_T})}{\sqrt{2} [ 4 \alpha I + 2 \beta (1-\sqrt{1-C_T})]}$$

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 $u_R$ is calculated on line 87.

        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, $u_R$ is calculated by

        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 $x_0$ is calculated on lines 160-166.

        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, $x_0$ is calculated by

        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.git

Before submitting I made sure to git pull and it appears this has not yet been spotted.

Metadata

Metadata

Assignees

Labels

backlogTasks that need to be done but aren't scheduled. Higher priority than ideas-list.bugSomething isn't workingdocumentationfloris.simulation

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions