foxes 1.0__tar.gz → 1.6.1__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.
Files changed (424) hide show
  1. {foxes-1.0 → foxes-1.6.1}/MANIFEST.in +0 -1
  2. {foxes-1.0/foxes.egg-info → foxes-1.6.1}/PKG-INFO +47 -65
  3. {foxes-1.0 → foxes-1.6.1}/README.md +12 -15
  4. {foxes-1.0 → foxes-1.6.1}/docs/source/conf.py +6 -5
  5. {foxes-1.0 → foxes-1.6.1}/examples/abl_states/run.py +58 -56
  6. {foxes-1.0 → foxes-1.6.1}/examples/compare_rotors_pwakes/run.py +1 -1
  7. {foxes-1.0 → foxes-1.6.1}/examples/compare_wakes/run.py +1 -2
  8. {foxes-1.0 → foxes-1.6.1}/examples/dyn_wakes/run.py +137 -122
  9. {foxes-1.0 → foxes-1.6.1}/examples/field_data_nc/run.py +28 -19
  10. {foxes-1.0/examples/induction_RHB → foxes-1.6.1/examples/induction}/run.py +8 -8
  11. {foxes-1.0 → foxes-1.6.1}/examples/multi_height/run.py +9 -7
  12. foxes-1.6.1/examples/parameter_study/run.py +115 -0
  13. {foxes-1.0 → foxes-1.6.1}/examples/power_mask/run.py +7 -9
  14. foxes-1.6.1/examples/quickstart/run.py +16 -0
  15. {foxes-1.0 → foxes-1.6.1}/examples/random_timeseries/run.py +16 -17
  16. {foxes-1.0 → foxes-1.6.1}/examples/scan_row/run.py +96 -89
  17. {foxes-1.0 → foxes-1.6.1}/examples/sector_management/run.py +41 -35
  18. {foxes-1.0 → foxes-1.6.1}/examples/sequential/run.py +33 -10
  19. {foxes-1.0 → foxes-1.6.1}/examples/single_state/run.py +8 -9
  20. {foxes-1.0 → foxes-1.6.1}/examples/states_lookup_table/run.py +10 -8
  21. {foxes-1.0 → foxes-1.6.1}/examples/streamline_wakes/run.py +42 -14
  22. {foxes-1.0 → foxes-1.6.1}/examples/tab_file/run.py +4 -4
  23. {foxes-1.0 → foxes-1.6.1}/examples/timelines/run.py +126 -100
  24. {foxes-1.0 → foxes-1.6.1}/examples/timeseries/run.py +71 -68
  25. {foxes-1.0 → foxes-1.6.1}/examples/timeseries_slurm/run.py +8 -8
  26. {foxes-1.0 → foxes-1.6.1}/examples/wind_rose/run.py +27 -25
  27. {foxes-1.0 → foxes-1.6.1}/examples/yawed_wake/run.py +102 -84
  28. foxes-1.6.1/foxes/__init__.py +41 -0
  29. foxes-1.6.1/foxes/algorithms/__init__.py +11 -0
  30. foxes-1.6.1/foxes/algorithms/downwind/__init__.py +3 -0
  31. {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/downwind/downwind.py +199 -61
  32. foxes-1.6.1/foxes/algorithms/downwind/models/__init__.py +9 -0
  33. {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/downwind/models/farm_wakes_calc.py +23 -15
  34. {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/downwind/models/init_farm_data.py +65 -33
  35. {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/downwind/models/point_wakes_calc.py +7 -14
  36. foxes-1.6.1/foxes/algorithms/downwind/models/population.py +523 -0
  37. {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/downwind/models/reorder_farm_output.py +6 -2
  38. {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/downwind/models/set_amb_farm_results.py +4 -3
  39. {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/downwind/models/set_amb_point_results.py +9 -8
  40. foxes-1.6.1/foxes/algorithms/iterative/__init__.py +8 -0
  41. {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/iterative/iterative.py +51 -8
  42. foxes-1.6.1/foxes/algorithms/iterative/models/__init__.py +7 -0
  43. {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/iterative/models/convergence.py +72 -37
  44. {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/iterative/models/farm_wakes_calc.py +16 -9
  45. {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/iterative/models/urelax.py +3 -3
  46. foxes-1.6.1/foxes/algorithms/sequential/__init__.py +4 -0
  47. foxes-1.6.1/foxes/algorithms/sequential/models/__init__.py +2 -0
  48. {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/sequential/models/plugin.py +4 -4
  49. {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/sequential/models/seq_state.py +1 -19
  50. {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/sequential/sequential.py +14 -26
  51. foxes-1.6.1/foxes/config/__init__.py +5 -0
  52. foxes-1.6.1/foxes/config/conf.py +268 -0
  53. {foxes-1.0 → foxes-1.6.1}/foxes/constants.py +63 -10
  54. foxes-1.6.1/foxes/core/__init__.py +49 -0
  55. {foxes-1.0 → foxes-1.6.1}/foxes/core/algorithm.py +175 -172
  56. foxes-1.6.1/foxes/core/axial_induction_model.py +48 -0
  57. {foxes-1.0 → foxes-1.6.1}/foxes/core/data.py +274 -39
  58. {foxes-1.0 → foxes-1.6.1}/foxes/core/data_calc_model.py +6 -4
  59. foxes-1.6.1/foxes/core/engine.py +1065 -0
  60. {foxes-1.0 → foxes-1.6.1}/foxes/core/farm_controller.py +72 -34
  61. {foxes-1.0 → foxes-1.6.1}/foxes/core/farm_data_model.py +22 -14
  62. {foxes-1.0 → foxes-1.6.1}/foxes/core/ground_model.py +25 -15
  63. {foxes-1.0 → foxes-1.6.1}/foxes/core/model.py +150 -117
  64. foxes-1.6.1/foxes/core/partial_wakes_model.py +343 -0
  65. {foxes-1.0 → foxes-1.6.1}/foxes/core/point_data_model.py +44 -20
  66. {foxes-1.0 → foxes-1.6.1}/foxes/core/rotor_model.py +72 -59
  67. {foxes-1.0 → foxes-1.6.1}/foxes/core/states.py +22 -70
  68. {foxes-1.0 → foxes-1.6.1}/foxes/core/turbine.py +12 -5
  69. {foxes-1.0 → foxes-1.6.1}/foxes/core/turbine_model.py +2 -18
  70. {foxes-1.0 → foxes-1.6.1}/foxes/core/turbine_type.py +4 -20
  71. {foxes-1.0 → foxes-1.6.1}/foxes/core/vertical_profile.py +8 -20
  72. foxes-1.6.1/foxes/core/wake_deflection.py +130 -0
  73. {foxes-1.0 → foxes-1.6.1}/foxes/core/wake_frame.py +17 -55
  74. foxes-1.6.1/foxes/core/wake_model.py +538 -0
  75. foxes-1.6.1/foxes/core/wake_superposition.py +245 -0
  76. foxes-1.6.1/foxes/core/wind_farm.py +394 -0
  77. foxes-1.6.1/foxes/data/__init__.py +11 -0
  78. {foxes-1.0 → foxes-1.6.1}/foxes/data/parse.py +8 -7
  79. foxes-1.6.1/foxes/data/states/point_cloud_100.nc +0 -0
  80. foxes-1.6.1/foxes/data/states/weibull_cloud_4.nc +0 -0
  81. foxes-1.6.1/foxes/data/states/weibull_grid.nc +0 -0
  82. foxes-1.6.1/foxes/data/states/weibull_sectors_12.csv +13 -0
  83. foxes-1.6.1/foxes/data/states/weibull_sectors_12.nc +0 -0
  84. {foxes-1.0 → foxes-1.6.1}/foxes/data/static_data.py +0 -7
  85. foxes-1.6.1/foxes/engines/__init__.py +15 -0
  86. {foxes-1.0 → foxes-1.6.1}/foxes/engines/dask.py +291 -400
  87. foxes-1.6.1/foxes/engines/default.py +183 -0
  88. {foxes-1.0 → foxes-1.6.1}/foxes/engines/futures.py +18 -5
  89. foxes-1.6.1/foxes/engines/mpi.py +27 -0
  90. {foxes-1.0 → foxes-1.6.1}/foxes/engines/multiprocess.py +5 -17
  91. foxes-1.0/foxes/engines/pool.py → foxes-1.6.1/foxes/engines/numpy.py +99 -87
  92. foxes-1.6.1/foxes/engines/pool.py +419 -0
  93. foxes-1.6.1/foxes/engines/ray.py +79 -0
  94. {foxes-1.0 → foxes-1.6.1}/foxes/engines/single.py +116 -10
  95. foxes-1.6.1/foxes/input/__init__.py +7 -0
  96. foxes-1.6.1/foxes/input/farm_layout/__init__.py +15 -0
  97. foxes-1.6.1/foxes/input/farm_layout/from_arrays.py +68 -0
  98. {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/from_csv.py +4 -2
  99. foxes-1.6.1/foxes/input/farm_layout/from_eww.py +178 -0
  100. {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/from_file.py +10 -10
  101. {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/from_json.py +5 -4
  102. foxes-1.6.1/foxes/input/farm_layout/from_wrf.py +86 -0
  103. {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/grid.py +3 -3
  104. {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/ring.py +0 -1
  105. foxes-1.6.1/foxes/input/states/__init__.py +37 -0
  106. foxes-1.6.1/foxes/input/states/create/__init__.py +3 -0
  107. {foxes-1.0 → foxes-1.6.1}/foxes/input/states/create/random_abl_states.py +5 -3
  108. foxes-1.6.1/foxes/input/states/dataset_states.py +1164 -0
  109. foxes-1.6.1/foxes/input/states/field_data.py +383 -0
  110. {foxes-1.0 → foxes-1.6.1}/foxes/input/states/multi_height.py +99 -89
  111. foxes-1.6.1/foxes/input/states/newa_states.py +536 -0
  112. {foxes-1.0 → foxes-1.6.1}/foxes/input/states/one_point_flow.py +38 -38
  113. foxes-1.6.1/foxes/input/states/point_cloud_data.py +569 -0
  114. foxes-1.0/foxes/input/states/scan_ws.py → foxes-1.6.1/foxes/input/states/scan.py +56 -75
  115. {foxes-1.0 → foxes-1.6.1}/foxes/input/states/single.py +27 -26
  116. {foxes-1.0 → foxes-1.6.1}/foxes/input/states/states_table.py +82 -98
  117. foxes-1.6.1/foxes/input/states/weibull_sectors.py +330 -0
  118. foxes-1.6.1/foxes/input/states/wrg_states.py +303 -0
  119. foxes-1.6.1/foxes/input/yaml/__init__.py +8 -0
  120. foxes-1.6.1/foxes/input/yaml/dict.py +515 -0
  121. foxes-1.6.1/foxes/input/yaml/windio/__init__.py +15 -0
  122. {foxes-1.0/foxes/input → foxes-1.6.1/foxes/input/yaml}/windio/read_attributes.py +119 -86
  123. foxes-1.6.1/foxes/input/yaml/windio/read_farm.py +345 -0
  124. {foxes-1.0/foxes/input → foxes-1.6.1/foxes/input/yaml}/windio/read_fields.py +21 -12
  125. foxes-1.6.1/foxes/input/yaml/windio/read_outputs.py +229 -0
  126. foxes-1.6.1/foxes/input/yaml/windio/read_site.py +456 -0
  127. foxes-1.6.1/foxes/input/yaml/windio/windio.py +270 -0
  128. foxes-1.6.1/foxes/input/yaml/yaml.py +104 -0
  129. foxes-1.6.1/foxes/models/__init__.py +20 -0
  130. foxes-1.6.1/foxes/models/axial_induction/__init__.py +2 -0
  131. foxes-1.6.1/foxes/models/farm_controllers/__init__.py +6 -0
  132. foxes-1.6.1/foxes/models/farm_controllers/op_flag.py +196 -0
  133. foxes-1.6.1/foxes/models/farm_models/__init__.py +5 -0
  134. {foxes-1.0 → foxes-1.6.1}/foxes/models/farm_models/turbine2farm.py +1 -1
  135. foxes-1.6.1/foxes/models/ground_models/__init__.py +3 -0
  136. {foxes-1.0 → foxes-1.6.1}/foxes/models/ground_models/wake_mirror.py +5 -5
  137. {foxes-1.0 → foxes-1.6.1}/foxes/models/model_book.py +240 -55
  138. foxes-1.6.1/foxes/models/partial_wakes/__init__.py +10 -0
  139. {foxes-1.0 → foxes-1.6.1}/foxes/models/partial_wakes/axiwake.py +40 -14
  140. foxes-1.6.1/foxes/models/partial_wakes/centre.py +88 -0
  141. {foxes-1.0 → foxes-1.6.1}/foxes/models/partial_wakes/rotor_points.py +45 -9
  142. {foxes-1.0 → foxes-1.6.1}/foxes/models/partial_wakes/segregated.py +4 -19
  143. {foxes-1.0 → foxes-1.6.1}/foxes/models/partial_wakes/top_hat.py +33 -6
  144. foxes-1.6.1/foxes/models/point_models/__init__.py +8 -0
  145. {foxes-1.0 → foxes-1.6.1}/foxes/models/point_models/set_uniform_data.py +6 -4
  146. {foxes-1.0 → foxes-1.6.1}/foxes/models/point_models/tke2ti.py +1 -1
  147. foxes-1.6.1/foxes/models/point_models/ustar2ti.py +84 -0
  148. {foxes-1.0 → foxes-1.6.1}/foxes/models/point_models/wake_deltas.py +1 -1
  149. foxes-1.6.1/foxes/models/rotor_models/__init__.py +8 -0
  150. {foxes-1.0 → foxes-1.6.1}/foxes/models/rotor_models/centre.py +9 -7
  151. foxes-1.6.1/foxes/models/rotor_models/direct_infusion.py +261 -0
  152. {foxes-1.0 → foxes-1.6.1}/foxes/models/rotor_models/grid.py +11 -9
  153. {foxes-1.0 → foxes-1.6.1}/foxes/models/rotor_models/levels.py +10 -8
  154. foxes-1.6.1/foxes/models/turbine_models/__init__.py +15 -0
  155. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/calculator.py +18 -5
  156. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/kTI_model.py +26 -7
  157. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/lookup_table.py +12 -6
  158. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/power_mask.py +19 -10
  159. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/rotor_centre_calc.py +6 -2
  160. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/sector_management.py +9 -4
  161. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/set_farm_vars.py +56 -29
  162. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/table_factors.py +14 -9
  163. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/thrust2ct.py +1 -0
  164. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/yaw2yawm.py +2 -1
  165. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/yawm2yaw.py +2 -1
  166. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/CpCt_file.py +6 -3
  167. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/CpCt_from_two.py +6 -3
  168. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/PCt_file.py +14 -17
  169. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/PCt_from_two.py +17 -9
  170. foxes-1.6.1/foxes/models/turbine_types/TBL_file.py +79 -0
  171. foxes-1.6.1/foxes/models/turbine_types/__init__.py +14 -0
  172. foxes-1.6.1/foxes/models/turbine_types/calculator_type.py +123 -0
  173. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/lookup.py +5 -5
  174. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/null_type.py +4 -3
  175. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/wsrho2PCt_from_two.py +28 -18
  176. {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/wsti2PCt_from_two.py +30 -20
  177. foxes-1.6.1/foxes/models/vertical_profiles/__init__.py +11 -0
  178. foxes-1.6.1/foxes/models/wake_deflections/__init__.py +3 -0
  179. foxes-1.0/foxes/models/wake_frames/yawed_wakes.py → foxes-1.6.1/foxes/models/wake_deflections/bastankhah2016.py +35 -112
  180. foxes-1.6.1/foxes/models/wake_deflections/jimenez.py +277 -0
  181. foxes-1.6.1/foxes/models/wake_deflections/no_deflection.py +94 -0
  182. foxes-1.6.1/foxes/models/wake_frames/__init__.py +10 -0
  183. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_frames/dynamic_wakes.py +74 -27
  184. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_frames/farm_order.py +6 -5
  185. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_frames/rotor_wd.py +8 -4
  186. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_frames/seq_dynamic_wakes.py +68 -28
  187. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_frames/streamlines.py +19 -14
  188. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_frames/timelines.py +58 -29
  189. foxes-1.6.1/foxes/models/wake_models/__init__.py +12 -0
  190. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/dist_sliced.py +51 -85
  191. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/gaussian.py +20 -0
  192. foxes-1.6.1/foxes/models/wake_models/induction/__init__.py +9 -0
  193. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/induction/rankine_half_body.py +31 -72
  194. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/induction/rathmann.py +80 -25
  195. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/induction/self_similar.py +103 -38
  196. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/induction/self_similar2020.py +1 -4
  197. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/induction/vortex_sheet.py +92 -62
  198. foxes-1.6.1/foxes/models/wake_models/ti/__init__.py +6 -0
  199. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/ti/crespo_hernandez.py +14 -9
  200. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/ti/iec_ti.py +13 -9
  201. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/top_hat.py +58 -7
  202. foxes-1.6.1/foxes/models/wake_models/wind/__init__.py +10 -0
  203. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/wind/bastankhah14.py +56 -22
  204. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/wind/bastankhah16.py +47 -14
  205. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/wind/jensen.py +18 -4
  206. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/wind/turbopark.py +49 -18
  207. foxes-1.6.1/foxes/models/wake_superpositions/__init__.py +22 -0
  208. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ti_linear.py +5 -5
  209. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ti_max.py +5 -5
  210. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ti_pow.py +5 -5
  211. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ti_quadratic.py +5 -5
  212. foxes-1.6.1/foxes/models/wake_superpositions/wind_vector.py +257 -0
  213. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ws_linear.py +17 -17
  214. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ws_max.py +16 -15
  215. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ws_pow.py +16 -15
  216. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ws_product.py +9 -10
  217. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ws_quadratic.py +16 -15
  218. foxes-1.6.1/foxes/output/__init__.py +29 -0
  219. {foxes-1.0 → foxes-1.6.1}/foxes/output/calc_points.py +8 -5
  220. {foxes-1.0 → foxes-1.6.1}/foxes/output/farm_layout.py +75 -42
  221. {foxes-1.0 → foxes-1.6.1}/foxes/output/farm_results_eval.py +105 -55
  222. foxes-1.6.1/foxes/output/flow_plots_2d/__init__.py +3 -0
  223. {foxes-1.0 → foxes-1.6.1}/foxes/output/flow_plots_2d/flow_plots.py +103 -0
  224. foxes-1.6.1/foxes/output/flow_plots_2d/from_chunk.py +164 -0
  225. {foxes-1.0 → foxes-1.6.1}/foxes/output/flow_plots_2d/get_fig.py +5 -2
  226. {foxes-1.0 → foxes-1.6.1}/foxes/output/grids.py +9 -8
  227. {foxes-1.0 → foxes-1.6.1}/foxes/output/output.py +17 -21
  228. foxes-1.6.1/foxes/output/plt.py +19 -0
  229. {foxes-1.0 → foxes-1.6.1}/foxes/output/results_writer.py +15 -13
  230. foxes-1.6.1/foxes/output/rose_plot.py +645 -0
  231. {foxes-1.0 → foxes-1.6.1}/foxes/output/rotor_point_plots.py +10 -3
  232. foxes-1.6.1/foxes/output/seq_plugins/__init__.py +2 -0
  233. {foxes-1.0 → foxes-1.6.1}/foxes/output/seq_plugins/seq_flow_ani_plugin.py +2 -5
  234. {foxes-1.0 → foxes-1.6.1}/foxes/output/seq_plugins/seq_wake_debug_plugin.py +2 -3
  235. {foxes-1.0 → foxes-1.6.1}/foxes/output/slice_data.py +26 -22
  236. foxes-1.6.1/foxes/output/slices_data.py +323 -0
  237. {foxes-1.0 → foxes-1.6.1}/foxes/output/state_turbine_map.py +18 -6
  238. {foxes-1.0 → foxes-1.6.1}/foxes/output/state_turbine_table.py +19 -3
  239. {foxes-1.0 → foxes-1.6.1}/foxes/output/turbine_type_curves.py +17 -10
  240. foxes-1.6.1/foxes/utils/__init__.py +51 -0
  241. foxes-1.6.1/foxes/utils/abl/__init__.py +8 -0
  242. {foxes-1.0 → foxes-1.6.1}/foxes/utils/abl/neutral.py +2 -2
  243. {foxes-1.0 → foxes-1.6.1}/foxes/utils/abl/stable.py +2 -2
  244. {foxes-1.0 → foxes-1.6.1}/foxes/utils/abl/unstable.py +2 -2
  245. {foxes-1.0 → foxes-1.6.1}/foxes/utils/cubic_roots.py +1 -1
  246. {foxes-1.0 → foxes-1.6.1}/foxes/utils/data_book.py +5 -4
  247. foxes-1.6.1/foxes/utils/dict.py +176 -0
  248. {foxes-1.0 → foxes-1.6.1}/foxes/utils/exec_python.py +6 -6
  249. {foxes-1.0 → foxes-1.6.1}/foxes/utils/factory.py +32 -6
  250. foxes-1.6.1/foxes/utils/geom2d/__init__.py +11 -0
  251. {foxes-1.0 → foxes-1.6.1}/foxes/utils/geom2d/area_geometry.py +12 -0
  252. {foxes-1.0 → foxes-1.6.1}/foxes/utils/geom2d/circle.py +1 -1
  253. {foxes-1.0 → foxes-1.6.1}/foxes/utils/geom2d/polygon.py +1 -1
  254. {foxes-1.0 → foxes-1.6.1}/foxes/utils/geopandas_utils.py +5 -6
  255. {foxes-1.0 → foxes-1.6.1}/foxes/utils/load.py +14 -6
  256. foxes-1.0/foxes/utils/pandas_helpers.py → foxes-1.6.1/foxes/utils/pandas_utils.py +18 -20
  257. foxes-1.6.1/foxes/utils/subclasses.py +90 -0
  258. {foxes-1.0 → foxes-1.6.1}/foxes/utils/tab_files.py +0 -1
  259. foxes-1.6.1/foxes/utils/utm_utils.py +87 -0
  260. foxes-1.6.1/foxes/utils/weibull.py +28 -0
  261. foxes-1.6.1/foxes/utils/wrg_utils.py +164 -0
  262. foxes-1.6.1/foxes/utils/xarray_utils.py +243 -0
  263. {foxes-1.0 → foxes-1.6.1}/foxes/variables.py +94 -15
  264. {foxes-1.0 → foxes-1.6.1/foxes.egg-info}/PKG-INFO +47 -65
  265. {foxes-1.0 → foxes-1.6.1}/foxes.egg-info/SOURCES.txt +51 -21
  266. foxes-1.6.1/foxes.egg-info/entry_points.txt +3 -0
  267. foxes-1.6.1/foxes.egg-info/requires.txt +37 -0
  268. {foxes-1.0 → foxes-1.6.1}/pyproject.toml +42 -54
  269. foxes-1.6.1/tests/0_consistency/iterative/test_iterative.py +89 -0
  270. foxes-1.6.1/tests/0_consistency/partial_wakes/test_partial_wakes.py +87 -0
  271. {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/PCt_files/flappy/run.py +2 -3
  272. {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/PCt_files/test_PCt_files.py +7 -12
  273. {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/abl_states/flappy/run.py +0 -1
  274. {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/abl_states/test_abl_states.py +5 -8
  275. {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/partial_top_hat/flappy/run.py +0 -1
  276. foxes-1.6.1/tests/1_verification/flappy_0_6/partial_top_hat/test_partial_top_hat.py +80 -0
  277. foxes-1.6.1/tests/1_verification/flappy_0_6/row_Jensen_linear_centre/test_row_Jensen_linear_centre.py +98 -0
  278. foxes-1.6.1/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/test_row_Jensen_linear_tophat.py +99 -0
  279. foxes-1.6.1/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2005/test_row_Jensen_linear_tophat_IECTI_2005.py +125 -0
  280. foxes-1.6.1/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2019/test_row_Jensen_linear_tophat_IECTI_2019.py +125 -0
  281. foxes-1.6.1/tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/test_row_Jensen_quadratic_centre.py +99 -0
  282. {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6_2/grid_rotors/flappy/run.py +0 -2
  283. foxes-1.6.1/tests/1_verification/flappy_0_6_2/grid_rotors/test_grid_rotors.py +128 -0
  284. foxes-1.6.1/tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/test_row_Bastankhah_Crespo.py +119 -0
  285. {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/flappy/run.py +0 -1
  286. foxes-1.6.1/tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/test_row_Bastankhah_linear_centre.py +102 -0
  287. foxes-1.6.1/tests/2_models/turbine_models/test_set_farm_vars.py +64 -0
  288. {foxes-1.0 → foxes-1.6.1}/tests/3_examples/test_examples.py +3 -2
  289. foxes-1.0/examples/windio/run.py +0 -29
  290. foxes-1.0/foxes/__init__.py +0 -26
  291. foxes-1.0/foxes/algorithms/__init__.py +0 -11
  292. foxes-1.0/foxes/algorithms/downwind/__init__.py +0 -3
  293. foxes-1.0/foxes/algorithms/downwind/models/__init__.py +0 -6
  294. foxes-1.0/foxes/algorithms/iterative/__init__.py +0 -4
  295. foxes-1.0/foxes/algorithms/iterative/models/__init__.py +0 -3
  296. foxes-1.0/foxes/algorithms/sequential/__init__.py +0 -4
  297. foxes-1.0/foxes/algorithms/sequential/models/__init__.py +0 -2
  298. foxes-1.0/foxes/core/__init__.py +0 -26
  299. foxes-1.0/foxes/core/axial_induction_model.py +0 -30
  300. foxes-1.0/foxes/core/engine.py +0 -630
  301. foxes-1.0/foxes/core/partial_wakes_model.py +0 -218
  302. foxes-1.0/foxes/core/wake_model.py +0 -320
  303. foxes-1.0/foxes/core/wake_superposition.py +0 -108
  304. foxes-1.0/foxes/core/wind_farm.py +0 -78
  305. foxes-1.0/foxes/data/__init__.py +0 -6
  306. foxes-1.0/foxes/data/states/windio_timeseries_5000.nc +0 -0
  307. foxes-1.0/foxes/data/windio/DTU_10MW_turbine.yaml +0 -10
  308. foxes-1.0/foxes/data/windio/__init__.py +0 -0
  309. foxes-1.0/foxes/data/windio/windio_5turbines_timeseries.yaml +0 -85
  310. foxes-1.0/foxes/engines/__init__.py +0 -16
  311. foxes-1.0/foxes/engines/default.py +0 -75
  312. foxes-1.0/foxes/engines/mpi.py +0 -38
  313. foxes-1.0/foxes/engines/numpy.py +0 -185
  314. foxes-1.0/foxes/input/__init__.py +0 -7
  315. foxes-1.0/foxes/input/farm_layout/__init__.py +0 -12
  316. foxes-1.0/foxes/input/states/__init__.py +0 -18
  317. foxes-1.0/foxes/input/states/create/__init__.py +0 -2
  318. foxes-1.0/foxes/input/states/field_data_nc.py +0 -703
  319. foxes-1.0/foxes/input/windio/__init__.py +0 -11
  320. foxes-1.0/foxes/input/windio/get_states.py +0 -205
  321. foxes-1.0/foxes/input/windio/read_farm.py +0 -177
  322. foxes-1.0/foxes/input/windio/read_outputs.py +0 -166
  323. foxes-1.0/foxes/input/windio/runner.py +0 -183
  324. foxes-1.0/foxes/input/windio/windio.py +0 -189
  325. foxes-1.0/foxes/models/__init__.py +0 -19
  326. foxes-1.0/foxes/models/axial_induction/__init__.py +0 -2
  327. foxes-1.0/foxes/models/farm_controllers/__init__.py +0 -5
  328. foxes-1.0/foxes/models/farm_models/__init__.py +0 -5
  329. foxes-1.0/foxes/models/ground_models/__init__.py +0 -2
  330. foxes-1.0/foxes/models/partial_wakes/__init__.py +0 -10
  331. foxes-1.0/foxes/models/partial_wakes/centre.py +0 -40
  332. foxes-1.0/foxes/models/point_models/__init__.py +0 -7
  333. foxes-1.0/foxes/models/rotor_models/__init__.py +0 -7
  334. foxes-1.0/foxes/models/turbine_models/__init__.py +0 -15
  335. foxes-1.0/foxes/models/turbine_types/__init__.py +0 -12
  336. foxes-1.0/foxes/models/vertical_profiles/__init__.py +0 -11
  337. foxes-1.0/foxes/models/wake_frames/__init__.py +0 -11
  338. foxes-1.0/foxes/models/wake_models/__init__.py +0 -12
  339. foxes-1.0/foxes/models/wake_models/induction/__init__.py +0 -9
  340. foxes-1.0/foxes/models/wake_models/ti/__init__.py +0 -6
  341. foxes-1.0/foxes/models/wake_models/wind/__init__.py +0 -8
  342. foxes-1.0/foxes/models/wake_superpositions/__init__.py +0 -13
  343. foxes-1.0/foxes/output/__init__.py +0 -23
  344. foxes-1.0/foxes/output/flow_plots_2d/__init__.py +0 -2
  345. foxes-1.0/foxes/output/rose_plot.py +0 -393
  346. foxes-1.0/foxes/output/round.py +0 -10
  347. foxes-1.0/foxes/output/seq_plugins/__init__.py +0 -2
  348. foxes-1.0/foxes/utils/__init__.py +0 -24
  349. foxes-1.0/foxes/utils/abl/__init__.py +0 -8
  350. foxes-1.0/foxes/utils/dict.py +0 -37
  351. foxes-1.0/foxes/utils/geom2d/__init__.py +0 -9
  352. foxes-1.0/foxes/utils/geopandas_helpers.py +0 -294
  353. foxes-1.0/foxes/utils/pandas_utils.py +0 -175
  354. foxes-1.0/foxes/utils/subclasses.py +0 -21
  355. foxes-1.0/foxes/utils/windrose_plot.py +0 -152
  356. foxes-1.0/foxes/utils/xarray_utils.py +0 -49
  357. foxes-1.0/foxes.egg-info/requires.txt +0 -57
  358. foxes-1.0/tests/0_consistency/iterative/test_iterative.py +0 -92
  359. foxes-1.0/tests/0_consistency/partial_wakes/test_partial_wakes.py +0 -90
  360. foxes-1.0/tests/1_verification/flappy_0_6/partial_top_hat/test_partial_top_hat.py +0 -82
  361. foxes-1.0/tests/1_verification/flappy_0_6/row_Jensen_linear_centre/test_row_Jensen_linear_centre.py +0 -93
  362. foxes-1.0/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/test_row_Jensen_linear_tophat.py +0 -96
  363. foxes-1.0/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2005/test_row_Jensen_linear_tophat_IECTI_2005.py +0 -122
  364. foxes-1.0/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2019/test_row_Jensen_linear_tophat_IECTI_2019.py +0 -122
  365. foxes-1.0/tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/test_row_Jensen_quadratic_centre.py +0 -93
  366. foxes-1.0/tests/1_verification/flappy_0_6_2/grid_rotors/test_grid_rotors.py +0 -130
  367. foxes-1.0/tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/test_row_Bastankhah_Crespo.py +0 -116
  368. foxes-1.0/tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/test_row_Bastankhah_linear_centre.py +0 -99
  369. {foxes-1.0 → foxes-1.6.1}/LICENSE +0 -0
  370. {foxes-1.0 → foxes-1.6.1}/Logo_FOXES.svg +0 -0
  371. {foxes-1.0 → foxes-1.6.1}/foxes/core/farm_model.py +0 -0
  372. {foxes-1.0 → foxes-1.6.1}/foxes/data/farms/__init__.py +0 -0
  373. {foxes-1.0 → foxes-1.6.1}/foxes/data/farms/test_farm_67.csv +0 -0
  374. {foxes-1.0 → foxes-1.6.1}/foxes/data/power_ct_curves/DTU-10MW-D178d3-H119.csv +0 -0
  375. {foxes-1.0 → foxes-1.6.1}/foxes/data/power_ct_curves/IEA-15MW-D240-H150.csv +0 -0
  376. {foxes-1.0 → foxes-1.6.1}/foxes/data/power_ct_curves/IWT-7d5MW-D164-H100.csv +0 -0
  377. {foxes-1.0 → foxes-1.6.1}/foxes/data/power_ct_curves/NREL-5MW-D126-H90.csv +0 -0
  378. {foxes-1.0 → foxes-1.6.1}/foxes/data/power_ct_curves/__init__.py +0 -0
  379. {foxes-1.0 → foxes-1.6.1}/foxes/data/states/WRF-Timeseries-3000.nc +0 -0
  380. {foxes-1.0 → foxes-1.6.1}/foxes/data/states/WRF-Timeseries-4464.csv.gz +0 -0
  381. {foxes-1.0 → foxes-1.6.1}/foxes/data/states/__init__.py +0 -0
  382. {foxes-1.0 → foxes-1.6.1}/foxes/data/states/abl_states_6000.csv.gz +0 -0
  383. {foxes-1.0 → foxes-1.6.1}/foxes/data/states/timeseries_100.csv.gz +0 -0
  384. {foxes-1.0 → foxes-1.6.1}/foxes/data/states/timeseries_3000.csv.gz +0 -0
  385. {foxes-1.0 → foxes-1.6.1}/foxes/data/states/timeseries_8000.csv.gz +0 -0
  386. {foxes-1.0 → foxes-1.6.1}/foxes/data/states/wind_rose_bremen.csv +0 -0
  387. {foxes-1.0 → foxes-1.6.1}/foxes/data/states/wind_rotation.nc +0 -0
  388. {foxes-1.0 → foxes-1.6.1}/foxes/data/states/winds100.tab +0 -0
  389. {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/from_df.py +0 -0
  390. {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/from_random.py +0 -0
  391. {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/row.py +0 -0
  392. {foxes-1.0 → foxes-1.6.1}/foxes/input/states/create/random_timeseries.py +0 -0
  393. {foxes-1.0 → foxes-1.6.1}/foxes/models/axial_induction/betz.py +0 -0
  394. {foxes-1.0 → foxes-1.6.1}/foxes/models/axial_induction/madsen.py +0 -0
  395. {foxes-1.0 → foxes-1.6.1}/foxes/models/farm_controllers/basic.py +0 -0
  396. {foxes-1.0 → foxes-1.6.1}/foxes/models/ground_models/no_ground.py +0 -0
  397. {foxes-1.0 → foxes-1.6.1}/foxes/models/partial_wakes/grid.py +0 -0
  398. {foxes-1.0 → foxes-1.6.1}/foxes/models/vertical_profiles/abl_log_neutral_ws.py +1 -1
  399. {foxes-1.0 → foxes-1.6.1}/foxes/models/vertical_profiles/abl_log_stable_ws.py +1 -1
  400. {foxes-1.0 → foxes-1.6.1}/foxes/models/vertical_profiles/abl_log_unstable_ws.py +1 -1
  401. {foxes-1.0 → foxes-1.6.1}/foxes/models/vertical_profiles/abl_log_ws.py +1 -1
  402. {foxes-1.0 → foxes-1.6.1}/foxes/models/vertical_profiles/data_profile.py +0 -0
  403. {foxes-1.0 → foxes-1.6.1}/foxes/models/vertical_profiles/sheared_ws.py +0 -0
  404. {foxes-1.0 → foxes-1.6.1}/foxes/models/vertical_profiles/uniform.py +0 -0
  405. {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/axisymmetric.py +0 -0
  406. {foxes-1.0 → foxes-1.6.1}/foxes/output/animation.py +0 -0
  407. {foxes-1.0 → foxes-1.6.1}/foxes/utils/abl/sheared.py +0 -0
  408. {foxes-1.0 → foxes-1.6.1}/foxes/utils/dev_utils.py +0 -0
  409. {foxes-1.0 → foxes-1.6.1}/foxes/utils/geom2d/example_intersection.py +0 -0
  410. {foxes-1.0 → foxes-1.6.1}/foxes/utils/geom2d/example_union.py +0 -0
  411. {foxes-1.0 → foxes-1.6.1}/foxes/utils/geom2d/half_plane.py +0 -0
  412. {foxes-1.0 → foxes-1.6.1}/foxes/utils/random_xy.py +0 -0
  413. {foxes-1.0 → foxes-1.6.1}/foxes/utils/regularize.py +0 -0
  414. {foxes-1.0 → foxes-1.6.1}/foxes/utils/two_circles.py +0 -0
  415. {foxes-1.0 → foxes-1.6.1}/foxes/utils/wind_dir.py +0 -0
  416. {foxes-1.0 → foxes-1.6.1}/foxes.egg-info/dependency_links.txt +0 -0
  417. {foxes-1.0 → foxes-1.6.1}/foxes.egg-info/top_level.txt +0 -0
  418. {foxes-1.0 → foxes-1.6.1}/setup.cfg +0 -0
  419. {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/row_Jensen_linear_centre/flappy/run.py +0 -0
  420. {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/flappy/run.py +0 -0
  421. {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2005/flappy/run.py +0 -0
  422. {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2019/flappy/run.py +0 -0
  423. {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/flappy/run.py +0 -0
  424. {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/flappy/run.py +0 -0
@@ -5,4 +5,3 @@ include foxes/data/states/*.csv.gz
5
5
  include foxes/data/states/*.nc
6
6
  include foxes/data/states/*.tab
7
7
  include foxes/data/farms/*.csv
8
- include foxes/data/windio/*.yaml
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: foxes
3
- Version: 1.0
3
+ Version: 1.6.1
4
4
  Summary: Farm Optimization and eXtended yield Evaluation Software
5
5
  Author: Jonas Schulte
6
6
  Maintainer: Jonas Schulte
@@ -36,66 +36,51 @@ Classifier: Topic :: Scientific/Engineering
36
36
  Classifier: Intended Audience :: Developers
37
37
  Classifier: Intended Audience :: Science/Research
38
38
  Classifier: Programming Language :: Python :: 3
39
- Classifier: Programming Language :: Python :: 3.8
40
39
  Classifier: Programming Language :: Python :: 3.9
41
40
  Classifier: Programming Language :: Python :: 3.10
42
41
  Classifier: Programming Language :: Python :: 3.11
43
42
  Classifier: Programming Language :: Python :: 3.12
43
+ Classifier: Programming Language :: Python :: 3.13
44
+ Classifier: Programming Language :: Python :: 3.14
44
45
  Classifier: License :: OSI Approved :: MIT License
45
46
  Classifier: Operating System :: OS Independent
46
47
  Classifier: Development Status :: 4 - Beta
47
- Requires-Python: >=3.8
48
+ Requires-Python: >=3.9
48
49
  Description-Content-Type: text/markdown
49
50
  License-File: LICENSE
50
- Requires-Dist: matplotlib
51
- Requires-Dist: numpy
52
- Requires-Dist: pandas
53
- Requires-Dist: xarray
54
- Requires-Dist: scipy
55
- Requires-Dist: netcdf4
56
- Requires-Dist: windrose
57
- Requires-Dist: cycler
58
- Requires-Dist: tqdm
59
- Requires-Dist: pyyaml
60
- Provides-Extra: io
61
- Requires-Dist: windio>=1; extra == "io"
51
+ Requires-Dist: matplotlib>=3.8
52
+ Requires-Dist: numpy>=1.26
53
+ Requires-Dist: pandas>=2.0
54
+ Requires-Dist: scipy>=1.12
55
+ Requires-Dist: xarray>=2023
56
+ Requires-Dist: netcdf4>=1.0
57
+ Requires-Dist: pyyaml>=4.0
58
+ Requires-Dist: tqdm>=2.0
59
+ Requires-Dist: utm>=0.5
62
60
  Provides-Extra: opt
63
- Requires-Dist: foxes-opt; extra == "opt"
61
+ Requires-Dist: foxes-opt>=0.6; extra == "opt"
64
62
  Provides-Extra: dask
65
- Requires-Dist: dask; extra == "dask"
66
- Requires-Dist: distributed; extra == "dask"
67
- Requires-Dist: dask-jobqueue; extra == "dask"
68
- Requires-Dist: setuptools; extra == "dask"
69
- Provides-Extra: eng
70
- Requires-Dist: multiprocess; extra == "eng"
71
- Requires-Dist: dask; extra == "eng"
72
- Requires-Dist: distributed; extra == "eng"
73
- Requires-Dist: dask-jobqueue; extra == "eng"
74
- Requires-Dist: setuptools; extra == "eng"
75
- Requires-Dist: mpi4py; extra == "eng"
76
- Provides-Extra: eng0
77
- Requires-Dist: multiprocess; extra == "eng0"
78
- Requires-Dist: dask; extra == "eng0"
79
- Requires-Dist: distributed; extra == "eng0"
80
- Requires-Dist: dask-jobqueue; extra == "eng0"
81
- Requires-Dist: setuptools; extra == "eng0"
82
- Provides-Extra: test
83
- Requires-Dist: flake8; extra == "test"
84
- Requires-Dist: pytest; extra == "test"
63
+ Requires-Dist: dask>=2022.0; extra == "dask"
64
+ Requires-Dist: distributed>=2022.0; extra == "dask"
65
+ Requires-Dist: dask-jobqueue>=0.8; extra == "dask"
66
+ Requires-Dist: setuptools>=61.0; extra == "dask"
85
67
  Provides-Extra: doc
86
- Requires-Dist: sphinx; extra == "doc"
87
- Requires-Dist: sphinx-immaterial; extra == "doc"
88
- Requires-Dist: nbsphinx; extra == "doc"
89
- Requires-Dist: ipykernel; extra == "doc"
90
- Requires-Dist: ipywidgets; extra == "doc"
91
- Requires-Dist: m2r2; extra == "doc"
92
- Requires-Dist: lxml_html_clean; extra == "doc"
93
- Provides-Extra: dev
94
- Requires-Dist: flake8; extra == "dev"
95
- Requires-Dist: pytest; extra == "dev"
96
- Requires-Dist: jupyter; extra == "dev"
97
- Requires-Dist: objsize; extra == "dev"
98
- Requires-Dist: black; extra == "dev"
68
+ Requires-Dist: setuptools>=61.0; extra == "doc"
69
+ Requires-Dist: sphinx>=5.0; extra == "doc"
70
+ Requires-Dist: sphinx-immaterial>=0.10; extra == "doc"
71
+ Requires-Dist: nbsphinx>=0.5; extra == "doc"
72
+ Requires-Dist: ipykernel>=5.0; extra == "doc"
73
+ Requires-Dist: ipywidgets>=5.0; extra == "doc"
74
+ Requires-Dist: m2r2>=0.2; extra == "doc"
75
+ Requires-Dist: lxml_html_clean>=0.4; extra == "doc"
76
+ Requires-Dist: dask>=2022.0; extra == "doc"
77
+ Requires-Dist: distributed>=2022.0; extra == "doc"
78
+ Provides-Extra: test
79
+ Requires-Dist: flake8>=0.1; extra == "test"
80
+ Requires-Dist: pytest>=7.0; extra == "test"
81
+ Provides-Extra: utils
82
+ Requires-Dist: objsize>=0.5; extra == "utils"
83
+ Dynamic: license-file
99
84
 
100
85
  # Welcome to foxes
101
86
 
@@ -113,10 +98,11 @@ The software `foxes` is a modular wind farm simulation and wake modelling toolbo
113
98
  The fast performance of `foxes` is owed to vectorization and parallelization,
114
99
  and it is intended to be used for large wind farms and large timeseries inflow data.
115
100
  The parallelization on local or remote clusters is supported, based on
101
+ [mpi4py](https://mpi4py.readthedocs.io/en/stable/) or
116
102
  [dask.distributed](https://distributed.dask.org/en/stable/).
117
103
  The wind farm
118
- optimization capabilities invoke the [iwopy](https://github.com/FraunhoferIWES/iwopy) package which
119
- as well supports vectorization.
104
+ optimization capabilities invoke the [foxes-opt](https://github.com/FraunhoferIWES/foxes-opt) package which
105
+ as well supports vectorization and parallelization.
120
106
 
121
107
  `foxes` is build upon many years of experience with wake model code development at IWES, starting with the C++ based in-house code _flapFOAM_ (2011-2019) and the Python based direct predecessor _flappy_ (2019-2022).
122
108
 
@@ -154,13 +140,7 @@ Evaluation Software"`
154
140
 
155
141
  ## Requirements
156
142
 
157
- The supported Python versions are:
158
-
159
- - `Python 3.8`
160
- - `Python 3.9`
161
- - `Python 3.10`
162
- - `Python 3.11`
163
- - `Python 3.12`
143
+ The supported Python versions are `Python 3.9`...`3.14`.
164
144
 
165
145
  ## Installation
166
146
 
@@ -183,15 +163,17 @@ For detailed examples of how to run _foxes_, check the `examples` and `notebooks
183
163
  ```python
184
164
  import foxes
185
165
 
186
- states = foxes.input.states.Timeseries("timeseries_3000.csv.gz", ["WS", "WD","TI","RHO"])
166
+ if __name__ == "__main__":
167
+
168
+ states = foxes.input.states.Timeseries("timeseries_3000.csv.gz", ["WS", "WD","TI","RHO"])
187
169
 
188
- farm = foxes.WindFarm()
189
- foxes.input.farm_layout.add_from_file(farm, "test_farm_67.csv", turbine_models=["NREL5MW"])
170
+ farm = foxes.WindFarm()
171
+ foxes.input.farm_layout.add_from_file(farm, "test_farm_67.csv", turbine_models=["NREL5MW"])
190
172
 
191
- algo = foxes.algorithms.Downwind(farm, states, ["Jensen_linear_k007"])
192
- farm_results = algo.calc_farm()
173
+ algo = foxes.algorithms.Downwind(farm, states, ["Jensen_linear_k007"])
174
+ farm_results = algo.calc_farm()
193
175
 
194
- print(farm_results)
176
+ print(farm_results)
195
177
  ```
196
178
 
197
179
  ## Testing
@@ -14,10 +14,11 @@ The software `foxes` is a modular wind farm simulation and wake modelling toolbo
14
14
  The fast performance of `foxes` is owed to vectorization and parallelization,
15
15
  and it is intended to be used for large wind farms and large timeseries inflow data.
16
16
  The parallelization on local or remote clusters is supported, based on
17
+ [mpi4py](https://mpi4py.readthedocs.io/en/stable/) or
17
18
  [dask.distributed](https://distributed.dask.org/en/stable/).
18
19
  The wind farm
19
- optimization capabilities invoke the [iwopy](https://github.com/FraunhoferIWES/iwopy) package which
20
- as well supports vectorization.
20
+ optimization capabilities invoke the [foxes-opt](https://github.com/FraunhoferIWES/foxes-opt) package which
21
+ as well supports vectorization and parallelization.
21
22
 
22
23
  `foxes` is build upon many years of experience with wake model code development at IWES, starting with the C++ based in-house code _flapFOAM_ (2011-2019) and the Python based direct predecessor _flappy_ (2019-2022).
23
24
 
@@ -55,13 +56,7 @@ Evaluation Software"`
55
56
 
56
57
  ## Requirements
57
58
 
58
- The supported Python versions are:
59
-
60
- - `Python 3.8`
61
- - `Python 3.9`
62
- - `Python 3.10`
63
- - `Python 3.11`
64
- - `Python 3.12`
59
+ The supported Python versions are `Python 3.9`...`3.14`.
65
60
 
66
61
  ## Installation
67
62
 
@@ -84,15 +79,17 @@ For detailed examples of how to run _foxes_, check the `examples` and `notebooks
84
79
  ```python
85
80
  import foxes
86
81
 
87
- 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"])
88
85
 
89
- farm = foxes.WindFarm()
90
- 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"])
91
88
 
92
- algo = foxes.algorithms.Downwind(farm, states, ["Jensen_linear_k007"])
93
- farm_results = algo.calc_farm()
89
+ algo = foxes.algorithms.Downwind(farm, states, ["Jensen_linear_k007"])
90
+ farm_results = algo.calc_farm()
94
91
 
95
- print(farm_results)
92
+ print(farm_results)
96
93
  ```
97
94
 
98
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"
@@ -314,13 +313,15 @@ python_apigen_modules = {
314
313
  "foxes.algorithms.iterative.models": "_foxes/algorithms/iterative/models/",
315
314
  "foxes.algorithms.sequential": "_foxes/algorithms/sequential/",
316
315
  "foxes.algorithms.sequential.models": "_foxes/algorithms/sequential/models/",
316
+ "foxes.config": "_foxes/config/",
317
317
  "foxes.core": "_foxes/core/",
318
318
  "foxes.data": "_foxes/data/",
319
319
  "foxes.engines": "_foxes/engines/",
320
320
  "foxes.input.farm_layout": "_foxes/input/farm_layout/",
321
321
  "foxes.input.states": "_foxes/input/states/",
322
322
  "foxes.input.states.create": "_foxes/input/states/create/",
323
- "foxes.input.windio": "_foxes/input/windio/",
323
+ "foxes.input.yaml": "_foxes/input/yaml/",
324
+ "foxes.input.yaml.windio": "_foxes/input/yaml/windio/",
324
325
  "foxes.output": "_foxes/output/",
325
326
  "foxes.output.flow_plots_2d": "_foxes/output/flow_plots_2d/",
326
327
  "foxes.output.seq_plugins": "_foxes/output/seq_plugins/",
@@ -335,6 +336,7 @@ python_apigen_modules = {
335
336
  "foxes.models.vertical_profiles": "_foxes/models/vertical_profiles/",
336
337
  "foxes.models.axial_induction": "_foxes/models/axial_induction",
337
338
  "foxes.models.ground_models": "_foxes/models/ground_models",
339
+ "foxes.models.wake_deflections": "_foxes/models/wake_deflections",
338
340
  "foxes.models.wake_frames": "_foxes/models/wake_frames/",
339
341
  "foxes.models.wake_models": "_foxes/models/wake_models/",
340
342
  "foxes.models.wake_models.induction": "_foxes/models/wake_models/induction/",
@@ -344,7 +346,6 @@ python_apigen_modules = {
344
346
  "foxes.utils": "_foxes/utils/",
345
347
  "foxes.utils.abl": "_foxes/utils/abl",
346
348
  "foxes.utils.geom2d": "_foxes/utils/geom2d/",
347
- "foxes.utils.runners": "_foxes/utils/runners/",
348
349
  "foxes.utils.two_circles": "_foxes/utils/two_circles/",
349
350
  "foxes.utils.abl.neutral": "_foxes/utils/abl/neutral/",
350
351
  "foxes.utils.abl.stable": "_foxes/utils/abl/stable/",
@@ -91,70 +91,72 @@ if __name__ == "__main__":
91
91
  wake_frame="rotor_wd",
92
92
  partial_wakes=args.pwakes,
93
93
  mbook=mbook,
94
- engine=args.engine,
94
+ )
95
+
96
+ with foxes.Engine.new(
97
+ engine_type=args.engine,
95
98
  n_procs=args.n_cpus,
96
99
  chunk_size_states=args.chunksize_states,
97
100
  chunk_size_points=args.chunksize_points,
98
- )
99
-
100
- time0 = time.time()
101
- farm_results = algo.calc_farm()
102
- time1 = time.time()
101
+ ):
102
+ time0 = time.time()
103
+ farm_results = algo.calc_farm()
104
+ time1 = time.time()
103
105
 
104
- print("\nCalc time =", time1 - time0, "\n")
106
+ print("\nCalc time =", time1 - time0, "\n")
105
107
 
106
- print(farm_results)
108
+ print(farm_results)
107
109
 
108
- fr = farm_results.to_dataframe()
109
- print(fr[[FV.WD, FV.H, FV.AMB_REWS, FV.REWS, FV.AMB_P, FV.P]])
110
+ fr = farm_results.to_dataframe()
111
+ print(fr[[FV.WD, FV.H, FV.AMB_REWS, FV.REWS, FV.AMB_P, FV.P]])
110
112
 
111
- o = foxes.output.FarmResultsEval(farm_results)
112
- o = foxes.output.FarmResultsEval(farm_results)
113
- o.add_capacity(algo)
114
- o.add_capacity(algo, ambient=True)
115
- o.add_efficiency()
113
+ o = foxes.output.FarmResultsEval(farm_results)
114
+ o = foxes.output.FarmResultsEval(farm_results)
115
+ o.add_capacity(algo)
116
+ o.add_capacity(algo, ambient=True)
117
+ o.add_efficiency()
116
118
 
117
- # state-turbine results
118
- farm_df = farm_results.to_dataframe()
119
- print("\nFarm results data:\n")
120
- print(
121
- farm_df[
122
- [
123
- FV.X,
124
- FV.WD,
125
- FV.AMB_REWS,
126
- FV.REWS,
127
- FV.AMB_TI,
128
- FV.TI,
129
- FV.AMB_P,
130
- FV.P,
131
- FV.EFF,
119
+ # state-turbine results
120
+ farm_df = farm_results.to_dataframe()
121
+ print("\nFarm results data:\n")
122
+ print(
123
+ farm_df[
124
+ [
125
+ FV.X,
126
+ FV.WD,
127
+ FV.AMB_REWS,
128
+ FV.REWS,
129
+ FV.AMB_TI,
130
+ FV.TI,
131
+ FV.AMB_P,
132
+ FV.P,
133
+ FV.EFF,
134
+ ]
132
135
  ]
133
- ]
134
- )
135
- print()
136
+ )
137
+ print()
136
138
 
137
- # results by turbine
138
- turbine_results = o.reduce_states(
139
- {
140
- FV.AMB_P: "mean",
141
- FV.P: "mean",
142
- FV.AMB_CAP: "mean",
143
- FV.CAP: "mean",
144
- FV.EFF: "mean",
145
- }
146
- )
147
- turbine_results[FV.AMB_YLD] = o.calc_turbine_yield(
148
- algo=algo, annual=True, ambient=True
149
- )
150
- turbine_results[FV.YLD] = o.calc_turbine_yield(algo=algo, annual=True)
151
- print("\nResults by turbine:\n")
152
- print(turbine_results)
139
+ # results by turbine
140
+ turbine_results = o.reduce_states(
141
+ {
142
+ FV.AMB_P: "weights",
143
+ FV.P: "weights",
144
+ FV.AMB_CAP: "weights",
145
+ FV.CAP: "weights",
146
+ }
147
+ )
148
+ turbine_results[FV.AMB_YLD] = o.calc_turbine_yield(
149
+ algo=algo, annual=True, ambient=True
150
+ )
151
+ turbine_results[FV.YLD] = o.calc_turbine_yield(algo=algo, annual=True)
152
+ turbine_results[FV.EFF] = turbine_results[FV.P] / turbine_results[FV.AMB_P]
153
+ print("\nResults by turbine:\n")
154
+ print(turbine_results)
153
155
 
154
- # power results
155
- P0 = o.calc_mean_farm_power(ambient=True)
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")
159
- print(f"Farm efficiency : {o.calc_farm_efficiency():.2f}")
160
- print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh.")
156
+ # power results
157
+ P0 = o.calc_mean_farm_power(ambient=True)
158
+ P = o.calc_mean_farm_power()
159
+ print(f"\nFarm power : {P / 1000:.1f} MW")
160
+ print(f"Farm ambient power: {P0 / 1000:.1f} MW")
161
+ print(f"Farm efficiency : {o.calc_farm_efficiency():.2f}")
162
+ 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()