foxes 0.8.2__py3-none-any.whl → 1.1.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of foxes might be problematic. Click here for more details.
- docs/source/conf.py +353 -0
- examples/abl_states/run.py +160 -0
- examples/compare_rotors_pwakes/run.py +217 -0
- examples/compare_wakes/run.py +241 -0
- examples/dyn_wakes/run.py +311 -0
- examples/field_data_nc/run.py +121 -0
- examples/induction/run.py +201 -0
- examples/multi_height/run.py +113 -0
- examples/power_mask/run.py +249 -0
- examples/random_timeseries/run.py +210 -0
- examples/scan_row/run.py +193 -0
- examples/sector_management/run.py +162 -0
- examples/sequential/run.py +209 -0
- examples/single_state/run.py +201 -0
- examples/states_lookup_table/run.py +137 -0
- examples/streamline_wakes/run.py +138 -0
- examples/tab_file/run.py +142 -0
- examples/timelines/run.py +267 -0
- examples/timeseries/run.py +190 -0
- examples/timeseries_slurm/run.py +185 -0
- examples/wind_rose/run.py +141 -0
- examples/windio/run.py +29 -0
- examples/yawed_wake/run.py +196 -0
- foxes/__init__.py +4 -8
- foxes/algorithms/__init__.py +1 -1
- foxes/algorithms/downwind/downwind.py +247 -111
- foxes/algorithms/downwind/models/farm_wakes_calc.py +12 -7
- foxes/algorithms/downwind/models/init_farm_data.py +2 -2
- foxes/algorithms/downwind/models/point_wakes_calc.py +6 -7
- foxes/algorithms/downwind/models/reorder_farm_output.py +1 -2
- foxes/algorithms/downwind/models/set_amb_farm_results.py +1 -1
- foxes/algorithms/downwind/models/set_amb_point_results.py +5 -3
- foxes/algorithms/iterative/iterative.py +74 -34
- foxes/algorithms/iterative/models/farm_wakes_calc.py +12 -7
- foxes/algorithms/iterative/models/urelax.py +3 -3
- foxes/algorithms/sequential/models/plugin.py +5 -5
- foxes/algorithms/sequential/models/seq_state.py +1 -1
- foxes/algorithms/sequential/sequential.py +126 -255
- foxes/constants.py +22 -7
- foxes/core/__init__.py +1 -0
- foxes/core/algorithm.py +632 -147
- foxes/core/data.py +252 -20
- foxes/core/data_calc_model.py +15 -291
- foxes/core/engine.py +640 -0
- foxes/core/farm_controller.py +38 -10
- foxes/core/farm_data_model.py +16 -1
- foxes/core/ground_model.py +2 -2
- foxes/core/model.py +249 -182
- foxes/core/partial_wakes_model.py +1 -1
- foxes/core/point_data_model.py +17 -2
- foxes/core/rotor_model.py +27 -21
- foxes/core/states.py +17 -1
- foxes/core/turbine_type.py +28 -0
- foxes/core/wake_frame.py +30 -34
- foxes/core/wake_model.py +5 -5
- foxes/core/wake_superposition.py +1 -1
- foxes/data/windio/windio_5turbines_timeseries.yaml +31 -15
- foxes/engines/__init__.py +17 -0
- foxes/engines/dask.py +982 -0
- foxes/engines/default.py +75 -0
- foxes/engines/futures.py +72 -0
- foxes/engines/mpi.py +38 -0
- foxes/engines/multiprocess.py +71 -0
- foxes/engines/numpy.py +167 -0
- foxes/engines/pool.py +249 -0
- foxes/engines/ray.py +79 -0
- foxes/engines/single.py +141 -0
- foxes/input/farm_layout/__init__.py +1 -0
- foxes/input/farm_layout/from_csv.py +4 -0
- foxes/input/farm_layout/from_json.py +2 -2
- foxes/input/farm_layout/grid.py +2 -2
- foxes/input/farm_layout/ring.py +65 -0
- foxes/input/farm_layout/row.py +2 -2
- foxes/input/states/__init__.py +7 -0
- foxes/input/states/create/random_abl_states.py +1 -1
- foxes/input/states/field_data_nc.py +158 -33
- foxes/input/states/multi_height.py +128 -14
- foxes/input/states/one_point_flow.py +577 -0
- foxes/input/states/scan_ws.py +74 -3
- foxes/input/states/single.py +1 -1
- foxes/input/states/slice_data_nc.py +681 -0
- foxes/input/states/states_table.py +204 -35
- foxes/input/windio/__init__.py +2 -2
- foxes/input/windio/get_states.py +44 -23
- foxes/input/windio/read_attributes.py +48 -17
- foxes/input/windio/read_farm.py +116 -102
- foxes/input/windio/read_fields.py +16 -6
- foxes/input/windio/read_outputs.py +71 -24
- foxes/input/windio/runner.py +31 -17
- foxes/input/windio/windio.py +41 -23
- foxes/models/farm_models/turbine2farm.py +1 -1
- foxes/models/ground_models/wake_mirror.py +10 -6
- foxes/models/model_book.py +58 -20
- foxes/models/partial_wakes/axiwake.py +3 -3
- foxes/models/partial_wakes/rotor_points.py +3 -3
- foxes/models/partial_wakes/top_hat.py +2 -2
- foxes/models/point_models/set_uniform_data.py +1 -1
- foxes/models/point_models/tke2ti.py +1 -1
- foxes/models/point_models/wake_deltas.py +1 -1
- foxes/models/rotor_models/centre.py +4 -0
- foxes/models/rotor_models/grid.py +24 -25
- foxes/models/rotor_models/levels.py +4 -5
- foxes/models/turbine_models/calculator.py +4 -6
- foxes/models/turbine_models/kTI_model.py +22 -6
- foxes/models/turbine_models/lookup_table.py +30 -4
- foxes/models/turbine_models/rotor_centre_calc.py +4 -3
- foxes/models/turbine_models/set_farm_vars.py +103 -34
- foxes/models/turbine_types/PCt_file.py +27 -3
- foxes/models/turbine_types/PCt_from_two.py +27 -3
- foxes/models/turbine_types/TBL_file.py +80 -0
- foxes/models/turbine_types/__init__.py +2 -0
- foxes/models/turbine_types/lookup.py +316 -0
- foxes/models/turbine_types/null_type.py +51 -1
- foxes/models/turbine_types/wsrho2PCt_from_two.py +29 -5
- foxes/models/turbine_types/wsti2PCt_from_two.py +31 -7
- foxes/models/vertical_profiles/__init__.py +1 -1
- foxes/models/vertical_profiles/data_profile.py +1 -1
- foxes/models/wake_frames/__init__.py +1 -0
- foxes/models/wake_frames/dynamic_wakes.py +424 -0
- foxes/models/wake_frames/farm_order.py +25 -5
- foxes/models/wake_frames/rotor_wd.py +6 -4
- foxes/models/wake_frames/seq_dynamic_wakes.py +61 -74
- foxes/models/wake_frames/streamlines.py +21 -22
- foxes/models/wake_frames/timelines.py +330 -129
- foxes/models/wake_frames/yawed_wakes.py +7 -4
- foxes/models/wake_models/dist_sliced.py +2 -4
- foxes/models/wake_models/induction/rankine_half_body.py +5 -5
- foxes/models/wake_models/induction/rathmann.py +78 -24
- foxes/models/wake_models/induction/self_similar.py +78 -28
- foxes/models/wake_models/induction/vortex_sheet.py +86 -48
- foxes/models/wake_models/ti/crespo_hernandez.py +6 -4
- foxes/models/wake_models/ti/iec_ti.py +40 -21
- foxes/models/wake_models/top_hat.py +1 -1
- foxes/models/wake_models/wind/bastankhah14.py +8 -6
- foxes/models/wake_models/wind/bastankhah16.py +17 -16
- foxes/models/wake_models/wind/jensen.py +4 -3
- foxes/models/wake_models/wind/turbopark.py +16 -13
- foxes/models/wake_superpositions/ti_linear.py +1 -1
- foxes/models/wake_superpositions/ti_max.py +1 -1
- foxes/models/wake_superpositions/ti_pow.py +1 -1
- foxes/models/wake_superpositions/ti_quadratic.py +1 -1
- foxes/models/wake_superpositions/ws_linear.py +8 -7
- foxes/models/wake_superpositions/ws_max.py +8 -7
- foxes/models/wake_superpositions/ws_pow.py +8 -7
- foxes/models/wake_superpositions/ws_product.py +5 -5
- foxes/models/wake_superpositions/ws_quadratic.py +8 -7
- foxes/output/__init__.py +4 -1
- foxes/output/farm_layout.py +16 -12
- foxes/output/farm_results_eval.py +1 -1
- foxes/output/flow_plots_2d/__init__.py +0 -1
- foxes/output/flow_plots_2d/flow_plots.py +70 -30
- foxes/output/grids.py +92 -22
- foxes/output/results_writer.py +2 -2
- foxes/output/rose_plot.py +3 -3
- foxes/output/seq_plugins/__init__.py +2 -0
- foxes/output/{flow_plots_2d → seq_plugins}/seq_flow_ani_plugin.py +64 -22
- foxes/output/seq_plugins/seq_wake_debug_plugin.py +145 -0
- foxes/output/slice_data.py +131 -111
- foxes/output/state_turbine_map.py +19 -14
- foxes/output/state_turbine_table.py +19 -19
- foxes/utils/__init__.py +1 -1
- foxes/utils/abl/neutral.py +2 -2
- foxes/utils/abl/stable.py +2 -2
- foxes/utils/abl/unstable.py +2 -2
- foxes/utils/data_book.py +1 -1
- foxes/utils/dev_utils.py +42 -0
- foxes/utils/dict.py +24 -1
- foxes/utils/exec_python.py +1 -1
- foxes/utils/factory.py +176 -53
- foxes/utils/geom2d/circle.py +1 -1
- foxes/utils/geom2d/polygon.py +1 -1
- foxes/utils/geopandas_utils.py +2 -2
- foxes/utils/load.py +2 -2
- foxes/utils/pandas_helpers.py +3 -2
- foxes/utils/wind_dir.py +0 -2
- foxes/utils/xarray_utils.py +24 -14
- foxes/variables.py +39 -2
- {foxes-0.8.2.dist-info → foxes-1.1.0.2.dist-info}/METADATA +75 -33
- foxes-1.1.0.2.dist-info/RECORD +309 -0
- {foxes-0.8.2.dist-info → foxes-1.1.0.2.dist-info}/WHEEL +1 -1
- foxes-1.1.0.2.dist-info/top_level.txt +4 -0
- tests/0_consistency/iterative/test_iterative.py +92 -0
- tests/0_consistency/partial_wakes/test_partial_wakes.py +90 -0
- tests/1_verification/flappy_0_6/PCt_files/flappy/run.py +85 -0
- tests/1_verification/flappy_0_6/PCt_files/test_PCt_files.py +103 -0
- tests/1_verification/flappy_0_6/abl_states/flappy/run.py +85 -0
- tests/1_verification/flappy_0_6/abl_states/test_abl_states.py +87 -0
- tests/1_verification/flappy_0_6/partial_top_hat/flappy/run.py +82 -0
- tests/1_verification/flappy_0_6/partial_top_hat/test_partial_top_hat.py +82 -0
- tests/1_verification/flappy_0_6/row_Jensen_linear_centre/flappy/run.py +92 -0
- tests/1_verification/flappy_0_6/row_Jensen_linear_centre/test_row_Jensen_linear_centre.py +93 -0
- tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/flappy/run.py +92 -0
- tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/test_row_Jensen_linear_tophat.py +96 -0
- tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2005/flappy/run.py +94 -0
- tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2005/test_row_Jensen_linear_tophat_IECTI_2005.py +122 -0
- tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2019/flappy/run.py +94 -0
- tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2019/test_row_Jensen_linear_tophat_IECTI_2019.py +122 -0
- tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/flappy/run.py +92 -0
- tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/test_row_Jensen_quadratic_centre.py +93 -0
- tests/1_verification/flappy_0_6_2/grid_rotors/flappy/run.py +85 -0
- tests/1_verification/flappy_0_6_2/grid_rotors/test_grid_rotors.py +130 -0
- tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/flappy/run.py +96 -0
- tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/test_row_Bastankhah_Crespo.py +116 -0
- tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/flappy/run.py +93 -0
- tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/test_row_Bastankhah_linear_centre.py +99 -0
- tests/3_examples/test_examples.py +34 -0
- foxes/VERSION +0 -1
- foxes/output/flow_plots_2d.py +0 -0
- foxes/utils/geopandas_helpers.py +0 -294
- foxes/utils/runners/__init__.py +0 -1
- foxes/utils/runners/runners.py +0 -280
- foxes-0.8.2.dist-info/RECORD +0 -247
- foxes-0.8.2.dist-info/top_level.txt +0 -1
- foxes-0.8.2.dist-info/zip-safe +0 -1
- {foxes-0.8.2.dist-info → foxes-1.1.0.2.dist-info}/LICENSE +0 -0
foxes/core/farm_controller.py
CHANGED
|
@@ -4,6 +4,7 @@ from .farm_data_model import FarmDataModelList, FarmDataModel
|
|
|
4
4
|
from .turbine_model import TurbineModel
|
|
5
5
|
from .turbine_type import TurbineType
|
|
6
6
|
import foxes.constants as FC
|
|
7
|
+
import foxes.variables as FV
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
class FarmController(FarmDataModel):
|
|
@@ -45,7 +46,6 @@ class FarmController(FarmDataModel):
|
|
|
45
46
|
self.turbine_model_names = None
|
|
46
47
|
self.pre_rotor_models = None
|
|
47
48
|
self.post_rotor_models = None
|
|
48
|
-
|
|
49
49
|
self.pars = pars
|
|
50
50
|
|
|
51
51
|
def sub_models(self):
|
|
@@ -85,6 +85,36 @@ class FarmController(FarmDataModel):
|
|
|
85
85
|
"final": final_pars,
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
+
def needs_rews2(self):
|
|
89
|
+
"""
|
|
90
|
+
Returns flag for requiring REWS2 variable
|
|
91
|
+
|
|
92
|
+
Returns
|
|
93
|
+
-------
|
|
94
|
+
flag: bool
|
|
95
|
+
True if REWS2 is required
|
|
96
|
+
|
|
97
|
+
"""
|
|
98
|
+
for tt in self.turbine_types:
|
|
99
|
+
if tt.needs_rews2():
|
|
100
|
+
return True
|
|
101
|
+
return False
|
|
102
|
+
|
|
103
|
+
def needs_rews3(self):
|
|
104
|
+
"""
|
|
105
|
+
Returns flag for requiring REWS3 variable
|
|
106
|
+
|
|
107
|
+
Returns
|
|
108
|
+
-------
|
|
109
|
+
flag: bool
|
|
110
|
+
True if REWS3 is required
|
|
111
|
+
|
|
112
|
+
"""
|
|
113
|
+
for tt in self.turbine_types:
|
|
114
|
+
if tt.needs_rews3():
|
|
115
|
+
return True
|
|
116
|
+
return False
|
|
117
|
+
|
|
88
118
|
def _analyze_models(self, algo, pre_rotor, models):
|
|
89
119
|
"""
|
|
90
120
|
Helper function for model analysis
|
|
@@ -128,11 +158,11 @@ class FarmController(FarmDataModel):
|
|
|
128
158
|
break
|
|
129
159
|
|
|
130
160
|
if pre_rotor:
|
|
131
|
-
self.pre_rotor_models = FarmDataModelList(tmodels)
|
|
161
|
+
self.pre_rotor_models = FarmDataModelList(models=tmodels)
|
|
132
162
|
self.pre_rotor_models.name = f"{self.name}_prer"
|
|
133
163
|
mtype = "pre-rotor"
|
|
134
164
|
else:
|
|
135
|
-
self.post_rotor_models = FarmDataModelList(tmodels)
|
|
165
|
+
self.post_rotor_models = FarmDataModelList(models=tmodels)
|
|
136
166
|
self.post_rotor_models.name = f"{self.name}_postr"
|
|
137
167
|
mtype = "post-rotor"
|
|
138
168
|
|
|
@@ -312,15 +342,13 @@ class FarmController(FarmDataModel):
|
|
|
312
342
|
The output variable names
|
|
313
343
|
|
|
314
344
|
"""
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
)
|
|
320
|
-
)
|
|
345
|
+
ovars = set(self.pre_rotor_models.output_farm_vars(algo))
|
|
346
|
+
ovars.update(self.post_rotor_models.output_farm_vars(algo))
|
|
347
|
+
|
|
348
|
+
return list(ovars)
|
|
321
349
|
|
|
322
350
|
def calculate(self, algo, mdata, fdata, pre_rotor, downwind_index=None):
|
|
323
|
-
"""
|
|
351
|
+
"""
|
|
324
352
|
The main model calculation.
|
|
325
353
|
|
|
326
354
|
This function is executed on a single chunk of data,
|
foxes/core/farm_data_model.py
CHANGED
|
@@ -52,6 +52,18 @@ class FarmDataModel(DataCalcModel):
|
|
|
52
52
|
"""
|
|
53
53
|
return []
|
|
54
54
|
|
|
55
|
+
def output_coords(self):
|
|
56
|
+
"""
|
|
57
|
+
Gets the coordinates of all output arrays
|
|
58
|
+
|
|
59
|
+
Returns
|
|
60
|
+
-------
|
|
61
|
+
dims: tuple of str
|
|
62
|
+
The coordinates of all output arrays
|
|
63
|
+
|
|
64
|
+
"""
|
|
65
|
+
return (FC.STATE, FC.TURBINE)
|
|
66
|
+
|
|
55
67
|
def ensure_variables(self, algo, mdata, fdata):
|
|
56
68
|
"""
|
|
57
69
|
Add variables to fdata, initialized with NaN
|
|
@@ -75,7 +87,7 @@ class FarmDataModel(DataCalcModel):
|
|
|
75
87
|
|
|
76
88
|
@abstractmethod
|
|
77
89
|
def calculate(self, algo, mdata, fdata):
|
|
78
|
-
"""
|
|
90
|
+
"""
|
|
79
91
|
The main model calculation.
|
|
80
92
|
|
|
81
93
|
This function is executed on a single chunk of data,
|
|
@@ -171,6 +183,9 @@ class FarmDataModelList(FarmDataModel):
|
|
|
171
183
|
super().__init__()
|
|
172
184
|
self.models = models
|
|
173
185
|
|
|
186
|
+
def __repr__(self):
|
|
187
|
+
return f"{type(self).__name__}({[m.name for m in self.models]})"
|
|
188
|
+
|
|
174
189
|
def append(self, model):
|
|
175
190
|
"""
|
|
176
191
|
Add a model to the list
|
foxes/core/ground_model.py
CHANGED
|
@@ -70,7 +70,7 @@ class GroundModel(Model):
|
|
|
70
70
|
The target point data
|
|
71
71
|
downwind_index: int
|
|
72
72
|
The index of the wake causing turbine
|
|
73
|
-
in the
|
|
73
|
+
in the downwind order
|
|
74
74
|
wake_deltas: dict
|
|
75
75
|
The wake deltas. Key: variable name,
|
|
76
76
|
value: numpy.ndarray with shape
|
|
@@ -207,7 +207,7 @@ class GroundModel(Model):
|
|
|
207
207
|
The target point data
|
|
208
208
|
downwind_index: int
|
|
209
209
|
The index of the wake causing turbine
|
|
210
|
-
in the
|
|
210
|
+
in the downwind order
|
|
211
211
|
wake_deltas: dict
|
|
212
212
|
The wake deltas. Key: variable name,
|
|
213
213
|
value: numpy.ndarray with shape
|