foxes 1.2.4__tar.gz → 1.2.5__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 (319) hide show
  1. {foxes-1.2.4/foxes.egg-info → foxes-1.2.5}/PKG-INFO +3 -1
  2. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/states/multi_height.py +4 -4
  3. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/states/states_table.py +4 -4
  4. foxes-1.2.5/foxes/input/states/wrg_states.py +189 -0
  5. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/induction/vortex_sheet.py +6 -9
  6. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/wrg_utils.py +84 -1
  7. {foxes-1.2.4 → foxes-1.2.5/foxes.egg-info}/PKG-INFO +3 -1
  8. {foxes-1.2.4 → foxes-1.2.5}/foxes.egg-info/SOURCES.txt +1 -0
  9. {foxes-1.2.4 → foxes-1.2.5}/foxes.egg-info/requires.txt +2 -0
  10. {foxes-1.2.4 → foxes-1.2.5}/pyproject.toml +3 -1
  11. {foxes-1.2.4 → foxes-1.2.5}/LICENSE +0 -0
  12. {foxes-1.2.4 → foxes-1.2.5}/Logo_FOXES.svg +0 -0
  13. {foxes-1.2.4 → foxes-1.2.5}/MANIFEST.in +0 -0
  14. {foxes-1.2.4 → foxes-1.2.5}/README.md +0 -0
  15. {foxes-1.2.4 → foxes-1.2.5}/docs/source/conf.py +0 -0
  16. {foxes-1.2.4 → foxes-1.2.5}/examples/abl_states/run.py +0 -0
  17. {foxes-1.2.4 → foxes-1.2.5}/examples/compare_rotors_pwakes/run.py +0 -0
  18. {foxes-1.2.4 → foxes-1.2.5}/examples/compare_wakes/run.py +0 -0
  19. {foxes-1.2.4 → foxes-1.2.5}/examples/dyn_wakes/run.py +0 -0
  20. {foxes-1.2.4 → foxes-1.2.5}/examples/field_data_nc/run.py +0 -0
  21. {foxes-1.2.4 → foxes-1.2.5}/examples/induction/run.py +0 -0
  22. {foxes-1.2.4 → foxes-1.2.5}/examples/multi_height/run.py +0 -0
  23. {foxes-1.2.4 → foxes-1.2.5}/examples/power_mask/run.py +0 -0
  24. {foxes-1.2.4 → foxes-1.2.5}/examples/random_timeseries/run.py +0 -0
  25. {foxes-1.2.4 → foxes-1.2.5}/examples/scan_row/run.py +0 -0
  26. {foxes-1.2.4 → foxes-1.2.5}/examples/sector_management/run.py +0 -0
  27. {foxes-1.2.4 → foxes-1.2.5}/examples/sequential/run.py +0 -0
  28. {foxes-1.2.4 → foxes-1.2.5}/examples/single_state/run.py +0 -0
  29. {foxes-1.2.4 → foxes-1.2.5}/examples/states_lookup_table/run.py +0 -0
  30. {foxes-1.2.4 → foxes-1.2.5}/examples/streamline_wakes/run.py +0 -0
  31. {foxes-1.2.4 → foxes-1.2.5}/examples/tab_file/run.py +0 -0
  32. {foxes-1.2.4 → foxes-1.2.5}/examples/timelines/run.py +0 -0
  33. {foxes-1.2.4 → foxes-1.2.5}/examples/timeseries/run.py +0 -0
  34. {foxes-1.2.4 → foxes-1.2.5}/examples/timeseries_slurm/run.py +0 -0
  35. {foxes-1.2.4 → foxes-1.2.5}/examples/wind_rose/run.py +0 -0
  36. {foxes-1.2.4 → foxes-1.2.5}/examples/yawed_wake/run.py +0 -0
  37. {foxes-1.2.4 → foxes-1.2.5}/foxes/__init__.py +0 -0
  38. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/__init__.py +0 -0
  39. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/downwind/__init__.py +0 -0
  40. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/downwind/downwind.py +0 -0
  41. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/downwind/models/__init__.py +0 -0
  42. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/downwind/models/farm_wakes_calc.py +0 -0
  43. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/downwind/models/init_farm_data.py +0 -0
  44. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/downwind/models/point_wakes_calc.py +0 -0
  45. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/downwind/models/reorder_farm_output.py +0 -0
  46. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/downwind/models/set_amb_farm_results.py +0 -0
  47. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/downwind/models/set_amb_point_results.py +0 -0
  48. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/iterative/__init__.py +0 -0
  49. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/iterative/iterative.py +0 -0
  50. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/iterative/models/__init__.py +0 -0
  51. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/iterative/models/convergence.py +0 -0
  52. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/iterative/models/farm_wakes_calc.py +0 -0
  53. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/iterative/models/urelax.py +0 -0
  54. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/sequential/__init__.py +0 -0
  55. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/sequential/models/__init__.py +0 -0
  56. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/sequential/models/plugin.py +0 -0
  57. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/sequential/models/seq_state.py +0 -0
  58. {foxes-1.2.4 → foxes-1.2.5}/foxes/algorithms/sequential/sequential.py +0 -0
  59. {foxes-1.2.4 → foxes-1.2.5}/foxes/config/__init__.py +0 -0
  60. {foxes-1.2.4 → foxes-1.2.5}/foxes/config/config.py +0 -0
  61. {foxes-1.2.4 → foxes-1.2.5}/foxes/constants.py +0 -0
  62. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/__init__.py +0 -0
  63. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/algorithm.py +0 -0
  64. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/axial_induction_model.py +0 -0
  65. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/data.py +0 -0
  66. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/data_calc_model.py +0 -0
  67. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/engine.py +0 -0
  68. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/farm_controller.py +0 -0
  69. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/farm_data_model.py +0 -0
  70. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/farm_model.py +0 -0
  71. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/ground_model.py +0 -0
  72. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/model.py +0 -0
  73. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/partial_wakes_model.py +0 -0
  74. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/point_data_model.py +0 -0
  75. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/rotor_model.py +0 -0
  76. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/states.py +0 -0
  77. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/turbine.py +0 -0
  78. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/turbine_model.py +0 -0
  79. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/turbine_type.py +0 -0
  80. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/vertical_profile.py +0 -0
  81. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/wake_frame.py +0 -0
  82. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/wake_model.py +0 -0
  83. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/wake_superposition.py +0 -0
  84. {foxes-1.2.4 → foxes-1.2.5}/foxes/core/wind_farm.py +0 -0
  85. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/__init__.py +0 -0
  86. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/farms/__init__.py +0 -0
  87. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/farms/test_farm_67.csv +0 -0
  88. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/parse.py +0 -0
  89. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/power_ct_curves/DTU-10MW-D178d3-H119.csv +0 -0
  90. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/power_ct_curves/IEA-15MW-D240-H150.csv +0 -0
  91. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/power_ct_curves/IWT-7d5MW-D164-H100.csv +0 -0
  92. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/power_ct_curves/NREL-5MW-D126-H90.csv +0 -0
  93. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/power_ct_curves/__init__.py +0 -0
  94. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/states/WRF-Timeseries-3000.nc +0 -0
  95. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/states/WRF-Timeseries-4464.csv.gz +0 -0
  96. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/states/__init__.py +0 -0
  97. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/states/abl_states_6000.csv.gz +0 -0
  98. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/states/timeseries_100.csv.gz +0 -0
  99. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/states/timeseries_3000.csv.gz +0 -0
  100. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/states/timeseries_8000.csv.gz +0 -0
  101. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/states/wind_rose_bremen.csv +0 -0
  102. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/states/wind_rotation.nc +0 -0
  103. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/states/winds100.tab +0 -0
  104. {foxes-1.2.4 → foxes-1.2.5}/foxes/data/static_data.py +0 -0
  105. {foxes-1.2.4 → foxes-1.2.5}/foxes/engines/__init__.py +0 -0
  106. {foxes-1.2.4 → foxes-1.2.5}/foxes/engines/dask.py +0 -0
  107. {foxes-1.2.4 → foxes-1.2.5}/foxes/engines/default.py +0 -0
  108. {foxes-1.2.4 → foxes-1.2.5}/foxes/engines/futures.py +0 -0
  109. {foxes-1.2.4 → foxes-1.2.5}/foxes/engines/mpi.py +0 -0
  110. {foxes-1.2.4 → foxes-1.2.5}/foxes/engines/multiprocess.py +0 -0
  111. {foxes-1.2.4 → foxes-1.2.5}/foxes/engines/numpy.py +0 -0
  112. {foxes-1.2.4 → foxes-1.2.5}/foxes/engines/pool.py +0 -0
  113. {foxes-1.2.4 → foxes-1.2.5}/foxes/engines/ray.py +0 -0
  114. {foxes-1.2.4 → foxes-1.2.5}/foxes/engines/single.py +0 -0
  115. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/__init__.py +0 -0
  116. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/farm_layout/__init__.py +0 -0
  117. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/farm_layout/from_csv.py +0 -0
  118. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/farm_layout/from_df.py +0 -0
  119. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/farm_layout/from_file.py +0 -0
  120. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/farm_layout/from_json.py +0 -0
  121. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/farm_layout/from_random.py +0 -0
  122. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/farm_layout/grid.py +0 -0
  123. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/farm_layout/ring.py +0 -0
  124. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/farm_layout/row.py +0 -0
  125. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/states/__init__.py +0 -0
  126. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/states/create/__init__.py +0 -0
  127. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/states/create/random_abl_states.py +0 -0
  128. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/states/create/random_timeseries.py +0 -0
  129. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/states/field_data_nc.py +0 -0
  130. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/states/one_point_flow.py +0 -0
  131. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/states/scan.py +0 -0
  132. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/states/single.py +0 -0
  133. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/yaml/__init__.py +0 -0
  134. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/yaml/dict.py +0 -0
  135. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/yaml/windio/__init__.py +0 -0
  136. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/yaml/windio/read_attributes.py +0 -0
  137. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/yaml/windio/read_farm.py +0 -0
  138. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/yaml/windio/read_fields.py +0 -0
  139. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/yaml/windio/read_outputs.py +0 -0
  140. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/yaml/windio/read_site.py +0 -0
  141. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/yaml/windio/windio.py +0 -0
  142. {foxes-1.2.4 → foxes-1.2.5}/foxes/input/yaml/yaml.py +0 -0
  143. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/__init__.py +0 -0
  144. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/axial_induction/__init__.py +0 -0
  145. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/axial_induction/betz.py +0 -0
  146. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/axial_induction/madsen.py +0 -0
  147. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/farm_controllers/__init__.py +0 -0
  148. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/farm_controllers/basic.py +0 -0
  149. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/farm_models/__init__.py +0 -0
  150. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/farm_models/turbine2farm.py +0 -0
  151. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/ground_models/__init__.py +0 -0
  152. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/ground_models/no_ground.py +0 -0
  153. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/ground_models/wake_mirror.py +0 -0
  154. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/model_book.py +0 -0
  155. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/partial_wakes/__init__.py +0 -0
  156. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/partial_wakes/axiwake.py +0 -0
  157. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/partial_wakes/centre.py +0 -0
  158. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/partial_wakes/grid.py +0 -0
  159. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/partial_wakes/rotor_points.py +0 -0
  160. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/partial_wakes/segregated.py +0 -0
  161. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/partial_wakes/top_hat.py +0 -0
  162. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/point_models/__init__.py +0 -0
  163. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/point_models/set_uniform_data.py +0 -0
  164. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/point_models/tke2ti.py +0 -0
  165. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/point_models/ustar2ti.py +0 -0
  166. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/point_models/wake_deltas.py +0 -0
  167. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/rotor_models/__init__.py +0 -0
  168. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/rotor_models/centre.py +0 -0
  169. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/rotor_models/grid.py +0 -0
  170. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/rotor_models/levels.py +0 -0
  171. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_models/__init__.py +0 -0
  172. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_models/calculator.py +0 -0
  173. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_models/kTI_model.py +0 -0
  174. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_models/lookup_table.py +0 -0
  175. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_models/power_mask.py +0 -0
  176. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_models/rotor_centre_calc.py +0 -0
  177. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_models/sector_management.py +0 -0
  178. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_models/set_farm_vars.py +0 -0
  179. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_models/table_factors.py +0 -0
  180. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_models/thrust2ct.py +0 -0
  181. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_models/yaw2yawm.py +0 -0
  182. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_models/yawm2yaw.py +0 -0
  183. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_types/CpCt_file.py +0 -0
  184. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_types/CpCt_from_two.py +0 -0
  185. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_types/PCt_file.py +0 -0
  186. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_types/PCt_from_two.py +0 -0
  187. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_types/TBL_file.py +0 -0
  188. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_types/__init__.py +0 -0
  189. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_types/lookup.py +0 -0
  190. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_types/null_type.py +0 -0
  191. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_types/wsrho2PCt_from_two.py +0 -0
  192. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/turbine_types/wsti2PCt_from_two.py +0 -0
  193. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/vertical_profiles/__init__.py +0 -0
  194. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/vertical_profiles/abl_log_neutral_ws.py +0 -0
  195. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/vertical_profiles/abl_log_stable_ws.py +0 -0
  196. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/vertical_profiles/abl_log_unstable_ws.py +0 -0
  197. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/vertical_profiles/abl_log_ws.py +0 -0
  198. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/vertical_profiles/data_profile.py +0 -0
  199. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/vertical_profiles/sheared_ws.py +0 -0
  200. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/vertical_profiles/uniform.py +0 -0
  201. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_frames/__init__.py +0 -0
  202. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_frames/dynamic_wakes.py +0 -0
  203. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_frames/farm_order.py +0 -0
  204. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_frames/rotor_wd.py +0 -0
  205. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_frames/seq_dynamic_wakes.py +0 -0
  206. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_frames/streamlines.py +0 -0
  207. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_frames/timelines.py +0 -0
  208. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_frames/yawed_wakes.py +0 -0
  209. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/__init__.py +0 -0
  210. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/axisymmetric.py +0 -0
  211. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/dist_sliced.py +0 -0
  212. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/gaussian.py +0 -0
  213. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/induction/__init__.py +0 -0
  214. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/induction/rankine_half_body.py +0 -0
  215. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/induction/rathmann.py +0 -0
  216. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/induction/self_similar.py +0 -0
  217. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/induction/self_similar2020.py +0 -0
  218. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/ti/__init__.py +0 -0
  219. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/ti/crespo_hernandez.py +0 -0
  220. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/ti/iec_ti.py +0 -0
  221. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/top_hat.py +0 -0
  222. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/wind/__init__.py +0 -0
  223. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/wind/bastankhah14.py +0 -0
  224. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/wind/bastankhah16.py +0 -0
  225. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/wind/jensen.py +0 -0
  226. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_models/wind/turbopark.py +0 -0
  227. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_superpositions/__init__.py +0 -0
  228. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_superpositions/ti_linear.py +0 -0
  229. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_superpositions/ti_max.py +0 -0
  230. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_superpositions/ti_pow.py +0 -0
  231. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_superpositions/ti_quadratic.py +0 -0
  232. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_superpositions/ws_linear.py +0 -0
  233. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_superpositions/ws_max.py +0 -0
  234. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_superpositions/ws_pow.py +0 -0
  235. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_superpositions/ws_product.py +0 -0
  236. {foxes-1.2.4 → foxes-1.2.5}/foxes/models/wake_superpositions/ws_quadratic.py +0 -0
  237. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/__init__.py +0 -0
  238. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/animation.py +0 -0
  239. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/calc_points.py +0 -0
  240. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/farm_layout.py +0 -0
  241. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/farm_results_eval.py +0 -0
  242. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/flow_plots_2d/__init__.py +0 -0
  243. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/flow_plots_2d/flow_plots.py +0 -0
  244. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/flow_plots_2d/get_fig.py +0 -0
  245. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/grids.py +0 -0
  246. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/output.py +0 -0
  247. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/plt.py +0 -0
  248. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/results_writer.py +0 -0
  249. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/rose_plot.py +0 -0
  250. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/rotor_point_plots.py +0 -0
  251. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/round.py +0 -0
  252. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/seq_plugins/__init__.py +0 -0
  253. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/seq_plugins/seq_flow_ani_plugin.py +0 -0
  254. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/seq_plugins/seq_wake_debug_plugin.py +0 -0
  255. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/slice_data.py +0 -0
  256. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/slices_data.py +0 -0
  257. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/state_turbine_map.py +0 -0
  258. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/state_turbine_table.py +0 -0
  259. {foxes-1.2.4 → foxes-1.2.5}/foxes/output/turbine_type_curves.py +0 -0
  260. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/__init__.py +0 -0
  261. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/abl/__init__.py +0 -0
  262. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/abl/neutral.py +0 -0
  263. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/abl/sheared.py +0 -0
  264. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/abl/stable.py +0 -0
  265. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/abl/unstable.py +0 -0
  266. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/cubic_roots.py +0 -0
  267. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/data_book.py +0 -0
  268. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/dev_utils.py +0 -0
  269. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/dict.py +0 -0
  270. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/exec_python.py +0 -0
  271. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/factory.py +0 -0
  272. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/geom2d/__init__.py +0 -0
  273. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/geom2d/area_geometry.py +0 -0
  274. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/geom2d/circle.py +0 -0
  275. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/geom2d/example_intersection.py +0 -0
  276. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/geom2d/example_union.py +0 -0
  277. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/geom2d/half_plane.py +0 -0
  278. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/geom2d/polygon.py +0 -0
  279. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/geopandas_utils.py +0 -0
  280. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/load.py +0 -0
  281. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/pandas_helpers.py +0 -0
  282. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/pandas_utils.py +0 -0
  283. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/random_xy.py +0 -0
  284. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/regularize.py +0 -0
  285. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/subclasses.py +0 -0
  286. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/tab_files.py +0 -0
  287. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/two_circles.py +0 -0
  288. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/wind_dir.py +0 -0
  289. {foxes-1.2.4 → foxes-1.2.5}/foxes/utils/xarray_utils.py +0 -0
  290. {foxes-1.2.4 → foxes-1.2.5}/foxes/variables.py +0 -0
  291. {foxes-1.2.4 → foxes-1.2.5}/foxes.egg-info/dependency_links.txt +0 -0
  292. {foxes-1.2.4 → foxes-1.2.5}/foxes.egg-info/entry_points.txt +0 -0
  293. {foxes-1.2.4 → foxes-1.2.5}/foxes.egg-info/top_level.txt +0 -0
  294. {foxes-1.2.4 → foxes-1.2.5}/setup.cfg +0 -0
  295. {foxes-1.2.4 → foxes-1.2.5}/tests/0_consistency/iterative/test_iterative.py +0 -0
  296. {foxes-1.2.4 → foxes-1.2.5}/tests/0_consistency/partial_wakes/test_partial_wakes.py +0 -0
  297. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/PCt_files/flappy/run.py +0 -0
  298. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/PCt_files/test_PCt_files.py +0 -0
  299. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/abl_states/flappy/run.py +0 -0
  300. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/abl_states/test_abl_states.py +0 -0
  301. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/partial_top_hat/flappy/run.py +0 -0
  302. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/partial_top_hat/test_partial_top_hat.py +0 -0
  303. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_centre/flappy/run.py +0 -0
  304. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_centre/test_row_Jensen_linear_centre.py +0 -0
  305. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/flappy/run.py +0 -0
  306. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/test_row_Jensen_linear_tophat.py +0 -0
  307. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2005/flappy/run.py +0 -0
  308. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2005/test_row_Jensen_linear_tophat_IECTI_2005.py +0 -0
  309. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2019/flappy/run.py +0 -0
  310. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2019/test_row_Jensen_linear_tophat_IECTI_2019.py +0 -0
  311. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/flappy/run.py +0 -0
  312. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/test_row_Jensen_quadratic_centre.py +0 -0
  313. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6_2/grid_rotors/flappy/run.py +0 -0
  314. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6_2/grid_rotors/test_grid_rotors.py +0 -0
  315. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/flappy/run.py +0 -0
  316. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/test_row_Bastankhah_Crespo.py +0 -0
  317. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/flappy/run.py +0 -0
  318. {foxes-1.2.4 → foxes-1.2.5}/tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/test_row_Bastankhah_linear_centre.py +0 -0
  319. {foxes-1.2.4 → foxes-1.2.5}/tests/3_examples/test_examples.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: foxes
