Replies: 2 comments 5 replies
-
@rafmudaf this is looking great! If I'm understanding your thoughts for next steps correctly, you'd like to be able to call this in sequence with a calculate_wake call, so you could do something like: fi.reinitialize(wind_speeds=[8.0], wind_directions=[270.0, 90.0])
fi.calculate_wake()
extracted_flow_values = fi.get_flow_values(points=[(0.0, 0.0, 90.0), (630.0, 0.0, 90.0), (1260.0, 0.0, 90.0)])
turbine_powers = fi.get_turbine_powers() without having to redo the
|
Beta Was this translation helpful? Give feedback.
-
There has been a bit of discussion around the need for pulling out points from the flow field that aren't associated to a turbine's rotor grid. This was functionality that was available in v2 by passing an array of points to the calculation routine to add to the data structures that held all of the discrete calculation points. In v3, the solver structure was redesigned so that all points were placed in space by a particular type of grid and stored on that object as Numpy arrays. These arrays are directly used to create the rest of the data structures that store things like velocity components, turbulence intensity values, etc. Because of this difference, we can't simply add points to the data structures and iterate through them.
I've prototypes this feature in my fork and you can see the changes here. There, I've added a
PointsGrid
class that places points in space as given by the user. Then, we can use this directly instead ofFlowFieldPlanarGrid
in thefull_flow_sequential_solver
routine. This solver routine already has the infrastructure to do that flow field calculations on the turbine grids and subsequently iterate through a series of points to find their velocities based on upstream turbines. Rather than using a structured grid such as inFlowFieldPlanarGrid
, we use an arbitrary series of points. You can test this with the following script.Next steps
While this is a demo of a way to do this, the interface and workflow needs work. Primarily, this method is an adaptation of the visualization routine where the expectation is that the data on the turbine grids is no longer needed. Here, though, I think we should expect that these points are equal in importance to the rotor points and will be used in a very similar way. It's not reasonable to clear the existing data to do these point-calculations only. I think this primarily means designing
FlorisInterface
so that it supports this sort of point calculation in addition to the typicalcalculate_wake
functionality.Associated Issues
#420
#425
#585
Beta Was this translation helpful? Give feedback.
All reactions