foxes 1.2.5__tar.gz → 1.4__tar.gz

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.

Files changed (375) hide show
  1. {foxes-1.2.5/foxes.egg-info → foxes-1.4}/PKG-INFO +14 -21
  2. {foxes-1.2.5 → foxes-1.4}/README.md +9 -14
  3. {foxes-1.2.5 → foxes-1.4}/docs/source/conf.py +3 -3
  4. {foxes-1.2.5 → foxes-1.4}/examples/abl_states/run.py +2 -2
  5. {foxes-1.2.5 → foxes-1.4}/examples/compare_rotors_pwakes/run.py +1 -1
  6. {foxes-1.2.5 → foxes-1.4}/examples/compare_wakes/run.py +1 -2
  7. {foxes-1.2.5 → foxes-1.4}/examples/dyn_wakes/run.py +29 -6
  8. {foxes-1.2.5 → foxes-1.4}/examples/induction/run.py +3 -3
  9. {foxes-1.2.5 → foxes-1.4}/examples/multi_height/run.py +1 -1
  10. {foxes-1.2.5 → foxes-1.4}/examples/power_mask/run.py +2 -2
  11. foxes-1.4/examples/quickstart/run.py +16 -0
  12. {foxes-1.2.5 → foxes-1.4}/examples/random_timeseries/run.py +3 -4
  13. {foxes-1.2.5 → foxes-1.4}/examples/scan_row/run.py +3 -3
  14. {foxes-1.2.5 → foxes-1.4}/examples/sequential/run.py +33 -10
  15. {foxes-1.2.5 → foxes-1.4}/examples/single_state/run.py +3 -4
  16. {foxes-1.2.5 → foxes-1.4}/examples/states_lookup_table/run.py +3 -3
  17. {foxes-1.2.5 → foxes-1.4}/examples/streamline_wakes/run.py +27 -4
  18. {foxes-1.2.5 → foxes-1.4}/examples/tab_file/run.py +3 -3
  19. {foxes-1.2.5 → foxes-1.4}/examples/timelines/run.py +29 -5
  20. {foxes-1.2.5 → foxes-1.4}/examples/timeseries/run.py +3 -3
  21. {foxes-1.2.5 → foxes-1.4}/examples/timeseries_slurm/run.py +3 -3
  22. {foxes-1.2.5 → foxes-1.4}/examples/wind_rose/run.py +3 -3
  23. {foxes-1.2.5 → foxes-1.4}/examples/yawed_wake/run.py +16 -8
  24. foxes-1.4/foxes/__init__.py +41 -0
  25. foxes-1.4/foxes/algorithms/__init__.py +11 -0
  26. foxes-1.4/foxes/algorithms/downwind/__init__.py +3 -0
  27. {foxes-1.2.5 → foxes-1.4}/foxes/algorithms/downwind/downwind.py +53 -27
  28. foxes-1.4/foxes/algorithms/downwind/models/__init__.py +6 -0
  29. {foxes-1.2.5 → foxes-1.4}/foxes/algorithms/downwind/models/farm_wakes_calc.py +22 -14
  30. {foxes-1.2.5 → foxes-1.4}/foxes/algorithms/downwind/models/init_farm_data.py +4 -5
  31. {foxes-1.2.5 → foxes-1.4}/foxes/algorithms/downwind/models/point_wakes_calc.py +7 -13
  32. {foxes-1.2.5 → foxes-1.4}/foxes/algorithms/downwind/models/reorder_farm_output.py +5 -1
  33. {foxes-1.2.5 → foxes-1.4}/foxes/algorithms/downwind/models/set_amb_point_results.py +7 -7
  34. foxes-1.4/foxes/algorithms/iterative/__init__.py +8 -0
  35. {foxes-1.2.5 → foxes-1.4}/foxes/algorithms/iterative/iterative.py +1 -2
  36. foxes-1.4/foxes/algorithms/iterative/models/__init__.py +7 -0
  37. {foxes-1.2.5 → foxes-1.4}/foxes/algorithms/iterative/models/farm_wakes_calc.py +15 -8
  38. foxes-1.4/foxes/algorithms/sequential/__init__.py +4 -0
  39. foxes-1.4/foxes/algorithms/sequential/models/__init__.py +2 -0
  40. {foxes-1.2.5 → foxes-1.4}/foxes/algorithms/sequential/models/seq_state.py +0 -18
  41. {foxes-1.2.5 → foxes-1.4}/foxes/algorithms/sequential/sequential.py +8 -22
  42. foxes-1.4/foxes/config/__init__.py +5 -0
  43. {foxes-1.2.5 → foxes-1.4}/foxes/constants.py +22 -0
  44. foxes-1.4/foxes/core/__init__.py +49 -0
  45. {foxes-1.2.5 → foxes-1.4}/foxes/core/algorithm.py +0 -1
  46. {foxes-1.2.5 → foxes-1.4}/foxes/core/data.py +56 -29
  47. {foxes-1.2.5 → foxes-1.4}/foxes/core/engine.py +28 -14
  48. {foxes-1.2.5 → foxes-1.4}/foxes/core/farm_controller.py +2 -2
  49. {foxes-1.2.5 → foxes-1.4}/foxes/core/farm_data_model.py +1 -0
  50. {foxes-1.2.5 → foxes-1.4}/foxes/core/ground_model.py +4 -13
  51. {foxes-1.2.5 → foxes-1.4}/foxes/core/model.py +5 -5
  52. {foxes-1.2.5 → foxes-1.4}/foxes/core/partial_wakes_model.py +147 -10
  53. {foxes-1.2.5 → foxes-1.4}/foxes/core/point_data_model.py +2 -3
  54. {foxes-1.2.5 → foxes-1.4}/foxes/core/rotor_model.py +42 -38
  55. {foxes-1.2.5 → foxes-1.4}/foxes/core/states.py +4 -50
  56. {foxes-1.2.5 → foxes-1.4}/foxes/core/turbine.py +2 -1
  57. foxes-1.4/foxes/core/wake_deflection.py +130 -0
  58. {foxes-1.2.5 → foxes-1.4}/foxes/core/wake_model.py +222 -9
  59. foxes-1.4/foxes/core/wake_superposition.py +245 -0
  60. {foxes-1.2.5 → foxes-1.4}/foxes/core/wind_farm.py +6 -6
  61. foxes-1.4/foxes/data/__init__.py +11 -0
  62. foxes-1.4/foxes/data/states/weibull_sectors_12.csv +13 -0
  63. foxes-1.4/foxes/data/states/weibull_sectors_12.nc +0 -0
  64. foxes-1.4/foxes/engines/__init__.py +16 -0
  65. {foxes-1.2.5 → foxes-1.4}/foxes/engines/dask.py +39 -14
  66. {foxes-1.2.5 → foxes-1.4}/foxes/engines/numpy.py +0 -3
  67. foxes-1.4/foxes/input/__init__.py +7 -0
  68. foxes-1.4/foxes/input/farm_layout/__init__.py +12 -0
  69. {foxes-1.2.5 → foxes-1.4}/foxes/input/farm_layout/from_csv.py +1 -1
  70. {foxes-1.2.5 → foxes-1.4}/foxes/input/farm_layout/ring.py +0 -1
  71. foxes-1.4/foxes/input/states/__init__.py +29 -0
  72. foxes-1.4/foxes/input/states/create/__init__.py +3 -0
  73. {foxes-1.2.5 → foxes-1.4}/foxes/input/states/field_data_nc.py +48 -84
  74. {foxes-1.2.5 → foxes-1.4}/foxes/input/states/multi_height.py +40 -60
  75. {foxes-1.2.5 → foxes-1.4}/foxes/input/states/one_point_flow.py +22 -25
  76. {foxes-1.2.5 → foxes-1.4}/foxes/input/states/scan.py +6 -19
  77. {foxes-1.2.5 → foxes-1.4}/foxes/input/states/single.py +6 -18
  78. {foxes-1.2.5 → foxes-1.4}/foxes/input/states/states_table.py +25 -44
  79. foxes-1.4/foxes/input/states/weibull_sectors.py +225 -0
  80. foxes-1.4/foxes/input/states/wrg_states.py +303 -0
  81. foxes-1.4/foxes/input/yaml/__init__.py +9 -0
  82. {foxes-1.2.5 → foxes-1.4}/foxes/input/yaml/dict.py +19 -19
  83. foxes-1.4/foxes/input/yaml/windio/__init__.py +10 -0
  84. {foxes-1.2.5 → foxes-1.4}/foxes/input/yaml/windio/read_attributes.py +2 -2
  85. {foxes-1.2.5 → foxes-1.4}/foxes/input/yaml/windio/read_farm.py +5 -5
  86. {foxes-1.2.5 → foxes-1.4}/foxes/input/yaml/windio/read_fields.py +4 -2
  87. {foxes-1.2.5 → foxes-1.4}/foxes/input/yaml/windio/read_site.py +52 -0
  88. {foxes-1.2.5 → foxes-1.4}/foxes/input/yaml/windio/windio.py +1 -1
  89. foxes-1.4/foxes/models/__init__.py +20 -0
  90. foxes-1.4/foxes/models/axial_induction/__init__.py +2 -0
  91. foxes-1.4/foxes/models/farm_controllers/__init__.py +5 -0
  92. foxes-1.4/foxes/models/farm_models/__init__.py +5 -0
  93. foxes-1.4/foxes/models/ground_models/__init__.py +3 -0
  94. {foxes-1.2.5 → foxes-1.4}/foxes/models/ground_models/wake_mirror.py +3 -3
  95. {foxes-1.2.5 → foxes-1.4}/foxes/models/model_book.py +175 -49
  96. foxes-1.4/foxes/models/partial_wakes/__init__.py +10 -0
  97. {foxes-1.2.5 → foxes-1.4}/foxes/models/partial_wakes/axiwake.py +30 -5
  98. foxes-1.4/foxes/models/partial_wakes/centre.py +88 -0
  99. {foxes-1.2.5 → foxes-1.4}/foxes/models/partial_wakes/rotor_points.py +45 -9
  100. {foxes-1.2.5 → foxes-1.4}/foxes/models/partial_wakes/segregated.py +2 -20
  101. {foxes-1.2.5 → foxes-1.4}/foxes/models/partial_wakes/top_hat.py +27 -2
  102. foxes-1.4/foxes/models/point_models/__init__.py +8 -0
  103. foxes-1.4/foxes/models/rotor_models/__init__.py +7 -0
  104. {foxes-1.2.5 → foxes-1.4}/foxes/models/rotor_models/centre.py +6 -4
  105. foxes-1.4/foxes/models/turbine_models/__init__.py +15 -0
  106. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_models/set_farm_vars.py +0 -1
  107. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_types/PCt_file.py +0 -2
  108. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_types/PCt_from_two.py +0 -2
  109. foxes-1.4/foxes/models/turbine_types/__init__.py +13 -0
  110. foxes-1.4/foxes/models/vertical_profiles/__init__.py +11 -0
  111. foxes-1.4/foxes/models/wake_deflections/__init__.py +3 -0
  112. foxes-1.2.5/foxes/models/wake_frames/yawed_wakes.py → foxes-1.4/foxes/models/wake_deflections/bastankhah2016.py +32 -111
  113. foxes-1.4/foxes/models/wake_deflections/jimenez.py +277 -0
  114. foxes-1.4/foxes/models/wake_deflections/no_deflection.py +94 -0
  115. foxes-1.4/foxes/models/wake_frames/__init__.py +10 -0
  116. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_frames/dynamic_wakes.py +12 -3
  117. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_frames/rotor_wd.py +3 -1
  118. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_frames/seq_dynamic_wakes.py +45 -8
  119. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_frames/streamlines.py +8 -6
  120. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_frames/timelines.py +19 -3
  121. foxes-1.4/foxes/models/wake_models/__init__.py +12 -0
  122. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/dist_sliced.py +50 -84
  123. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/gaussian.py +20 -0
  124. foxes-1.4/foxes/models/wake_models/induction/__init__.py +9 -0
  125. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/induction/rankine_half_body.py +30 -71
  126. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/induction/rathmann.py +65 -64
  127. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/induction/self_similar.py +65 -68
  128. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/induction/self_similar2020.py +0 -3
  129. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/induction/vortex_sheet.py +71 -75
  130. foxes-1.4/foxes/models/wake_models/ti/__init__.py +6 -0
  131. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/ti/crespo_hernandez.py +5 -3
  132. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/ti/iec_ti.py +6 -4
  133. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/top_hat.py +58 -7
  134. foxes-1.4/foxes/models/wake_models/wind/__init__.py +10 -0
  135. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/wind/bastankhah14.py +25 -7
  136. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/wind/bastankhah16.py +35 -3
  137. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/wind/jensen.py +15 -2
  138. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/wind/turbopark.py +28 -2
  139. foxes-1.4/foxes/models/wake_superpositions/__init__.py +22 -0
  140. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_superpositions/ti_linear.py +4 -4
  141. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_superpositions/ti_max.py +4 -4
  142. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_superpositions/ti_pow.py +4 -4
  143. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_superpositions/ti_quadratic.py +4 -4
  144. foxes-1.4/foxes/models/wake_superpositions/wind_vector.py +257 -0
  145. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_superpositions/ws_linear.py +9 -10
  146. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_superpositions/ws_max.py +8 -8
  147. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_superpositions/ws_pow.py +8 -8
  148. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_superpositions/ws_product.py +4 -4
  149. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_superpositions/ws_quadratic.py +8 -8
  150. foxes-1.4/foxes/output/__init__.py +27 -0
  151. {foxes-1.2.5 → foxes-1.4}/foxes/output/farm_layout.py +14 -6
  152. {foxes-1.2.5 → foxes-1.4}/foxes/output/farm_results_eval.py +51 -27
  153. foxes-1.4/foxes/output/flow_plots_2d/__init__.py +2 -0
  154. {foxes-1.2.5 → foxes-1.4}/foxes/output/flow_plots_2d/get_fig.py +4 -2
  155. {foxes-1.2.5 → foxes-1.4}/foxes/output/rose_plot.py +23 -5
  156. foxes-1.4/foxes/output/seq_plugins/__init__.py +2 -0
  157. {foxes-1.2.5 → foxes-1.4}/foxes/output/seq_plugins/seq_flow_ani_plugin.py +0 -3
  158. {foxes-1.2.5 → foxes-1.4}/foxes/output/seq_plugins/seq_wake_debug_plugin.py +0 -1
  159. {foxes-1.2.5 → foxes-1.4}/foxes/output/slice_data.py +16 -19
  160. {foxes-1.2.5 → foxes-1.4}/foxes/output/turbine_type_curves.py +7 -8
  161. foxes-1.4/foxes/utils/__init__.py +42 -0
  162. foxes-1.4/foxes/utils/abl/__init__.py +8 -0
  163. {foxes-1.2.5 → foxes-1.4}/foxes/utils/cubic_roots.py +1 -1
  164. {foxes-1.2.5 → foxes-1.4}/foxes/utils/data_book.py +4 -3
  165. {foxes-1.2.5 → foxes-1.4}/foxes/utils/dict.py +3 -3
  166. {foxes-1.2.5 → foxes-1.4}/foxes/utils/exec_python.py +5 -5
  167. {foxes-1.2.5 → foxes-1.4}/foxes/utils/factory.py +1 -3
  168. foxes-1.4/foxes/utils/geom2d/__init__.py +11 -0
  169. {foxes-1.2.5 → foxes-1.4}/foxes/utils/geopandas_utils.py +2 -2
  170. {foxes-1.2.5 → foxes-1.4}/foxes/utils/pandas_utils.py +4 -3
  171. {foxes-1.2.5 → foxes-1.4}/foxes/utils/tab_files.py +0 -1
  172. foxes-1.4/foxes/utils/weibull.py +28 -0
  173. {foxes-1.2.5 → foxes-1.4}/foxes/utils/wrg_utils.py +3 -1
  174. {foxes-1.2.5 → foxes-1.4}/foxes/utils/xarray_utils.py +9 -2
  175. {foxes-1.2.5 → foxes-1.4}/foxes/variables.py +67 -9
  176. {foxes-1.2.5 → foxes-1.4/foxes.egg-info}/PKG-INFO +14 -21
  177. {foxes-1.2.5 → foxes-1.4}/foxes.egg-info/SOURCES.txt +11 -3
  178. {foxes-1.2.5 → foxes-1.4}/foxes.egg-info/requires.txt +2 -5
  179. {foxes-1.2.5 → foxes-1.4}/pyproject.toml +4 -7
  180. {foxes-1.2.5 → foxes-1.4}/tests/0_consistency/iterative/test_iterative.py +2 -3
  181. {foxes-1.2.5 → foxes-1.4}/tests/0_consistency/partial_wakes/test_partial_wakes.py +2 -2
  182. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6/PCt_files/flappy/run.py +2 -3
  183. foxes-1.4/tests/1_verification/flappy_0_6/PCt_files/test_PCt_files.py +98 -0
  184. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6/abl_states/flappy/run.py +0 -1
  185. foxes-1.4/tests/1_verification/flappy_0_6/abl_states/test_abl_states.py +84 -0
  186. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6/partial_top_hat/flappy/run.py +0 -1
  187. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6/partial_top_hat/test_partial_top_hat.py +0 -2
  188. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_linear_centre/test_row_Jensen_linear_centre.py +3 -3
  189. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/test_row_Jensen_linear_tophat.py +3 -4
  190. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2005/test_row_Jensen_linear_tophat_IECTI_2005.py +3 -4
  191. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2019/test_row_Jensen_linear_tophat_IECTI_2019.py +3 -4
  192. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/test_row_Jensen_quadratic_centre.py +3 -4
  193. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6_2/grid_rotors/flappy/run.py +0 -2
  194. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6_2/grid_rotors/test_grid_rotors.py +3 -3
  195. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/test_row_Bastankhah_Crespo.py +3 -3
  196. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/flappy/run.py +0 -1
  197. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/test_row_Bastankhah_linear_centre.py +3 -4
  198. {foxes-1.2.5 → foxes-1.4}/tests/3_examples/test_examples.py +3 -2
  199. foxes-1.2.5/foxes/__init__.py +0 -37
  200. foxes-1.2.5/foxes/algorithms/__init__.py +0 -11
  201. foxes-1.2.5/foxes/algorithms/downwind/__init__.py +0 -3
  202. foxes-1.2.5/foxes/algorithms/downwind/models/__init__.py +0 -6
  203. foxes-1.2.5/foxes/algorithms/iterative/__init__.py +0 -4
  204. foxes-1.2.5/foxes/algorithms/iterative/models/__init__.py +0 -3
  205. foxes-1.2.5/foxes/algorithms/sequential/__init__.py +0 -4
  206. foxes-1.2.5/foxes/algorithms/sequential/models/__init__.py +0 -2
  207. foxes-1.2.5/foxes/config/__init__.py +0 -1
  208. foxes-1.2.5/foxes/core/__init__.py +0 -26
  209. foxes-1.2.5/foxes/core/wake_superposition.py +0 -127
  210. foxes-1.2.5/foxes/data/__init__.py +0 -6
  211. foxes-1.2.5/foxes/engines/__init__.py +0 -17
  212. foxes-1.2.5/foxes/input/__init__.py +0 -7
  213. foxes-1.2.5/foxes/input/farm_layout/__init__.py +0 -12
  214. foxes-1.2.5/foxes/input/states/__init__.py +0 -18
  215. foxes-1.2.5/foxes/input/states/create/__init__.py +0 -2
  216. foxes-1.2.5/foxes/input/states/wrg_states.py +0 -189
  217. foxes-1.2.5/foxes/input/yaml/__init__.py +0 -3
  218. foxes-1.2.5/foxes/input/yaml/windio/__init__.py +0 -5
  219. foxes-1.2.5/foxes/models/__init__.py +0 -19
  220. foxes-1.2.5/foxes/models/axial_induction/__init__.py +0 -2
  221. foxes-1.2.5/foxes/models/farm_controllers/__init__.py +0 -5
  222. foxes-1.2.5/foxes/models/farm_models/__init__.py +0 -5
  223. foxes-1.2.5/foxes/models/ground_models/__init__.py +0 -2
  224. foxes-1.2.5/foxes/models/partial_wakes/__init__.py +0 -10
  225. foxes-1.2.5/foxes/models/partial_wakes/centre.py +0 -41
  226. foxes-1.2.5/foxes/models/point_models/__init__.py +0 -8
  227. foxes-1.2.5/foxes/models/rotor_models/__init__.py +0 -7
  228. foxes-1.2.5/foxes/models/turbine_models/__init__.py +0 -15
  229. foxes-1.2.5/foxes/models/turbine_types/__init__.py +0 -13
  230. foxes-1.2.5/foxes/models/vertical_profiles/__init__.py +0 -11
  231. foxes-1.2.5/foxes/models/wake_frames/__init__.py +0 -11
  232. foxes-1.2.5/foxes/models/wake_models/__init__.py +0 -12
  233. foxes-1.2.5/foxes/models/wake_models/induction/__init__.py +0 -9
  234. foxes-1.2.5/foxes/models/wake_models/ti/__init__.py +0 -6
  235. foxes-1.2.5/foxes/models/wake_models/wind/__init__.py +0 -8
  236. foxes-1.2.5/foxes/models/wake_superpositions/__init__.py +0 -13
  237. foxes-1.2.5/foxes/output/__init__.py +0 -25
  238. foxes-1.2.5/foxes/output/flow_plots_2d/__init__.py +0 -2
  239. foxes-1.2.5/foxes/output/round.py +0 -10
  240. foxes-1.2.5/foxes/output/seq_plugins/__init__.py +0 -2
  241. foxes-1.2.5/foxes/utils/__init__.py +0 -24
  242. foxes-1.2.5/foxes/utils/abl/__init__.py +0 -8
  243. foxes-1.2.5/foxes/utils/geom2d/__init__.py +0 -9
  244. foxes-1.2.5/foxes/utils/pandas_helpers.py +0 -178
  245. foxes-1.2.5/tests/1_verification/flappy_0_6/PCt_files/test_PCt_files.py +0 -106
  246. foxes-1.2.5/tests/1_verification/flappy_0_6/abl_states/test_abl_states.py +0 -87
  247. {foxes-1.2.5 → foxes-1.4}/LICENSE +0 -0
  248. {foxes-1.2.5 → foxes-1.4}/Logo_FOXES.svg +0 -0
  249. {foxes-1.2.5 → foxes-1.4}/MANIFEST.in +0 -0
  250. {foxes-1.2.5 → foxes-1.4}/examples/field_data_nc/run.py +0 -0
  251. {foxes-1.2.5 → foxes-1.4}/examples/sector_management/run.py +0 -0
  252. {foxes-1.2.5 → foxes-1.4}/foxes/algorithms/downwind/models/set_amb_farm_results.py +0 -0
  253. {foxes-1.2.5 → foxes-1.4}/foxes/algorithms/iterative/models/convergence.py +0 -0
  254. {foxes-1.2.5 → foxes-1.4}/foxes/algorithms/iterative/models/urelax.py +0 -0
  255. {foxes-1.2.5 → foxes-1.4}/foxes/algorithms/sequential/models/plugin.py +0 -0
  256. {foxes-1.2.5 → foxes-1.4}/foxes/config/config.py +0 -0
  257. {foxes-1.2.5 → foxes-1.4}/foxes/core/axial_induction_model.py +0 -0
  258. {foxes-1.2.5 → foxes-1.4}/foxes/core/data_calc_model.py +0 -0
  259. {foxes-1.2.5 → foxes-1.4}/foxes/core/farm_model.py +0 -0
  260. {foxes-1.2.5 → foxes-1.4}/foxes/core/turbine_model.py +0 -0
  261. {foxes-1.2.5 → foxes-1.4}/foxes/core/turbine_type.py +0 -0
  262. {foxes-1.2.5 → foxes-1.4}/foxes/core/vertical_profile.py +0 -0
  263. {foxes-1.2.5 → foxes-1.4}/foxes/core/wake_frame.py +0 -0
  264. {foxes-1.2.5 → foxes-1.4}/foxes/data/farms/__init__.py +0 -0
  265. {foxes-1.2.5 → foxes-1.4}/foxes/data/farms/test_farm_67.csv +0 -0
  266. {foxes-1.2.5 → foxes-1.4}/foxes/data/parse.py +0 -0
  267. {foxes-1.2.5 → foxes-1.4}/foxes/data/power_ct_curves/DTU-10MW-D178d3-H119.csv +0 -0
  268. {foxes-1.2.5 → foxes-1.4}/foxes/data/power_ct_curves/IEA-15MW-D240-H150.csv +0 -0
  269. {foxes-1.2.5 → foxes-1.4}/foxes/data/power_ct_curves/IWT-7d5MW-D164-H100.csv +0 -0
  270. {foxes-1.2.5 → foxes-1.4}/foxes/data/power_ct_curves/NREL-5MW-D126-H90.csv +0 -0
  271. {foxes-1.2.5 → foxes-1.4}/foxes/data/power_ct_curves/__init__.py +0 -0
  272. {foxes-1.2.5 → foxes-1.4}/foxes/data/states/WRF-Timeseries-3000.nc +0 -0
  273. {foxes-1.2.5 → foxes-1.4}/foxes/data/states/WRF-Timeseries-4464.csv.gz +0 -0
  274. {foxes-1.2.5 → foxes-1.4}/foxes/data/states/__init__.py +0 -0
  275. {foxes-1.2.5 → foxes-1.4}/foxes/data/states/abl_states_6000.csv.gz +0 -0
  276. {foxes-1.2.5 → foxes-1.4}/foxes/data/states/timeseries_100.csv.gz +0 -0
  277. {foxes-1.2.5 → foxes-1.4}/foxes/data/states/timeseries_3000.csv.gz +0 -0
  278. {foxes-1.2.5 → foxes-1.4}/foxes/data/states/timeseries_8000.csv.gz +0 -0
  279. {foxes-1.2.5 → foxes-1.4}/foxes/data/states/wind_rose_bremen.csv +0 -0
  280. {foxes-1.2.5 → foxes-1.4}/foxes/data/states/wind_rotation.nc +0 -0
  281. {foxes-1.2.5 → foxes-1.4}/foxes/data/states/winds100.tab +0 -0
  282. {foxes-1.2.5 → foxes-1.4}/foxes/data/static_data.py +0 -0
  283. {foxes-1.2.5 → foxes-1.4}/foxes/engines/default.py +0 -0
  284. {foxes-1.2.5 → foxes-1.4}/foxes/engines/futures.py +0 -0
  285. {foxes-1.2.5 → foxes-1.4}/foxes/engines/mpi.py +0 -0
  286. {foxes-1.2.5 → foxes-1.4}/foxes/engines/multiprocess.py +0 -0
  287. {foxes-1.2.5 → foxes-1.4}/foxes/engines/pool.py +0 -0
  288. {foxes-1.2.5 → foxes-1.4}/foxes/engines/ray.py +0 -0
  289. {foxes-1.2.5 → foxes-1.4}/foxes/engines/single.py +0 -0
  290. {foxes-1.2.5 → foxes-1.4}/foxes/input/farm_layout/from_df.py +0 -0
  291. {foxes-1.2.5 → foxes-1.4}/foxes/input/farm_layout/from_file.py +0 -0
  292. {foxes-1.2.5 → foxes-1.4}/foxes/input/farm_layout/from_json.py +0 -0
  293. {foxes-1.2.5 → foxes-1.4}/foxes/input/farm_layout/from_random.py +0 -0
  294. {foxes-1.2.5 → foxes-1.4}/foxes/input/farm_layout/grid.py +0 -0
  295. {foxes-1.2.5 → foxes-1.4}/foxes/input/farm_layout/row.py +0 -0
  296. {foxes-1.2.5 → foxes-1.4}/foxes/input/states/create/random_abl_states.py +0 -0
  297. {foxes-1.2.5 → foxes-1.4}/foxes/input/states/create/random_timeseries.py +0 -0
  298. {foxes-1.2.5 → foxes-1.4}/foxes/input/yaml/windio/read_outputs.py +0 -0
  299. {foxes-1.2.5 → foxes-1.4}/foxes/input/yaml/yaml.py +0 -0
  300. {foxes-1.2.5 → foxes-1.4}/foxes/models/axial_induction/betz.py +0 -0
  301. {foxes-1.2.5 → foxes-1.4}/foxes/models/axial_induction/madsen.py +0 -0
  302. {foxes-1.2.5 → foxes-1.4}/foxes/models/farm_controllers/basic.py +0 -0
  303. {foxes-1.2.5 → foxes-1.4}/foxes/models/farm_models/turbine2farm.py +0 -0
  304. {foxes-1.2.5 → foxes-1.4}/foxes/models/ground_models/no_ground.py +0 -0
  305. {foxes-1.2.5 → foxes-1.4}/foxes/models/partial_wakes/grid.py +0 -0
  306. {foxes-1.2.5 → foxes-1.4}/foxes/models/point_models/set_uniform_data.py +0 -0
  307. {foxes-1.2.5 → foxes-1.4}/foxes/models/point_models/tke2ti.py +0 -0
  308. {foxes-1.2.5 → foxes-1.4}/foxes/models/point_models/ustar2ti.py +0 -0
  309. {foxes-1.2.5 → foxes-1.4}/foxes/models/point_models/wake_deltas.py +0 -0
  310. {foxes-1.2.5 → foxes-1.4}/foxes/models/rotor_models/grid.py +0 -0
  311. {foxes-1.2.5 → foxes-1.4}/foxes/models/rotor_models/levels.py +0 -0
  312. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_models/calculator.py +0 -0
  313. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_models/kTI_model.py +0 -0
  314. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_models/lookup_table.py +0 -0
  315. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_models/power_mask.py +0 -0
  316. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_models/rotor_centre_calc.py +0 -0
  317. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_models/sector_management.py +0 -0
  318. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_models/table_factors.py +0 -0
  319. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_models/thrust2ct.py +0 -0
  320. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_models/yaw2yawm.py +0 -0
  321. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_models/yawm2yaw.py +0 -0
  322. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_types/CpCt_file.py +0 -0
  323. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_types/CpCt_from_two.py +0 -0
  324. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_types/TBL_file.py +0 -0
  325. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_types/lookup.py +0 -0
  326. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_types/null_type.py +0 -0
  327. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_types/wsrho2PCt_from_two.py +0 -0
  328. {foxes-1.2.5 → foxes-1.4}/foxes/models/turbine_types/wsti2PCt_from_two.py +0 -0
  329. {foxes-1.2.5 → foxes-1.4}/foxes/models/vertical_profiles/abl_log_neutral_ws.py +0 -0
  330. {foxes-1.2.5 → foxes-1.4}/foxes/models/vertical_profiles/abl_log_stable_ws.py +0 -0
  331. {foxes-1.2.5 → foxes-1.4}/foxes/models/vertical_profiles/abl_log_unstable_ws.py +0 -0
  332. {foxes-1.2.5 → foxes-1.4}/foxes/models/vertical_profiles/abl_log_ws.py +0 -0
  333. {foxes-1.2.5 → foxes-1.4}/foxes/models/vertical_profiles/data_profile.py +0 -0
  334. {foxes-1.2.5 → foxes-1.4}/foxes/models/vertical_profiles/sheared_ws.py +0 -0
  335. {foxes-1.2.5 → foxes-1.4}/foxes/models/vertical_profiles/uniform.py +0 -0
  336. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_frames/farm_order.py +0 -0
  337. {foxes-1.2.5 → foxes-1.4}/foxes/models/wake_models/axisymmetric.py +0 -0
  338. {foxes-1.2.5 → foxes-1.4}/foxes/output/animation.py +0 -0
  339. {foxes-1.2.5 → foxes-1.4}/foxes/output/calc_points.py +0 -0
  340. {foxes-1.2.5 → foxes-1.4}/foxes/output/flow_plots_2d/flow_plots.py +0 -0
  341. {foxes-1.2.5 → foxes-1.4}/foxes/output/grids.py +0 -0
  342. {foxes-1.2.5 → foxes-1.4}/foxes/output/output.py +0 -0
  343. {foxes-1.2.5 → foxes-1.4}/foxes/output/plt.py +0 -0
  344. {foxes-1.2.5 → foxes-1.4}/foxes/output/results_writer.py +0 -0
  345. {foxes-1.2.5 → foxes-1.4}/foxes/output/rotor_point_plots.py +0 -0
  346. {foxes-1.2.5 → foxes-1.4}/foxes/output/slices_data.py +0 -0
  347. {foxes-1.2.5 → foxes-1.4}/foxes/output/state_turbine_map.py +0 -0
  348. {foxes-1.2.5 → foxes-1.4}/foxes/output/state_turbine_table.py +0 -0
  349. {foxes-1.2.5 → foxes-1.4}/foxes/utils/abl/neutral.py +0 -0
  350. {foxes-1.2.5 → foxes-1.4}/foxes/utils/abl/sheared.py +0 -0
  351. {foxes-1.2.5 → foxes-1.4}/foxes/utils/abl/stable.py +0 -0
  352. {foxes-1.2.5 → foxes-1.4}/foxes/utils/abl/unstable.py +0 -0
  353. {foxes-1.2.5 → foxes-1.4}/foxes/utils/dev_utils.py +0 -0
  354. {foxes-1.2.5 → foxes-1.4}/foxes/utils/geom2d/area_geometry.py +0 -0
  355. {foxes-1.2.5 → foxes-1.4}/foxes/utils/geom2d/circle.py +0 -0
  356. {foxes-1.2.5 → foxes-1.4}/foxes/utils/geom2d/example_intersection.py +0 -0
  357. {foxes-1.2.5 → foxes-1.4}/foxes/utils/geom2d/example_union.py +0 -0
  358. {foxes-1.2.5 → foxes-1.4}/foxes/utils/geom2d/half_plane.py +0 -0
  359. {foxes-1.2.5 → foxes-1.4}/foxes/utils/geom2d/polygon.py +0 -0
  360. {foxes-1.2.5 → foxes-1.4}/foxes/utils/load.py +0 -0
  361. {foxes-1.2.5 → foxes-1.4}/foxes/utils/random_xy.py +0 -0
  362. {foxes-1.2.5 → foxes-1.4}/foxes/utils/regularize.py +0 -0
  363. {foxes-1.2.5 → foxes-1.4}/foxes/utils/subclasses.py +0 -0
  364. {foxes-1.2.5 → foxes-1.4}/foxes/utils/two_circles.py +0 -0
  365. {foxes-1.2.5 → foxes-1.4}/foxes/utils/wind_dir.py +0 -0
  366. {foxes-1.2.5 → foxes-1.4}/foxes.egg-info/dependency_links.txt +0 -0
  367. {foxes-1.2.5 → foxes-1.4}/foxes.egg-info/entry_points.txt +0 -0
  368. {foxes-1.2.5 → foxes-1.4}/foxes.egg-info/top_level.txt +0 -0
  369. {foxes-1.2.5 → foxes-1.4}/setup.cfg +0 -0
  370. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_linear_centre/flappy/run.py +0 -0
  371. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/flappy/run.py +0 -0
  372. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2005/flappy/run.py +0 -0
  373. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2019/flappy/run.py +0 -0
  374. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/flappy/run.py +0 -0
  375. {foxes-1.2.5 → foxes-1.4}/tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/flappy/run.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: foxes