3
- Version: 1.2.4
3
+ Version: 1.2.5
4
4
  Summary: Farm Optimization and eXtended yield Evaluation Software
5
5
  Author: Jonas Schulte
6
6
  Maintainer: Jonas Schulte
@@ -94,6 +94,8 @@ Requires-Dist: ipykernel; extra == "doc"
94
94
  Requires-Dist: ipywidgets; extra == "doc"
95
95
  Requires-Dist: m2r2; extra == "doc"
96
96
  Requires-Dist: lxml_html_clean; extra == "doc"
97
+ Requires-Dist: dask; extra == "doc"
98
+ Requires-Dist: distributed; extra == "doc"
97
99
  Provides-Extra: dev
98
100
  Requires-Dist: flake8; extra == "dev"
99
101
  Requires-Dist: pytest; extra == "dev"
@@ -200,14 +200,14 @@ class MultiHeightStates(States):
200
200
  if not isinstance(self.data_source, pd.DataFrame):
201
201
  self._data_source = get_input_path(self.data_source)
202
202
  if not self.data_source.is_file():
203
- if verbosity:
203
+ if verbosity > 0:
204
204
  print(
205
205
  f"States '{self.name}': Reading static data '{self.data_source}' from context '{STATES}'"
206
206
  )
207
207
  self._data_source = algo.dbook.get_file_path(
208
208
  STATES, self.data_source.name, check_raw=False
209
209
  )
