From 5f99c01d068d1032e7c547f63729b7617c26232d Mon Sep 17 00:00:00 2001 From: Rafael M Mudafort Date: Fri, 9 Feb 2024 13:32:36 -0600 Subject: [PATCH] Add a documentation page for advanced concepts --- docs/_toc.yml | 1 + docs/advanced_concepts.ipynb | 132 +++++++++++++++++++++++++++++++++++ docs/index.md | 2 +- 3 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 docs/advanced_concepts.ipynb diff --git a/docs/_toc.yml b/docs/_toc.yml index 8374966ef..91199ffc0 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -11,6 +11,7 @@ parts: - caption: User Reference chapters: - file: intro_concepts + - file: advanced_concepts - file: floating_wind_turbine - file: turbine_interaction - file: input_reference_main diff --git a/docs/advanced_concepts.ipynb b/docs/advanced_concepts.ipynb new file mode 100644 index 000000000..aae2869fb --- /dev/null +++ b/docs/advanced_concepts.ipynb @@ -0,0 +1,132 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(concepts_advanced)=\n", + "\n", + "# Advanced Concepts\n", + "\n", + "More information regarding the numerical and computational formulation in FLORIS\n", + "are detailed here. See [](concepts_intro) for a guide on the basics." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a basic FLORIS model for use later\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from floris.tools import FlorisInterface\n", + "fi = FlorisInterface(\"gch.yaml\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data structures\n", + "\n", + "FLORIS adopts a structures of arrays data modeling paradigm (SoA, relative to array of structures {AoS})\n", + "for nearly all of the data in the `floris.simulation` package.\n", + "This data model enables vectorization (SIMD operations) through Numpy array broadcasting\n", + "for many operations.\n", + "In general, there are two types of array shapes:\n", + "- Field quantities have points throughout the computational domain but in context-specific locations\n", + " and have the shape `(N wind directions, n wind speeds, n turbines, n grid, n grid)`.\n", + "- Scalar quantities have a single value for each turbine and typically have the shape\n", + " `(N wind directions, n wind speeds, n turbines, 1, 1)`. For scalar quanities, the arrays\n", + " may be created with the shape `(N wind directions, n wind speeds, n turbines)` and\n", + " then expanded to the 5-dimensional shape prior to running the wake calculation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Grids\n", + "\n", + "FLORIS includes a number of grid-types that create sampling points within the computational\n", + "domain for different contexts. In the typical use case, AEP or some other metric of wind\n", + "farm energy yield is the end result. Since the mathematical models in FLORIS are all\n", + "analytical, we only need to create points on the turbines themselves in order to calculate\n", + "the incoming wind speeds given all of the upstream conditions. In this case, we use\n", + "the {py:meth}`floris.simulation.grid.TurbineGrid` or {py:meth}`floris.simulation.grid.TurbineCubatureGrid`.\n", + "Each of these grid-types put points only on the turbine swept area, so all other\n", + "field-quantities in FLORIS have the same shape." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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wbZt2/Dqq69i8+bNbndMABAZGdnmcw4A+vXrh//9738ATv8fKS8vR2RkpP0+5eXlGDp0qNPq5MCJ39HpdEKtVrcZOGEymURYWJh9VFjrwIkzR1y98cYbws/PTxiNRqfXfDGFhYXiwIED9m3z5s0CgPjss89EUVGREOL0IAOTyWR/3OLFi116kEFxcbHo3bu3mD17tjCbzWfd7o7HNGrUKLFw4UL73y0Wi4iOjnabgRNWq1UsWLBAREVFiaNHj551e+sgg88++8y+78iRIy49yECv17f5/3PgwAExYsQIceutt4oDBw645TEJIcTNN9981sCJRYsWidTUVCHE6YETy5cvt9/e+vnozIETDKlzeOihh0R0dLTYvHmzOHLkiJg7d64ICwsTNTU1QojTQ9CvvvpqsXfvXrFp0yYRGhrqFkPQhRCioKDgrNF9tbW1Ijw8XMyZM0fk5OSIjz76SHh7e7vscO3i4mKRmJgoJk2aJIqLi0VZWZl9a+VuxySEbQi6Wq0W7733njh06JCYP3++CAgIaDOS1JXdd999wt/fX/z0009t/k0aGhrs97n33ntFXFyc+OGHH0RWVpZITU21fzC6izNH9wnhnse0c+dOoVQqxbPPPivy8vLE2rVrhbe3t/jvf/9rv8/zzz8vAgICxJdffin2798vrr32Wg5BdwUmk0k88sgjIiwsTPj6+oq0tDSRk5PT5j4nTpwQU6dOFV5eXiIkJEQ88sgjorm5WaKKO+ZcISWEEPv27RPjxo0TarVaREdHi+eff16aAtth9erVAsA5tzO50zG1WrFihYiLixMqlUqMGjVK7NixQ+qS2u18/yarV6+236exsVHcf//9IjAwUHh7e4vrrruuzZcLd/D7kHLXY/r666/FwIEDhVqtFklJSeLNN99sc7vVahVLliwR4eHhQq1Wi0mTJonc3Fyn1silOoiIyGV1m9F9RETkfhhSRETkshhSRETkshhSRETkshhSRETkshhSRETkshhSRETkshhSRETkshhSRETkshhSRETkshhSRETkshhSRETksv4fN9ZnOh2qZAIAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot the grid point locations for TurbineGrid and TurbineCubatureGrid\n", + "\n", + "fi.reinitialize(layout_x=[0.0], layout_y=[0.0])\n", + "rotor_radius = fi.floris.farm.rotor_diameters[0] / 2.0\n", + "hub_height = fi.floris.farm.hub_heights[0]\n", + "theta = np.linspace(0, 2*np.pi, 100)\n", + "circlex = rotor_radius * np.cos(theta)\n", + "circley = rotor_radius * np.sin(theta) + hub_height\n", + "\n", + "# TurbineGrid is the default\n", + "fig, ax = plt.subplots()\n", + "ax.scatter(0, hub_height, marker=\"+\", color=\"r\")\n", + "ax.scatter(fi.floris.grid.y_sorted[0,0,0], fi.floris.grid.z_sorted[0,0,0], marker=\"+\", color=\"r\")\n", + "ax.plot(circlex, circley)\n", + "ax.set_aspect('equal', 'box')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "floris", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/index.md b/docs/index.md index b8f9b6cd2..12ce55392 100644 --- a/docs/index.md +++ b/docs/index.md @@ -26,7 +26,7 @@ fi.reinitialize(wind_directions=[i for i in range(10)]) fi.calculate_wake() ``` -Finally, results can be analyzed via post-processing functions avilable within +Finally, results can be analyzed via post-processing functions available within {py:class}`.FlorisInterface` such as {py:meth}`.FlorisInterface.get_turbine_layout`, {py:meth}`.FlorisInterface.get_turbine_powers` and