3
- Version: 1.2.5
3
+ Version: 1.4
4
4
  Summary: Farm Optimization and eXtended yield Evaluation Software
5
5
  Author: Jonas Schulte
6
6
  Maintainer: Jonas Schulte
@@ -56,16 +56,15 @@ Requires-Dist: scipy
56
56
  Requires-Dist: cycler
57
57
  Requires-Dist: tqdm
58
58
  Requires-Dist: pyyaml
59
+ Requires-Dist: h5netcdf
59
60
  Provides-Extra: opt
60
61
  Requires-Dist: foxes-opt; extra == "opt"
61
62
  Provides-Extra: dask
62
- Requires-Dist: h5netcdf; extra == "dask"
63
63
  Requires-Dist: dask; extra == "dask"
64
64
  Requires-Dist: distributed; extra == "dask"
65
65
  Requires-Dist: dask-jobqueue; extra == "dask"
66
66
  Requires-Dist: setuptools; extra == "dask"
67
67
  Provides-Extra: eng
68
- Requires-Dist: h5netcdf; extra == "eng"
69
68
  Requires-Dist: multiprocess; extra == "eng"
70
69
  Requires-Dist: dask; extra == "eng"
71
70
  Requires-Dist: distributed; extra == "eng"
@@ -74,7 +73,6 @@ Requires-Dist: setuptools; extra == "eng"
74
73
  Requires-Dist: mpi4py; extra == "eng"
