foxes 1.3__tar.gz → 1.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.
- {foxes-1.3/foxes.egg-info → foxes-1.5}/PKG-INFO +34 -63
- {foxes-1.3 → foxes-1.5}/README.md +1 -8
- {foxes-1.3 → foxes-1.5}/docs/source/conf.py +3 -3
- {foxes-1.3 → foxes-1.5}/examples/abl_states/run.py +2 -2
- {foxes-1.3 → foxes-1.5}/examples/compare_rotors_pwakes/run.py +1 -1
- {foxes-1.3 → foxes-1.5}/examples/compare_wakes/run.py +1 -2
- {foxes-1.3 → foxes-1.5}/examples/dyn_wakes/run.py +29 -6
- {foxes-1.3 → foxes-1.5}/examples/field_data_nc/run.py +1 -1
- {foxes-1.3 → foxes-1.5}/examples/induction/run.py +3 -3
- {foxes-1.3 → foxes-1.5}/examples/multi_height/run.py +1 -1
- {foxes-1.3 → foxes-1.5}/examples/power_mask/run.py +2 -2
- {foxes-1.3 → foxes-1.5}/examples/quickstart/run.py +0 -1
- {foxes-1.3 → foxes-1.5}/examples/random_timeseries/run.py +3 -4
- {foxes-1.3 → foxes-1.5}/examples/scan_row/run.py +3 -3
- {foxes-1.3 → foxes-1.5}/examples/sequential/run.py +33 -10
- {foxes-1.3 → foxes-1.5}/examples/single_state/run.py +3 -4
- {foxes-1.3 → foxes-1.5}/examples/states_lookup_table/run.py +3 -3
- {foxes-1.3 → foxes-1.5}/examples/streamline_wakes/run.py +29 -6
- {foxes-1.3 → foxes-1.5}/examples/tab_file/run.py +3 -3
- {foxes-1.3 → foxes-1.5}/examples/timelines/run.py +29 -5
- {foxes-1.3 → foxes-1.5}/examples/timeseries/run.py +3 -3
- {foxes-1.3 → foxes-1.5}/examples/timeseries_slurm/run.py +3 -3
- {foxes-1.3 → foxes-1.5}/examples/wind_rose/run.py +3 -3
- {foxes-1.3 → foxes-1.5}/examples/yawed_wake/run.py +19 -9
- foxes-1.5/foxes/__init__.py +41 -0
- foxes-1.5/foxes/algorithms/__init__.py +11 -0
- foxes-1.5/foxes/algorithms/downwind/__init__.py +3 -0
- {foxes-1.3 → foxes-1.5}/foxes/algorithms/downwind/downwind.py +49 -17
- foxes-1.5/foxes/algorithms/downwind/models/__init__.py +6 -0
- {foxes-1.3 → foxes-1.5}/foxes/algorithms/downwind/models/farm_wakes_calc.py +11 -9
- {foxes-1.3 → foxes-1.5}/foxes/algorithms/downwind/models/init_farm_data.py +58 -29
- {foxes-1.3 → foxes-1.5}/foxes/algorithms/downwind/models/point_wakes_calc.py +7 -13
- {foxes-1.3 → foxes-1.5}/foxes/algorithms/downwind/models/set_amb_farm_results.py +1 -1
- {foxes-1.3 → foxes-1.5}/foxes/algorithms/downwind/models/set_amb_point_results.py +6 -6
- foxes-1.5/foxes/algorithms/iterative/__init__.py +8 -0
- {foxes-1.3 → foxes-1.5}/foxes/algorithms/iterative/iterative.py +1 -2
- foxes-1.5/foxes/algorithms/iterative/models/__init__.py +7 -0
- {foxes-1.3 → foxes-1.5}/foxes/algorithms/iterative/models/farm_wakes_calc.py +9 -5
- foxes-1.5/foxes/algorithms/sequential/__init__.py +4 -0
- foxes-1.5/foxes/algorithms/sequential/models/__init__.py +2 -0
- {foxes-1.3 → foxes-1.5}/foxes/algorithms/sequential/sequential.py +3 -4
- foxes-1.5/foxes/config/__init__.py +5 -0
- {foxes-1.3 → foxes-1.5}/foxes/constants.py +16 -0
- foxes-1.5/foxes/core/__init__.py +49 -0
- {foxes-1.3 → foxes-1.5}/foxes/core/algorithm.py +5 -6
- {foxes-1.3 → foxes-1.5}/foxes/core/data.py +94 -22
- {foxes-1.3 → foxes-1.5}/foxes/core/data_calc_model.py +4 -2
- {foxes-1.3 → foxes-1.5}/foxes/core/engine.py +42 -53
- {foxes-1.3 → foxes-1.5}/foxes/core/farm_controller.py +2 -2
- {foxes-1.3 → foxes-1.5}/foxes/core/farm_data_model.py +16 -13
- {foxes-1.3 → foxes-1.5}/foxes/core/ground_model.py +4 -13
- {foxes-1.3 → foxes-1.5}/foxes/core/model.py +24 -6
- {foxes-1.3 → foxes-1.5}/foxes/core/partial_wakes_model.py +147 -10
- {foxes-1.3 → foxes-1.5}/foxes/core/point_data_model.py +21 -17
- {foxes-1.3 → foxes-1.5}/foxes/core/rotor_model.py +4 -3
- {foxes-1.3 → foxes-1.5}/foxes/core/states.py +2 -3
- {foxes-1.3 → foxes-1.5}/foxes/core/turbine.py +2 -1
- foxes-1.5/foxes/core/wake_deflection.py +130 -0
- {foxes-1.3 → foxes-1.5}/foxes/core/wake_model.py +222 -9
- foxes-1.5/foxes/core/wake_superposition.py +245 -0
- {foxes-1.3 → foxes-1.5}/foxes/core/wind_farm.py +6 -6
- foxes-1.5/foxes/data/__init__.py +11 -0
- foxes-1.5/foxes/data/states/point_cloud_100.nc +0 -0
- foxes-1.5/foxes/data/states/weibull_cloud_4.nc +0 -0
- foxes-1.5/foxes/data/states/weibull_grid.nc +0 -0
- foxes-1.5/foxes/data/states/weibull_sectors_12.csv +13 -0
- foxes-1.5/foxes/data/states/weibull_sectors_12.nc +0 -0
- foxes-1.5/foxes/engines/__init__.py +16 -0
- {foxes-1.3 → foxes-1.5}/foxes/engines/dask.py +42 -20
- {foxes-1.3 → foxes-1.5}/foxes/engines/default.py +2 -2
- {foxes-1.3 → foxes-1.5}/foxes/engines/numpy.py +11 -13
- {foxes-1.3 → foxes-1.5}/foxes/engines/pool.py +20 -11
- {foxes-1.3 → foxes-1.5}/foxes/engines/single.py +8 -6
- foxes-1.5/foxes/input/__init__.py +7 -0
- foxes-1.5/foxes/input/farm_layout/__init__.py +13 -0
- foxes-1.5/foxes/input/farm_layout/from_arrays.py +68 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/farm_layout/from_csv.py +1 -1
- {foxes-1.3 → foxes-1.5}/foxes/input/farm_layout/ring.py +0 -1
- foxes-1.5/foxes/input/states/__init__.py +35 -0
- foxes-1.5/foxes/input/states/create/__init__.py +3 -0
- foxes-1.5/foxes/input/states/dataset_states.py +710 -0
- foxes-1.5/foxes/input/states/field_data.py +531 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/states/multi_height.py +11 -6
- {foxes-1.3 → foxes-1.5}/foxes/input/states/one_point_flow.py +1 -4
- foxes-1.5/foxes/input/states/point_cloud_data.py +618 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/states/scan.py +2 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/states/single.py +3 -1
- {foxes-1.3 → foxes-1.5}/foxes/input/states/states_table.py +23 -30
- foxes-1.5/foxes/input/states/weibull_sectors.py +330 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/states/wrg_states.py +8 -6
- foxes-1.5/foxes/input/yaml/__init__.py +9 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/yaml/dict.py +42 -41
- foxes-1.5/foxes/input/yaml/windio/__init__.py +10 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/yaml/windio/read_attributes.py +42 -29
- {foxes-1.3 → foxes-1.5}/foxes/input/yaml/windio/read_farm.py +17 -15
- {foxes-1.3 → foxes-1.5}/foxes/input/yaml/windio/read_fields.py +4 -2
- {foxes-1.3 → foxes-1.5}/foxes/input/yaml/windio/read_outputs.py +25 -15
- {foxes-1.3 → foxes-1.5}/foxes/input/yaml/windio/read_site.py +172 -11
- {foxes-1.3 → foxes-1.5}/foxes/input/yaml/windio/windio.py +23 -11
- {foxes-1.3 → foxes-1.5}/foxes/input/yaml/yaml.py +1 -0
- foxes-1.5/foxes/models/__init__.py +20 -0
- foxes-1.5/foxes/models/axial_induction/__init__.py +2 -0
- foxes-1.5/foxes/models/farm_controllers/__init__.py +5 -0
- foxes-1.5/foxes/models/farm_models/__init__.py +5 -0
- foxes-1.5/foxes/models/ground_models/__init__.py +3 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/ground_models/wake_mirror.py +3 -3
- {foxes-1.3 → foxes-1.5}/foxes/models/model_book.py +190 -63
- foxes-1.5/foxes/models/partial_wakes/__init__.py +10 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/partial_wakes/axiwake.py +30 -5
- foxes-1.5/foxes/models/partial_wakes/centre.py +88 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/partial_wakes/rotor_points.py +41 -11
- {foxes-1.3 → foxes-1.5}/foxes/models/partial_wakes/segregated.py +2 -25
- {foxes-1.3 → foxes-1.5}/foxes/models/partial_wakes/top_hat.py +27 -2
- foxes-1.5/foxes/models/point_models/__init__.py +8 -0
- foxes-1.5/foxes/models/rotor_models/__init__.py +8 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/rotor_models/centre.py +1 -1
- foxes-1.5/foxes/models/rotor_models/direct_infusion.py +241 -0
- foxes-1.5/foxes/models/turbine_models/__init__.py +15 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_models/calculator.py +16 -3
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_models/kTI_model.py +1 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_models/lookup_table.py +2 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_models/power_mask.py +1 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_models/rotor_centre_calc.py +2 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_models/sector_management.py +1 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_models/set_farm_vars.py +3 -9
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_models/table_factors.py +2 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_models/thrust2ct.py +1 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_models/yaw2yawm.py +2 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_models/yawm2yaw.py +2 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_types/PCt_file.py +2 -6
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_types/PCt_from_two.py +1 -2
- foxes-1.5/foxes/models/turbine_types/__init__.py +14 -0
- foxes-1.5/foxes/models/turbine_types/calculator_type.py +123 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_types/null_type.py +1 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_types/wsrho2PCt_from_two.py +2 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_types/wsti2PCt_from_two.py +3 -1
- foxes-1.5/foxes/models/vertical_profiles/__init__.py +11 -0
- foxes-1.5/foxes/models/wake_deflections/__init__.py +3 -0
- foxes-1.3/foxes/models/wake_frames/yawed_wakes.py → foxes-1.5/foxes/models/wake_deflections/bastankhah2016.py +32 -111
- foxes-1.5/foxes/models/wake_deflections/jimenez.py +277 -0
- foxes-1.5/foxes/models/wake_deflections/no_deflection.py +94 -0
- foxes-1.5/foxes/models/wake_frames/__init__.py +10 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_frames/dynamic_wakes.py +12 -3
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_frames/rotor_wd.py +3 -1
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_frames/seq_dynamic_wakes.py +41 -7
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_frames/streamlines.py +8 -6
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_frames/timelines.py +9 -3
- foxes-1.5/foxes/models/wake_models/__init__.py +12 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/dist_sliced.py +50 -84
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/gaussian.py +20 -0
- foxes-1.5/foxes/models/wake_models/induction/__init__.py +9 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/induction/rankine_half_body.py +30 -71
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/induction/rathmann.py +65 -64
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/induction/self_similar.py +65 -68
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/induction/self_similar2020.py +0 -3
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/induction/vortex_sheet.py +71 -75
- foxes-1.5/foxes/models/wake_models/ti/__init__.py +6 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/ti/crespo_hernandez.py +5 -3
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/ti/iec_ti.py +6 -4
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/top_hat.py +58 -7
- foxes-1.5/foxes/models/wake_models/wind/__init__.py +10 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/wind/bastankhah14.py +25 -7
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/wind/bastankhah16.py +35 -3
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/wind/jensen.py +15 -2
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/wind/turbopark.py +28 -2
- foxes-1.5/foxes/models/wake_superpositions/__init__.py +22 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_superpositions/ti_linear.py +4 -4
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_superpositions/ti_max.py +4 -4
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_superpositions/ti_pow.py +4 -4
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_superpositions/ti_quadratic.py +4 -4
- foxes-1.5/foxes/models/wake_superpositions/wind_vector.py +257 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_superpositions/ws_linear.py +9 -10
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_superpositions/ws_max.py +8 -8
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_superpositions/ws_pow.py +8 -8
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_superpositions/ws_product.py +4 -4
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_superpositions/ws_quadratic.py +8 -8
- foxes-1.5/foxes/output/__init__.py +27 -0
- {foxes-1.3 → foxes-1.5}/foxes/output/farm_layout.py +4 -2
- {foxes-1.3 → foxes-1.5}/foxes/output/farm_results_eval.py +19 -16
- foxes-1.5/foxes/output/flow_plots_2d/__init__.py +2 -0
- {foxes-1.3 → foxes-1.5}/foxes/output/flow_plots_2d/flow_plots.py +18 -0
- {foxes-1.3 → foxes-1.5}/foxes/output/flow_plots_2d/get_fig.py +5 -2
- {foxes-1.3 → foxes-1.5}/foxes/output/output.py +6 -1
- {foxes-1.3 → foxes-1.5}/foxes/output/results_writer.py +1 -1
- {foxes-1.3 → foxes-1.5}/foxes/output/rose_plot.py +13 -3
- {foxes-1.3 → foxes-1.5}/foxes/output/rotor_point_plots.py +3 -0
- foxes-1.5/foxes/output/seq_plugins/__init__.py +2 -0
- {foxes-1.3 → foxes-1.5}/foxes/output/seq_plugins/seq_flow_ani_plugin.py +0 -3
- {foxes-1.3 → foxes-1.5}/foxes/output/seq_plugins/seq_wake_debug_plugin.py +0 -1
- {foxes-1.3 → foxes-1.5}/foxes/output/state_turbine_map.py +3 -0
- {foxes-1.3 → foxes-1.5}/foxes/output/turbine_type_curves.py +10 -8
- foxes-1.5/foxes/utils/__init__.py +42 -0
- foxes-1.5/foxes/utils/abl/__init__.py +8 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/cubic_roots.py +1 -1
- {foxes-1.3 → foxes-1.5}/foxes/utils/data_book.py +4 -3
- {foxes-1.3 → foxes-1.5}/foxes/utils/dict.py +49 -37
- {foxes-1.3 → foxes-1.5}/foxes/utils/exec_python.py +5 -5
- {foxes-1.3 → foxes-1.5}/foxes/utils/factory.py +3 -5
- foxes-1.5/foxes/utils/geom2d/__init__.py +11 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/geopandas_utils.py +2 -2
- {foxes-1.3 → foxes-1.5}/foxes/utils/pandas_utils.py +4 -3
- {foxes-1.3 → foxes-1.5}/foxes/utils/tab_files.py +0 -1
- foxes-1.5/foxes/utils/weibull.py +28 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/wrg_utils.py +3 -1
- {foxes-1.3 → foxes-1.5}/foxes/utils/xarray_utils.py +9 -2
- {foxes-1.3 → foxes-1.5}/foxes/variables.py +67 -9
- {foxes-1.3 → foxes-1.5/foxes.egg-info}/PKG-INFO +34 -63
- {foxes-1.3 → foxes-1.5}/foxes.egg-info/SOURCES.txt +19 -4
- foxes-1.5/foxes.egg-info/requires.txt +37 -0
- {foxes-1.3 → foxes-1.5}/pyproject.toml +34 -57
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/PCt_files/flappy/run.py +2 -3
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/PCt_files/test_PCt_files.py +1 -1
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/abl_states/flappy/run.py +0 -1
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/partial_top_hat/flappy/run.py +0 -1
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/partial_top_hat/test_partial_top_hat.py +0 -2
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_centre/test_row_Jensen_linear_centre.py +0 -1
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/test_row_Jensen_linear_tophat.py +0 -1
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2005/test_row_Jensen_linear_tophat_IECTI_2005.py +0 -1
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2019/test_row_Jensen_linear_tophat_IECTI_2019.py +0 -1
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/test_row_Jensen_quadratic_centre.py +0 -1
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6_2/grid_rotors/flappy/run.py +0 -2
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/test_row_Bastankhah_Crespo.py +0 -1
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/flappy/run.py +0 -1
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/test_row_Bastankhah_linear_centre.py +0 -1
- foxes-1.3/foxes/__init__.py +0 -37
- foxes-1.3/foxes/algorithms/__init__.py +0 -11
- foxes-1.3/foxes/algorithms/downwind/__init__.py +0 -3
- foxes-1.3/foxes/algorithms/downwind/models/__init__.py +0 -6
- foxes-1.3/foxes/algorithms/iterative/__init__.py +0 -4
- foxes-1.3/foxes/algorithms/iterative/models/__init__.py +0 -3
- foxes-1.3/foxes/algorithms/sequential/__init__.py +0 -4
- foxes-1.3/foxes/algorithms/sequential/models/__init__.py +0 -2
- foxes-1.3/foxes/config/__init__.py +0 -1
- foxes-1.3/foxes/core/__init__.py +0 -26
- foxes-1.3/foxes/core/wake_superposition.py +0 -127
- foxes-1.3/foxes/data/__init__.py +0 -6
- foxes-1.3/foxes/engines/__init__.py +0 -17
- foxes-1.3/foxes/input/__init__.py +0 -7
- foxes-1.3/foxes/input/farm_layout/__init__.py +0 -12
- foxes-1.3/foxes/input/states/__init__.py +0 -19
- foxes-1.3/foxes/input/states/create/__init__.py +0 -2
- foxes-1.3/foxes/input/states/field_data_nc.py +0 -847
- foxes-1.3/foxes/input/yaml/__init__.py +0 -3
- foxes-1.3/foxes/input/yaml/windio/__init__.py +0 -5
- foxes-1.3/foxes/models/__init__.py +0 -19
- foxes-1.3/foxes/models/axial_induction/__init__.py +0 -2
- foxes-1.3/foxes/models/farm_controllers/__init__.py +0 -5
- foxes-1.3/foxes/models/farm_models/__init__.py +0 -5
- foxes-1.3/foxes/models/ground_models/__init__.py +0 -2
- foxes-1.3/foxes/models/partial_wakes/__init__.py +0 -10
- foxes-1.3/foxes/models/partial_wakes/centre.py +0 -41
- foxes-1.3/foxes/models/point_models/__init__.py +0 -8
- foxes-1.3/foxes/models/rotor_models/__init__.py +0 -7
- foxes-1.3/foxes/models/turbine_models/__init__.py +0 -15
- foxes-1.3/foxes/models/turbine_types/__init__.py +0 -13
- foxes-1.3/foxes/models/vertical_profiles/__init__.py +0 -11
- foxes-1.3/foxes/models/wake_frames/__init__.py +0 -11
- foxes-1.3/foxes/models/wake_models/__init__.py +0 -12
- foxes-1.3/foxes/models/wake_models/induction/__init__.py +0 -9
- foxes-1.3/foxes/models/wake_models/ti/__init__.py +0 -6
- foxes-1.3/foxes/models/wake_models/wind/__init__.py +0 -8
- foxes-1.3/foxes/models/wake_superpositions/__init__.py +0 -13
- foxes-1.3/foxes/output/__init__.py +0 -25
- foxes-1.3/foxes/output/flow_plots_2d/__init__.py +0 -2
- foxes-1.3/foxes/output/round.py +0 -10
- foxes-1.3/foxes/output/seq_plugins/__init__.py +0 -2
- foxes-1.3/foxes/utils/__init__.py +0 -24
- foxes-1.3/foxes/utils/abl/__init__.py +0 -8
- foxes-1.3/foxes/utils/geom2d/__init__.py +0 -9
- foxes-1.3/foxes/utils/pandas_helpers.py +0 -178
- foxes-1.3/foxes.egg-info/requires.txt +0 -61
- {foxes-1.3 → foxes-1.5}/LICENSE +0 -0
- {foxes-1.3 → foxes-1.5}/Logo_FOXES.svg +0 -0
- {foxes-1.3 → foxes-1.5}/MANIFEST.in +0 -0
- {foxes-1.3 → foxes-1.5}/examples/sector_management/run.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/algorithms/downwind/models/reorder_farm_output.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/algorithms/iterative/models/convergence.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/algorithms/iterative/models/urelax.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/algorithms/sequential/models/plugin.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/algorithms/sequential/models/seq_state.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/config/config.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/core/axial_induction_model.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/core/farm_model.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/core/turbine_model.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/core/turbine_type.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/core/vertical_profile.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/core/wake_frame.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/farms/__init__.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/farms/test_farm_67.csv +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/parse.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/power_ct_curves/DTU-10MW-D178d3-H119.csv +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/power_ct_curves/IEA-15MW-D240-H150.csv +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/power_ct_curves/IWT-7d5MW-D164-H100.csv +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/power_ct_curves/NREL-5MW-D126-H90.csv +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/power_ct_curves/__init__.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/states/WRF-Timeseries-3000.nc +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/states/WRF-Timeseries-4464.csv.gz +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/states/__init__.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/states/abl_states_6000.csv.gz +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/states/timeseries_100.csv.gz +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/states/timeseries_3000.csv.gz +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/states/timeseries_8000.csv.gz +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/states/wind_rose_bremen.csv +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/states/wind_rotation.nc +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/states/winds100.tab +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/data/static_data.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/engines/futures.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/engines/mpi.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/engines/multiprocess.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/engines/ray.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/farm_layout/from_df.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/farm_layout/from_file.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/farm_layout/from_json.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/farm_layout/from_random.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/farm_layout/grid.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/farm_layout/row.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/states/create/random_abl_states.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/input/states/create/random_timeseries.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/axial_induction/betz.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/axial_induction/madsen.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/farm_controllers/basic.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/farm_models/turbine2farm.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/ground_models/no_ground.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/partial_wakes/grid.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/point_models/set_uniform_data.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/point_models/tke2ti.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/point_models/ustar2ti.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/point_models/wake_deltas.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/rotor_models/grid.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/rotor_models/levels.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_types/CpCt_file.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_types/CpCt_from_two.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_types/TBL_file.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/turbine_types/lookup.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/vertical_profiles/abl_log_neutral_ws.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/vertical_profiles/abl_log_stable_ws.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/vertical_profiles/abl_log_unstable_ws.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/vertical_profiles/abl_log_ws.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/vertical_profiles/data_profile.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/vertical_profiles/sheared_ws.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/vertical_profiles/uniform.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_frames/farm_order.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/models/wake_models/axisymmetric.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/output/animation.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/output/calc_points.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/output/grids.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/output/plt.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/output/slice_data.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/output/slices_data.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/output/state_turbine_table.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/abl/neutral.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/abl/sheared.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/abl/stable.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/abl/unstable.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/dev_utils.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/geom2d/area_geometry.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/geom2d/circle.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/geom2d/example_intersection.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/geom2d/example_union.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/geom2d/half_plane.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/geom2d/polygon.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/load.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/random_xy.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/regularize.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/subclasses.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/two_circles.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes/utils/wind_dir.py +0 -0
- {foxes-1.3 → foxes-1.5}/foxes.egg-info/dependency_links.txt +0 -0
- {foxes-1.3 → foxes-1.5}/foxes.egg-info/entry_points.txt +0 -0
- {foxes-1.3 → foxes-1.5}/foxes.egg-info/top_level.txt +0 -0
- {foxes-1.3 → foxes-1.5}/setup.cfg +0 -0
- {foxes-1.3 → foxes-1.5}/tests/0_consistency/iterative/test_iterative.py +0 -0
- {foxes-1.3 → foxes-1.5}/tests/0_consistency/partial_wakes/test_partial_wakes.py +0 -0
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/abl_states/test_abl_states.py +0 -0
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_centre/flappy/run.py +0 -0
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/flappy/run.py +0 -0
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2005/flappy/run.py +0 -0
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2019/flappy/run.py +0 -0
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/flappy/run.py +0 -0
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6_2/grid_rotors/test_grid_rotors.py +0 -0
- {foxes-1.3 → foxes-1.5}/tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/flappy/run.py +0 -0
- {foxes-1.3 → foxes-1.5}/tests/3_examples/test_examples.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.5
|
|
4
4
|
Summary: Farm Optimization and eXtended yield Evaluation Software
|
|
5
5
|
Author: Jonas Schulte
|
|
6
6
|
Maintainer: Jonas Schulte
|
|
@@ -36,7 +36,6 @@ 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
|
|
@@ -45,63 +44,42 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
45
44
|
Classifier: License :: OSI Approved :: MIT License
|
|
46
45
|
Classifier: Operating System :: OS Independent
|
|
47
46
|
Classifier: Development Status :: 4 - Beta
|
|
48
|
-
Requires-Python: >=3.
|
|
47
|
+
Requires-Python: >=3.9
|
|
49
48
|
Description-Content-Type: text/markdown
|
|
50
49
|
License-File: LICENSE
|
|
51
|
-
Requires-Dist:
|
|
52
|
-
Requires-Dist:
|
|
53
|
-
Requires-Dist:
|
|
54
|
-
Requires-Dist:
|
|
55
|
-
Requires-Dist:
|
|
56
|
-
Requires-Dist:
|
|
57
|
-
Requires-Dist:
|
|
58
|
-
Requires-Dist:
|
|
50
|
+
Requires-Dist: cycler>=0.10
|
|
51
|
+
Requires-Dist: h5netcdf>=1.0
|
|
52
|
+
Requires-Dist: matplotlib>=3.8
|
|
53
|
+
Requires-Dist: numpy>=1.26
|
|
54
|
+
Requires-Dist: pandas>=2.0
|
|
55
|
+
Requires-Dist: pyyaml>=4.0
|
|
56
|
+
Requires-Dist: scipy>=1.12
|
|
57
|
+
Requires-Dist: tqdm>=2.0
|
|
58
|
+
Requires-Dist: xarray>=2023
|
|
59
59
|
Provides-Extra: opt
|
|
60
|
-
Requires-Dist: foxes-opt; extra == "opt"
|
|
60
|
+
Requires-Dist: foxes-opt>=0.5; extra == "opt"
|
|
61
61
|
Provides-Extra: dask
|
|
62
|
-
Requires-Dist:
|
|
63
|
-
Requires-Dist:
|
|
64
|
-
Requires-Dist:
|
|
65
|
-
Requires-Dist:
|
|
66
|
-
Requires-Dist: setuptools; extra == "dask"
|
|
67
|
-
Provides-Extra: eng
|
|
68
|
-
Requires-Dist: h5netcdf; extra == "eng"
|
|
69
|
-
Requires-Dist: multiprocess; extra == "eng"
|
|
70
|
-
Requires-Dist: dask; extra == "eng"
|
|
71
|
-
Requires-Dist: distributed; extra == "eng"
|
|
72
|
-
Requires-Dist: dask-jobqueue; extra == "eng"
|
|
73
|
-
Requires-Dist: setuptools; extra == "eng"
|
|
74
|
-
Requires-Dist: mpi4py; extra == "eng"
|
|
75
|
-
Requires-Dist: ray; extra == "eng"
|
|
76
|
-
Provides-Extra: eng0
|
|
77
|
-
Requires-Dist: h5netcdf; extra == "eng0"
|
|
78
|
-
Requires-Dist: multiprocess; extra == "eng0"
|
|
79
|
-
Requires-Dist: dask; extra == "eng0"
|
|
80
|
-
Requires-Dist: distributed; extra == "eng0"
|
|
81
|
-
Requires-Dist: dask-jobqueue; extra == "eng0"
|
|
82
|
-
Requires-Dist: setuptools; extra == "eng0"
|
|
83
|
-
Requires-Dist: ray; extra == "eng0"
|
|
84
|
-
Provides-Extra: test
|
|
85
|
-
Requires-Dist: flake8; extra == "test"
|
|
86
|
-
Requires-Dist: pytest; extra == "test"
|
|
87
|
-
Requires-Dist: h5netcdf; extra == "test"
|
|
62
|
+
Requires-Dist: dask>=2022.0; extra == "dask"
|
|
63
|
+
Requires-Dist: distributed>=2022.0; extra == "dask"
|
|
64
|
+
Requires-Dist: dask-jobqueue>=0.8; extra == "dask"
|
|
65
|
+
Requires-Dist: setuptools>=61.0; extra == "dask"
|
|
88
66
|
Provides-Extra: doc
|
|
89
|
-
Requires-Dist: setuptools; extra == "doc"
|
|
90
|
-
Requires-Dist: sphinx; extra == "doc"
|
|
91
|
-
Requires-Dist: sphinx-immaterial; extra == "doc"
|
|
92
|
-
Requires-Dist: nbsphinx; extra == "doc"
|
|
93
|
-
Requires-Dist: ipykernel; extra == "doc"
|
|
94
|
-
Requires-Dist: ipywidgets; extra == "doc"
|
|
95
|
-
Requires-Dist: m2r2; extra == "doc"
|
|
96
|
-
Requires-Dist: lxml_html_clean; extra == "doc"
|
|
97
|
-
Requires-Dist: dask; extra == "doc"
|
|
98
|
-
Requires-Dist: distributed; extra == "doc"
|
|
99
|
-
Provides-Extra:
|
|
100
|
-
Requires-Dist: flake8; extra == "
|
|
101
|
-
Requires-Dist: pytest; extra == "
|
|
102
|
-
|
|
103
|
-
Requires-Dist: objsize; extra == "
|
|
104
|
-
|
|
67
|
+
Requires-Dist: setuptools>=61.0; extra == "doc"
|
|
68
|
+
Requires-Dist: sphinx>=5.0; extra == "doc"
|
|
69
|
+
Requires-Dist: sphinx-immaterial>=0.10; extra == "doc"
|
|
70
|
+
Requires-Dist: nbsphinx>=0.5; extra == "doc"
|
|
71
|
+
Requires-Dist: ipykernel>=5.0; extra == "doc"
|
|
72
|
+
Requires-Dist: ipywidgets>=5.0; extra == "doc"
|
|
73
|
+
Requires-Dist: m2r2>=0.2; extra == "doc"
|
|
74
|
+
Requires-Dist: lxml_html_clean>=0.4; extra == "doc"
|
|
75
|
+
Requires-Dist: dask>=2022.0; extra == "doc"
|
|
76
|
+
Requires-Dist: distributed>=2022.0; extra == "doc"
|
|
77
|
+
Provides-Extra: test
|
|
78
|
+
Requires-Dist: flake8>=0.1; extra == "test"
|
|
79
|
+
Requires-Dist: pytest>=7.0; extra == "test"
|
|
80
|
+
Provides-Extra: utils
|
|
81
|
+
Requires-Dist: objsize>=0.5; extra == "utils"
|
|
82
|
+
Dynamic: license-file
|
|
105
83
|
|
|
106
84
|
# Welcome to foxes
|
|
107
85
|
|
|
@@ -161,14 +139,7 @@ Evaluation Software"`
|
|
|
161
139
|
|
|
162
140
|
## Requirements
|
|
163
141
|
|
|
164
|
-
The supported Python versions are
|
|
165
|
-
|
|
166
|
-
- `Python 3.8`
|
|
167
|
-
- `Python 3.9`
|
|
168
|
-
- `Python 3.10`
|
|
169
|
-
- `Python 3.11`
|
|
170
|
-
- `Python 3.12`
|
|
171
|
-
- `Python 3.13`
|
|
142
|
+
The supported Python versions are `Python 3.9`...`3.13`.
|
|
172
143
|
|
|
173
144
|
## Installation
|
|
174
145
|
|
|
@@ -56,14 +56,7 @@ Evaluation Software"`
|
|
|
56
56
|
|
|
57
57
|
## Requirements
|
|
58
58
|
|
|
59
|
-
The supported Python versions are
|
|
60
|
-
|
|
61
|
-
- `Python 3.8`
|
|
62
|
-
- `Python 3.9`
|
|
63
|
-
- `Python 3.10`
|
|
64
|
-
- `Python 3.11`
|
|
65
|
-
- `Python 3.12`
|
|
66
|
-
- `Python 3.13`
|
|
59
|
+
The supported Python versions are `Python 3.9`...`3.13`.
|
|
67
60
|
|
|
68
61
|
## Installation
|
|
69
62
|
|
|
@@ -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"
|
|
@@ -337,6 +336,7 @@ python_apigen_modules = {
|
|
|
337
336
|
"foxes.models.vertical_profiles": "_foxes/models/vertical_profiles/",
|
|
338
337
|
"foxes.models.axial_induction": "_foxes/models/axial_induction",
|
|
339
338
|
"foxes.models.ground_models": "_foxes/models/ground_models",
|
|
339
|
+
"foxes.models.wake_deflections": "_foxes/models/wake_deflections",
|
|
340
340
|
"foxes.models.wake_frames": "_foxes/models/wake_frames/",
|
|
341
341
|
"foxes.models.wake_models": "_foxes/models/wake_models/",
|
|
342
342
|
"foxes.models.wake_models.induction": "_foxes/models/wake_models/induction/",
|
|
@@ -154,7 +154,7 @@ if __name__ == "__main__":
|
|
|
154
154
|
# power results
|
|
155
155
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
156
156
|
P = o.calc_mean_farm_power()
|
|
157
|
-
print(f"\nFarm power : {P/1000:.1f} MW")
|
|
158
|
-
print(f"Farm ambient power: {P0/1000:.1f} MW")
|
|
157
|
+
print(f"\nFarm power : {P / 1000:.1f} MW")
|
|
158
|
+
print(f"Farm ambient power: {P0 / 1000:.1f} MW")
|
|
159
159
|
print(f"Farm efficiency : {o.calc_farm_efficiency():.2f}")
|
|
160
160
|
print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh.")
|
|
@@ -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()
|
|
@@ -73,7 +73,6 @@ if __name__ == "__main__":
|
|
|
73
73
|
parser.add_argument(
|
|
74
74
|
"-p", "--pwakes", help="The partial wakes models", default=None, nargs="+"
|
|
75
75
|
)
|
|
76
|
-
parser.add_argument("-sc", "--scheduler", help="The scheduler choice", default=None)
|
|
77
76
|
parser.add_argument(
|
|
78
77
|
"-w",
|
|
79
78
|
"--wakes",
|
|
@@ -82,6 +81,16 @@ if __name__ == "__main__":
|
|
|
82
81
|
nargs="+",
|
|
83
82
|
)
|
|
84
83
|
parser.add_argument("-f", "--frame", help="The wake frame", default="dyn_wakes")
|
|
84
|
+
parser.add_argument(
|
|
85
|
+
"-d", "--deflection", help="The wake deflection", default="no_deflection"
|
|
86
|
+
)
|
|
87
|
+
parser.add_argument(
|
|
88
|
+
"-y",
|
|
89
|
+
"--yawm",
|
|
90
|
+
help="The uniform yaw misalignment value",
|
|
91
|
+
type=float,
|
|
92
|
+
default=None,
|
|
93
|
+
)
|
|
85
94
|
parser.add_argument(
|
|
86
95
|
"-m", "--tmodels", help="The turbine models", default=[], nargs="+"
|
|
87
96
|
)
|
|
@@ -121,6 +130,19 @@ if __name__ == "__main__":
|
|
|
121
130
|
max_length_km=8
|
|
122
131
|
)
|
|
123
132
|
|
|
133
|
+
# optionally set turbines in yaw:
|
|
134
|
+
N = int(args.n_turbines**0.5)
|
|
135
|
+
if args.yawm is None:
|
|
136
|
+
ymodels = []
|
|
137
|
+
else:
|
|
138
|
+
yawm = np.zeros((1, N * N), dtype=np.float64)
|
|
139
|
+
yawm[:, :N] = args.yawm
|
|
140
|
+
mbook.turbine_models["set_yawm"] = foxes.models.turbine_models.SetFarmVars(
|
|
141
|
+
pre_rotor=True
|
|
142
|
+
)
|
|
143
|
+
mbook.turbine_models["set_yawm"].add_var(FV.YAWM, yawm)
|
|
144
|
+
ymodels = ["set_yawm"]
|
|
145
|
+
|
|
124
146
|
if args.background0:
|
|
125
147
|
States = foxes.input.states.Timeseries
|
|
126
148
|
kwargs = {}
|
|
@@ -147,13 +169,12 @@ if __name__ == "__main__":
|
|
|
147
169
|
)
|
|
148
170
|
|
|
149
171
|
farm = foxes.WindFarm()
|
|
150
|
-
N = int(args.n_turbines**0.5)
|
|
151
172
|
foxes.input.farm_layout.add_grid(
|
|
152
173
|
farm,
|
|
153
174
|
xy_base=np.array([0.0, 0.0]),
|
|
154
175
|
step_vectors=np.array([[1000.0, 0], [0, 800.0]]),
|
|
155
176
|
steps=(N, N),
|
|
156
|
-
turbine_models=args.tmodels + [ttype.name],
|
|
177
|
+
turbine_models=ymodels + args.tmodels + [ttype.name],
|
|
157
178
|
)
|
|
158
179
|
|
|
159
180
|
if not args.nofig and args.show_layout:
|
|
@@ -175,6 +196,7 @@ if __name__ == "__main__":
|
|
|
175
196
|
rotor_model=args.rotor,
|
|
176
197
|
wake_models=args.wakes,
|
|
177
198
|
wake_frame=args.frame,
|
|
199
|
+
wake_deflection=args.deflection,
|
|
178
200
|
partial_wakes=args.pwakes,
|
|
179
201
|
mbook=mbook,
|
|
180
202
|
max_it=args.max_it,
|
|
@@ -221,9 +243,9 @@ if __name__ == "__main__":
|
|
|
221
243
|
# power results
|
|
222
244
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
223
245
|
P = o.calc_mean_farm_power()
|
|
224
|
-
print(f"\nFarm power : {P/1000:.1f} MW")
|
|
225
|
-
print(f"Farm ambient power: {P0/1000:.1f} MW")
|
|
226
|
-
print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
|
|
246
|
+
print(f"\nFarm power : {P / 1000:.1f} MW")
|
|
247
|
+
print(f"Farm ambient power: {P0 / 1000:.1f} MW")
|
|
248
|
+
print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
|
|
227
249
|
|
|
228
250
|
engine.finalize()
|
|
229
251
|
|
|
@@ -262,6 +284,7 @@ if __name__ == "__main__":
|
|
|
262
284
|
title=None,
|
|
263
285
|
animated=True,
|
|
264
286
|
precalc=True,
|
|
287
|
+
rotor_color="red",
|
|
265
288
|
)
|
|
266
289
|
next(ofg)
|
|
267
290
|
|
|
@@ -147,9 +147,9 @@ if __name__ == "__main__":
|
|
|
147
147
|
# power results
|
|
148
148
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
149
149
|
P = o.calc_mean_farm_power()
|
|
150
|
-
print(f"\nFarm power : {P/1000:.1f} MW")
|
|
151
|
-
print(f"Farm ambient power: {P0/1000:.1f} MW")
|
|
152
|
-
print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
|
|
150
|
+
print(f"\nFarm power : {P / 1000:.1f} MW")
|
|
151
|
+
print(f"Farm ambient power: {P0 / 1000:.1f} MW")
|
|
152
|
+
print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
|
|
153
153
|
print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh.")
|
|
154
154
|
|
|
155
155
|
# horizontal flow plot
|
|
@@ -110,4 +110,4 @@ if __name__ == "__main__":
|
|
|
110
110
|
o = foxes.output.FarmResultsEval(farm_results)
|
|
111
111
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
112
112
|
P = o.calc_mean_farm_power()
|
|
113
|
-
print(f"\nFarm power: {P/1000:.1f} MW, Efficiency = {P/P0*100:.2f} %")
|
|
113
|
+
print(f"\nFarm power: {P / 1000:.1f} MW, Efficiency = {P / P0 * 100:.2f} %")
|
|
@@ -162,7 +162,7 @@ if __name__ == "__main__":
|
|
|
162
162
|
o = foxes.output.FarmResultsEval(farm_results)
|
|
163
163
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
164
164
|
P = o.calc_mean_farm_power()
|
|
165
|
-
print(f"\nFarm power: {P/1000:.1f} MW, Efficiency = {P/P0*100:.2f} %")
|
|
165
|
+
print(f"\nFarm power: {P / 1000:.1f} MW, Efficiency = {P / P0 * 100:.2f} %")
|
|
166
166
|
|
|
167
167
|
o1 = foxes.output.StateTurbineMap(farm_results)
|
|
168
168
|
|
|
@@ -180,7 +180,7 @@ if __name__ == "__main__":
|
|
|
180
180
|
o = foxes.output.FarmResultsEval(farm_results)
|
|
181
181
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
182
182
|
P = o.calc_mean_farm_power()
|
|
183
|
-
print(f"\nFarm power: {P/1000:.1f} MW, Efficiency = {P/P0*100:.2f} %")
|
|
183
|
+
print(f"\nFarm power: {P / 1000:.1f} MW, Efficiency = {P / P0 * 100:.2f} %")
|
|
184
184
|
|
|
185
185
|
if not args.nofig:
|
|
186
186
|
o0 = foxes.output.StateTurbineMap(farm_results)
|
|
@@ -99,7 +99,6 @@ if __name__ == "__main__":
|
|
|
99
99
|
chunk_size_states=args.chunksize_states,
|
|
100
100
|
chunk_size_points=args.chunksize_points,
|
|
101
101
|
):
|
|
102
|
-
|
|
103
102
|
if not args.nofig:
|
|
104
103
|
fig = plt.figure(figsize=(14.5, 7))
|
|
105
104
|
ax1 = fig.add_subplot(121)
|
|
@@ -204,7 +203,7 @@ if __name__ == "__main__":
|
|
|
204
203
|
# power results
|
|
205
204
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
206
205
|
P = o.calc_mean_farm_power()
|
|
207
|
-
print(f"\nFarm power : {P/1000:.1f} MW")
|
|
208
|
-
print(f"Farm ambient power: {P0/1000:.1f} MW")
|
|
209
|
-
print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
|
|
206
|
+
print(f"\nFarm power : {P / 1000:.1f} MW")
|
|
207
|
+
print(f"Farm ambient power: {P0 / 1000:.1f} MW")
|
|
208
|
+
print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
|
|
210
209
|
print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh")
|
|
@@ -161,9 +161,9 @@ if __name__ == "__main__":
|
|
|
161
161
|
# power results
|
|
162
162
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
163
163
|
P = o.calc_mean_farm_power()
|
|
164
|
-
print(f"\nFarm power : {P/1000:.1f} MW")
|
|
165
|
-
print(f"Farm ambient power: {P0/1000:.1f} MW")
|
|
166
|
-
print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
|
|
164
|
+
print(f"\nFarm power : {P / 1000:.1f} MW")
|
|
165
|
+
print(f"Farm ambient power: {P0 / 1000:.1f} MW")
|
|
166
|
+
print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
|
|
167
167
|
print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh.")
|
|
168
168
|
print()
|
|
169
169
|
|
|
@@ -24,9 +24,7 @@ if __name__ == "__main__":
|
|
|
24
24
|
type=int,
|
|
25
25
|
default=4,
|
|
26
26
|
)
|
|
27
|
-
parser.add_argument(
|
|
28
|
-
"-d", "--debug", help="Switch on wake debugging", action="store_true"
|
|
29
|
-
)
|
|
27
|
+
parser.add_argument("--debug", help="Switch on wake debugging", action="store_true")
|
|
30
28
|
parser.add_argument(
|
|
31
29
|
"-S",
|
|
32
30
|
"--n_states",
|
|
@@ -83,6 +81,16 @@ if __name__ == "__main__":
|
|
|
83
81
|
type=float,
|
|
84
82
|
)
|
|
85
83
|
parser.add_argument("-e", "--engine", help="The engine", default="NumpyEngine")
|
|
84
|
+
parser.add_argument(
|
|
85
|
+
"-d", "--deflection", help="The wake deflection", default="no_deflection"
|
|
86
|
+
)
|
|
87
|
+
parser.add_argument(
|
|
88
|
+
"-y",
|
|
89
|
+
"--yawm",
|
|
90
|
+
help="The uniform yaw misalignment value",
|
|
91
|
+
type=float,
|
|
92
|
+
default=None,
|
|
93
|
+
)
|
|
86
94
|
parser.add_argument(
|
|
87
95
|
"-n", "--n_cpus", help="The number of cpus", default=None, type=int
|
|
88
96
|
)
|
|
@@ -109,21 +117,34 @@ if __name__ == "__main__":
|
|
|
109
117
|
ttype = foxes.models.turbine_types.PCtFile(args.turbine_file)
|
|
110
118
|
mbook.turbine_types[ttype.name] = ttype
|
|
111
119
|
|
|
120
|
+
# optionally set turbines in yaw:
|
|
121
|
+
N = 3
|
|
122
|
+
if args.yawm is None:
|
|
123
|
+
ymodels = []
|
|
124
|
+
else:
|
|
125
|
+
yawm = np.zeros((args.n_states, N * N), dtype=np.float64)
|
|
126
|
+
yawm[:, :N] = args.yawm
|
|
127
|
+
mbook.turbine_models["set_yawm"] = foxes.models.turbine_models.SetFarmVars(
|
|
128
|
+
pre_rotor=True
|
|
129
|
+
)
|
|
130
|
+
mbook.turbine_models["set_yawm"].add_var(FV.YAWM, yawm)
|
|
131
|
+
ymodels = ["set_yawm"]
|
|
132
|
+
|
|
112
133
|
states = foxes.input.states.Timeseries(
|
|
113
134
|
data_source="timeseries_3000.csv.gz",
|
|
114
135
|
output_vars=[FV.WS, FV.WD, FV.TI, FV.RHO],
|
|
115
|
-
|
|
136
|
+
# fixed_vars={FV.WD: 270},
|
|
137
|
+
var2col={FV.WD: "WD", FV.WS: "WS", FV.TI: "TI", FV.RHO: "RHO"},
|
|
116
138
|
states_sel=range(240, 240 + args.n_states),
|
|
117
139
|
)
|
|
118
140
|
|
|
119
141
|
farm = foxes.WindFarm()
|
|
120
|
-
N = 3
|
|
121
142
|
foxes.input.farm_layout.add_grid(
|
|
122
143
|
farm,
|
|
123
144
|
xy_base=np.array([0.0, 0.0]),
|
|
124
145
|
step_vectors=np.array([[1000.0, 0], [0, 800.0]]),
|
|
125
146
|
steps=(N, N),
|
|
126
|
-
turbine_models=args.tmodels + [ttype.name],
|
|
147
|
+
turbine_models=ymodels + args.tmodels + [ttype.name],
|
|
127
148
|
)
|
|
128
149
|
|
|
129
150
|
if not args.nofig and args.show_layout:
|
|
@@ -143,6 +164,7 @@ if __name__ == "__main__":
|
|
|
143
164
|
rotor_model=args.rotor,
|
|
144
165
|
wake_models=args.wakes,
|
|
145
166
|
wake_frame=args.frame,
|
|
167
|
+
wake_deflection=args.deflection,
|
|
146
168
|
partial_wakes=args.pwakes,
|
|
147
169
|
mbook=mbook,
|
|
148
170
|
verbosity=0,
|
|
@@ -157,14 +179,15 @@ if __name__ == "__main__":
|
|
|
157
179
|
levels=None,
|
|
158
180
|
quiver_pars=dict(scale=0.01),
|
|
159
181
|
quiver_n=307,
|
|
160
|
-
xmin=-
|
|
161
|
-
ymin=-
|
|
162
|
-
xmax=
|
|
163
|
-
ymax=
|
|
182
|
+
xmin=-1000,
|
|
183
|
+
ymin=-1000,
|
|
184
|
+
xmax=4000,
|
|
185
|
+
ymax=3000,
|
|
164
186
|
vmin=0,
|
|
165
187
|
vmax=args.max_variable,
|
|
166
188
|
title=None,
|
|
167
189
|
animated=True,
|
|
190
|
+
rotor_color="red",
|
|
168
191
|
)
|
|
169
192
|
algo.plugins.append(anigen)
|
|
170
193
|
|
|
@@ -172,13 +172,12 @@ if __name__ == "__main__":
|
|
|
172
172
|
# power results
|
|
173
173
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
174
174
|
P = o.calc_mean_farm_power()
|
|
175
|
-
print(f"\nFarm power : {P/1000:.1f} MW")
|
|
176
|
-
print(f"Farm ambient power: {P0/1000:.1f} MW")
|
|
177
|
-
print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
|
|
175
|
+
print(f"\nFarm power : {P / 1000:.1f} MW")
|
|
176
|
+
print(f"Farm ambient power: {P0 / 1000:.1f} MW")
|
|
177
|
+
print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
|
|
178
178
|
print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh.")
|
|
179
179
|
|
|
180
180
|
if not args.nofig:
|
|
181
|
-
|
|
182
181
|
# horizontal flow plot
|
|
183
182
|
o = foxes.output.FlowPlots2D(algo, farm_results)
|
|
184
183
|
g = o.gen_states_fig_xy(
|
|
@@ -131,7 +131,7 @@ if __name__ == "__main__":
|
|
|
131
131
|
o = foxes.output.FarmResultsEval(farm_results)
|
|
132
132
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
133
133
|
P = o.calc_mean_farm_power()
|
|
134
|
-
print(f"\nFarm power : {P/1000:.1f} MW")
|
|
135
|
-
print(f"Farm ambient power: {P0/1000:.1f} MW")
|
|
136
|
-
print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
|
|
134
|
+
print(f"\nFarm power : {P / 1000:.1f} MW")
|
|
135
|
+
print(f"Farm ambient power: {P0 / 1000:.1f} MW")
|
|
136
|
+
print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
|
|
137
137
|
print(f"Annual farm yield : {o.calc_farm_yield(algo=algo):.2f} GWh")
|
|
@@ -25,7 +25,16 @@ if __name__ == "__main__":
|
|
|
25
25
|
parser.add_argument(
|
|
26
26
|
"-p", "--pwakes", help="The partial wakes models", default="centre", nargs="+"
|
|
27
27
|
)
|
|
28
|
-
parser.add_argument(
|
|
28
|
+
parser.add_argument(
|
|
29
|
+
"-d", "--deflection", help="The wake deflection", default="no_deflection"
|
|
30
|
+
)
|
|
31
|
+
parser.add_argument(
|
|
32
|
+
"-y",
|
|
33
|
+
"--yawm",
|
|
34
|
+
help="The uniform yaw misalignment value",
|
|
35
|
+
type=float,
|
|
36
|
+
default=None,
|
|
37
|
+
)
|
|
29
38
|
parser.add_argument(
|
|
30
39
|
"-w",
|
|
31
40
|
"--wakes",
|
|
@@ -45,7 +54,7 @@ if __name__ == "__main__":
|
|
|
45
54
|
parser.add_argument(
|
|
46
55
|
"-lm",
|
|
47
56
|
"--load_mode",
|
|
48
|
-
help="
|
|
57
|
+
help="Dataset load mode",
|
|
49
58
|
default="preload",
|
|
50
59
|
)
|
|
51
60
|
parser.add_argument("-e", "--engine", help="The engine", default="process")
|
|
@@ -75,7 +84,20 @@ if __name__ == "__main__":
|
|
|
75
84
|
ttype = foxes.models.turbine_types.PCtFile(args.turbine_file)
|
|
76
85
|
mbook.turbine_types[ttype.name] = ttype
|
|
77
86
|
|
|
78
|
-
|
|
87
|
+
# optionally set turbines in yaw:
|
|
88
|
+
N = int(args.n_turbines**0.5)
|
|
89
|
+
if args.yawm is None:
|
|
90
|
+
ymodels = []
|
|
91
|
+
else:
|
|
92
|
+
yawm = np.zeros((1, N * N), dtype=np.float64)
|
|
93
|
+
yawm[:, :N] = args.yawm
|
|
94
|
+
mbook.turbine_models["set_yawm"] = foxes.models.turbine_models.SetFarmVars(
|
|
95
|
+
pre_rotor=True
|
|
96
|
+
)
|
|
97
|
+
mbook.turbine_models["set_yawm"].add_var(FV.YAWM, yawm)
|
|
98
|
+
ymodels = ["set_yawm"]
|
|
99
|
+
|
|
100
|
+
states = foxes.input.states.FieldData(
|
|
79
101
|
args.file_pattern,
|
|
80
102
|
states_coord="state",
|
|
81
103
|
x_coord="x",
|
|
@@ -86,17 +108,16 @@ if __name__ == "__main__":
|
|
|
86
108
|
var2ncvar={FV.WS: "ws", FV.WD: "wd"},
|
|
87
109
|
fixed_vars={FV.RHO: 1.225, FV.TI: 0.1},
|
|
88
110
|
load_mode=args.load_mode,
|
|
89
|
-
bounds_error=False,
|
|
111
|
+
interpn_pars=dict(bounds_error=False),
|
|
90
112
|
)
|
|
91
113
|
|
|
92
114
|
farm = foxes.WindFarm()
|
|
93
|
-
N = int(args.n_turbines**0.5)
|
|
94
115
|
foxes.input.farm_layout.add_grid(
|
|
95
116
|
farm,
|
|
96
117
|
xy_base=np.array([500.0, 500.0]),
|
|
97
118
|
step_vectors=np.array([[500.0, 0], [0, 500.0]]),
|
|
98
119
|
steps=(N, N),
|
|
99
|
-
turbine_models=args.tmodels + [ttype.name],
|
|
120
|
+
turbine_models=ymodels + args.tmodels + [ttype.name],
|
|
100
121
|
)
|
|
101
122
|
|
|
102
123
|
algo = foxes.algorithms.Downwind(
|
|
@@ -105,6 +126,7 @@ if __name__ == "__main__":
|
|
|
105
126
|
rotor_model=args.rotor,
|
|
106
127
|
wake_models=args.wakes,
|
|
107
128
|
wake_frame=args.wake_frame,
|
|
129
|
+
wake_deflection=args.deflection,
|
|
108
130
|
partial_wakes=args.pwakes,
|
|
109
131
|
mbook=mbook,
|
|
110
132
|
engine=args.engine,
|
|
@@ -136,6 +158,7 @@ if __name__ == "__main__":
|
|
|
136
158
|
xmax=2500,
|
|
137
159
|
ymin=0,
|
|
138
160
|
ymax=2500,
|
|
161
|
+
rotor_color="red",
|
|
139
162
|
):
|
|
140
163
|
plt.show()
|
|
141
164
|
plt.close(fig)
|
|
@@ -131,9 +131,9 @@ if __name__ == "__main__":
|
|
|
131
131
|
o = foxes.output.FarmResultsEval(farm_results)
|
|
132
132
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
133
133
|
P = o.calc_mean_farm_power()
|
|
134
|
-
print(f"\nFarm power : {P/1000:.1f} MW")
|
|
135
|
-
print(f"Farm ambient power: {P0/1000:.1f} MW")
|
|
136
|
-
print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
|
|
134
|
+
print(f"\nFarm power : {P / 1000:.1f} MW")
|
|
135
|
+
print(f"Farm ambient power: {P0 / 1000:.1f} MW")
|
|
136
|
+
print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
|
|
137
137
|
print(f"Annual farm yield : {o.calc_farm_yield(algo=algo):.2f} GWh")
|
|
138
138
|
|
|
139
139
|
if not args.nofig and args.calc_mean:
|