210
- if verbosity:
210
+ if verbosity > 0:
211
211
  print(f"Path: {self.data_source}")
212
212
  elif verbosity:
213
213
  print(f"States '{self.name}': Reading file {self.data_source}")
@@ -627,14 +627,14 @@ class MultiHeightNCStates(MultiHeightStates):
627
627
  if not isinstance(self.data_source, Dataset):
628
628
  self._data_source = get_input_path(self.data_source)
629
629
  if not self.data_source.is_file():
630
- if verbosity:
630
+ if verbosity > 0:
631
631
  print(
632
632
  f"States '{self.name}': Reading static data '{self.data_source}' from context '{STATES}'"
633
633
  )
634
634
  self._data_source = algo.dbook.get_file_path(
635
635
  STATES, self.data_source.name, check_raw=False
636
636
  )
637
- if verbosity:
637
+ if verbosity > 0:
638
638
  print(f"Path: {self.data_source}")
639
639
  elif verbosity:
640
640
  print(f"States '{self.name}': Reading file {self.data_source}")
@@ -217,14 +217,14 @@ class StatesTable(States):
217
217
  else:
218
218
  self._data_source = get_input_path(self.data_source)
219
219
  if not self.data_source.is_file():
220
- if verbosity:
220
+ if verbosity > 0:
221
221
  print(
222
222
  f"States '{self.name}': Reading static data '{self.data_source}' from context '{STATES}'"
223
223
  )