75
74
  Requires-Dist: ray; extra == "eng"
76
75
  Provides-Extra: eng0
77
- Requires-Dist: h5netcdf; extra == "eng0"
78
76
  Requires-Dist: multiprocess; extra == "eng0"
79
77
  Requires-Dist: dask; extra == "eng0"
80
78
  Requires-Dist: distributed; extra == "eng0"
@@ -84,7 +82,6 @@ Requires-Dist: ray; extra == "eng0"
84
82
  Provides-Extra: test
85
83
  Requires-Dist: flake8; extra == "test"
86
84
  Requires-Dist: pytest; extra == "test"
87
- Requires-Dist: h5netcdf; extra == "test"
88
85
  Provides-Extra: doc
89
86
  Requires-Dist: setuptools; extra == "doc"
90
87
  Requires-Dist: sphinx; extra == "doc"
@@ -101,7 +98,8 @@ Requires-Dist: flake8; extra == "dev"
101
98
  Requires-Dist: pytest; extra == "dev"
102
99
  Requires-Dist: jupyter; extra == "dev"
103
100
  Requires-Dist: objsize; extra == "dev"
104
- Requires-Dist: black[jupyter]; extra == "dev"
101
+ Requires-Dist: ruff; extra == "dev"
102
+ Dynamic: license-file
105
103
 
