Theory error in Gaussian wake models

Open
#669 1 comment 0 reactions 1 assignee View on GitHub

@rafmudaf is already working on this.

Since Jul 12, 2023.

Assessment

This issue has not been assessed yet.

Description

backlog bug documentation floris.simulation

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.

Dominant language
Python
Stars
301
Forks
188
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from NatLabRockies/floris

All issues in NatLabRockies/floris

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.