Skip to content

Repeated calls to calculate wake can result in wrong wake calculations #378

@bayc

Description

@bayc

Bug description
When placed in a for loop with certain turbine layouts, calculate_wake does not return the expected values. Note: this can currently be avoided by calling fi.reinitialize() before each repeated calculate wake call, but that adds unnecessary computation.

To Reproduce
Steps to reproduce the behavior:

  1. Run the below code in the examples folder of FLORIS.
  2. See the error in the displayed plot, where the total farm power varies with each calculate wake call.
import matplotlib.pyplot as plt
from floris.tools import FlorisInterface
import numpy as np


fi = FlorisInterface("inputs/gch.yaml")

D = fi.floris.farm.rotor_diameters[0][0][0]
layout_x = np.array([0.0, 5.0*D, 10.0*D, 0.0, 5.0*D, 10.0*D])
layout_y = np.array([0.0, 0.0, 0.0, 5.0*D, 5.0*D, 5.0*D])
fi.reinitialize(layout=(layout_x,layout_y))

n = 10
wf_pow = np.zeros(n)
for k in range(n):
    fi.calculate_wake()
    wf_pow[k] = fi.get_farm_power()

plt.figure(1)
plt.plot(wf_pow)
plt.xlabel("calculate wake call #")
plt.ylabel("farm power")
plt.show()

image

Expected behavior
Expected behavior would be that calculate wake would return the same power with repeated calls where no inputs have changed (example shown below).

image

Floris Version
Release v3.0.1

System Information (please complete the following information):

  • OS: Ubuntu 20.04
  • Library versions
    • matplotlib - 3.5.1
    • numpy - 1.22.1
    • pytest - 6.2.5
    • scipy - 1.7.3
    • pandas - 1.4.0

Additional details
This is do to the current inclusion of the finalize call within the solve wrapper, which unsorts the turbines. The turbines are then not re-sorted from upstream to downstream (which occurs in the initialization step) before the next calculate wake call, which results in incorrect wake calculations.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdocumentationv3Label to denote focus on v3

Type

No type

Projects

Status

Done

Relationships

None yet

Development

No branches or pull requests

Issue actions