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.
Files changed (305) hide show
  1. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/PKG-INFO +265 -2
  2. rafmudaf_floris-4.6.4.post1.dev8/README.md +445 -0
  3. rafmudaf_floris-4.6.4.post1.dev8/examples/gradient_layout_optimization.py +610 -0
  4. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/cpp_core.py +7 -6
  5. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/pyproject.toml +1 -1
  6. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/rafmudaf_floris.egg-info/PKG-INFO +265 -2
  7. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/rafmudaf_floris.egg-info/SOURCES.txt +1 -0
  8. rafmudaf_floris-4.6.4.post1.dev6/README.md +0 -182
  9. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.codecov.yml +0 -0
  10. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  11. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  12. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  13. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  14. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/dependabot.yml +0 -0
  15. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/workflows/check-working-examples.yaml +0 -0
  16. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/workflows/continuous-integration-workflow.yaml +0 -0
  17. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/workflows/cpp-backend-tests.yml +0 -0
  18. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/workflows/deploy-pages.yaml +0 -0
  19. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/workflows/python-publish.yml +0 -0
  20. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.github/workflows/quality-metrics-workflow.yaml +0 -0
  21. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.gitignore +0 -0
  22. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/.pre-commit-config.yaml +0 -0
  23. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/CONTRIBUTING.md +0 -0
  24. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/LICENSE.txt +0 -0
  25. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/benchmarks/bench.py +0 -0
  26. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/.nojekyll +0 -0
  27. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/_config.yml +0 -0
  28. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/_toc.yml +0 -0
  29. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/advanced_concepts.ipynb +0 -0
  30. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/api_docs.md +0 -0
  31. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/architecture.md +0 -0
  32. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/bibliography.md +0 -0
  33. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/cc.yaml +0 -0
  34. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/code_quality.ipynb +0 -0
  35. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/dev_guide.md +0 -0
  36. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/docs_image.png +0 -0
  37. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/empirical_gauss_model.md +0 -0
  38. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/floating_wind_turbine.md +0 -0
  39. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/floris_models.ipynb +0 -0
  40. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/gch.yaml +0 -0
  41. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/heterogeneous_map.ipynb +0 -0
  42. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/index.md +0 -0
  43. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/input_reference_main.md +0 -0
  44. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/input_reference_turbine.md +0 -0
  45. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/installation.md +0 -0
  46. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/intro_concepts.ipynb +0 -0
  47. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/jensen.yaml +0 -0
  48. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/layout_optimization.md +0 -0
  49. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/multidimensional_wind_turbine.ipynb +0 -0
  50. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/nrel_5MW.yaml +0 -0
  51. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/operation_models_user.ipynb +0 -0
  52. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/plot_complex_docs.png +0 -0
  53. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/powerthrust_helix.png +0 -0
  54. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/references.bib +0 -0
  55. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/turbine_library.md +0 -0
  56. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/turbine_models.ipynb +0 -0
  57. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/v3_to_v4.md +0 -0
  58. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/wake_models.ipynb +0 -0
  59. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/docs/wind_data_user.ipynb +0 -0
  60. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/001_opening_floris_computing_power.py +0 -0
  61. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/002_visualizations.py +0 -0
  62. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/003_wind_data_objects.py +0 -0
  63. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/004_set.py +0 -0
  64. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/005_getting_power.py +0 -0
  65. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/006_get_farm_aep.py +0 -0
  66. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/007_sweeping_variables.py +0 -0
  67. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/008_uncertain_models.py +0 -0
  68. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/009_parallel_models.py +0 -0
  69. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/010_compare_farm_power_with_neighbor.py +0 -0
  70. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/_convert_examples_to_notebooks.py +0 -0
  71. {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
  72. {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
  73. {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
  74. {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
  75. {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
  76. {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
  77. {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
  78. {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
  79. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_types/001_derating_control.py +0 -0
  80. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_types/002_disable_turbines.py +0 -0
  81. {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
  82. {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
  83. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_control_types/005_peak_shaving.py +0 -0
  84. {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
  85. {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
  86. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_floating/001_floating_turbine_models.py +0 -0
  87. {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
  88. {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
  89. {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
  90. {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
  91. {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
  92. {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
  93. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_heterogeneous/001_heterogeneous_inflow_single.py +0 -0
  94. {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
  95. {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
  96. {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
  97. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_layout_optimization/001_optimize_layout.py +0 -0
  98. {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
  99. {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
  100. {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
  101. {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
  102. {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
  103. {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
  104. {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
  105. {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
  106. {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
  107. {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
  108. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_turbine/001_reference_turbines.py +0 -0
  109. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_turbine/002_multiple_turbine_types.py +0 -0
  110. {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
  111. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_turbopark/001_compare_turbopark_implementations.py +0 -0
  112. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_turbopark/comparison_data/Rowpark_Orsted.csv +0 -0
  113. {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
  114. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_uncertain/001_uncertain_model_params.py +0 -0
  115. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_uncertain/002_approx_floris_model.py +0 -0
  116. {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
  117. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_visualizations/001_layout_visualizations.py +0 -0
  118. {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
  119. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_visualizations/003_visualize_cross_plane.py +0 -0
  120. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_visualizations/004_visualize_rotor_values.py +0 -0
  121. {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
  122. {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
  123. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_wind_data/002_generate_ti.py +0 -0
  124. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_wind_data/003_generate_value.py +0 -0
  125. {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
  126. {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
  127. {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
  128. {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
  129. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/examples_wind_resource_grid/wrg_example.wrg +0 -0
  130. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/cc.yaml +0 -0
  131. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/emgauss.yaml +0 -0
  132. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/emgauss_helix.yaml +0 -0
  133. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/gch.yaml +0 -0
  134. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/gch_heterogeneous_inflow.yaml +0 -0
  135. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/gch_multi_dim_cp_ct.yaml +0 -0
  136. {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
  137. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/gch_multiple_turbine_types.yaml +0 -0
  138. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/jensen.yaml +0 -0
  139. {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
  140. {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
  141. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/turbopark.yaml +0 -0
  142. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/turbopark_cubature.yaml +0 -0
  143. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/turboparkgauss.yaml +0 -0
  144. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/turboparkgauss_cubature.yaml +0 -0
  145. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs/wind_rose.csv +0 -0
  146. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/emgauss_fixed.yaml +0 -0
  147. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/emgauss_floating.yaml +0 -0
  148. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/emgauss_floating_fixedtilt15.yaml +0 -0
  149. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/emgauss_floating_fixedtilt5.yaml +0 -0
  150. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/gch_fixed.yaml +0 -0
  151. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/gch_floating.yaml +0 -0
  152. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/examples/inputs_floating/gch_floating_defined_floating.yaml +0 -0
  153. {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
  154. {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
  155. {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
  156. {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
  157. {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
  158. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/__init__.py +0 -0
  159. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/convert_floris_input_v3_to_v4.py +0 -0
  160. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/convert_turbine_v3_to_v4.py +0 -0
  161. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/__init__.py +0 -0
  162. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/base.py +0 -0
  163. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/core.py +0 -0
  164. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/farm.py +0 -0
  165. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/flow_field.py +0 -0
  166. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/grid.py +0 -0
  167. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/rotor_velocity.py +0 -0
  168. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/solver.py +0 -0
  169. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/turbine/__init__.py +0 -0
  170. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/turbine/controller_dependent_operation_model.py +0 -0
  171. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/turbine/operation_models.py +0 -0
  172. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/turbine/turbine.py +0 -0
  173. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/turbine/unified_momentum_model.py +0 -0
  174. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake.py +0 -0
  175. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_combination/__init__.py +0 -0
  176. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_combination/fls.py +0 -0
  177. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_combination/max.py +0 -0
  178. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_combination/sosfs.py +0 -0
  179. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_deflection/__init__.py +0 -0
  180. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_deflection/empirical_gauss.py +0 -0
  181. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_deflection/gauss.py +0 -0
  182. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_deflection/jimenez.py +0 -0
  183. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_deflection/none.py +0 -0
  184. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_turbulence/__init__.py +0 -0
  185. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_turbulence/crespo_hernandez.py +0 -0
  186. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_turbulence/none.py +0 -0
  187. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_turbulence/wake_induced_mixing.py +0 -0
  188. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/__init__.py +0 -0
  189. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/cumulative_gauss_curl.py +0 -0
  190. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/empirical_gauss.py +0 -0
  191. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/gauss.py +0 -0
  192. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/jensen.py +0 -0
  193. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/none.py +0 -0
  194. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/turbopark.py +0 -0
  195. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/turbopark_lookup_table.mat +0 -0
  196. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/core/wake_velocity/turboparkgauss.py +0 -0
  197. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/cut_plane.py +0 -0
  198. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/default_inputs.yaml +0 -0
  199. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/floris_model.py +0 -0
  200. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/flow_visualization.py +0 -0
  201. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/heterogeneous_map.py +0 -0
  202. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/layout_visualization.py +0 -0
  203. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/logging_manager.py +0 -0
  204. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/__init__.py +0 -0
  205. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/layout_optimization/__init__.py +0 -0
  206. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/layout_optimization/layout_optimization_base.py +0 -0
  207. {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
  208. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/layout_optimization/layout_optimization_gridded.py +0 -0
  209. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/layout_optimization/layout_optimization_pyoptsparse.py +0 -0
  210. {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
  211. {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
  212. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/layout_optimization/layout_optimization_scipy.py +0 -0
  213. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/load_optimization/__init__.py +0 -0
  214. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/load_optimization/load_optimization.py +0 -0
  215. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/other/__init__.py +0 -0
  216. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/other/boundary_grid.py +0 -0
  217. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/yaw_optimization/__init__.py +0 -0
  218. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/yaw_optimization/yaw_optimization_base.py +0 -0
  219. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/yaw_optimization/yaw_optimization_tools.py +0 -0
  220. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/yaw_optimization/yaw_optimizer_geometric.py +0 -0
  221. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/yaw_optimization/yaw_optimizer_scipy.py +0 -0
  222. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/optimization/yaw_optimization/yaw_optimizer_sr.py +0 -0
  223. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/par_floris_model.py +0 -0
  224. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/parallel_floris_model.py +0 -0
  225. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/__init__.py +0 -0
  226. {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
  227. {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
  228. {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
  229. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/iea_10MW.yaml +0 -0
  230. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/iea_15MW.yaml +0 -0
  231. {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
  232. {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
  233. {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
  234. {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
  235. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/iea_22MW.yaml +0 -0
  236. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/nrel_5MW.yaml +0 -0
  237. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/turbine_previewer.py +0 -0
  238. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/turbine_library/turbine_utilities.py +0 -0
  239. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/type_dec.py +0 -0
  240. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/uncertain_floris_model.py +0 -0
  241. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/utilities.py +0 -0
  242. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/floris/wind_data.py +0 -0
  243. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/profiling/conftest.py +0 -0
  244. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/profiling/linux_perf.py +0 -0
  245. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/profiling/profiling.py +0 -0
  246. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/profiling/quality_metrics.py +0 -0
  247. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/profiling/serial_vectorize.py +0 -0
  248. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/profiling/timing.py +0 -0
  249. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/rafmudaf_floris.egg-info/dependency_links.txt +0 -0
  250. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/rafmudaf_floris.egg-info/requires.txt +0 -0
  251. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/rafmudaf_floris.egg-info/top_level.txt +0 -0
  252. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/setup.cfg +0 -0
  253. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/__init__.py +0 -0
  254. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/base_unit_test.py +0 -0
  255. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/conftest.py +0 -0
  256. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/controller_dependent_operation_model_unit_test.py +0 -0
  257. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/convert_v3_to_v4_test.py +0 -0
  258. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/core_unit_test.py +0 -0
  259. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/__init__.py +0 -0
  260. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/iea_15MW_multi_dim_TI.csv +0 -0
  261. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/input_full.yaml +0 -0
  262. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/nrel_5MW.yaml +0 -0
  263. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/nrel_5MW_custom.yaml +0 -0
  264. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/wind_rose.csv +0 -0
  265. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/wind_ti_rose.csv +0 -0
  266. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/data/wrg_test.wrg +0 -0
  267. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/farm_unit_test.py +0 -0
  268. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/floris_model_integration_test.py +0 -0
  269. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/flow_field_unit_test.py +0 -0
  270. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/geometric_yaw_unit_test.py +0 -0
  271. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/heterogeneous_map_integration_test.py +0 -0
  272. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/layout_optimization_integration_test.py +0 -0
  273. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/layout_visualization_test.py +0 -0
  274. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/load_optimization_test.py +0 -0
  275. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/par_floris_model_unit_test.py +0 -0
  276. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/parallel_floris_model_integration_test.py +0 -0
  277. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/cumulative_curl_regression_test.py +0 -0
  278. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/empirical_gauss_regression_test.py +0 -0
  279. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/gauss_regression_test.py +0 -0
  280. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/jensen_jimenez_regression_test.py +0 -0
  281. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/none_regression_test.py +0 -0
  282. {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
  283. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/scipy_layout_opt_regression.py +0 -0
  284. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/turbopark_regression_test.py +0 -0
  285. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/turboparkgauss_regression_test.py +0 -0
  286. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/turbulence_models_regression_test.py +0 -0
  287. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/reg_tests/yaw_optimization_regression_test.py +0 -0
  288. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/rotor_velocity_unit_test.py +0 -0
  289. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/serial_refine_unit_test.py +0 -0
  290. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/turbine_grid_unit_test.py +0 -0
  291. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/turbine_multi_dim_unit_test.py +0 -0
  292. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/turbine_operation_models_unit_test.py +0 -0
  293. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/turbine_unit_test.py +0 -0
  294. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/turbine_utilities_unit_test.py +0 -0
  295. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/turboparkgauss_unit_test.py +0 -0
  296. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/type_dec_unit_test.py +0 -0
  297. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/uncertain_floris_model_integration_test.py +0 -0
  298. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/unified_momentum_operation_model_unit_test.py +0 -0
  299. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/utilities_unit_test.py +0 -0
  300. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/v3_to_v4_convert_test/gch.yaml +0 -0
  301. {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
  302. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/wake_unit_tests.py +0 -0
  303. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/wind_data_integration_test.py +0 -0
  304. {rafmudaf_floris-4.6.4.post1.dev6 → rafmudaf_floris-4.6.4.post1.dev8}/tests/wind_rose_wrg_test.py +0 -0
  305. {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.dev6
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.14,>=3.10
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