224
224
  self._data_source = algo.dbook.get_file_path(
225
225
  STATES, self.data_source.name, check_raw=False
226
226
  )
227
- if verbosity:
227
+ if verbosity > 0:
228
228
  print(f"Path: {self.data_source}")
229
229
  elif verbosity:
230
230
  print(f"States '{self.name}': Reading file {self.data_source}")
@@ -552,14 +552,14 @@ class TabStates(StatesTable):
552
552
  if self.__tab_data is None:
553
553
  self.__tab_source = get_input_path(self.__tab_source)
554
554
  if not self.__tab_source.is_file():
555
- if verbosity:
555
+ if verbosity > 0:
556
556
  print(
557
557
  f"States '{self.name}': Reading static data '{self.__tab_source}' from context '{STATES}'"
558
558
  )
559
559
  self.__tab_source = algo.dbook.get_file_path(
560
560
  STATES, self.__tab_source.name, check_raw=False
561
561
  )
562
- if verbosity:
562
+ if verbosity > 0:
563
563
  print(f"Path: {self.__tab_source}")
564
564
  elif verbosity:
565
565
  print(f"States '{self.name}': Reading file {self.__tab_source}")
@@ -0,0 +1,189 @@
1
+ import numpy as np
2
+
3
+ from foxes.core.states import States
4
+ from foxes.config import config, get_input_path
5
+ from foxes.utils.wrg_utils import ReaderWRG
6
+ from foxes.data import STATES
7
+ import foxes.variables as FV
8
+ import foxes.constants as FC
9
+
10
+
11
+ class WRGStates(States):
12
+ """
13
+ Ambient states based on WRG data
14
+
15
+ Attributes
16
+ ----------
17
+ wrg_fname: str
18
+ Name of the WRG file
19
+ ws_bins: numpy.ndarray
20
+ The wind speed bins, including
21
+ lower and upper bounds, shape: (n_ws_bins+1,)
22
+ fixed_vars: dict
23
+ Fixed uniform variable values, instead of
24
+ reading from data
25
+ bounds_extra_space: float or str
26
+ The extra space, either float in m,
27
+ or str for units of D, e.g. '2.5D'
28
+
29
+ :group: input.states
30
+
31
+ """
32
+
33
+ def __init__(
34
+ self,
35
+ wrg_fname,
36
+ ws_bins,
37
+ fixed_vars={},
38
+ bounds_extra_space="1D",
39
+ **kwargs,
40
+ ):
41
+ """
42
+ Constructor
43
+
44
+ Parameters
45
+ ----------
46
+ wrg_fname: str
47
+ Name of the WRG file
48
+ ws_bins: list of float
49
+ The wind speed bins, including
50
+ lower and upper bounds
51
+ fixed_vars: dict
52
+ Fixed uniform variable values, instead of
53
+ reading from data
54
+ bounds_extra_space: float or str, optional
55
+ The extra space, either float in m,
56
+ or str for units of D, e.g. '2.5D'
57
+ kwargs: dict, optional
58
+ Parameters for the base class
59
+
60
+ """
61
+ super().__init__(**kwargs)
62
+ self.wrg_fname = wrg_fname
63
+ self.ws_bins = np.asarray(ws_bins)
64
+ self.fixed_vars = fixed_vars
65
+ self.bounds_extra_space = bounds_extra_space
66
+
67
+ def load_data(self, algo, verbosity=0):
68
+ """
69
+ Load and/or create all model data that is subject to chunking.
70
+
71
+ Such data should not be stored under self, for memory reasons. The
72
+ data returned here will automatically be chunked and then provided
73
+ as part of the mdata object during calculations.
74
+
75
+ Parameters
76
+ ----------
77
+ algo: foxes.core.Algorithm
78
+ The calculation algorithm
79
+ verbosity: int
80
+ The verbosity level, 0 = silent
81
+
82
+ Returns
83
+ -------
84
+ idata: dict
85
+ The dict has exactly two entries: `data_vars`,
86
+ a dict with entries `name_str -> (dim_tuple, data_ndarray)`;
87
+ and `coords`, a dict with entries `dim_name_str -> dim_array`
88
+
89
+ """
90
+ # read wrg file:
91
+ fpath = get_input_path(self.wrg_fname)
92
+ if not fpath.is_file():
93
+ if verbosity > 0:
94
+ print(
95
+ f"States '{self.name}': Reading static data '{self.wrg_fname}' from context '{STATES}'"
96
+ )
97
+ fpath = algo.dbook.get_file_path(STATES, self.wrg_fname, check_raw=False)
98
+ if verbosity > 0:
99
+ print(f"Path: {fpath}")
100
+ elif verbosity:
101
+ print(f"States '{self.name}': Reading file {fpath}")
102
+ wrg = ReaderWRG(fpath)
103
+ self._p0 = np.array([wrg.x0, wrg.y0], dtype=config.dtype_double)
104
+ self._nx = wrg.nx
105
+ self._ny = wrg.ny
106
+ self._ns = wrg.n_sectors
107
+ self._res = wrg.resolution
108
+
109
+ # find bounds:
110
+ if self.bounds_extra_space is not None:
111
+ xy_min, xy_max = algo.farm.get_xy_bounds(
112
+ extra_space=self.bounds_extra_space, algo=algo
113
+ )
114
+ if verbosity > 0:
115
+ print(
116
+ f"States '{self.name}': Restricting to bounds {xy_min} - {xy_max}"
117
+ )
118
+ xy_min -= self._p0
119
+ xy_max -= self._p0
120
+ ij_min = np.asarray(xy_min / self._res, dtype=config.dtype_int)
121
+ ij_max = np.asarray(xy_max / self._res, dtype=config.dtype_int) + 1
122
+ sx = slice(ij_min[0], ij_max[0])
123
+ sy = slice(ij_min[1], ij_max[1])
124
+ else:
125
+ sx = np.s_[:]
126
+ sy = np.s_[:]
127
+
128
+ # store data:
129
+ A = []
130
+ k = []
131
+ fs = []
132
+ for s in range(self._ns):
133
+ A.append(wrg.data[f"A_{s}"].to_numpy().reshape(self._ny, self._nx)[sy, sx])
134
+ k.append(wrg.data[f"k_{s}"].to_numpy().reshape(self._ny, self._nx)[sy, sx])
135
+ fs.append(
136
+ wrg.data[f"fs_{s}"].to_numpy().reshape(self._ny, self._nx)[sy, sx]
137
+ )
138
+ del wrg
139
+ A = np.stack(A, axis=0).T
140
+ k = np.stack(k, axis=0).T
141
+ fs = np.stack(fs, axis=0).T
142
+ self._data = np.stack([A, k, fs], axis=-1) # (x, y, wd, AKfs)
143
+
144
+ # store ws and wd:
145
+ self.WSWD = self.var("WSWD")
146
+ self._wds = np.arange(0.0, 360.0, 360 / self._ns)
147
+ self._wsd = self.ws_bins[1:] - self.ws_bins[:-1]
148
+ self._wss = 0.5 * (self.ws_bins[:-1] + self.ws_bins[1:])
149
+ self._N = len(self._wss) * self._ns
150
+ wswd = np.zeros((len(self._wss), self._ns, 2), dtype=config.dtype_double)
151
+ wswd[..., 0] = self._wss[:, None]
152
+ wswd[..., 1] = self._wds[None, :]
153
+ wswd = wswd.reshape(self._N, 2)
154
+ idata = super().load_data(algo, verbosity)
155
+ idata.coords[self.WSWD] = [self.var(FV.WS), self.var(FV.WD)]
156
+ idata.data_vars[self.WSWD] = ((FC.STATE, self.WSWD), wswd)
157
+
158
+ return idata
159
+
160
+ def size(self):
161
+ """
162
+ The total number of states.
163
+
164
+ Returns
165
+ -------
166
+ int:
167
+ The total number of states
168
+
169
+ """
170
+ return self._N
171
+
172
+ def output_point_vars(self, algo):
173
+ """
174
+ The variables which are being modified by the model.
175
+
176
+ Parameters
177
+ ----------
178
+ algo: foxes.core.Algorithm
179
+ The calculation algorithm
180
+
181
+ Returns
182
+ -------
183
+ output_vars: list of str
184
+ The output variable names
185
+
186
+ """
187
+ ovars = set([FV.WS, FV.WD, FV.WEIGHT])
188
+ ovars.update(self.fixed_vars.values())
189
+ return list(ovars)
@@ -183,12 +183,11 @@ class VortexSheet(TurbineInductionModel):
183
183
  sp_sel = (ct > 1e-8) & (x <= 0)