106
104
  # Welcome to foxes
107
105
 
@@ -161,14 +159,7 @@ Evaluation Software"`
161
159
 
162
160
  ## Requirements
163
161
 
164
- The supported Python versions are:
165
-
166
- - `Python 3.8`
167
- - `Python 3.9`
168
- - `Python 3.10`
169
- - `Python 3.11`
170
- - `Python 3.12`
171
- - `Python 3.13`
162
+ The supported Python versions are `Python 3.8`...`3.13`.
172
163
 
173
164
  ## Installation
174
165
 
@@ -191,15 +182,17 @@ For detailed examples of how to run _foxes_, check the `examples` and `notebooks
191
182
  ```python
192
183
  import foxes
193
184
 
194
- states = foxes.input.states.Timeseries("timeseries_3000.csv.gz", ["WS", "WD","TI","RHO"])
185
+ if __name__ == "__main__":
186
+
187
+ states = foxes.input.states.Timeseries("timeseries_3000.csv.gz", ["WS", "WD","TI","RHO"])
195
188
 
196
- farm = foxes.WindFarm()
197
- foxes.input.farm_layout.add_from_file(farm, "test_farm_67.csv", turbine_models=["NREL5MW"])
189
+ farm = foxes.WindFarm()
190
+ foxes.input.farm_layout.add_from_file(farm, "test_farm_67.csv", turbine_models=["NREL5MW"])
198
191
 
