foxes 1.3__tar.gz → 1.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of foxes might be problematic. Click here for more details.
- {foxes-1.3/foxes.egg-info → foxes-1.4}/PKG-INFO +6 -15
- {foxes-1.3 → foxes-1.4}/README.md +1 -8
- {foxes-1.3 → foxes-1.4}/docs/source/conf.py +3 -3
- {foxes-1.3 → foxes-1.4}/examples/abl_states/run.py +2 -2
- {foxes-1.3 → foxes-1.4}/examples/compare_rotors_pwakes/run.py +1 -1
- {foxes-1.3 → foxes-1.4}/examples/compare_wakes/run.py +1 -2
- {foxes-1.3 → foxes-1.4}/examples/dyn_wakes/run.py +29 -6
- {foxes-1.3 → foxes-1.4}/examples/induction/run.py +3 -3
- {foxes-1.3 → foxes-1.4}/examples/multi_height/run.py +1 -1
- {foxes-1.3 → foxes-1.4}/examples/power_mask/run.py +2 -2
- {foxes-1.3 → foxes-1.4}/examples/quickstart/run.py +0 -1
- {foxes-1.3 → foxes-1.4}/examples/random_timeseries/run.py +3 -4
- {foxes-1.3 → foxes-1.4}/examples/scan_row/run.py +3 -3
- {foxes-1.3 → foxes-1.4}/examples/sequential/run.py +33 -10
- {foxes-1.3 → foxes-1.4}/examples/single_state/run.py +3 -4
- {foxes-1.3 → foxes-1.4}/examples/states_lookup_table/run.py +3 -3
- {foxes-1.3 → foxes-1.4}/examples/streamline_wakes/run.py +27 -4
- {foxes-1.3 → foxes-1.4}/examples/tab_file/run.py +3 -3
- {foxes-1.3 → foxes-1.4}/examples/timelines/run.py +29 -5
- {foxes-1.3 → foxes-1.4}/examples/timeseries/run.py +3 -3
- {foxes-1.3 → foxes-1.4}/examples/timeseries_slurm/run.py +3 -3
- {foxes-1.3 → foxes-1.4}/examples/wind_rose/run.py +3 -3
- {foxes-1.3 → foxes-1.4}/examples/yawed_wake/run.py +16 -8
- foxes-1.4/foxes/__init__.py +41 -0
- foxes-1.4/foxes/algorithms/__init__.py +11 -0
- foxes-1.4/foxes/algorithms/downwind/__init__.py +3 -0
- {foxes-1.3 → foxes-1.4}/foxes/algorithms/downwind/downwind.py +44 -12
- foxes-1.4/foxes/algorithms/downwind/models/__init__.py +6 -0
- {foxes-1.3 → foxes-1.4}/foxes/algorithms/downwind/models/farm_wakes_calc.py +11 -9
- {foxes-1.3 → foxes-1.4}/foxes/algorithms/downwind/models/init_farm_data.py +0 -1
- {foxes-1.3 → foxes-1.4}/foxes/algorithms/downwind/models/point_wakes_calc.py +7 -13
- {foxes-1.3 → foxes-1.4}/foxes/algorithms/downwind/models/set_amb_point_results.py +6 -6
- foxes-1.4/foxes/algorithms/iterative/__init__.py +8 -0
- {foxes-1.3 → foxes-1.4}/foxes/algorithms/iterative/iterative.py +1 -2
- foxes-1.4/foxes/algorithms/iterative/models/__init__.py +7 -0
- {foxes-1.3 → foxes-1.4}/foxes/algorithms/iterative/models/farm_wakes_calc.py +9 -5
- foxes-1.4/foxes/algorithms/sequential/__init__.py +4 -0
- foxes-1.4/foxes/algorithms/sequential/models/__init__.py +2 -0
- {foxes-1.3 → foxes-1.4}/foxes/algorithms/sequential/sequential.py +3 -4
- foxes-1.4/foxes/config/__init__.py +5 -0
- {foxes-1.3 → foxes-1.4}/foxes/constants.py +16 -0
- foxes-1.4/foxes/core/__init__.py +49 -0
- {foxes-1.3 → foxes-1.4}/foxes/core/algorithm.py +0 -1
- {foxes-1.3 → foxes-1.4}/foxes/core/data.py +19 -18
- {foxes-1.3 → foxes-1.4}/foxes/core/engine.py +9 -13
- {foxes-1.3 → foxes-1.4}/foxes/core/farm_controller.py +2 -2
- {foxes-1.3 → foxes-1.4}/foxes/core/ground_model.py +4 -13
- {foxes-1.3 → foxes-1.4}/foxes/core/model.py +5 -5
- {foxes-1.3 → foxes-1.4}/foxes/core/partial_wakes_model.py +147 -10
- {foxes-1.3 → foxes-1.4}/foxes/core/point_data_model.py +2 -3
- {foxes-1.3 → foxes-1.4}/foxes/core/rotor_model.py +3 -3
- {foxes-1.3 → foxes-1.4}/foxes/core/states.py +2 -3
- {foxes-1.3 → foxes-1.4}/foxes/core/turbine.py +2 -1
- foxes-1.4/foxes/core/wake_deflection.py +130 -0
- {foxes-1.3 → foxes-1.4}/foxes/core/wake_model.py +222 -9
- foxes-1.4/foxes/core/wake_superposition.py +245 -0
- {foxes-1.3 → foxes-1.4}/foxes/core/wind_farm.py +6 -6
- foxes-1.4/foxes/data/__init__.py +11 -0
- foxes-1.4/foxes/data/states/weibull_sectors_12.csv +13 -0
- foxes-1.4/foxes/data/states/weibull_sectors_12.nc +0 -0
- foxes-1.4/foxes/engines/__init__.py +16 -0
- {foxes-1.3 → foxes-1.4}/foxes/engines/dask.py +39 -14
- {foxes-1.3 → foxes-1.4}/foxes/engines/numpy.py +0 -3
- foxes-1.4/foxes/input/__init__.py +7 -0
- foxes-1.4/foxes/input/farm_layout/__init__.py +12 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/farm_layout/from_csv.py +1 -1
- {foxes-1.3 → foxes-1.4}/foxes/input/farm_layout/ring.py +0 -1
- foxes-1.4/foxes/input/states/__init__.py +29 -0
- foxes-1.4/foxes/input/states/create/__init__.py +3 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/states/field_data_nc.py +10 -24
- {foxes-1.3 → foxes-1.4}/foxes/input/states/multi_height.py +9 -6
- {foxes-1.3 → foxes-1.4}/foxes/input/states/one_point_flow.py +0 -4
- {foxes-1.3 → foxes-1.4}/foxes/input/states/single.py +1 -1
- {foxes-1.3 → foxes-1.4}/foxes/input/states/states_table.py +10 -7
- foxes-1.4/foxes/input/states/weibull_sectors.py +225 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/states/wrg_states.py +7 -5
- foxes-1.4/foxes/input/yaml/__init__.py +9 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/yaml/dict.py +19 -19
- foxes-1.4/foxes/input/yaml/windio/__init__.py +10 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/yaml/windio/read_attributes.py +2 -2
- {foxes-1.3 → foxes-1.4}/foxes/input/yaml/windio/read_farm.py +5 -5
- {foxes-1.3 → foxes-1.4}/foxes/input/yaml/windio/read_fields.py +4 -2
- {foxes-1.3 → foxes-1.4}/foxes/input/yaml/windio/read_site.py +52 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/yaml/windio/windio.py +1 -1
- foxes-1.4/foxes/models/__init__.py +20 -0
- foxes-1.4/foxes/models/axial_induction/__init__.py +2 -0
- foxes-1.4/foxes/models/farm_controllers/__init__.py +5 -0
- foxes-1.4/foxes/models/farm_models/__init__.py +5 -0
- foxes-1.4/foxes/models/ground_models/__init__.py +3 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/ground_models/wake_mirror.py +3 -3
- {foxes-1.3 → foxes-1.4}/foxes/models/model_book.py +175 -49
- foxes-1.4/foxes/models/partial_wakes/__init__.py +10 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/partial_wakes/axiwake.py +30 -5
- foxes-1.4/foxes/models/partial_wakes/centre.py +88 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/partial_wakes/rotor_points.py +41 -11
- {foxes-1.3 → foxes-1.4}/foxes/models/partial_wakes/segregated.py +2 -25
- {foxes-1.3 → foxes-1.4}/foxes/models/partial_wakes/top_hat.py +27 -2
- foxes-1.4/foxes/models/point_models/__init__.py +8 -0
- foxes-1.4/foxes/models/rotor_models/__init__.py +7 -0
- foxes-1.4/foxes/models/turbine_models/__init__.py +15 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_models/set_farm_vars.py +0 -1
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_types/PCt_file.py +0 -2
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_types/PCt_from_two.py +0 -2
- foxes-1.4/foxes/models/turbine_types/__init__.py +13 -0
- foxes-1.4/foxes/models/vertical_profiles/__init__.py +11 -0
- foxes-1.4/foxes/models/wake_deflections/__init__.py +3 -0
- foxes-1.3/foxes/models/wake_frames/yawed_wakes.py → foxes-1.4/foxes/models/wake_deflections/bastankhah2016.py +32 -111
- foxes-1.4/foxes/models/wake_deflections/jimenez.py +277 -0
- foxes-1.4/foxes/models/wake_deflections/no_deflection.py +94 -0
- foxes-1.4/foxes/models/wake_frames/__init__.py +10 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_frames/dynamic_wakes.py +12 -3
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_frames/rotor_wd.py +3 -1
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_frames/seq_dynamic_wakes.py +41 -7
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_frames/streamlines.py +8 -6
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_frames/timelines.py +9 -3
- foxes-1.4/foxes/models/wake_models/__init__.py +12 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/dist_sliced.py +50 -84
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/gaussian.py +20 -0
- foxes-1.4/foxes/models/wake_models/induction/__init__.py +9 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/induction/rankine_half_body.py +30 -71
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/induction/rathmann.py +65 -64
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/induction/self_similar.py +65 -68
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/induction/self_similar2020.py +0 -3
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/induction/vortex_sheet.py +71 -75
- foxes-1.4/foxes/models/wake_models/ti/__init__.py +6 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/ti/crespo_hernandez.py +5 -3
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/ti/iec_ti.py +6 -4
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/top_hat.py +58 -7
- foxes-1.4/foxes/models/wake_models/wind/__init__.py +10 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/wind/bastankhah14.py +25 -7
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/wind/bastankhah16.py +35 -3
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/wind/jensen.py +15 -2
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/wind/turbopark.py +28 -2
- foxes-1.4/foxes/models/wake_superpositions/__init__.py +22 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_superpositions/ti_linear.py +4 -4
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_superpositions/ti_max.py +4 -4
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_superpositions/ti_pow.py +4 -4
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_superpositions/ti_quadratic.py +4 -4
- foxes-1.4/foxes/models/wake_superpositions/wind_vector.py +257 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_superpositions/ws_linear.py +9 -10
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_superpositions/ws_max.py +8 -8
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_superpositions/ws_pow.py +8 -8
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_superpositions/ws_product.py +4 -4
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_superpositions/ws_quadratic.py +8 -8
- foxes-1.4/foxes/output/__init__.py +27 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/farm_layout.py +2 -2
- {foxes-1.3 → foxes-1.4}/foxes/output/farm_results_eval.py +15 -15
- foxes-1.4/foxes/output/flow_plots_2d/__init__.py +2 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/flow_plots_2d/get_fig.py +4 -2
- {foxes-1.3 → foxes-1.4}/foxes/output/rose_plot.py +3 -3
- foxes-1.4/foxes/output/seq_plugins/__init__.py +2 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/seq_plugins/seq_flow_ani_plugin.py +0 -3
- {foxes-1.3 → foxes-1.4}/foxes/output/seq_plugins/seq_wake_debug_plugin.py +0 -1
- {foxes-1.3 → foxes-1.4}/foxes/output/turbine_type_curves.py +7 -8
- foxes-1.4/foxes/utils/__init__.py +42 -0
- foxes-1.4/foxes/utils/abl/__init__.py +8 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/cubic_roots.py +1 -1
- {foxes-1.3 → foxes-1.4}/foxes/utils/data_book.py +4 -3
- {foxes-1.3 → foxes-1.4}/foxes/utils/dict.py +3 -3
- {foxes-1.3 → foxes-1.4}/foxes/utils/exec_python.py +5 -5
- {foxes-1.3 → foxes-1.4}/foxes/utils/factory.py +1 -3
- foxes-1.4/foxes/utils/geom2d/__init__.py +11 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/geopandas_utils.py +2 -2
- {foxes-1.3 → foxes-1.4}/foxes/utils/pandas_utils.py +4 -3
- {foxes-1.3 → foxes-1.4}/foxes/utils/tab_files.py +0 -1
- foxes-1.4/foxes/utils/weibull.py +28 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/wrg_utils.py +3 -1
- {foxes-1.3 → foxes-1.4}/foxes/utils/xarray_utils.py +9 -2
- {foxes-1.3 → foxes-1.4}/foxes/variables.py +67 -9
- {foxes-1.3 → foxes-1.4/foxes.egg-info}/PKG-INFO +6 -15
- {foxes-1.3 → foxes-1.4}/foxes.egg-info/SOURCES.txt +10 -3
- {foxes-1.3 → foxes-1.4}/foxes.egg-info/requires.txt +2 -5
- {foxes-1.3 → foxes-1.4}/pyproject.toml +4 -7
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6/PCt_files/flappy/run.py +2 -3
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6/PCt_files/test_PCt_files.py +1 -1
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6/abl_states/flappy/run.py +0 -1
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6/partial_top_hat/flappy/run.py +0 -1
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6/partial_top_hat/test_partial_top_hat.py +0 -2
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_linear_centre/test_row_Jensen_linear_centre.py +0 -1
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/test_row_Jensen_linear_tophat.py +0 -1
- {foxes-1.3 → foxes-1.4}/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.4}/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.4}/tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/test_row_Jensen_quadratic_centre.py +0 -1
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6_2/grid_rotors/flappy/run.py +0 -2
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/test_row_Bastankhah_Crespo.py +0 -1
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/flappy/run.py +0 -1
- {foxes-1.3 → foxes-1.4}/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/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-1.4}/LICENSE +0 -0
- {foxes-1.3 → foxes-1.4}/Logo_FOXES.svg +0 -0
- {foxes-1.3 → foxes-1.4}/MANIFEST.in +0 -0
- {foxes-1.3 → foxes-1.4}/examples/field_data_nc/run.py +0 -0
- {foxes-1.3 → foxes-1.4}/examples/sector_management/run.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/algorithms/downwind/models/reorder_farm_output.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/algorithms/downwind/models/set_amb_farm_results.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/algorithms/iterative/models/convergence.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/algorithms/iterative/models/urelax.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/algorithms/sequential/models/plugin.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/algorithms/sequential/models/seq_state.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/config/config.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/core/axial_induction_model.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/core/data_calc_model.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/core/farm_data_model.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/core/farm_model.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/core/turbine_model.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/core/turbine_type.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/core/vertical_profile.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/core/wake_frame.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/farms/__init__.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/farms/test_farm_67.csv +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/parse.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/power_ct_curves/DTU-10MW-D178d3-H119.csv +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/power_ct_curves/IEA-15MW-D240-H150.csv +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/power_ct_curves/IWT-7d5MW-D164-H100.csv +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/power_ct_curves/NREL-5MW-D126-H90.csv +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/power_ct_curves/__init__.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/states/WRF-Timeseries-3000.nc +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/states/WRF-Timeseries-4464.csv.gz +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/states/__init__.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/states/abl_states_6000.csv.gz +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/states/timeseries_100.csv.gz +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/states/timeseries_3000.csv.gz +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/states/timeseries_8000.csv.gz +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/states/wind_rose_bremen.csv +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/states/wind_rotation.nc +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/states/winds100.tab +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/data/static_data.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/engines/default.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/engines/futures.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/engines/mpi.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/engines/multiprocess.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/engines/pool.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/engines/ray.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/engines/single.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/farm_layout/from_df.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/farm_layout/from_file.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/farm_layout/from_json.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/farm_layout/from_random.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/farm_layout/grid.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/farm_layout/row.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/states/create/random_abl_states.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/states/create/random_timeseries.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/states/scan.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/yaml/windio/read_outputs.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/input/yaml/yaml.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/axial_induction/betz.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/axial_induction/madsen.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/farm_controllers/basic.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/farm_models/turbine2farm.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/ground_models/no_ground.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/partial_wakes/grid.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/point_models/set_uniform_data.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/point_models/tke2ti.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/point_models/ustar2ti.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/point_models/wake_deltas.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/rotor_models/centre.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/rotor_models/grid.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/rotor_models/levels.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_models/calculator.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_models/kTI_model.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_models/lookup_table.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_models/power_mask.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_models/rotor_centre_calc.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_models/sector_management.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_models/table_factors.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_models/thrust2ct.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_models/yaw2yawm.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_models/yawm2yaw.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_types/CpCt_file.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_types/CpCt_from_two.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_types/TBL_file.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_types/lookup.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_types/null_type.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_types/wsrho2PCt_from_two.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/turbine_types/wsti2PCt_from_two.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/vertical_profiles/abl_log_neutral_ws.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/vertical_profiles/abl_log_stable_ws.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/vertical_profiles/abl_log_unstable_ws.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/vertical_profiles/abl_log_ws.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/vertical_profiles/data_profile.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/vertical_profiles/sheared_ws.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/vertical_profiles/uniform.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_frames/farm_order.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/models/wake_models/axisymmetric.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/animation.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/calc_points.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/flow_plots_2d/flow_plots.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/grids.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/output.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/plt.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/results_writer.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/rotor_point_plots.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/slice_data.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/slices_data.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/state_turbine_map.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/output/state_turbine_table.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/abl/neutral.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/abl/sheared.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/abl/stable.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/abl/unstable.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/dev_utils.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/geom2d/area_geometry.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/geom2d/circle.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/geom2d/example_intersection.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/geom2d/example_union.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/geom2d/half_plane.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/geom2d/polygon.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/load.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/random_xy.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/regularize.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/subclasses.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/two_circles.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes/utils/wind_dir.py +0 -0
- {foxes-1.3 → foxes-1.4}/foxes.egg-info/dependency_links.txt +0 -0
- {foxes-1.3 → foxes-1.4}/foxes.egg-info/entry_points.txt +0 -0
- {foxes-1.3 → foxes-1.4}/foxes.egg-info/top_level.txt +0 -0
- {foxes-1.3 → foxes-1.4}/setup.cfg +0 -0
- {foxes-1.3 → foxes-1.4}/tests/0_consistency/iterative/test_iterative.py +0 -0
- {foxes-1.3 → foxes-1.4}/tests/0_consistency/partial_wakes/test_partial_wakes.py +0 -0
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6/abl_states/test_abl_states.py +0 -0
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_linear_centre/flappy/run.py +0 -0
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat/flappy/run.py +0 -0
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2005/flappy/run.py +0 -0
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_linear_tophat_IECTI2019/flappy/run.py +0 -0
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6/row_Jensen_quadratic_centre/flappy/run.py +0 -0
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6_2/grid_rotors/test_grid_rotors.py +0 -0
- {foxes-1.3 → foxes-1.4}/tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/flappy/run.py +0 -0
- {foxes-1.3 → foxes-1.4}/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.4
|
|
4
4
|
Summary: Farm Optimization and eXtended yield Evaluation Software
|
|
5
5
|
Author: Jonas Schulte
|
|
6
6
|
Maintainer: Jonas Schulte
|
|
@@ -56,16 +56,15 @@ Requires-Dist: scipy
|
|
|
56
56
|
Requires-Dist: cycler
|
|
57
57
|
Requires-Dist: tqdm
|
|
58
58
|
Requires-Dist: pyyaml
|
|
59
|
+
Requires-Dist: h5netcdf
|
|
59
60
|
Provides-Extra: opt
|
|
60
61
|
Requires-Dist: foxes-opt; extra == "opt"
|
|
61
62
|
Provides-Extra: dask
|
|
62
|
-
Requires-Dist: h5netcdf; extra == "dask"
|
|
63
63
|
Requires-Dist: dask; extra == "dask"
|
|
64
64
|
Requires-Dist: distributed; extra == "dask"
|
|
65
65
|
Requires-Dist: dask-jobqueue; extra == "dask"
|
|
66
66
|
Requires-Dist: setuptools; extra == "dask"
|
|
67
67
|
Provides-Extra: eng
|
|
68
|
-
Requires-Dist: h5netcdf; extra == "eng"
|
|
69
68
|
Requires-Dist: multiprocess; extra == "eng"
|
|
70
69
|
Requires-Dist: dask; extra == "eng"
|
|
71
70
|
Requires-Dist: distributed; extra == "eng"
|
|
@@ -74,7 +73,6 @@ Requires-Dist: setuptools; extra == "eng"
|
|
|
74
73
|
Requires-Dist: mpi4py; extra == "eng"
|
|
75
74
|
Requires-Dist: ray; extra == "eng"
|
|
76
75
|
Provides-Extra: eng0
|
|
77
|
-
Requires-Dist: h5netcdf; extra == "eng0"
|
|
78
76
|
Requires-Dist: multiprocess; extra == "eng0"
|
|
79
77
|
Requires-Dist: dask; extra == "eng0"
|
|
80
78
|
Requires-Dist: distributed; extra == "eng0"
|
|
@@ -84,7 +82,6 @@ Requires-Dist: ray; extra == "eng0"
|
|
|
84
82
|
Provides-Extra: test
|
|
85
83
|
Requires-Dist: flake8; extra == "test"
|
|
86
84
|
Requires-Dist: pytest; extra == "test"
|
|
87
|
-
Requires-Dist: h5netcdf; extra == "test"
|
|
88
85
|
Provides-Extra: doc
|
|
89
86
|
Requires-Dist: setuptools; extra == "doc"
|
|
90
87
|
Requires-Dist: sphinx; extra == "doc"
|
|
@@ -101,7 +98,8 @@ Requires-Dist: flake8; extra == "dev"
|
|
|
101
98
|
Requires-Dist: pytest; extra == "dev"
|
|
102
99
|
Requires-Dist: jupyter; extra == "dev"
|
|
103
100
|
Requires-Dist: objsize; extra == "dev"
|
|
104
|
-
Requires-Dist:
|
|
101
|
+
Requires-Dist: ruff; extra == "dev"
|
|
102
|
+
Dynamic: license-file
|
|
105
103
|
|
|
106
104
|
# Welcome to foxes
|
|
107
105
|
|
|
@@ -161,14 +159,7 @@ Evaluation Software"`
|
|
|
161
159
|
|
|
162
160
|
## Requirements
|
|
163
161
|
|
|
164
|
-
The supported Python versions are
|
|
165
|
-
|
|
166
|
-
- `Python 3.8`
|
|
167
|
-
- `Python 3.9`
|
|
168
|
-
- `Python 3.10`
|
|
169
|
-
- `Python 3.11`
|
|
170
|
-
- `Python 3.12`
|
|
171
|
-
- `Python 3.13`
|
|
162
|
+
The supported Python versions are `Python 3.8`...`3.13`.
|
|
172
163
|
|
|
173
164
|
## Installation
|
|
174
165
|
|
|
@@ -56,14 +56,7 @@ Evaluation Software"`
|
|
|
56
56
|
|
|
57
57
|
## Requirements
|
|
58
58
|
|
|
59
|
-
The supported Python versions are
|
|
60
|
-
|
|
61
|
-
- `Python 3.8`
|
|
62
|
-
- `Python 3.9`
|
|
63
|
-
- `Python 3.10`
|
|
64
|
-
- `Python 3.11`
|
|
65
|
-
- `Python 3.12`
|
|
66
|
-
- `Python 3.13`
|
|
59
|
+
The supported Python versions are `Python 3.8`...`3.13`.
|
|
67
60
|
|
|
68
61
|
## Installation
|
|
69
62
|
|
|
@@ -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,6 +84,19 @@ if __name__ == "__main__":
|
|
|
75
84
|
ttype = foxes.models.turbine_types.PCtFile(args.turbine_file)
|
|
76
85
|
mbook.turbine_types[ttype.name] = ttype
|
|
77
86
|
|
|
87
|
+
# optionally set turbines in yaw:
|
|
88
|
+
N = int(args.n_turbines**0.5)
|
|
89
|
+
if args.yawm is None:
|
|
90
|
+
ymodels = []
|
|
91
|
+
else:
|
|
92
|
+
yawm = np.zeros((1, N * N), dtype=np.float64)
|
|
93
|
+
yawm[:, :N] = args.yawm
|
|
94
|
+
mbook.turbine_models["set_yawm"] = foxes.models.turbine_models.SetFarmVars(
|
|
95
|
+
pre_rotor=True
|
|
96
|
+
)
|
|
97
|
+
mbook.turbine_models["set_yawm"].add_var(FV.YAWM, yawm)
|
|
98
|
+
ymodels = ["set_yawm"]
|
|
99
|
+
|
|
78
100
|
states = foxes.input.states.FieldDataNC(
|
|
79
101
|
args.file_pattern,
|
|
80
102
|
states_coord="state",
|
|
@@ -90,13 +112,12 @@ if __name__ == "__main__":
|
|
|
90
112
|
)
|
|
91
113
|
|
|
92
114
|
farm = foxes.WindFarm()
|
|
93
|
-
N = int(args.n_turbines**0.5)
|
|
94
115
|
foxes.input.farm_layout.add_grid(
|
|
95
116
|
farm,
|
|
96
117
|
xy_base=np.array([500.0, 500.0]),
|
|
97
118
|
step_vectors=np.array([[500.0, 0], [0, 500.0]]),
|
|
98
119
|
steps=(N, N),
|
|
99
|
-
turbine_models=args.tmodels + [ttype.name],
|
|
120
|
+
turbine_models=ymodels + args.tmodels + [ttype.name],
|
|
100
121
|
)
|
|
101
122
|
|
|
102
123
|
algo = foxes.algorithms.Downwind(
|
|
@@ -105,6 +126,7 @@ if __name__ == "__main__":
|
|
|
105
126
|
rotor_model=args.rotor,
|
|
106
127
|
wake_models=args.wakes,
|
|
107
128
|
wake_frame=args.wake_frame,
|
|
129
|
+
wake_deflection=args.deflection,
|
|
108
130
|
partial_wakes=args.pwakes,
|
|
109
131
|
mbook=mbook,
|
|
110
132
|
engine=args.engine,
|
|
@@ -136,6 +158,7 @@ if __name__ == "__main__":
|
|
|
136
158
|
xmax=2500,
|
|
137
159
|
ymin=0,
|
|
138
160
|
ymax=2500,
|
|
161
|
+
rotor_color="red",
|
|
139
162
|
):
|
|
140
163
|
plt.show()
|
|
141
164
|
plt.close(fig)
|
|
@@ -131,9 +131,9 @@ if __name__ == "__main__":
|
|
|
131
131
|
o = foxes.output.FarmResultsEval(farm_results)
|
|
132
132
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
133
133
|
P = o.calc_mean_farm_power()
|
|
134
|
-
print(f"\nFarm power : {P/1000:.1f} MW")
|
|
135
|
-
print(f"Farm ambient power: {P0/1000:.1f} MW")
|
|
136
|
-
print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
|
|
134
|
+
print(f"\nFarm power : {P / 1000:.1f} MW")
|
|
135
|
+
print(f"Farm ambient power: {P0 / 1000:.1f} MW")
|
|
136
|
+
print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
|
|
137
137
|
print(f"Annual farm yield : {o.calc_farm_yield(algo=algo):.2f} GWh")
|
|
138
138
|
|
|
139
139
|
if not args.nofig and args.calc_mean:
|
|
@@ -66,7 +66,6 @@ if __name__ == "__main__":
|
|
|
66
66
|
parser.add_argument(
|
|
67
67
|
"-p", "--pwakes", help="The partial wakes models", default=None, nargs="+"
|
|
68
68
|
)
|
|
69
|
-
parser.add_argument("-sc", "--scheduler", help="The scheduler choice", default=None)
|
|
70
69
|
parser.add_argument(
|
|
71
70
|
"-w",
|
|
72
71
|
"--wakes",
|
|
@@ -75,6 +74,16 @@ if __name__ == "__main__":
|
|
|
75
74
|
nargs="+",
|
|
76
75
|
)
|
|
77
76
|
parser.add_argument("-f", "--frame", help="The wake frame", default="timelines")
|
|
77
|
+
parser.add_argument(
|
|
78
|
+
"-d", "--deflection", help="The wake deflection", default="no_deflection"
|
|
79
|
+
)
|
|
80
|
+
parser.add_argument(
|
|
81
|
+
"-y",
|
|
82
|
+
"--yawm",
|
|
83
|
+
help="The uniform yaw misalignment value",
|
|
84
|
+
type=float,
|
|
85
|
+
default=None,
|
|
86
|
+
)
|
|
78
87
|
parser.add_argument(
|
|
79
88
|
"-m", "--tmodels", help="The turbine models", default=[], nargs="+"
|
|
80
89
|
)
|
|
@@ -111,6 +120,19 @@ if __name__ == "__main__":
|
|
|
111
120
|
ttype = foxes.models.turbine_types.PCtFile(args.turbine_file)
|
|
112
121
|
mbook.turbine_types[ttype.name] = ttype
|
|
113
122
|
|
|
123
|
+
# optionally set turbines in yaw:
|
|
124
|
+
N = int(args.n_turbines**0.5)
|
|
125
|
+
if args.yawm is None:
|
|
126
|
+
ymodels = []
|
|
127
|
+
else:
|
|
128
|
+
yawm = np.zeros((1, N * N), dtype=np.float64)
|
|
129
|
+
yawm[:, :N] = args.yawm
|
|
130
|
+
mbook.turbine_models["set_yawm"] = foxes.models.turbine_models.SetFarmVars(
|
|
131
|
+
pre_rotor=True
|
|
132
|
+
)
|
|
133
|
+
mbook.turbine_models["set_yawm"].add_var(FV.YAWM, yawm)
|
|
134
|
+
ymodels = ["set_yawm"]
|
|
135
|
+
|
|
114
136
|
if not args.background:
|
|
115
137
|
States = foxes.input.states.Timeseries
|
|
116
138
|
kwargs = {}
|
|
@@ -134,7 +156,7 @@ if __name__ == "__main__":
|
|
|
134
156
|
xy_base=np.array([0.0, 0.0]),
|
|
135
157
|
step_vectors=np.array([[1000.0, 0], [0, 800.0]]),
|
|
136
158
|
steps=(N, N),
|
|
137
|
-
turbine_models=args.tmodels + [ttype.name],
|
|
159
|
+
turbine_models=ymodels + args.tmodels + [ttype.name],
|
|
138
160
|
)
|
|
139
161
|
|
|
140
162
|
if not args.nofig and args.show_layout:
|
|
@@ -148,6 +170,7 @@ if __name__ == "__main__":
|
|
|
148
170
|
rotor_model=args.rotor,
|
|
149
171
|
wake_models=args.wakes,
|
|
150
172
|
wake_frame=args.frame,
|
|
173
|
+
wake_deflection=args.deflection,
|
|
151
174
|
partial_wakes=args.pwakes,
|
|
152
175
|
mbook=mbook,
|
|
153
176
|
engine=args.engine,
|
|
@@ -196,9 +219,9 @@ if __name__ == "__main__":
|
|
|
196
219
|
# power results
|
|
197
220
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
198
221
|
P = o.calc_mean_farm_power()
|
|
199
|
-
print(f"\nFarm power : {P/1000:.1f} MW")
|
|
200
|
-
print(f"Farm ambient power: {P0/1000:.1f} MW")
|
|
201
|
-
print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
|
|
222
|
+
print(f"\nFarm power : {P / 1000:.1f} MW")
|
|
223
|
+
print(f"Farm ambient power: {P0 / 1000:.1f} MW")
|
|
224
|
+
print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
|
|
202
225
|
|
|
203
226
|
if not args.nofig:
|
|
204
227
|
sts = np.arange(farm_results.sizes["state"])
|
|
@@ -232,6 +255,7 @@ if __name__ == "__main__":
|
|
|
232
255
|
ret_im=True,
|
|
233
256
|
title=None,
|
|
234
257
|
animated=True,
|
|
258
|
+
rotor_color="red",
|
|
235
259
|
)
|
|
236
260
|
)
|
|
237
261
|
anim.add_generator(
|
|
@@ -177,9 +177,9 @@ if __name__ == "__main__":
|
|
|
177
177
|
# power results
|
|
178
178
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
179
179
|
P = o.calc_mean_farm_power()
|
|
180
|
-
print(f"\nFarm power : {P/1000:.1f} MW")
|
|
181
|
-
print(f"Farm ambient power: {P0/1000:.1f} MW")
|
|
182
|
-
print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
|
|
180
|
+
print(f"\nFarm power : {P / 1000:.1f} MW")
|
|
181
|
+
print(f"Farm ambient power: {P0 / 1000:.1f} MW")
|
|
182
|
+
print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
|
|
183
183
|
print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh")
|
|
184
184
|
|
|
185
185
|
engine.finalize()
|
|
@@ -179,7 +179,7 @@ if __name__ == "__main__":
|
|
|
179
179
|
# power results
|
|
180
180
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
181
181
|
P = o.calc_mean_farm_power()
|
|
182
|
-
print(f"\nFarm power : {P/1000:.1f} MW")
|
|
183
|
-
print(f"Farm ambient power: {P0/1000:.1f} MW")
|
|
184
|
-
print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
|
|
182
|
+
print(f"\nFarm power : {P / 1000:.1f} MW")
|
|
183
|
+
print(f"Farm ambient power: {P0 / 1000:.1f} MW")
|
|
184
|
+
print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
|
|
185
185
|
print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh")
|
|
@@ -130,9 +130,9 @@ if __name__ == "__main__":
|
|
|
130
130
|
o = foxes.output.FarmResultsEval(farm_results)
|
|
131
131
|
P0 = o.calc_mean_farm_power(ambient=True)
|
|
132
132
|
P = o.calc_mean_farm_power()
|
|
133
|
-
print(f"\nFarm power : {P/1000:.1f} MW")
|
|
134
|
-
print(f"Farm ambient power: {P0/1000:.1f} MW")
|
|
135
|
-
print(f"Farm efficiency : {o.calc_farm_efficiency()*100:.2f} %")
|
|
133
|
+
print(f"\nFarm power : {P / 1000:.1f} MW")
|
|
134
|
+
print(f"Farm ambient power: {P0 / 1000:.1f} MW")
|
|
135
|
+
print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
|
|
136
136
|
print(f"Annual farm yield : {o.calc_farm_yield(algo=algo):.2f} GWh")
|
|
137
137
|
|
|
138
138
|
if not args.nofig and args.calc_mean:
|