184
184
  ct_sel = ct[sp_sel]
185
185
  r_sph_sel = r_sph[sp_sel]
186
- D_sel = D[sp_sel]
186
+ R_sel = D[sp_sel] / 2
187
+ xi = r_sph_sel / R_sel
187
188
 
188
189
  if np.any(sp_sel):
189
- blockage = self.induction.ct2a(ct_sel) * (
190
- (1 + 2 * r_sph_sel / D_sel) * (1 + (2 * r_sph_sel / D_sel) ** 2)
191
- ) ** (-0.5)
190
+ blockage = self.induction.ct2a(ct_sel) * (1 + -xi / np.sqrt(1 + xi**2))
192
191
 
193
192
  self._superp.add_wake(
194
193
  algo,
@@ -208,12 +207,10 @@ class VortexSheet(TurbineInductionModel):
208
207
  ) # mirror in rotor plane and inverse blockage, but not directly behind rotor
209
208
  ct_sel = ct[sp_sel]
210
209
  r_sph_sel = r_sph[sp_sel]
211
- D_sel = D[sp_sel]
210
+ R_sel = D[sp_sel] / 2
211
+ xi = r_sph_sel / R_sel
212
212
  if np.any(sp_sel):
213
- blockage = self.induction.ct2a(ct_sel) * (
214
- (1 + 2 * r_sph_sel / D_sel) * (1 + (2 * r_sph_sel / D_sel) ** 2)
215
- ) ** (-0.5)
216
-
213
+ blockage = self.induction.ct2a(ct_sel) * (1 + -xi / np.sqrt(1 + xi**2))
217
214
  self._superp.add_wake(
218
215
  algo,
219
216
  mdata,
@@ -58,13 +58,18 @@ class ReaderWRG:
58
58
  cols[10::3] = cols_sel("Ks", self._n_sectors)
59
59
 
60
60
  self._data = pd.read_csv(
61
- self.fpath, names=cols, skiprows=1, sep="\s+", usecols=range(1, n_cols)
61
+ self.fpath, names=cols, skiprows=1, sep=r"\s+", usecols=range(1, n_cols)
62
62
  )
63
63
 
64
64
  self._data[cols_sel("fs", self._n_sectors)] /= 10
65
65
  self._data[cols_sel("As", self._n_sectors)] /= 10
66
66
  self._data[cols_sel("Ks", self._n_sectors)] /= 100
67
67
 
68
+ if len(self._data.index) != self._nx * self._ny:
69
+ raise ValueError(
70
+ f"Expecting {self._nx * self._ny} rows in data, got {len(self._data.index)}"
71
+ )
72
+
68
73
  @property
69
74
  def data(self):
70
75
  """
@@ -77,3 +82,81 @@ class ReaderWRG:
77
82
 
78
83
  """
79
84
  return self._data
85
+
86
+ @property
87
+ def nx(self):
88
+ """
89
+ The number of points in x direction
90
+
91
+ Returns
92
+ -------
93
+ n: int
94
+ The number of points in x direction
95
+
96
+ """
97
+ return self._nx
98
+
99
+ @property
100
+ def ny(self):
101
+ """
102
+ The number of points in y direction
103
+
104
+ Returns
105
+ -------
106
+ n: int
107
+ The number of points in y direction
108
+
109
+ """
110
+ return self._ny
111
+
112
+ @property
113
+ def x0(self):
114
+ """
115
+ The lower left x coordinate
116
+
117
+ Returns
118
+ -------
119
+ x: float
120
+ The lower left x coordinate
121
+
122
+ """
123
+ return self._utmx0
124
+
125
+ @property
126
+ def y0(self):
127
+ """
128
+ The lower left y coordinate
129
+
130
+ Returns
131
+ -------
132
+ y: float
133
+ The lower left y coordinate
134
+
135
+ """
136
+ return self._utmy0
137
+
138
+ @property
139
+ def n_sectors(self):
140
+ """
141
+ The number of wind direction sectors
142
+
143
+ Returns
144
+ -------
145
+ n: int
146
+ The number of wind direction sectors
147
+
148
+ """
149
+ return self._n_sectors
150
+
151
+ @property
152
+ def resolution(self):
153
+ """
154
+ The horizontal resolution
155
+
156
+ Returns
157
+ -------
158
+ res: float
159
+ The horizontal resolution
160
+
161
+ """
162
+ return self._res
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: foxes
3
- Version: 1.2.4
3
+ Version: 1.2.5
4
4
  Summary: Farm Optimization and eXtended yield Evaluation Software
5
5
  Author: Jonas Schulte
6
6
  Maintainer: Jonas Schulte
@@ -94,6 +94,8 @@ Requires-Dist: ipykernel; extra == "doc"
94
94
  Requires-Dist: ipywidgets; extra == "doc"
95
95
  Requires-Dist: m2r2; extra == "doc"
96
96
  Requires-Dist: lxml_html_clean; extra == "doc"
97
+ Requires-Dist: dask; extra == "doc"
98
+ Requires-Dist: distributed; extra == "doc"
97
99
  Provides-Extra: dev
98
100
  Requires-Dist: flake8; extra == "dev"
99
101
  Requires-Dist: pytest; extra == "dev"
@@ -127,6 +127,7 @@ foxes/input/states/one_point_flow.py
127
127
  foxes/input/states/scan.py
128
128
  foxes/input/states/single.py
129
129
  foxes/input/states/states_table.py
130
+ foxes/input/states/wrg_states.py
130
131
  foxes/input/states/create/__init__.py
131
132
  foxes/input/states/create/random_abl_states.py
132
133
  foxes/input/states/create/random_timeseries.py
@@ -30,6 +30,8 @@ ipykernel
30
30
  ipywidgets
31
31
  m2r2
32
32
  lxml_html_clean
33
+ dask
34
+ distributed
33
35
 
34
36
  [eng]
35
37
  h5netcdf
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "foxes"
9
- version = "1.2.4"
9
+ version = "1.2.5"
10
10
  authors = [
11
11
  {name = "Jonas Schulte"},
12
12
  ]
@@ -88,6 +88,8 @@ doc = [
88
88
  "ipywidgets",
89
89
  "m2r2",
90
90
  "lxml_html_clean",
91
+ "dask",
92
+ "distributed",
91
93
  ]
92
94
  dev = [
93
95
  "flake8",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes