Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Calculation in complex terrain #851

Open
CaiZhiming-HHU opened this issue Mar 21, 2024 · 2 comments
Open

Calculation in complex terrain #851

CaiZhiming-HHU opened this issue Mar 21, 2024 · 2 comments

Comments

@CaiZhiming-HHU
Copy link

Hello! May I ask whether the latest FLORIS supports the calculation of wind farms in complex terrain?

@misi9170
Copy link
Collaborator

Hi @CaiZhiming-HHU !

FLORIS does not have capability of modeling complex terrain directly. The best method for approximating the effects of complex terrain is to use the heterogenous_inflow_config. This allows you to specify different ambient wind speeds at different locations within the domain, which is one of the main effects that complex terrain causes. See example 16 for an example of how to use the heterogeneous flow option (in particular, see lines 111--122, where the heterogeneous inflow is defined and passed to FLORIS).

Alternatively, the hub heights of the turbines can be set individually by setting different hub_heights for each turbine in the farm. This will allow you to "raise" and "lower" some turbines. You can use the following code snippet as an example of how to do this.

from floris.tools import FlorisInterface

fi = FlorisInterface("inputs/gch.yaml")
fi.reinitialize(layout_x=[0, 500.], layout_y=[0., 0.])
fi.calculate_wake()
print(fi.get_turbine_powers())
print("Power with original hub heights: {:.2f} kW".format(fi.get_farm_power()[0,0]/1000))

hub_height_T1 = 120.0

turbine_type = fi.floris.farm.turbine_definitions[0]
turbine_0 = turbine_type.copy()
turbine_1 = turbine_type.copy()

turbine_1["hub_height"] = hub_height_T1
turbine_1["turbine_type"] = "nrel_5MW_tall"

fi.reinitialize(
    turbine_type=[turbine_0, turbine_1],
    layout_x=[0, 500.],
    layout_y=[0., 0.]
)
fi.calculate_wake()

print(fi.get_turbine_powers())
print("Power with updated hub heights: {:.2f} kW".format(fi.get_farm_power()[0,0]/1000))

You should be cautious using this approach, because it will cause the wakes to pass over or under turbines at different heights, which may not be a great approximation of what happens to wakes in complex terrain. For example, if you model a hill by simply raising the hub height of the turbine on the hill, wakes from upstream turbines will pass below the turbine (through the hill), which is obviously not very realistic. Still, a combination of setting different hub_heights and using the heterogenous_inflow_config may get the flow patterns you need to sufficiently model the complex terrain.

@CaiZhiming-HHU
Copy link
Author

Thank you for your prompt reply! I've actually tried this combination that you call "a combination of setting different hub_heights and using the heterogenous_inflow_config". As you describe it, this combination will cause "through the hill". Also, when I define heterogenous_inflow_config, I define speed_multipliers at hundreds of thousands of points, which greatly increases the computational workload. In this regard, I also studied the python script for wind turbine wake and power calculation, so I only extracted speed_multipliers of "surface (up-translation terrain)" at three fixed heights from the ground in the wind field (because I set up "turbine_grids=3") and mapped them to a plane for calculation. This allows for the overlapping role of wake. However, I think this is still not the best solution. For this reason, I suggest secondary development of python code of Gauss wake model or GCH model and other models to add the function of wake center point and stream line coincidence (here assuming that the wake develops along the stream line). Then the results calculated by SOWFA or FAST.Farm are compared and verified.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants