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.
- {foxes-1.0 → foxes-1.6.1}/MANIFEST.in +0 -1
- {foxes-1.0/foxes.egg-info → foxes-1.6.1}/PKG-INFO +47 -65
- {foxes-1.0 → foxes-1.6.1}/README.md +12 -15
- {foxes-1.0 → foxes-1.6.1}/docs/source/conf.py +6 -5
- {foxes-1.0 → foxes-1.6.1}/examples/abl_states/run.py +58 -56
- {foxes-1.0 → foxes-1.6.1}/examples/compare_rotors_pwakes/run.py +1 -1
- {foxes-1.0 → foxes-1.6.1}/examples/compare_wakes/run.py +1 -2
- {foxes-1.0 → foxes-1.6.1}/examples/dyn_wakes/run.py +137 -122
- {foxes-1.0 → foxes-1.6.1}/examples/field_data_nc/run.py +28 -19
- {foxes-1.0/examples/induction_RHB → foxes-1.6.1/examples/induction}/run.py +8 -8
- {foxes-1.0 → foxes-1.6.1}/examples/multi_height/run.py +9 -7
- foxes-1.6.1/examples/parameter_study/run.py +115 -0
- {foxes-1.0 → foxes-1.6.1}/examples/power_mask/run.py +7 -9
- foxes-1.6.1/examples/quickstart/run.py +16 -0
- {foxes-1.0 → foxes-1.6.1}/examples/random_timeseries/run.py +16 -17
- {foxes-1.0 → foxes-1.6.1}/examples/scan_row/run.py +96 -89
- {foxes-1.0 → foxes-1.6.1}/examples/sector_management/run.py +41 -35
- {foxes-1.0 → foxes-1.6.1}/examples/sequential/run.py +33 -10
- {foxes-1.0 → foxes-1.6.1}/examples/single_state/run.py +8 -9
- {foxes-1.0 → foxes-1.6.1}/examples/states_lookup_table/run.py +10 -8
- {foxes-1.0 → foxes-1.6.1}/examples/streamline_wakes/run.py +42 -14
- {foxes-1.0 → foxes-1.6.1}/examples/tab_file/run.py +4 -4
- {foxes-1.0 → foxes-1.6.1}/examples/timelines/run.py +126 -100
- {foxes-1.0 → foxes-1.6.1}/examples/timeseries/run.py +71 -68
- {foxes-1.0 → foxes-1.6.1}/examples/timeseries_slurm/run.py +8 -8
- {foxes-1.0 → foxes-1.6.1}/examples/wind_rose/run.py +27 -25
- {foxes-1.0 → foxes-1.6.1}/examples/yawed_wake/run.py +102 -84
- foxes-1.6.1/foxes/__init__.py +41 -0
- foxes-1.6.1/foxes/algorithms/__init__.py +11 -0
- foxes-1.6.1/foxes/algorithms/downwind/__init__.py +3 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/downwind/downwind.py +199 -61
- foxes-1.6.1/foxes/algorithms/downwind/models/__init__.py +9 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/downwind/models/farm_wakes_calc.py +23 -15
- {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/downwind/models/init_farm_data.py +65 -33
- {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/downwind/models/point_wakes_calc.py +7 -14
- foxes-1.6.1/foxes/algorithms/downwind/models/population.py +523 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/downwind/models/reorder_farm_output.py +6 -2
- {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/downwind/models/set_amb_farm_results.py +4 -3
- {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/downwind/models/set_amb_point_results.py +9 -8
- foxes-1.6.1/foxes/algorithms/iterative/__init__.py +8 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/iterative/iterative.py +51 -8
- foxes-1.6.1/foxes/algorithms/iterative/models/__init__.py +7 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/iterative/models/convergence.py +72 -37
- {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/iterative/models/farm_wakes_calc.py +16 -9
- {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/iterative/models/urelax.py +3 -3
- foxes-1.6.1/foxes/algorithms/sequential/__init__.py +4 -0
- foxes-1.6.1/foxes/algorithms/sequential/models/__init__.py +2 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/sequential/models/plugin.py +4 -4
- {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/sequential/models/seq_state.py +1 -19
- {foxes-1.0 → foxes-1.6.1}/foxes/algorithms/sequential/sequential.py +14 -26
- foxes-1.6.1/foxes/config/__init__.py +5 -0
- foxes-1.6.1/foxes/config/conf.py +268 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/constants.py +63 -10
- foxes-1.6.1/foxes/core/__init__.py +49 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/core/algorithm.py +175 -172
- foxes-1.6.1/foxes/core/axial_induction_model.py +48 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/core/data.py +274 -39
- {foxes-1.0 → foxes-1.6.1}/foxes/core/data_calc_model.py +6 -4
- foxes-1.6.1/foxes/core/engine.py +1065 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/core/farm_controller.py +72 -34
- {foxes-1.0 → foxes-1.6.1}/foxes/core/farm_data_model.py +22 -14
- {foxes-1.0 → foxes-1.6.1}/foxes/core/ground_model.py +25 -15
- {foxes-1.0 → foxes-1.6.1}/foxes/core/model.py +150 -117
- foxes-1.6.1/foxes/core/partial_wakes_model.py +343 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/core/point_data_model.py +44 -20
- {foxes-1.0 → foxes-1.6.1}/foxes/core/rotor_model.py +72 -59
- {foxes-1.0 → foxes-1.6.1}/foxes/core/states.py +22 -70
- {foxes-1.0 → foxes-1.6.1}/foxes/core/turbine.py +12 -5
- {foxes-1.0 → foxes-1.6.1}/foxes/core/turbine_model.py +2 -18
- {foxes-1.0 → foxes-1.6.1}/foxes/core/turbine_type.py +4 -20
- {foxes-1.0 → foxes-1.6.1}/foxes/core/vertical_profile.py +8 -20
- foxes-1.6.1/foxes/core/wake_deflection.py +130 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/core/wake_frame.py +17 -55
- foxes-1.6.1/foxes/core/wake_model.py +538 -0
- foxes-1.6.1/foxes/core/wake_superposition.py +245 -0
- foxes-1.6.1/foxes/core/wind_farm.py +394 -0
- foxes-1.6.1/foxes/data/__init__.py +11 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/parse.py +8 -7
- foxes-1.6.1/foxes/data/states/point_cloud_100.nc +0 -0
- foxes-1.6.1/foxes/data/states/weibull_cloud_4.nc +0 -0
- foxes-1.6.1/foxes/data/states/weibull_grid.nc +0 -0
- foxes-1.6.1/foxes/data/states/weibull_sectors_12.csv +13 -0
- foxes-1.6.1/foxes/data/states/weibull_sectors_12.nc +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/static_data.py +0 -7
- foxes-1.6.1/foxes/engines/__init__.py +15 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/engines/dask.py +291 -400
- foxes-1.6.1/foxes/engines/default.py +183 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/engines/futures.py +18 -5
- foxes-1.6.1/foxes/engines/mpi.py +27 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/engines/multiprocess.py +5 -17
- foxes-1.0/foxes/engines/pool.py → foxes-1.6.1/foxes/engines/numpy.py +99 -87
- foxes-1.6.1/foxes/engines/pool.py +419 -0
- foxes-1.6.1/foxes/engines/ray.py +79 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/engines/single.py +116 -10
- foxes-1.6.1/foxes/input/__init__.py +7 -0
- foxes-1.6.1/foxes/input/farm_layout/__init__.py +15 -0
- foxes-1.6.1/foxes/input/farm_layout/from_arrays.py +68 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/from_csv.py +4 -2
- foxes-1.6.1/foxes/input/farm_layout/from_eww.py +178 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/from_file.py +10 -10
- {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/from_json.py +5 -4
- foxes-1.6.1/foxes/input/farm_layout/from_wrf.py +86 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/grid.py +3 -3
- {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/ring.py +0 -1
- foxes-1.6.1/foxes/input/states/__init__.py +37 -0
- foxes-1.6.1/foxes/input/states/create/__init__.py +3 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/input/states/create/random_abl_states.py +5 -3
- foxes-1.6.1/foxes/input/states/dataset_states.py +1164 -0
- foxes-1.6.1/foxes/input/states/field_data.py +383 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/input/states/multi_height.py +99 -89
- foxes-1.6.1/foxes/input/states/newa_states.py +536 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/input/states/one_point_flow.py +38 -38
- foxes-1.6.1/foxes/input/states/point_cloud_data.py +569 -0
- foxes-1.0/foxes/input/states/scan_ws.py → foxes-1.6.1/foxes/input/states/scan.py +56 -75
- {foxes-1.0 → foxes-1.6.1}/foxes/input/states/single.py +27 -26
- {foxes-1.0 → foxes-1.6.1}/foxes/input/states/states_table.py +82 -98
- foxes-1.6.1/foxes/input/states/weibull_sectors.py +330 -0
- foxes-1.6.1/foxes/input/states/wrg_states.py +303 -0
- foxes-1.6.1/foxes/input/yaml/__init__.py +8 -0
- foxes-1.6.1/foxes/input/yaml/dict.py +515 -0
- foxes-1.6.1/foxes/input/yaml/windio/__init__.py +15 -0
- {foxes-1.0/foxes/input → foxes-1.6.1/foxes/input/yaml}/windio/read_attributes.py +119 -86
- foxes-1.6.1/foxes/input/yaml/windio/read_farm.py +345 -0
- {foxes-1.0/foxes/input → foxes-1.6.1/foxes/input/yaml}/windio/read_fields.py +21 -12
- foxes-1.6.1/foxes/input/yaml/windio/read_outputs.py +229 -0
- foxes-1.6.1/foxes/input/yaml/windio/read_site.py +456 -0
- foxes-1.6.1/foxes/input/yaml/windio/windio.py +270 -0
- foxes-1.6.1/foxes/input/yaml/yaml.py +104 -0
- foxes-1.6.1/foxes/models/__init__.py +20 -0
- foxes-1.6.1/foxes/models/axial_induction/__init__.py +2 -0
- foxes-1.6.1/foxes/models/farm_controllers/__init__.py +6 -0
- foxes-1.6.1/foxes/models/farm_controllers/op_flag.py +196 -0
- foxes-1.6.1/foxes/models/farm_models/__init__.py +5 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/farm_models/turbine2farm.py +1 -1
- foxes-1.6.1/foxes/models/ground_models/__init__.py +3 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/ground_models/wake_mirror.py +5 -5
- {foxes-1.0 → foxes-1.6.1}/foxes/models/model_book.py +240 -55
- foxes-1.6.1/foxes/models/partial_wakes/__init__.py +10 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/partial_wakes/axiwake.py +40 -14
- foxes-1.6.1/foxes/models/partial_wakes/centre.py +88 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/partial_wakes/rotor_points.py +45 -9
- {foxes-1.0 → foxes-1.6.1}/foxes/models/partial_wakes/segregated.py +4 -19
- {foxes-1.0 → foxes-1.6.1}/foxes/models/partial_wakes/top_hat.py +33 -6
- foxes-1.6.1/foxes/models/point_models/__init__.py +8 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/point_models/set_uniform_data.py +6 -4
- {foxes-1.0 → foxes-1.6.1}/foxes/models/point_models/tke2ti.py +1 -1
- foxes-1.6.1/foxes/models/point_models/ustar2ti.py +84 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/point_models/wake_deltas.py +1 -1
- foxes-1.6.1/foxes/models/rotor_models/__init__.py +8 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/rotor_models/centre.py +9 -7
- foxes-1.6.1/foxes/models/rotor_models/direct_infusion.py +261 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/rotor_models/grid.py +11 -9
- {foxes-1.0 → foxes-1.6.1}/foxes/models/rotor_models/levels.py +10 -8
- foxes-1.6.1/foxes/models/turbine_models/__init__.py +15 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/calculator.py +18 -5
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/kTI_model.py +26 -7
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/lookup_table.py +12 -6
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/power_mask.py +19 -10
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/rotor_centre_calc.py +6 -2
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/sector_management.py +9 -4
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/set_farm_vars.py +56 -29
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/table_factors.py +14 -9
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/thrust2ct.py +1 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/yaw2yawm.py +2 -1
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_models/yawm2yaw.py +2 -1
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/CpCt_file.py +6 -3
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/CpCt_from_two.py +6 -3
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/PCt_file.py +14 -17
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/PCt_from_two.py +17 -9
- foxes-1.6.1/foxes/models/turbine_types/TBL_file.py +79 -0
- foxes-1.6.1/foxes/models/turbine_types/__init__.py +14 -0
- foxes-1.6.1/foxes/models/turbine_types/calculator_type.py +123 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/lookup.py +5 -5
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/null_type.py +4 -3
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/wsrho2PCt_from_two.py +28 -18
- {foxes-1.0 → foxes-1.6.1}/foxes/models/turbine_types/wsti2PCt_from_two.py +30 -20
- foxes-1.6.1/foxes/models/vertical_profiles/__init__.py +11 -0
- foxes-1.6.1/foxes/models/wake_deflections/__init__.py +3 -0
- foxes-1.0/foxes/models/wake_frames/yawed_wakes.py → foxes-1.6.1/foxes/models/wake_deflections/bastankhah2016.py +35 -112
- foxes-1.6.1/foxes/models/wake_deflections/jimenez.py +277 -0
- foxes-1.6.1/foxes/models/wake_deflections/no_deflection.py +94 -0
- foxes-1.6.1/foxes/models/wake_frames/__init__.py +10 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_frames/dynamic_wakes.py +74 -27
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_frames/farm_order.py +6 -5
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_frames/rotor_wd.py +8 -4
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_frames/seq_dynamic_wakes.py +68 -28
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_frames/streamlines.py +19 -14
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_frames/timelines.py +58 -29
- foxes-1.6.1/foxes/models/wake_models/__init__.py +12 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/dist_sliced.py +51 -85
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/gaussian.py +20 -0
- foxes-1.6.1/foxes/models/wake_models/induction/__init__.py +9 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/induction/rankine_half_body.py +31 -72
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/induction/rathmann.py +80 -25
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/induction/self_similar.py +103 -38
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/induction/self_similar2020.py +1 -4
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/induction/vortex_sheet.py +92 -62
- foxes-1.6.1/foxes/models/wake_models/ti/__init__.py +6 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/ti/crespo_hernandez.py +14 -9
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/ti/iec_ti.py +13 -9
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/top_hat.py +58 -7
- foxes-1.6.1/foxes/models/wake_models/wind/__init__.py +10 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/wind/bastankhah14.py +56 -22
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/wind/bastankhah16.py +47 -14
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/wind/jensen.py +18 -4
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/wind/turbopark.py +49 -18
- foxes-1.6.1/foxes/models/wake_superpositions/__init__.py +22 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ti_linear.py +5 -5
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ti_max.py +5 -5
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ti_pow.py +5 -5
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ti_quadratic.py +5 -5
- foxes-1.6.1/foxes/models/wake_superpositions/wind_vector.py +257 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ws_linear.py +17 -17
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ws_max.py +16 -15
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ws_pow.py +16 -15
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ws_product.py +9 -10
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_superpositions/ws_quadratic.py +16 -15
- foxes-1.6.1/foxes/output/__init__.py +29 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/output/calc_points.py +8 -5
- {foxes-1.0 → foxes-1.6.1}/foxes/output/farm_layout.py +75 -42
- {foxes-1.0 → foxes-1.6.1}/foxes/output/farm_results_eval.py +105 -55
- foxes-1.6.1/foxes/output/flow_plots_2d/__init__.py +3 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/output/flow_plots_2d/flow_plots.py +103 -0
- foxes-1.6.1/foxes/output/flow_plots_2d/from_chunk.py +164 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/output/flow_plots_2d/get_fig.py +5 -2
- {foxes-1.0 → foxes-1.6.1}/foxes/output/grids.py +9 -8
- {foxes-1.0 → foxes-1.6.1}/foxes/output/output.py +17 -21
- foxes-1.6.1/foxes/output/plt.py +19 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/output/results_writer.py +15 -13
- foxes-1.6.1/foxes/output/rose_plot.py +645 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/output/rotor_point_plots.py +10 -3
- foxes-1.6.1/foxes/output/seq_plugins/__init__.py +2 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/output/seq_plugins/seq_flow_ani_plugin.py +2 -5
- {foxes-1.0 → foxes-1.6.1}/foxes/output/seq_plugins/seq_wake_debug_plugin.py +2 -3
- {foxes-1.0 → foxes-1.6.1}/foxes/output/slice_data.py +26 -22
- foxes-1.6.1/foxes/output/slices_data.py +323 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/output/state_turbine_map.py +18 -6
- {foxes-1.0 → foxes-1.6.1}/foxes/output/state_turbine_table.py +19 -3
- {foxes-1.0 → foxes-1.6.1}/foxes/output/turbine_type_curves.py +17 -10
- foxes-1.6.1/foxes/utils/__init__.py +51 -0
- foxes-1.6.1/foxes/utils/abl/__init__.py +8 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/abl/neutral.py +2 -2
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/abl/stable.py +2 -2
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/abl/unstable.py +2 -2
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/cubic_roots.py +1 -1
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/data_book.py +5 -4
- foxes-1.6.1/foxes/utils/dict.py +176 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/exec_python.py +6 -6
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/factory.py +32 -6
- foxes-1.6.1/foxes/utils/geom2d/__init__.py +11 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/geom2d/area_geometry.py +12 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/geom2d/circle.py +1 -1
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/geom2d/polygon.py +1 -1
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/geopandas_utils.py +5 -6
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/load.py +14 -6
- foxes-1.0/foxes/utils/pandas_helpers.py → foxes-1.6.1/foxes/utils/pandas_utils.py +18 -20
- foxes-1.6.1/foxes/utils/subclasses.py +90 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/tab_files.py +0 -1
- foxes-1.6.1/foxes/utils/utm_utils.py +87 -0
- foxes-1.6.1/foxes/utils/weibull.py +28 -0
- foxes-1.6.1/foxes/utils/wrg_utils.py +164 -0
- foxes-1.6.1/foxes/utils/xarray_utils.py +243 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/variables.py +94 -15
- {foxes-1.0 → foxes-1.6.1/foxes.egg-info}/PKG-INFO +47 -65
- {foxes-1.0 → foxes-1.6.1}/foxes.egg-info/SOURCES.txt +51 -21
- foxes-1.6.1/foxes.egg-info/entry_points.txt +3 -0
- foxes-1.6.1/foxes.egg-info/requires.txt +37 -0
- {foxes-1.0 → foxes-1.6.1}/pyproject.toml +42 -54
- foxes-1.6.1/tests/0_consistency/iterative/test_iterative.py +89 -0
- foxes-1.6.1/tests/0_consistency/partial_wakes/test_partial_wakes.py +87 -0
- {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/PCt_files/flappy/run.py +2 -3
- {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/PCt_files/test_PCt_files.py +7 -12
- {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/abl_states/flappy/run.py +0 -1
- {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/abl_states/test_abl_states.py +5 -8
- {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/partial_top_hat/flappy/run.py +0 -1
- foxes-1.6.1/tests/1_verification/flappy_0_6/partial_top_hat/test_partial_top_hat.py +80 -0
- foxes-1.6.1/tests/1_verification/flappy_0_6/row_Jensen_linear_centre/test_row_Jensen_linear_centre.py +98 -0
- foxes-1.6.1/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/test_row_Jensen_linear_tophat.py +99 -0
- 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
- 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
- foxes-1.6.1/tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/test_row_Jensen_quadratic_centre.py +99 -0
- {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6_2/grid_rotors/flappy/run.py +0 -2
- foxes-1.6.1/tests/1_verification/flappy_0_6_2/grid_rotors/test_grid_rotors.py +128 -0
- foxes-1.6.1/tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/test_row_Bastankhah_Crespo.py +119 -0
- {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/flappy/run.py +0 -1
- foxes-1.6.1/tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/test_row_Bastankhah_linear_centre.py +102 -0
- foxes-1.6.1/tests/2_models/turbine_models/test_set_farm_vars.py +64 -0
- {foxes-1.0 → foxes-1.6.1}/tests/3_examples/test_examples.py +3 -2
- foxes-1.0/examples/windio/run.py +0 -29
- foxes-1.0/foxes/__init__.py +0 -26
- foxes-1.0/foxes/algorithms/__init__.py +0 -11
- foxes-1.0/foxes/algorithms/downwind/__init__.py +0 -3
- foxes-1.0/foxes/algorithms/downwind/models/__init__.py +0 -6
- foxes-1.0/foxes/algorithms/iterative/__init__.py +0 -4
- foxes-1.0/foxes/algorithms/iterative/models/__init__.py +0 -3
- foxes-1.0/foxes/algorithms/sequential/__init__.py +0 -4
- foxes-1.0/foxes/algorithms/sequential/models/__init__.py +0 -2
- foxes-1.0/foxes/core/__init__.py +0 -26
- foxes-1.0/foxes/core/axial_induction_model.py +0 -30
- foxes-1.0/foxes/core/engine.py +0 -630
- foxes-1.0/foxes/core/partial_wakes_model.py +0 -218
- foxes-1.0/foxes/core/wake_model.py +0 -320
- foxes-1.0/foxes/core/wake_superposition.py +0 -108
- foxes-1.0/foxes/core/wind_farm.py +0 -78
- foxes-1.0/foxes/data/__init__.py +0 -6
- foxes-1.0/foxes/data/states/windio_timeseries_5000.nc +0 -0
- foxes-1.0/foxes/data/windio/DTU_10MW_turbine.yaml +0 -10
- foxes-1.0/foxes/data/windio/__init__.py +0 -0
- foxes-1.0/foxes/data/windio/windio_5turbines_timeseries.yaml +0 -85
- foxes-1.0/foxes/engines/__init__.py +0 -16
- foxes-1.0/foxes/engines/default.py +0 -75
- foxes-1.0/foxes/engines/mpi.py +0 -38
- foxes-1.0/foxes/engines/numpy.py +0 -185
- foxes-1.0/foxes/input/__init__.py +0 -7
- foxes-1.0/foxes/input/farm_layout/__init__.py +0 -12
- foxes-1.0/foxes/input/states/__init__.py +0 -18
- foxes-1.0/foxes/input/states/create/__init__.py +0 -2
- foxes-1.0/foxes/input/states/field_data_nc.py +0 -703
- foxes-1.0/foxes/input/windio/__init__.py +0 -11
- foxes-1.0/foxes/input/windio/get_states.py +0 -205
- foxes-1.0/foxes/input/windio/read_farm.py +0 -177
- foxes-1.0/foxes/input/windio/read_outputs.py +0 -166
- foxes-1.0/foxes/input/windio/runner.py +0 -183
- foxes-1.0/foxes/input/windio/windio.py +0 -189
- foxes-1.0/foxes/models/__init__.py +0 -19
- foxes-1.0/foxes/models/axial_induction/__init__.py +0 -2
- foxes-1.0/foxes/models/farm_controllers/__init__.py +0 -5
- foxes-1.0/foxes/models/farm_models/__init__.py +0 -5
- foxes-1.0/foxes/models/ground_models/__init__.py +0 -2
- foxes-1.0/foxes/models/partial_wakes/__init__.py +0 -10
- foxes-1.0/foxes/models/partial_wakes/centre.py +0 -40
- foxes-1.0/foxes/models/point_models/__init__.py +0 -7
- foxes-1.0/foxes/models/rotor_models/__init__.py +0 -7
- foxes-1.0/foxes/models/turbine_models/__init__.py +0 -15
- foxes-1.0/foxes/models/turbine_types/__init__.py +0 -12
- foxes-1.0/foxes/models/vertical_profiles/__init__.py +0 -11
- foxes-1.0/foxes/models/wake_frames/__init__.py +0 -11
- foxes-1.0/foxes/models/wake_models/__init__.py +0 -12
- foxes-1.0/foxes/models/wake_models/induction/__init__.py +0 -9
- foxes-1.0/foxes/models/wake_models/ti/__init__.py +0 -6
- foxes-1.0/foxes/models/wake_models/wind/__init__.py +0 -8
- foxes-1.0/foxes/models/wake_superpositions/__init__.py +0 -13
- foxes-1.0/foxes/output/__init__.py +0 -23
- foxes-1.0/foxes/output/flow_plots_2d/__init__.py +0 -2
- foxes-1.0/foxes/output/rose_plot.py +0 -393
- foxes-1.0/foxes/output/round.py +0 -10
- foxes-1.0/foxes/output/seq_plugins/__init__.py +0 -2
- foxes-1.0/foxes/utils/__init__.py +0 -24
- foxes-1.0/foxes/utils/abl/__init__.py +0 -8
- foxes-1.0/foxes/utils/dict.py +0 -37
- foxes-1.0/foxes/utils/geom2d/__init__.py +0 -9
- foxes-1.0/foxes/utils/geopandas_helpers.py +0 -294
- foxes-1.0/foxes/utils/pandas_utils.py +0 -175
- foxes-1.0/foxes/utils/subclasses.py +0 -21
- foxes-1.0/foxes/utils/windrose_plot.py +0 -152
- foxes-1.0/foxes/utils/xarray_utils.py +0 -49
- foxes-1.0/foxes.egg-info/requires.txt +0 -57
- foxes-1.0/tests/0_consistency/iterative/test_iterative.py +0 -92
- foxes-1.0/tests/0_consistency/partial_wakes/test_partial_wakes.py +0 -90
- foxes-1.0/tests/1_verification/flappy_0_6/partial_top_hat/test_partial_top_hat.py +0 -82
- foxes-1.0/tests/1_verification/flappy_0_6/row_Jensen_linear_centre/test_row_Jensen_linear_centre.py +0 -93
- foxes-1.0/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/test_row_Jensen_linear_tophat.py +0 -96
- foxes-1.0/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2005/test_row_Jensen_linear_tophat_IECTI_2005.py +0 -122
- foxes-1.0/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2019/test_row_Jensen_linear_tophat_IECTI_2019.py +0 -122
- foxes-1.0/tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/test_row_Jensen_quadratic_centre.py +0 -93
- foxes-1.0/tests/1_verification/flappy_0_6_2/grid_rotors/test_grid_rotors.py +0 -130
- foxes-1.0/tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/test_row_Bastankhah_Crespo.py +0 -116
- foxes-1.0/tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/test_row_Bastankhah_linear_centre.py +0 -99
- {foxes-1.0 → foxes-1.6.1}/LICENSE +0 -0
- {foxes-1.0 → foxes-1.6.1}/Logo_FOXES.svg +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/core/farm_model.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/farms/__init__.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/farms/test_farm_67.csv +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/power_ct_curves/DTU-10MW-D178d3-H119.csv +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/power_ct_curves/IEA-15MW-D240-H150.csv +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/power_ct_curves/IWT-7d5MW-D164-H100.csv +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/power_ct_curves/NREL-5MW-D126-H90.csv +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/power_ct_curves/__init__.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/states/WRF-Timeseries-3000.nc +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/states/WRF-Timeseries-4464.csv.gz +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/states/__init__.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/states/abl_states_6000.csv.gz +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/states/timeseries_100.csv.gz +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/states/timeseries_3000.csv.gz +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/states/timeseries_8000.csv.gz +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/states/wind_rose_bremen.csv +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/states/wind_rotation.nc +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/data/states/winds100.tab +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/from_df.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/from_random.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/input/farm_layout/row.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/input/states/create/random_timeseries.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/axial_induction/betz.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/axial_induction/madsen.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/farm_controllers/basic.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/ground_models/no_ground.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/partial_wakes/grid.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/vertical_profiles/abl_log_neutral_ws.py +1 -1
- {foxes-1.0 → foxes-1.6.1}/foxes/models/vertical_profiles/abl_log_stable_ws.py +1 -1
- {foxes-1.0 → foxes-1.6.1}/foxes/models/vertical_profiles/abl_log_unstable_ws.py +1 -1
- {foxes-1.0 → foxes-1.6.1}/foxes/models/vertical_profiles/abl_log_ws.py +1 -1
- {foxes-1.0 → foxes-1.6.1}/foxes/models/vertical_profiles/data_profile.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/vertical_profiles/sheared_ws.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/vertical_profiles/uniform.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/models/wake_models/axisymmetric.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/output/animation.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/abl/sheared.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/dev_utils.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/geom2d/example_intersection.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/geom2d/example_union.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/geom2d/half_plane.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/random_xy.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/regularize.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/two_circles.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes/utils/wind_dir.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes.egg-info/dependency_links.txt +0 -0
- {foxes-1.0 → foxes-1.6.1}/foxes.egg-info/top_level.txt +0 -0
- {foxes-1.0 → foxes-1.6.1}/setup.cfg +0 -0
- {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/row_Jensen_linear_centre/flappy/run.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/flappy/run.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2005/flappy/run.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2019/flappy/run.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/flappy/run.py +0 -0
- {foxes-1.0 → foxes-1.6.1}/tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/flappy/run.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: foxes
|
|
3
|
-
Version: 1.
|
|
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.
|
|
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:
|
|
54
|
-
Requires-Dist:
|
|
55
|
-
Requires-Dist: netcdf4
|
|
56
|
-
Requires-Dist:
|
|
57
|
-
Requires-Dist:
|
|
58
|
-
Requires-Dist:
|
|
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:
|
|
87
|
-
Requires-Dist: sphinx
|
|
88
|
-
Requires-Dist:
|
|
89
|
-
Requires-Dist:
|
|
90
|
-
Requires-Dist:
|
|
91
|
-
Requires-Dist:
|
|
92
|
-
Requires-Dist:
|
|
93
|
-
|
|
94
|
-
Requires-Dist:
|
|
95
|
-
Requires-Dist:
|
|
96
|
-
|
|
97
|
-
Requires-Dist:
|
|
98
|
-
Requires-Dist:
|
|
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 [
|
|
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
|
-
|
|
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 [
|
|
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
|
-
|
|
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 = "
|
|
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 =
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
time1 = time.time()
|
|
101
|
+
):
|
|
102
|
+
time0 = time.time()
|
|
103
|
+
farm_results = algo.calc_farm()
|
|
104
|
+
time1 = time.time()
|
|
103
105
|
|
|
104
|
-
|
|
106
|
+
print("\nCalc time =", time1 - time0, "\n")
|
|
105
107
|
|
|
106
|
-
|
|
108
|
+
print(farm_results)
|
|
107
109
|
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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.")
|
|
@@ -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(
|
|
234
|
+
ax.set_title("y = 0")
|
|
236
235
|
ax.set_xlabel("x/D")
|
|
237
236
|
ax.legend(loc="best")
|
|
238
237
|
ax.grid()
|