199
- algo = foxes.algorithms.Downwind(farm, states, ["Jensen_linear_k007"])
200
- farm_results = algo.calc_farm()
192
+ algo = foxes.algorithms.Downwind(farm, states, ["Jensen_linear_k007"])
193
+ farm_results = algo.calc_farm()
201
194
 
202
- print(farm_results)
195
+ print(farm_results)
203
196
  ```
204
197
 
205
198
  ## Testing
@@ -56,14 +56,7 @@ Evaluation Software"`
56
56
 
57
57
  ## Requirements
58
58
 
59
- The supported Python versions are:
60
-
61
- - `Python 3.8`
62
- - `Python 3.9`
63
- - `Python 3.10`
64
- - `Python 3.11`
65
- - `Python 3.12`
66
- - `Python 3.13`
59
+ The supported Python versions are `Python 3.8`...`3.13`.
67
60
 
68
61
  ## Installation
69
62
 
@@ -86,15 +79,17 @@ For detailed examples of how to run _foxes_, check the `examples` and `notebooks
86
79
  ```python
87
80
  import foxes
88
81
 
89
- states = foxes.input.states.Timeseries("timeseries_3000.csv.gz", ["WS", "WD","TI","RHO"])
82
+ if __name__ == "__main__":
83
+
84
+ states = foxes.input.states.Timeseries("timeseries_3000.csv.gz", ["WS", "WD","TI","RHO"])
90
85
 
