-
Can I add a new (custom) wake deficit model on my own and use it to calculate AEP for a wind farm? |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 7 replies
-
Absolutely! We don't have formal documentation for this just yet so I'll try to describe it fully here. A good starting point is to copy a model that is similar to the one you'll be implementing and modify it. You can add a new model class in the wake_velocity directory and register it with the framework by listing it in Wake.model_map. Also, be sure to include it in the wake_velocity directory's The class definition itself must have a couple of functions. First, there's a function to extract any information from the grid and flow field for sizing the data arrays. This information should be available at init and should not change throughout the calculation. If there is a bit of data that will change, pass it in the next function and not here. def prepare_function(self, grid: Grid, flow_field: FlowField) -> Dict[str, Any] Next is the function to do the wake deficit calculation. Everything before the def function(
self,
x_i: np.ndarray,
y_i: np.ndarray,
z_i: np.ndarray,
axial_induction_i: np.ndarray,
deflection_field_i: np.ndarray,
yaw_angle_i: np.ndarray,
turbulence_intensity_i: np.ndarray,
ct_i: np.ndarray,
hub_height_i,
rotor_diameter_i,
*,
variables_from_prepare_function
) -> None: Some models require a special grid and/or solver, and that mapping happens in floris.simulation.Floris. Modify this as needed for your model. This should get you started, but I'm sure I'm missing something, so please update here with your progress and I'll keep helping however I can. |
Beta Was this translation helpful? Give feedback.
-
Thanks so much @rafmudaf! This is some good info for me to start working on this. I'll come back to this discussion with further questions as I make progress. |
Beta Was this translation helpful? Give feedback.
Absolutely! We don't have formal documentation for this just yet so I'll try to describe it fully here. A good starting point is to copy a model that is similar to the one you'll be implementing and modify it.
You can add a new model class in the wake_velocity directory and register it with the framework by listing it in Wake.model_map. Also, be sure to include it in the wake_velocity directory's
__init__.py
.The class definition itself must have a couple of functions. First, there's a function to extract any information from the grid and flow field for sizing the data arrays. This information should be available at init and should not change throughout the calculation. If there is a bit …