rafmudaf-floris 4.6.4.post1.dev6__tar.gz → 4.6.4.post1.dev8__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.
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/PKG-INFO +265 -2
- rafmudaf_floris-4.6.4.post1.dev8/README.md +445 -0
- rafmudaf_floris-4.6.4.post1.dev8/examples/gradient_layout_optimization.py +610 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/cpp_core.py +7 -6
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/pyproject.toml +1 -1
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/rafmudaf_floris.egg-info/PKG-INFO +265 -2
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/rafmudaf_floris.egg-info/SOURCES.txt +1 -0
- rafmudaf_floris-4.6.4.post1.dev6/README.md +0 -182
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.codecov.yml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/dependabot.yml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/workflows/check-working-examples.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/workflows/continuous-integration-workflow.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/workflows/cpp-backend-tests.yml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/workflows/deploy-pages.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/workflows/python-publish.yml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/workflows/quality-metrics-workflow.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.gitignore +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.pre-commit-config.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/CONTRIBUTING.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/LICENSE.txt +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/benchmarks/bench.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/.nojekyll +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/_config.yml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/_toc.yml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/advanced_concepts.ipynb +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/api_docs.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/architecture.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/bibliography.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/cc.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/code_quality.ipynb +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/dev_guide.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/docs_image.png +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/empirical_gauss_model.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/floating_wind_turbine.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/floris_models.ipynb +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/gch.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/heterogeneous_map.ipynb +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/index.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/input_reference_main.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/input_reference_turbine.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/installation.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/intro_concepts.ipynb +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/jensen.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/layout_optimization.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/multidimensional_wind_turbine.ipynb +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/nrel_5MW.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/operation_models_user.ipynb +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/plot_complex_docs.png +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/powerthrust_helix.png +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/references.bib +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/turbine_library.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/turbine_models.ipynb +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/v3_to_v4.md +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/wake_models.ipynb +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/wind_data_user.ipynb +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/001_opening_floris_computing_power.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/002_visualizations.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/003_wind_data_objects.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/004_set.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/005_getting_power.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/006_get_farm_aep.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/007_sweeping_variables.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/008_uncertain_models.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/009_parallel_models.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/010_compare_farm_power_with_neighbor.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/_convert_examples_to_notebooks.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_optimization/001_opt_yaw_single_ws.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_optimization/002_opt_yaw_single_ws_uncertain.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_optimization/003_opt_yaw_multiple_ws.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_optimization/004_optimize_yaw_aep.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_optimization/005_optimize_yaw_aep_parallel.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_optimization/006_compare_yaw_optimizers.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_optimization/007_optimize_yaw_with_neighbor_farms.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_optimization/008_optimize_yaw_with_disabled_turbines.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_types/001_derating_control.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_types/002_disable_turbines.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_types/003_setting_yaw_and_disabling.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_types/004_helix_active_wake_mixing.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_types/005_peak_shaving.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_emgauss/001_empirical_gauss_velocity_deficit_parameters.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_emgauss/002_empirical_gauss_deflection_parameters.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_floating/001_floating_turbine_models.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_floating/002_floating_vs_fixedbottom_farm.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_floating/003_tilt_driven_vertical_wake_deflection.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_get_flow/001_extract_wind_speed_at_turbines.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_get_flow/002_extract_wind_speed_at_points.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_get_flow/003_extract_turbulence_intensity_at_points.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_get_flow/004_plot_velocity_deficit_profiles.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_heterogeneous/001_heterogeneous_inflow_single.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_heterogeneous/002_heterogeneous_using_wind_data.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_heterogeneous/003_heterogeneous_speedup_by_wd_and_ws.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_heterogeneous/004_heterogeneous_2d_and_3d.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_layout_optimization/001_optimize_layout.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_layout_optimization/002_optimize_layout_with_heterogeneity.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_layout_optimization/003_genetic_random_search.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_layout_optimization/004_generate_gridded_layout.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_layout_optimization/005_layout_optimization_complex_boundary.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_load_optimization/001_lti_and_voc.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_load_optimization/002_row_opt_example.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_multidim/001_multi_dimensional_cp_ct.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_multidim/002_multi_dimensional_cp_ct_2Hs.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_multidim/003_multi_dimensional_cp_ct_TI.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_operation_models/001_compare_yaw_loss.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_turbine/001_reference_turbines.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_turbine/002_multiple_turbine_types.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_turbine/003_specify_turbine_power_curve.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_turbopark/001_compare_turbopark_implementations.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_turbopark/comparison_data/Rowpark_Orsted.csv +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_turbopark/comparison_data/WindDirection_Sweep_Orsted.csv +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_uncertain/001_uncertain_model_params.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_uncertain/002_approx_floris_model.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_uncertain/003_uncertain_model_with_parallelization.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_visualizations/001_layout_visualizations.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_visualizations/002_visualize_y_cut_plane.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_visualizations/003_visualize_cross_plane.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_visualizations/004_visualize_rotor_values.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_visualizations/005_visualize_flow_by_sweeping_turbines.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_wind_data/001_wind_data_comparisons.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_wind_data/002_generate_ti.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_wind_data/003_generate_value.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_wind_resource_grid/000_generate_example_wrg.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_wind_resource_grid/001_wind_rose_wrg.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_wind_resource_grid/002_set_floris_with_wrg.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_wind_resource_grid/003_wrg_compar_layout_optimization.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_wind_resource_grid/wrg_example.wrg +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/cc.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/emgauss.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/emgauss_helix.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/gch.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/gch_heterogeneous_inflow.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/gch_multi_dim_cp_ct.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/gch_multi_dim_cp_ct_TI.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/gch_multiple_turbine_types.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/jensen.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/turbine_files/iea_15MW_multi_dim_TI.csv +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/turbine_files/iea_15MW_multi_dim_TI.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/turbopark.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/turbopark_cubature.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/turboparkgauss.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/turboparkgauss_cubature.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/wind_rose.csv +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/emgauss_fixed.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/emgauss_floating.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/emgauss_floating_fixedtilt15.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/emgauss_floating_fixedtilt5.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/gch_fixed.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/gch_floating.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/gch_floating_defined_floating.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/turbine_files/nrel_5MW_fixed.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/turbine_files/nrel_5MW_floating.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/turbine_files/nrel_5MW_floating_defined_floating.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/turbine_files/nrel_5MW_floating_fixedtilt15.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/turbine_files/nrel_5MW_floating_fixedtilt5.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/convert_floris_input_v3_to_v4.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/convert_turbine_v3_to_v4.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/base.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/core.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/farm.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/flow_field.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/grid.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/rotor_velocity.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/solver.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/turbine/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/turbine/controller_dependent_operation_model.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/turbine/operation_models.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/turbine/turbine.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/turbine/unified_momentum_model.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_combination/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_combination/fls.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_combination/max.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_combination/sosfs.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_deflection/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_deflection/empirical_gauss.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_deflection/gauss.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_deflection/jimenez.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_deflection/none.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_turbulence/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_turbulence/crespo_hernandez.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_turbulence/none.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_turbulence/wake_induced_mixing.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/cumulative_gauss_curl.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/empirical_gauss.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/gauss.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/jensen.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/none.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/turbopark.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/turbopark_lookup_table.mat +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/turboparkgauss.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/cut_plane.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/default_inputs.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/floris_model.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/flow_visualization.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/heterogeneous_map.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/layout_visualization.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/logging_manager.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/layout_optimization/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/layout_optimization/layout_optimization_base.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/layout_optimization/layout_optimization_boundary_grid.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/layout_optimization/layout_optimization_gridded.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/layout_optimization/layout_optimization_pyoptsparse.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/layout_optimization/layout_optimization_pyoptsparse_spread.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/layout_optimization/layout_optimization_random_search.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/layout_optimization/layout_optimization_scipy.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/load_optimization/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/load_optimization/load_optimization.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/other/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/other/boundary_grid.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/yaw_optimization/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/yaw_optimization/yaw_optimization_base.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/yaw_optimization/yaw_optimization_tools.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/yaw_optimization/yaw_optimizer_geometric.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/yaw_optimization/yaw_optimizer_scipy.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/yaw_optimization/yaw_optimizer_sr.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/par_floris_model.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/parallel_floris_model.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/demo_cp_ct_surfaces/iea_10MW_demo_cp_ct_surface.npz +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/demo_cp_ct_surfaces/iea_15MW_demo_cp_ct_surface.npz +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/demo_cp_ct_surfaces/nrel_5MW_demo_cp_ct_surface.npz +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/iea_10MW.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/iea_15MW.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/iea_15MW_floating_multi_dim_cp_ct.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/iea_15MW_multi_dim_TI_u.csv +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/iea_15MW_multi_dim_Tp_Hs.csv +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/iea_15MW_multi_dim_cp_ct.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/iea_22MW.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/nrel_5MW.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/turbine_previewer.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/turbine_utilities.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/type_dec.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/uncertain_floris_model.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/utilities.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/wind_data.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/profiling/conftest.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/profiling/linux_perf.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/profiling/profiling.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/profiling/quality_metrics.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/profiling/serial_vectorize.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/profiling/timing.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/rafmudaf_floris.egg-info/dependency_links.txt +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/rafmudaf_floris.egg-info/requires.txt +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/rafmudaf_floris.egg-info/top_level.txt +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/setup.cfg +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/base_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/conftest.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/controller_dependent_operation_model_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/convert_v3_to_v4_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/core_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/__init__.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/iea_15MW_multi_dim_TI.csv +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/input_full.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/nrel_5MW.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/nrel_5MW_custom.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/wind_rose.csv +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/wind_ti_rose.csv +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/wrg_test.wrg +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/farm_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/floris_model_integration_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/flow_field_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/geometric_yaw_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/heterogeneous_map_integration_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/layout_optimization_integration_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/layout_visualization_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/load_optimization_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/par_floris_model_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/parallel_floris_model_integration_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/cumulative_curl_regression_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/empirical_gauss_regression_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/gauss_regression_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/jensen_jimenez_regression_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/none_regression_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/random_search_layout_opt_regression_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/scipy_layout_opt_regression.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/turbopark_regression_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/turboparkgauss_regression_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/turbulence_models_regression_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/yaw_optimization_regression_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/rotor_velocity_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/serial_refine_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/turbine_grid_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/turbine_multi_dim_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/turbine_operation_models_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/turbine_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/turbine_utilities_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/turboparkgauss_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/type_dec_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/uncertain_floris_model_integration_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/unified_momentum_operation_model_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/utilities_unit_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/v3_to_v4_convert_test/gch.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/v3_to_v4_convert_test/nrel_5MW_v3.yaml +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/wake_unit_tests.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/wind_data_integration_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/wind_rose_wrg_test.py +0 -0
- {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/yaw_optimization_integration_test.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rafmudaf-floris
|
|
3
|
-
Version: 4.6.4.post1.
|
|
3
|
+
Version: 4.6.4.post1.dev8
|
|
4
4
|
Summary: A controls-oriented engineering wake model.
|
|
5
5
|
Author-email: Rafael Mudafort <rafael@clementinescientific.com>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -42,7 +42,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
42
42
|
Classifier: Programming Language :: Python :: 3.13
|
|
43
43
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
44
44
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
45
|
-
Requires-Python: <3.
|
|
45
|
+
Requires-Python: <3.15,>=3.10
|
|
46
46
|
Description-Content-Type: text/markdown
|
|
47
47
|
License-File: LICENSE.txt
|
|
48
48
|
Requires-Dist: attrs
|
|
@@ -71,6 +71,269 @@ Requires-Dist: ruff~=0.9; extra == "develop"
|
|
|
71
71
|
Requires-Dist: isort<8,>=5; extra == "develop"
|
|
72
72
|
Dynamic: license-file
|
|
73
73
|
|
|
74
|
+
# FLORAF
|
|
75
|
+
|
|
76
|
+
FLORAF is a compiled backend alternative that plugs into FLORIS to enable automatic gradients
|
|
77
|
+
and GPU acceleration with Torch.
|
|
78
|
+
|
|
79
|
+
**Installation**
|
|
80
|
+
|
|
81
|
+
Using Python 3.10 - 3.13, install "floraf": `pip install floraf`.
|
|
82
|
+
|
|
83
|
+
This will install the appropriate binary wheel which includes:
|
|
84
|
+
- Compiled C++ backend
|
|
85
|
+
- FLORAF Python code that interfaces the C++ backend to FLORIS
|
|
86
|
+
- Fork of FLORIS that includes an interface to the FLORAF backend
|
|
87
|
+
|
|
88
|
+
The FLORIS fork is still installed as "floris" and it is forked from v4.6.4.
|
|
89
|
+
You can import FLORIS and use it the same as NREL/FLORIS v4.6.4.
|
|
90
|
+
|
|
91
|
+
**License**
|
|
92
|
+
|
|
93
|
+
Add your license string to one of the following options.
|
|
94
|
+
|
|
95
|
+
Environment variable:
|
|
96
|
+
`export FLORAF_LICENSE_KEY=license_key`
|
|
97
|
+
|
|
98
|
+
File:
|
|
99
|
+
Either set the `FLORAF_LICENSE_FILE` environment variable to the path to the license file,
|
|
100
|
+
or create set the license key in `~/.floraf/license.key`.
|
|
101
|
+
The license file should contain only the license key.
|
|
102
|
+
|
|
103
|
+
**Usage**
|
|
104
|
+
|
|
105
|
+
A comparison with the default SLSQP-based layout optimization is available at
|
|
106
|
+
`examples/gradient_layout_optimization.py`.
|
|
107
|
+
Below is a reduced form of that example.
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
|
|
111
|
+
import time
|
|
112
|
+
|
|
113
|
+
import numpy as np
|
|
114
|
+
import torch
|
|
115
|
+
|
|
116
|
+
from floris import FlorisModel, WindRose
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
### Helpers for setting up the model and gradient optimization
|
|
120
|
+
|
|
121
|
+
def _get_fmodel(cpp=False, device="cpu") -> FlorisModel:
|
|
122
|
+
"""Build a FLORIS model from defaults."""
|
|
123
|
+
fdefaults = FlorisModel.get_defaults()
|
|
124
|
+
fdefaults["logging"]["console"]["enable"] = False
|
|
125
|
+
fdefaults["logging"]["file"]["enable"] = False
|
|
126
|
+
if cpp:
|
|
127
|
+
fdefaults["solver"]["backend"] = "cpp"
|
|
128
|
+
fdefaults["solver"]["device"] = device
|
|
129
|
+
fdefaults["solver"]["cpp_solver"] = "sequential"
|
|
130
|
+
fdefaults["wake"]["enable_secondary_steering"] = False
|
|
131
|
+
fdefaults["wake"]["enable_yaw_added_recovery"] = False
|
|
132
|
+
fdefaults["wake"]["enable_transverse_velocities"] = False
|
|
133
|
+
fdefaults["wake"]["enable_active_wake_mixing"] = False
|
|
134
|
+
fmodel = FlorisModel(fdefaults)
|
|
135
|
+
return fmodel
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def _aep_tensor(fmodel, freq_tensor):
|
|
139
|
+
"""Return a scalar AEP tensor with grad_fn attached to the layout inputs.
|
|
140
|
+
|
|
141
|
+
Requires `fmodel.core._cpp_farm.layout_x` / `fmodel.core._cpp_farm.layout_y` to already be
|
|
142
|
+
set to the `requires_grad=True` tensors before calling this function.
|
|
143
|
+
"""
|
|
144
|
+
fmodel.run()
|
|
145
|
+
power = fmodel.core.get_farm_power_tensor() # [F, T]
|
|
146
|
+
farm_power_per_findex = power.sum(dim=1) # [F]
|
|
147
|
+
return (freq_tensor * farm_power_per_findex).sum() * 8760.0
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def _wind_rose(n_wdirs, n_wspeeds, ti):
|
|
151
|
+
"""Synthetic North Sea wind rose.
|
|
152
|
+
|
|
153
|
+
Directional distribution has a dominant SW peak (~240°) and a secondary
|
|
154
|
+
NNW peak (~340°).
|
|
155
|
+
Wind speeds follow a Weibull distribution (k=2, c=11 m/s, mean ≈ 9.8 m/s).
|
|
156
|
+
TI is applied uniformly for all bins.
|
|
157
|
+
"""
|
|
158
|
+
wd = np.linspace(0.0, 360.0, n_wdirs, endpoint=False)
|
|
159
|
+
ws = np.linspace(4.0, 18.0, n_wspeeds)
|
|
160
|
+
|
|
161
|
+
# Directional PDF: dominant SW (~240°), secondary NNW (~340°), broad S shoulder
|
|
162
|
+
dir_freq = (
|
|
163
|
+
0.45 * np.exp(-0.5 * ((wd - 240) % 360 / 38) ** 2)
|
|
164
|
+
# + 0.25 * np.exp(-0.5 * ((wd - 340) % 360 / 30) ** 2)
|
|
165
|
+
# + 0.10 * np.exp(-0.5 * ((wd - 200) % 360 / 25) ** 2)
|
|
166
|
+
+ 0.04 # uniform background
|
|
167
|
+
)
|
|
168
|
+
dir_freq /= dir_freq.sum()
|
|
169
|
+
|
|
170
|
+
# Speed PDF: Weibull (k=2, c=11 m/s) evaluated at bin centres
|
|
171
|
+
k, c = 2.0, 11.0
|
|
172
|
+
spd_freq = (k / c) * (ws / c) ** (k - 1) * np.exp(-(ws / c) ** k)
|
|
173
|
+
spd_freq /= spd_freq.sum()
|
|
174
|
+
|
|
175
|
+
# Joint frequency table [n_wdirs, n_wspeeds] (directions independent of speed)
|
|
176
|
+
freq_table = np.outer(dir_freq, spd_freq)
|
|
177
|
+
freq_table /= freq_table.sum()
|
|
178
|
+
|
|
179
|
+
return WindRose(
|
|
180
|
+
wind_directions=wd,
|
|
181
|
+
wind_speeds=ws,
|
|
182
|
+
freq_table=freq_table,
|
|
183
|
+
ti_table=ti,
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def _grid_layout(n_turbs, xmin, xmax, ymin, ymax, rng):
|
|
188
|
+
"""Place turbines on a rough grid and add a jitter."""
|
|
189
|
+
cols = int(np.ceil(np.sqrt(n_turbs)))
|
|
190
|
+
rows = int(np.ceil(n_turbs / cols))
|
|
191
|
+
xs = np.linspace(xmin + 0.1 * (xmax - xmin), xmax - 0.1 * (xmax - xmin), cols)
|
|
192
|
+
ys = np.linspace(ymin + 0.1 * (ymax - ymin), ymax - 0.1 * (ymax - ymin), rows)
|
|
193
|
+
grid_x, grid_y = np.meshgrid(xs, ys)
|
|
194
|
+
grid_x = grid_x.ravel()[:n_turbs]
|
|
195
|
+
grid_y = grid_y.ravel()[:n_turbs]
|
|
196
|
+
jitter = 0.05 * min(xmax - xmin, ymax - ymin)
|
|
197
|
+
grid_x += rng.uniform(-jitter, jitter, n_turbs)
|
|
198
|
+
grid_y += rng.uniform(-jitter, jitter, n_turbs)
|
|
199
|
+
grid_x = np.clip(grid_x, xmin, xmax)
|
|
200
|
+
grid_y = np.clip(grid_y, ymin, ymax)
|
|
201
|
+
return grid_x, grid_y
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def _spacing_penalty(lx, ly, min_dist):
|
|
205
|
+
"""Return a non-negative penalty that is zero when all turbines satisfy the
|
|
206
|
+
minimum separation *min_dist* (m). Uses a smooth quadratic ramp so that
|
|
207
|
+
gradients always exist.
|
|
208
|
+
"""
|
|
209
|
+
pos = torch.stack([lx, ly], dim=1) # [T, 2]
|
|
210
|
+
diff = pos.unsqueeze(0) - pos.unsqueeze(1) # [T, T, 2]
|
|
211
|
+
dist = diff.pow(2).sum(dim=2).clamp(min=1.0).sqrt() # [T, T]
|
|
212
|
+
T = lx.shape[0]
|
|
213
|
+
idx_i, idx_j = torch.triu_indices(T, T, offset=1)
|
|
214
|
+
pair_dist = dist[idx_i, idx_j]
|
|
215
|
+
return torch.relu(min_dist - pair_dist).pow(2).sum()
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
### Gradient descent
|
|
219
|
+
|
|
220
|
+
def run_gradient_optimization(
|
|
221
|
+
n_turbs: int,
|
|
222
|
+
wind_rose: WindRose,
|
|
223
|
+
n_iters: int,
|
|
224
|
+
lr: float,
|
|
225
|
+
seed: int = 42,
|
|
226
|
+
):
|
|
227
|
+
"""Run gradient-based layout optimization."""
|
|
228
|
+
rng = np.random.default_rng(seed)
|
|
229
|
+
D = 126.0 # NREL 5 MW rotor diameter (m)
|
|
230
|
+
min_dist = 2 * D # minimum turbine spacing
|
|
231
|
+
|
|
232
|
+
# Farm boundary
|
|
233
|
+
xmin, xmax = 0.0, 2000.0
|
|
234
|
+
ymin, ymax = 0.0, 1500.0
|
|
235
|
+
|
|
236
|
+
# Wind resource
|
|
237
|
+
freq_np = wind_rose.unpack_freq() # [F], sums to ≈1
|
|
238
|
+
freq_t = torch.tensor(freq_np, dtype=torch.float32)
|
|
239
|
+
|
|
240
|
+
# Initial layout: grid + jitter (stays within boundaries)
|
|
241
|
+
lx_init_np, ly_init_np = _grid_layout(n_turbs, xmin, xmax, ymin, ymax, rng)
|
|
242
|
+
|
|
243
|
+
# FLORIS model with FLORAF backend
|
|
244
|
+
fmodel = _get_fmodel(cpp=True, device="cpu")
|
|
245
|
+
fmodel.set(
|
|
246
|
+
layout_x=lx_init_np.tolist(),
|
|
247
|
+
layout_y=ly_init_np.tolist(),
|
|
248
|
+
wind_data=wind_rose,
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
# Optimization variables - leaf tensors for layout positions
|
|
252
|
+
lx = torch.tensor(lx_init_np, dtype=torch.float32, requires_grad=True)
|
|
253
|
+
ly = torch.tensor(ly_init_np, dtype=torch.float32, requires_grad=True)
|
|
254
|
+
|
|
255
|
+
# Plant the grad-tracked tensors into the FLORAF farm once
|
|
256
|
+
fmodel.core._cpp_farm.layout_x = lx
|
|
257
|
+
fmodel.core._cpp_farm.layout_y = ly
|
|
258
|
+
|
|
259
|
+
# Baseline AEP
|
|
260
|
+
with torch.no_grad():
|
|
261
|
+
base_aep_t = _aep_tensor(fmodel, freq_t)
|
|
262
|
+
base_aep = base_aep_t.item()
|
|
263
|
+
print(f"\nInitial AEP : {base_aep/1e9:8.4f} GWh/yr")
|
|
264
|
+
|
|
265
|
+
# Penalty scale, this weights the spacing penalty based on the severity of the incursion
|
|
266
|
+
# into the min_dist constraint.
|
|
267
|
+
# The penalty is zero when all pairs are above the minimum distance.
|
|
268
|
+
# It grows quadratically as pairs get closer than min_dist.
|
|
269
|
+
# The coefficient is chosen so that a ~1 D spacing violation produces a penalty comparable
|
|
270
|
+
# to a ~0.1% AEP step.
|
|
271
|
+
spacing_coeff = 1e4
|
|
272
|
+
|
|
273
|
+
# Adam optimizer
|
|
274
|
+
optimizer = torch.optim.Adam([lx, ly], lr=lr)
|
|
275
|
+
|
|
276
|
+
aep_history = [base_aep]
|
|
277
|
+
t0 = time.perf_counter()
|
|
278
|
+
|
|
279
|
+
for step in range(1, n_iters + 1):
|
|
280
|
+
optimizer.zero_grad()
|
|
281
|
+
|
|
282
|
+
# Forward: AEP through the C++ solver (grad_fn preserved)
|
|
283
|
+
aep = _aep_tensor(fmodel, freq_t)
|
|
284
|
+
|
|
285
|
+
# Penalty: minimum-spacing constraint
|
|
286
|
+
penalty = spacing_coeff * _spacing_penalty(lx, ly, min_dist)
|
|
287
|
+
|
|
288
|
+
# Maximise AEP via minimise negative AEP + penalty
|
|
289
|
+
loss = -aep + penalty
|
|
290
|
+
loss.backward()
|
|
291
|
+
optimizer.step()
|
|
292
|
+
|
|
293
|
+
# Hard boundary projection: clamp positions back into the domain
|
|
294
|
+
with torch.no_grad():
|
|
295
|
+
lx.clamp_(xmin, xmax)
|
|
296
|
+
ly.clamp_(ymin, ymax)
|
|
297
|
+
# Zero out gradients for clamped dims to avoid bias buildup
|
|
298
|
+
lx.grad.zero_()
|
|
299
|
+
ly.grad.zero_()
|
|
300
|
+
|
|
301
|
+
current_aep = aep.item()
|
|
302
|
+
aep_history.append(current_aep)
|
|
303
|
+
|
|
304
|
+
improvement = 100.0 * (current_aep / base_aep - 1.0)
|
|
305
|
+
print(f" Step {step:4d}/{n_iters} | AEP = {current_aep/1e9:.4f} GWh/yr | Δ = {improvement:+.2f}%")
|
|
306
|
+
|
|
307
|
+
elapsed = time.perf_counter() - t0
|
|
308
|
+
final_aep = aep_history[-1]
|
|
309
|
+
print(f"\nGradient opt finished in {elapsed:.1f} s ({n_iters} iterations)")
|
|
310
|
+
print(f"Final AEP : {final_aep/1e9:8.4f} GWh/yr ({100*(final_aep/base_aep - 1):+.2f}% vs initial)\n")
|
|
311
|
+
|
|
312
|
+
return aep_history
|
|
313
|
+
|
|
314
|
+
if __name__ == "__main__":
|
|
315
|
+
|
|
316
|
+
N_TURBS = 6
|
|
317
|
+
N_WDIRS = 36
|
|
318
|
+
N_WSPEEDS = 5
|
|
319
|
+
N_ITERATIONS = 100
|
|
320
|
+
LEARNING_RATE = 25.0 # meters; this is the step size for each iteration
|
|
321
|
+
SEED = 42
|
|
322
|
+
|
|
323
|
+
wind_rose = _wind_rose(N_WDIRS, N_WSPEEDS, ti=0.06)
|
|
324
|
+
|
|
325
|
+
aep_history = run_gradient_optimization(
|
|
326
|
+
n_turbs=N_TURBS,
|
|
327
|
+
wind_rose=wind_rose,
|
|
328
|
+
n_iters=N_ITERATIONS,
|
|
329
|
+
lr=LEARNING_RATE,
|
|
330
|
+
seed=SEED,
|
|
331
|
+
)
|
|
332
|
+
|
|
333
|
+
pct = 100 * (aep_history[-1] / aep_history[0] - 1)
|
|
334
|
+
print(f"AEP improvement: {pct:+.2f}%")
|
|
335
|
+
```
|
|
336
|
+
|
|
74
337
|
# FLORIS Wake Modeling and Wind Farm Controls Software
|
|
75
338
|
|
|
76
339
|
FLORIS is a controls-focused wind farm simulation software incorporating
|