91
- farm = foxes.WindFarm()
92
- foxes.input.farm_layout.add_from_file(farm, "test_farm_67.csv", turbine_models=["NREL5MW"])
86
+ farm = foxes.WindFarm()
87
+ foxes.input.farm_layout.add_from_file(farm, "test_farm_67.csv", turbine_models=["NREL5MW"])
93
88
 
94
- algo = foxes.algorithms.Downwind(farm, states, ["Jensen_linear_k007"])
95
- farm_results = algo.calc_farm()
89
+ algo = foxes.algorithms.Downwind(farm, states, ["Jensen_linear_k007"])
90
+ farm_results = algo.calc_farm()
96
91
 
97
- print(farm_results)
92
+ print(farm_results)
98
93
  ```
99
94
 
100
95
  ## Testing
@@ -22,7 +22,7 @@ from foxes import __version__
22
22
  # -- Project information -----------------------------------------------------
23
23
 
24
24
  project = "foxes"
25
- copyright = "2024, Fraunhofer IWES"
25
+ copyright = "2025, Fraunhofer IWES"
26
26
  author = "Fraunhofer IWES"
27
27
 
28
28
  # The short X.Y version
@@ -67,9 +67,8 @@ intersphinx_mapping = {
67
67
  # autosummary_generate = False
68
68
 
69
69
  # The suffix(es) of source filenames.
70
- # You can specify multiple suffix as a list of string:
71
70
  #
72
- source_suffix = [".rst", ".md"]
71
+ source_suffix = {'.rst': 'restructuredtext', '.md': 'restructuredtext'}
73
72
 
74
73
  # The master toctree document.
75
74
  master_doc = "index"
@@ -337,6 +336,7 @@ python_apigen_modules = {
337
336
  "foxes.models.vertical_profiles": "_foxes/models/vertical_profiles/",
338
337
  "foxes.models.axial_induction": "_foxes/models/axial_induction",
339
338
  "foxes.models.ground_models": "_foxes/models/ground_models",
339
+ "foxes.models.wake_deflections": "_foxes/models/wake_deflections",
340
340
  "foxes.models.wake_frames": "_foxes/models/wake_frames/",
341
341
  "foxes.models.wake_models": "_foxes/models/wake_models/",
342
342
  "foxes.models.wake_models.induction": "_foxes/models/wake_models/induction/",
@@ -154,7 +154,7 @@ if __name__ == "__main__":
154
154
  # power results
155
155
  P0 = o.calc_mean_farm_power(ambient=True)
156
156
  P = o.calc_mean_farm_power()
157
- print(f"\nFarm power : {P/1000:.1f} MW")
158
- print(f"Farm ambient power: {P0/1000:.1f} MW")
157
+ print(f"\nFarm power : {P / 1000:.1f} MW")
158
+ print(f"Farm ambient power: {P0 / 1000:.1f} MW")
159
159
  print(f"Farm efficiency : {o.calc_farm_efficiency():.2f}")
160
160
  print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh.")
@@ -203,7 +203,7 @@ if __name__ == "__main__":
203
203
 
204
204
  else:
205
205
  raise ValueError(
206
- f"Please either give one rotor, or one pwake, or same number of both"
206
+ "Please either give one rotor, or one pwake, or same number of both"
207
207
  )
208
208
 
209
209
  if args.title is not None:
@@ -7,7 +7,6 @@ import foxes.variables as FV
7
7
 
8
8
 
9
9
  def calc(mbook, farm, states, wakes, points, args):
10
-
11
10
  algo = foxes.algorithms.Downwind(
12
11
  farm,
13
12
  states,
@@ -232,7 +231,7 @@ if __name__ == "__main__":
232
231
  ax.plot(xlist / D, results[0], label=wake)
233
232
  ax.set_ylabel(args.var)
234
233
 
235
- ax.set_title(f"y = 0")
234
+ ax.set_title("y = 0")
236
235
  ax.set_xlabel("x/D")
237
236
  ax.legend(loc="best")
238
237
  ax.grid()
@@ -73,7 +73,6 @@ if __name__ == "__main__":
73
73
  parser.add_argument(
74
74
  "-p", "--pwakes", help="The partial wakes models", default=None, nargs="+"
75
75
  )
76
- parser.add_argument("-sc", "--scheduler", help="The scheduler choice", default=None)
77
76
  parser.add_argument(
78
77
  "-w",
79
78
  "--wakes",
@@ -82,6 +81,16 @@ if __name__ == "__main__":
82
81
  nargs="+",
83
82
  )
84
83
  parser.add_argument("-f", "--frame", help="The wake frame", default="dyn_wakes")
84
+ parser.add_argument(
85
+ "-d", "--deflection", help="The wake deflection", default="no_deflection"
86
+ )
87
+ parser.add_argument(
88
+ "-y",
89
+ "--yawm",
90
+ help="The uniform yaw misalignment value",
91
+ type=float,
92
+ default=None,
93
+ )
85
94
  parser.add_argument(
86
95
  "-m", "--tmodels", help="The turbine models", default=[], nargs="+"
87
96
  )
@@ -121,6 +130,19 @@ if __name__ == "__main__":
121
130
  max_length_km=8
122
131
  )
123
132
 
133
+ # optionally set turbines in yaw:
134
+ N = int(args.n_turbines**0.5)
135
+ if args.yawm is None:
136
+ ymodels = []
137
+ else:
138
+ yawm = np.zeros((1, N * N), dtype=np.float64)
139
+ yawm[:, :N] = args.yawm
140
+ mbook.turbine_models["set_yawm"] = foxes.models.turbine_models.SetFarmVars(
141
+ pre_rotor=True
142
+ )
143
+ mbook.turbine_models["set_yawm"].add_var(FV.YAWM, yawm)
144
+ ymodels = ["set_yawm"]
145
+
124
146
  if args.background0:
125
147
  States = foxes.input.states.Timeseries
126
148
  kwargs = {}
@@ -147,13 +169,12 @@ if __name__ == "__main__":
147
169
  )
148
170
 
149
171
  farm = foxes.WindFarm()
150
- N = int(args.n_turbines**0.5)
151
172
  foxes.input.farm_layout.add_grid(
152
173
  farm,
153
174
  xy_base=np.array([0.0, 0.0]),
154
175
  step_vectors=np.array([[1000.0, 0], [0, 800.0]]),
155
176
  steps=(N, N),
156
- turbine_models=args.tmodels + [ttype.name],
177
+ turbine_models=ymodels + args.tmodels + [ttype.name],
157
178
  )
158
179
 
159
180
  if not args.nofig and args.show_layout:
@@ -175,6 +196,7 @@ if __name__ == "__main__":
175
196
  rotor_model=args.rotor,
176
197
  wake_models=args.wakes,
177
198
  wake_frame=args.frame,
199
+ wake_deflection=args.deflection,
178
200
  partial_wakes=args.pwakes,
179
201
  mbook=mbook,
180
202
  max_it=args.max_it,
@@ -221,9 +243,9 @@ if __name__ == "__main__":
221
243
  # power results
222
244
  P0 = o.calc_mean_farm_power(ambient=True)
223
245
  P = o.calc_mean_farm_power()
224
- print(f"\nFarm power : {P/1000:.1f} MW")
225
- print(f"Farm ambient power: {P0/1000:.1f} MW")
226
- print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
246
+ print(f"\nFarm power : {P / 1000:.1f} MW")
247
+ print(f"Farm ambient power: {P0 / 1000:.1f} MW")
248
+ print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
227
249
 
228
250
  engine.finalize()
229
251
 
@@ -262,6 +284,7 @@ if __name__ == "__main__":
262
284
  title=None,
263
285
  animated=True,
264
286
  precalc=True,
287
+ rotor_color="red",
265
288
  )
266
289
  next(ofg)
267
290
 
@@ -147,9 +147,9 @@ if __name__ == "__main__":
147
147
  # power results
148
148
  P0 = o.calc_mean_farm_power(ambient=True)
149
149
  P = o.calc_mean_farm_power()
150
- print(f"\nFarm power : {P/1000:.1f} MW")
151
- print(f"Farm ambient power: {P0/1000:.1f} MW")
152
- print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
150
+ print(f"\nFarm power : {P / 1000:.1f} MW")
151
+ print(f"Farm ambient power: {P0 / 1000:.1f} MW")
152
+ print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
153
153
  print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh.")
154
154
 
155
155
  # horizontal flow plot
@@ -110,4 +110,4 @@ if __name__ == "__main__":
110
110
  o = foxes.output.FarmResultsEval(farm_results)
111
111
  P0 = o.calc_mean_farm_power(ambient=True)
112
112
  P = o.calc_mean_farm_power()
113
- print(f"\nFarm power: {P/1000:.1f} MW, Efficiency = {P/P0*100:.2f} %")
113
+ print(f"\nFarm power: {P / 1000:.1f} MW, Efficiency = {P / P0 * 100:.2f} %")
@@ -162,7 +162,7 @@ if __name__ == "__main__":
162
162
  o = foxes.output.FarmResultsEval(farm_results)
163
163
  P0 = o.calc_mean_farm_power(ambient=True)
164
164
  P = o.calc_mean_farm_power()
165
- print(f"\nFarm power: {P/1000:.1f} MW, Efficiency = {P/P0*100:.2f} %")
165
+ print(f"\nFarm power: {P / 1000:.1f} MW, Efficiency = {P / P0 * 100:.2f} %")
166
166
 
167
167
  o1 = foxes.output.StateTurbineMap(farm_results)
168
168
 
@@ -180,7 +180,7 @@ if __name__ == "__main__":
180
180
  o = foxes.output.FarmResultsEval(farm_results)
181
181
  P0 = o.calc_mean_farm_power(ambient=True)
182
182
  P = o.calc_mean_farm_power()
183
- print(f"\nFarm power: {P/1000:.1f} MW, Efficiency = {P/P0*100:.2f} %")
183
+ print(f"\nFarm power: {P / 1000:.1f} MW, Efficiency = {P / P0 * 100:.2f} %")
184
184
 
185
185
  if not args.nofig:
186
186
  o0 = foxes.output.StateTurbineMap(farm_results)
@@ -0,0 +1,16 @@
1
+ import foxes
2
+
3
+ if __name__ == "__main__":
4
+ states = foxes.input.states.Timeseries(
5
+ "timeseries_3000.csv.gz", ["WS", "WD", "TI", "RHO"]
6
+ )
7
+
8
+ farm = foxes.WindFarm()
9
+ foxes.input.farm_layout.add_from_file(
10
+ farm, "test_farm_67.csv", turbine_models=["NREL5MW"]
11
+ )
12
+
13
+ algo = foxes.algorithms.Downwind(farm, states, ["Jensen_linear_k007"])
14
+ farm_results = algo.calc_farm()
15
+
16
+ print(farm_results)
@@ -99,7 +99,6 @@ if __name__ == "__main__":
99
99
  chunk_size_states=args.chunksize_states,
100
100
  chunk_size_points=args.chunksize_points,
101
101
  ):
102
-
103
102
  if not args.nofig:
104
103
  fig = plt.figure(figsize=(14.5, 7))
105
104
  ax1 = fig.add_subplot(121)
@@ -204,7 +203,7 @@ if __name__ == "__main__":
204
203
  # power results
205
204
  P0 = o.calc_mean_farm_power(ambient=True)
206
205
  P = o.calc_mean_farm_power()
207
- print(f"\nFarm power : {P/1000:.1f} MW")
208
- print(f"Farm ambient power: {P0/1000:.1f} MW")
209
- print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
206
+ print(f"\nFarm power : {P / 1000:.1f} MW")
207
+ print(f"Farm ambient power: {P0 / 1000:.1f} MW")
208
+ print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
210
209
  print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh")
@@ -161,9 +161,9 @@ if __name__ == "__main__":
161
161
  # power results
162
162
  P0 = o.calc_mean_farm_power(ambient=True)
163
163
  P = o.calc_mean_farm_power()
164
- print(f"\nFarm power : {P/1000:.1f} MW")
165
- print(f"Farm ambient power: {P0/1000:.1f} MW")
166
- print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
164
+ print(f"\nFarm power : {P / 1000:.1f} MW")
165
+ print(f"Farm ambient power: {P0 / 1000:.1f} MW")
166
+ print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
167
167
  print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh.")
168
168
  print()
169
169
 
@@ -24,9 +24,7 @@ if __name__ == "__main__":
24
24
  type=int,
25
25
  default=4,
26
26
  )
27
- parser.add_argument(
28
- "-d", "--debug", help="Switch on wake debugging", action="store_true"
29
- )
27
+ parser.add_argument("--debug", help="Switch on wake debugging", action="store_true")
30
28
  parser.add_argument(
31
29
  "-S",
32
30
  "--n_states",
@@ -83,6 +81,16 @@ if __name__ == "__main__":
83
81
  type=float,
84
82
  )
85
83
  parser.add_argument("-e", "--engine", help="The engine", default="NumpyEngine")
84
+ parser.add_argument(
85
+ "-d", "--deflection", help="The wake deflection", default="no_deflection"
86
+ )
87
+ parser.add_argument(
88
+ "-y",
89
+ "--yawm",
90
+ help="The uniform yaw misalignment value",
91
+ type=float,
92
+ default=None,
93
+ )
86
94
  parser.add_argument(
87
95
  "-n", "--n_cpus", help="The number of cpus", default=None, type=int
88
96
  )
@@ -109,21 +117,34 @@ if __name__ == "__main__":
109
117
  ttype = foxes.models.turbine_types.PCtFile(args.turbine_file)
110
118
  mbook.turbine_types[ttype.name] = ttype
111
119
 
120
+ # optionally set turbines in yaw:
121
+ N = 3
122
+ if args.yawm is None:
123
+ ymodels = []
124
+ else:
125
+ yawm = np.zeros((args.n_states, N * N), dtype=np.float64)
126
+ yawm[:, :N] = args.yawm
127
+ mbook.turbine_models["set_yawm"] = foxes.models.turbine_models.SetFarmVars(
128
+ pre_rotor=True
129
+ )
130
+ mbook.turbine_models["set_yawm"].add_var(FV.YAWM, yawm)
131
+ ymodels = ["set_yawm"]
132
+
112
133
  states = foxes.input.states.Timeseries(
113
134
  data_source="timeseries_3000.csv.gz",
114
135
  output_vars=[FV.WS, FV.WD, FV.TI, FV.RHO],
115
- var2col={FV.WS: "WS", FV.WD: "WD", FV.TI: "TI", FV.RHO: "RHO"},
136
+ # fixed_vars={FV.WD: 270},
137
+ var2col={FV.WD: "WD", FV.WS: "WS", FV.TI: "TI", FV.RHO: "RHO"},
116
138
  states_sel=range(240, 240 + args.n_states),
117
139
  )
118
140
 
119
141
  farm = foxes.WindFarm()
120
- N = 3
121
142
  foxes.input.farm_layout.add_grid(
122
143
  farm,
123
144
  xy_base=np.array([0.0, 0.0]),
124
145
  step_vectors=np.array([[1000.0, 0], [0, 800.0]]),
125
146
  steps=(N, N),
126
- turbine_models=args.tmodels + [ttype.name],
147
+ turbine_models=ymodels + args.tmodels + [ttype.name],
127
148
  )
128
149
 
129
150
  if not args.nofig and args.show_layout:
@@ -143,6 +164,7 @@ if __name__ == "__main__":
143
164
  rotor_model=args.rotor,
144
165
  wake_models=args.wakes,
145
166
  wake_frame=args.frame,
167
+ wake_deflection=args.deflection,
146
168
  partial_wakes=args.pwakes,
147
169
  mbook=mbook,
148
170
  verbosity=0,
@@ -157,14 +179,15 @@ if __name__ == "__main__":
157
179
  levels=None,
158
180
  quiver_pars=dict(scale=0.01),
159
181
  quiver_n=307,
160
- xmin=-5000,
161
- ymin=-5000,
162
- xmax=7000,
163
- ymax=7000,
182
+ xmin=-1000,
183
+ ymin=-1000,
184
+ xmax=4000,
185
+ ymax=3000,
164
186
  vmin=0,
165
187
  vmax=args.max_variable,
166
188
  title=None,
167
189
  animated=True,
190
+ rotor_color="red",
168
191
  )
169
192
  algo.plugins.append(anigen)
170
193
 
@@ -172,13 +172,12 @@ if __name__ == "__main__":
172
172
  # power results
173
173
  P0 = o.calc_mean_farm_power(ambient=True)
174
174
  P = o.calc_mean_farm_power()
175
- print(f"\nFarm power : {P/1000:.1f} MW")
176
- print(f"Farm ambient power: {P0/1000:.1f} MW")
177
- print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
175
+ print(f"\nFarm power : {P / 1000:.1f} MW")
176
+ print(f"Farm ambient power: {P0 / 1000:.1f} MW")
177
+ print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
178
178
  print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh.")
179
179
 
180
180
  if not args.nofig:
181
-
182
181
  # horizontal flow plot
183
182
  o = foxes.output.FlowPlots2D(algo, farm_results)
184
183
  g = o.gen_states_fig_xy(
@@ -131,7 +131,7 @@ if __name__ == "__main__":
131
131
  o = foxes.output.FarmResultsEval(farm_results)
132
132
  P0 = o.calc_mean_farm_power(ambient=True)
133
133
  P = o.calc_mean_farm_power()
134
- print(f"\nFarm power : {P/1000:.1f} MW")
135
- print(f"Farm ambient power: {P0/1000:.1f} MW")
136
- print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
134
+ print(f"\nFarm power : {P / 1000:.1f} MW")
135
+ print(f"Farm ambient power: {P0 / 1000:.1f} MW")
136
+ print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
137
137
  print(f"Annual farm yield : {o.calc_farm_yield(algo=algo):.2f} GWh")
@@ -25,7 +25,16 @@ if __name__ == "__main__":
25
25
  parser.add_argument(
26
26
  "-p", "--pwakes", help="The partial wakes models", default="centre", nargs="+"
27
27
  )
28
- parser.add_argument("-sc", "--scheduler", help="The scheduler choice", default=None)
28
+ parser.add_argument(
29
+ "-d", "--deflection", help="The wake deflection", default="no_deflection"
30
+ )
31
+ parser.add_argument(
32
+ "-y",
33
+ "--yawm",
34
+ help="The uniform yaw misalignment value",
35
+ type=float,
36
+ default=None,
37
+ )
29
38
  parser.add_argument(
30
39
  "-w",
31
40
  "--wakes",
@@ -45,7 +54,7 @@ if __name__ == "__main__":
45
54
  parser.add_argument(
46
55
  "-lm",
47
56
  "--load_mode",
48
- help="Do load mode",
57
+ help="Dataset load mode",
49
58
  default="preload",
50
59
  )
51
60
  parser.add_argument("-e", "--engine", help="The engine", default="process")
@@ -75,6 +84,19 @@ if __name__ == "__main__":
75
84
  ttype = foxes.models.turbine_types.PCtFile(args.turbine_file)
76
85
  mbook.turbine_types[ttype.name] = ttype
77
86
 
87
+ # optionally set turbines in yaw:
88
+ N = int(args.n_turbines**0.5)
89
+ if args.yawm is None:
90
+ ymodels = []
91
+ else:
92
+ yawm = np.zeros((1, N * N), dtype=np.float64)
93
+ yawm[:, :N] = args.yawm
94
+ mbook.turbine_models["set_yawm"] = foxes.models.turbine_models.SetFarmVars(
95
+ pre_rotor=True
96
+ )
97
+ mbook.turbine_models["set_yawm"].add_var(FV.YAWM, yawm)
98
+ ymodels = ["set_yawm"]
99
+
78
100
  states = foxes.input.states.FieldDataNC(
79
101
  args.file_pattern,
80
102
  states_coord="state",
@@ -90,13 +112,12 @@ if __name__ == "__main__":
90
112
  )
91
113
 
92
114
  farm = foxes.WindFarm()
93
- N = int(args.n_turbines**0.5)
94
115
  foxes.input.farm_layout.add_grid(
95
116
  farm,
96
117
  xy_base=np.array([500.0, 500.0]),
97
118
  step_vectors=np.array([[500.0, 0], [0, 500.0]]),
98
119
  steps=(N, N),
99
- turbine_models=args.tmodels + [ttype.name],
120
+ turbine_models=ymodels + args.tmodels + [ttype.name],
100
121
  )
101
122
 
102
123
  algo = foxes.algorithms.Downwind(
@@ -105,6 +126,7 @@ if __name__ == "__main__":
105
126
  rotor_model=args.rotor,
106
127
  wake_models=args.wakes,
107
128
  wake_frame=args.wake_frame,
129
+ wake_deflection=args.deflection,
108
130
  partial_wakes=args.pwakes,
109
131
  mbook=mbook,
110
132
  engine=args.engine,
@@ -136,6 +158,7 @@ if __name__ == "__main__":
136
158
  xmax=2500,
137
159
  ymin=0,
138
160
  ymax=2500,
161
+ rotor_color="red",
139
162
  ):
140
163
  plt.show()
141
164
  plt.close(fig)
@@ -131,9 +131,9 @@ if __name__ == "__main__":
131
131
  o = foxes.output.FarmResultsEval(farm_results)
132
132
  P0 = o.calc_mean_farm_power(ambient=True)
133
133
  P = o.calc_mean_farm_power()
134
- print(f"\nFarm power : {P/1000:.1f} MW")
135
- print(f"Farm ambient power: {P0/1000:.1f} MW")
136
- print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
134
+ print(f"\nFarm power : {P / 1000:.1f} MW")
135
+ print(f"Farm ambient power: {P0 / 1000:.1f} MW")
136
+ print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
137
137
  print(f"Annual farm yield : {o.calc_farm_yield(algo=algo):.2f} GWh")
138
138
 
139
139
  if not args.nofig and args.calc_mean: