Commit 35242d4d authored by Kenneth Loenbaek's avatar Kenneth Loenbaek
Browse files

Small update of 3D plot and other figures

parent 1b6f7a6e
......@@ -271,7 +271,12 @@
" # Handle\n",
" z_handle = dhw*np.exp(1j*np.linspace(0, np.pi, n))\n",
" z_handle = z_handle.real +1j*z_handle.imag*dhh/dhw +1j*dh\n",
" return z_block, z_handle"
" return z_block, z_handle\n",
"\n",
"def make_cross(dx=0.5, dy=1.0):\n",
" x = [-dx, dx, np.nan, dx, -dx]\n",
" y = [0, dy, np.nan, 0, dy]\n",
" return np.array(x) + 1j*np.array(y)"
]
},
{
......@@ -285,12 +290,14 @@
"ax = fig.add_axes((0.00, 0.0, 1.0, 1.0))\n",
"ax.axis([-1, 1, -1, 1])\n",
"\n",
"s_tur = 1.0\n",
"s_tur = 0.5\n",
"c_tur = 0.0+1j*0.0\n",
"z_block, z_handle = [el*s_tur+c_tur for el in make_weight(dh=0.5, dhw=0.35)]\n",
"z_cross = make_cross()*s_tur+c_tur\n",
"ax.plot(z_handle.real, z_handle.imag, \"k\", lw=8)\n",
"ax.fill(z_block.real, z_block.imag, \"gray\", lw=8, edgecolor=\"k\")\n",
"ax.text(c_tur.real, 0.15*s_tur+c_tur.imag, \"KG\", {\"fontsize\":60*s_tur, \"weight\": \"extra bold\"}, ha=\"center\")\n",
"ax.plot(z_cross.real, z_cross.imag, \"r\", lw=8, zorder=1000)\n",
"\n",
"\n",
"plt.show()"
......@@ -542,6 +549,11 @@
"s_tur = 0.12\n",
"c_tur = -0.5-1j*0.2\n",
"z_tur, z_arr = [el*s_tur+c_tur for el in make_turbine_load_icon(dhlarr=0.25)]\n",
"# Coin\n",
"s_coin = 0.3\n",
"c_coin = -0.8+1j*0.1\n",
"z_cir, z_euro = [el*s_coin+c_coin for el in make_coin()]\n",
"z_cross = make_cross()*s_coin+c_coin\n",
"# Color scale\n",
"s_cscale = 1.0\n",
"c_cscale = -0.00-1j*0.02\n",
......@@ -555,7 +567,7 @@
"s_scale = 0.55\n",
"c_scale = 1.3+1j*s_scale*1.01\n",
"z_scale, z_arrow, z_rope = [el*s_scale+c_scale for el in make_scale()]\n",
"z_pow, z_tur, z_arr, z_cscale = [el*s_scale+c_scale for el in [z_pow, z_tur, z_arr, z_cscale]]\n",
"z_pow, z_tur, z_arr, z_cscale, z_cir, z_euro, z_cross = [el*s_scale+c_scale for el in [z_pow, z_tur, z_arr, z_cscale, z_cir, z_euro, z_cross]]\n",
"\n",
"# Plotting scale\n",
"ax.plot(z_rope.real, z_rope.imag, \"gray\", lw=1)\n",
......@@ -565,10 +577,15 @@
"# Power symbol\n",
"ax.fill(z_pow.real, z_pow.imag, color=\"#ffc107\", lw=4, edgecolor=\"k\")\n",
"\n",
"# Coin\n",
"# Turbine\n",
"ax.plot(z_tur.real, z_tur.imag, \"k\", lw=4)\n",
"ax.fill(z_arr.real, z_arr.imag)\n",
"\n",
"# Coin\n",
"ax.fill(z_cir.real, z_cir.imag, color=\"#FCC201\", edgecolor=\"k\", lw=4)\n",
"ax.plot(z_euro.real, z_euro.imag, \"k\", lw=3)\n",
"ax.plot(z_cross.real, z_cross.imag, \"r\", lw=8, zorder=1000)\n",
"\n",
"# Color scale\n",
"ax.pcolor(z_cscale.real, z_cscale.imag, col, cmap=\"brg\", vmin=-0.7, shading=\"auto\")\n",
"\n",
......@@ -578,8 +595,9 @@
"# Vertical line and arrows\n",
"x_ver = 0.85\n",
"y_ver = [0, 0.8]\n",
"ax.plot(2*[x_ver], y_ver, \"--k\", lw=1, alpha=0.5)\n",
"ax.plot(2*[x_ver], y_ver, \"--k\", lw=1, alpha=0.5, zorder=-1)\n",
"ax.text(x_ver, y_ver[1]/2, \"$\\iff$\", {\"fontsize\": 25, \"fontweight\":\"bold\"}, ha=\"center\")\n",
"ax.text(0.95, 0.5, \"$\\Rightarrow$\", {\"fontsize\": 25, \"fontweight\":\"bold\"}, ha=\"center\", rotation=-45)\n",
"\n",
"# Exporting figure\n",
"fname = \"../slides/images/turbine_Pareto.svg\"\n",
......@@ -598,7 +616,7 @@
"}\n",
"'''+\n",
"'''\n",
"#patch_7{\n",
"#patch_8{\n",
" transform-origin: %s; // Rotate about their own center.\n",
" transform-box: fill-box;\n",
" animation: rotate_rotor 4s infinite 0s linear;\n",
......@@ -708,7 +726,7 @@
"outputs": [],
"source": [
"plt.close(\"all\")\n",
"figsize = (3.8, 4)\n",
"figsize = (4.5, 4)\n",
"fig = plt.figure(figsize=figsize)\n",
"ax = fig.add_axes((0.00, 0.0, 1.0, 1.0))\n",
"\n",
......@@ -726,6 +744,11 @@
"s_wei = 0.3\n",
"c_wei = -0.5-1j*0.38\n",
"z_block, z_handle = [el*s_wei+c_wei for el in make_weight(dh=0.5, dhw=0.35)]\n",
"# Coin\n",
"s_coin = 0.3\n",
"c_coin = -0.8+1j*0.1\n",
"z_cir, z_euro = [el*s_coin+c_coin for el in make_coin()]\n",
"z_cross = make_cross()*s_coin+c_coin\n",
"# Color scale\n",
"s_cscale = 1.0\n",
"c_cscale = -0.00-1j*0.02\n",
......@@ -737,9 +760,9 @@
"\n",
"# Scale translation\n",
"s_scale = 0.65\n",
"c_scale = 0.47+1j*s_scale*1.01\n",
"c_scale = 0.65+1j*s_scale*1.01\n",
"z_scale, z_arrow, z_rope = [el*s_scale+c_scale for el in make_scale()]\n",
"z_pow, z_block, z_handle, z_cscale = [el*s_scale+c_scale for el in [z_pow, z_block, z_handle, z_cscale]]\n",
"z_pow, z_block, z_handle, z_cscale, z_cir, z_euro, z_cross = [el*s_scale+c_scale for el in [z_pow, z_block, z_handle, z_cscale, z_cir, z_euro, z_cross]]\n",
"\n",
"# Plotting scale\n",
"ax.plot(z_rope.real, z_rope.imag, \"gray\", lw=1)\n",
......@@ -754,19 +777,19 @@
"ax.fill(z_block.real, z_block.imag, \"gray\", lw=4, edgecolor=\"k\")\n",
"ax.text(c_wei.real*s_scale+c_scale.real, 0.09*s_wei+c_wei.imag*s_scale+c_scale.imag, \"KG\", {\"fontsize\":70*s_wei, \"weight\": \"extra bold\"}, ha=\"center\")\n",
"\n",
"# Coin\n",
"ax.fill(z_cir.real, z_cir.imag, color=\"#FCC201\", edgecolor=\"k\", lw=4)\n",
"ax.plot(z_euro.real, z_euro.imag, \"k\", lw=3)\n",
"#ax.plot(z_cross.real, z_cross.imag, \"r\", lw=8, zorder=1000)\n",
"\n",
"# Color scale\n",
"ax.pcolor(z_cscale.real, z_cscale.imag, col, cmap=\"brg\", vmin=-0.7, shading=\"auto\")\n",
"\n",
"# Text\n",
"ax.text(c_scale.real+c_text.real, c_scale.imag+c_text.imag, \"Power-per-Cost (PpC)\", {\"fontsize\":15}, ha=\"center\")\n",
"ax.text(0.25, 0.62, r\"$\\approx$\", {\"fontsize\": 25, \"fontweight\":\"bold\"}, ha=\"center\", rotation=-45)\n",
"\n",
"\n",
"# Vertical line and arrows\n",
"x_ver = 1.05\n",
"y_ver = [0, 0.95]\n",
"ax.plot(2*[x_ver], y_ver, \"--k\", lw=1, alpha=0.5)\n",
"ax.text(x_ver, y_ver[1]/2, \"$\\Rightarrow$\", {\"fontsize\": 25, \"fontweight\":\"bold\"}, ha=\"center\")\n",
"\n",
"# Exporting figure\n",
"fname = \"../slides/images/weight_power.svg\"\n",
"fig.savefig(fname, dpi=300)\n",
......@@ -843,7 +866,7 @@
"blade_z = np.zeros_like(blade_x)\n",
"\n",
"for ir, r in enumerate(obj.r_m):\n",
" z_airt = (z_air-1/4)*np.exp(-1j*obj.twist_rad[ir])*obj.c[ir]\n",
" z_airt = (z_air.real-1j*z_air.imag-1/4)*np.exp(-1j*obj.twist_rad[ir])*obj.c[ir]\n",
" blade_x[ir, :] = z_airt.real.copy()\n",
" blade_y[ir, :] = z_airt.imag.copy()\n",
" blade_z[ir, :] = r"
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -100,7 +100,7 @@
</ul>
</div>
<p>
The presentation is intented to be shown though an internet browser, but a PDF version can be download by
The presentation is intended to be shown through an internet browser, but a PDF version can be download by
clicking this <a href="https://kenloen.pages.windenergy.dtu.dk/phd-defence-presentation/?print-pdf">link</a>
and then using <em>Ctrl+P</em> to "print" as a PDF file. Notice that it only works with the Chrome browser.
</p>
......@@ -137,44 +137,45 @@
</div>
<div></div>
<div>
<strong>From DTU</strong><br>Christian Bak<br>Michael McWilliam<br>Frederik Zahle
<strong>From DTU</strong><br>Christian Bak<br>Frederik Zahle<br>Michael McWilliam
</div>
</div>
</section>
<section>
<h2>Presentation overview</h2>
<h6>Introduction</h6>
<div style="text-align:left;">
<ul style="display: block">
<li>Introduction</li>
<li>Radially Independent Actuator Disc model - RIAD</li>
<li>Wind turbine Optimization with Radial Independence - WOwRI</li>
<li>Introducing a simple cost-model</li>
<li>Conclusion and Outlook</li>
</ul>
<aside class="notes">
Introduction
<ul class="on_spacing">
<li>General problem statement</li>
<li>Simplifying the problem</li>
<li>How is the problem solver?</li>
</ul>
</div>
<h6>Radially Independent Actuator Disc model - RIAD</h6>
<div style="text-align:left;">
Radially Independent Actuator Disc model - RIAD
<ul class="on_spacing">
<li>Introduction</li>
<li>Equation for local power</li>
<li>Making a blade design and relation with BEM</li>
<li>Using the equation for optimization</li>
</ul>
</div>
<h6>Wind turbine Optimization with Radial Independence - WOwRI</h6>
<div style="text-align:left;">
Wind turbine Optimization with Radial Independence - WOwRI
<ul class="on_spacing">
<li>The optimization problem</li>
<li>Solving the optimization problem</li>
</ul>
</div>
<h6>Introducing a simple cost-model</h6>
<div style="text-align:left;">
Introducing a simple cost-model
<ul class="on_spacing">
<li>Including a cost-model in the optimization</li>
<li>Solving the optimization problem</li>
</ul>
</div>
</aside>
</section>
<section>
......@@ -228,9 +229,8 @@
<div class="grid2c" style="grid-template-columns: 45% 55%;">
<div>
<p>
Computing <em>PpC</em> is in principle easy.<br>
Introducing the cost makes the problem very hard.<br><br>
The cost dependence on many factors, such as:
If modeling cost was easy, it would be easy to evaluate <em>PpC</em>.<br>
Modeling cost is difficult and it depends on many factors such as:
<ul>
<li>Cost of materials</li>
<li>Transportation</li>
......@@ -239,7 +239,8 @@
</ul>
</p>
<p>
Finding the optimal balance between cost and power is in general a very complicated problem!
Finding the optimal balance between cost and power is in general a very complicated problem! <br><br>
At the end a very simple cost-model is introduced.
</p>
</div>
<div>
......@@ -256,7 +257,7 @@
<p>
<em>Power</em> vs. <em>Cost</em> \(\Rightarrow\) <em>Power</em> vs. <em>Loads</em> is a
significant simplification but it is also a crude approximation. <br><br>
It implicitly assumes that all the effect of the cost can be model though load constraints. <br><br>
It implicitly assumes that all the effect of the cost can be modelled through load constraints. <br><br>
Later a model for the mass of the rotor is included as an approximate model for the cost.
</p>
</div>
......@@ -300,7 +301,7 @@
<li>Assumes radial independence between stream-tubes</li>
<li>Analytical expression between the loading and the power for the actuator disc</li>
<li>A different parametrization of the classical <em>Blade-Element-Momentum</em> equations - which is better suite for load constraint power optimization </li>
<li>Not using the information of the planform, e.g chord, twist, polars </li>
<li>Only looking at the loading <em>not</em> the planform (e.g chord, twist, polars) </li>
</ul>
<p>
The theory is further described in the preprint: <br>
......@@ -310,6 +311,10 @@
(Figures are taken from the preprint)
</p>
<img width="45%" src="images/dia_RIAD.png">
<aside class="notes">
Remember to state why it is different than BEM
</aside>
</section>
<section>
......@@ -430,7 +435,8 @@
\frac{\partial C_{LP}}{\partial C_{LT}} = 0 \quad \text{for all } r_i
\]
<p>
Where the derivative can be found analytically. The solution can be found with a 1D root solver.
Where the derivative can be found analytically.
The solution can be found with a 1D root solver making it a semi-analytical solution.
</p>
</div>
......@@ -498,7 +504,7 @@
(Figures are taken from the preprint)
</p>
<img width="45%" src="images/turbine_Pareto.svg" style="margin-top: -100px">
<img width="35%" src="images/Pareto.svg" style="margin-top: -30px">
</section>
<section>
......@@ -528,29 +534,29 @@
<section>
<h2>Using the assumption of radial independence</h2>
<p>
Using the assumption of radial independence can significantly simplify the optimization problem.<br>
The mathematical details are given at the end of this section. <br>
Introducing KKT-multipliers (\(W_0, W_1\)), one for each constraint, as a variable for how much weight
a constraint should have in the Pareto-optimal relationship. <br>
The KKT-multipliers reduce the problem from an optimization of a distribution (\(\mathbf{C_{LT}}\)) to an
optimization in 2 scalars - which is a significant simplification of the optimization problem.
Using the assumption of radial independence can significantly simplify the optimization problem.
</p>
<div class="grid3c" style="align-items:center">
\[
\begin{align}
\max_{\mathbf{C_{LT}}}&\ C_P\left(\mathbf{C_{LT}}\ \Bigg |\ \lambda, \frac{C_l}{C_d}\right)\cdot\tilde{R}^2 \\
\text{subj.} &\ C_T\left(\mathbf{C_{LT}}\right)\cdot\tilde{R}^2 \leq \tilde{T} \\
&\ C_{FM}\left(\mathbf{C_{LT}}\right)\cdot \tilde{R}^3 \leq \tilde{M}_f
\end{align}
\]
\[\overset{(\mathbf{C_{LT}} \rightarrow W_0, W_1)}{\LARGE \Rightarrow}\]
\[
\begin{align}
\max_{W_0, W_1}&\ C_P\left(W_0, W_1\ \Bigg |\ \lambda, \frac{C_l}{C_d}\right)\cdot\tilde{R}^2 \\
\text{subj.} &\ C_T\left(W_0, W_1\right)\cdot\tilde{R}^2 \leq \tilde{T} \\
&\ C_{FM}\left(W_0, W_1\right)\cdot \tilde{R}^3 \leq \tilde{M}_f
\end{align}
\]
</div>
<p>
Introducing KKT-multipliers (\( \mathbf{C_{LT}} \rightarrow W_0, W_1\)) simplifies the problem significantly
</p>
\[
\begin{align}
\max_{\mathbf{C_{LT}}}&\ C_P\left(\mathbf{C_{LT}}\ \Bigg |\ \lambda, \frac{C_l}{C_d}\right)\cdot\tilde{R}^2 \\
\text{subj.} &\ C_T\left(\mathbf{C_{LT}}\right)\cdot\tilde{R}^2 \leq \tilde{T} \\
&\ C_{FM}\left(\mathbf{C_{LT}}\right)\cdot \tilde{R}^3 \leq \tilde{M}_f
\end{align}
\]
<br>
\(\Downarrow\)<br>
\[
\begin{align}
\max_{W_0, W_1}&\ C_P\left(W_0, W_1\ \Bigg |\ \lambda, \frac{C_l}{C_d}\right)\cdot\tilde{R}^2 \\
\text{subj.} &\ C_T\left(W_0, W_1\right)\cdot\tilde{R}^2 \leq \tilde{T} \\
&\ C_{FM}\left(W_0, W_1\right)\cdot \tilde{R}^3 \leq \tilde{M}_f
\end{align}
\]
</section>
<section>
......@@ -653,7 +659,7 @@
<div class="grid2c" style="align-items:center">
<p>\(\bullet\) Solves Pareto optimal problems for power and loads</p>
<img src="images/turbine_Pareto.svg" width="500px">
<img src="images/Pareto.svg" width="500px">
<p>\(\bullet\) Simplifies the optimization problem by using the assumption of radial independence</p>
<p>\(\mathbf{C_{LT}} \rightarrow W_0, W_1\)</p>
......@@ -670,10 +676,8 @@
<div class="grid2c" style="grid-template-columns: 60% 40%; align-items: center">
<div>
<p>
The unbounded optimum for load constraint power optimization is clearly not useful in practical wind turbine design.<br>
In practical rotor design there will be an increase in cost as the rotor radius is increase. <br>
To capture this a simple cost function is introduced which estimates the mass increase with the
assumption that mass and cost is proportional. The model is given as:
Rotor cost will increase with increasing radius - even with constraints. <br>
Introducing simple model to estimate the cost. The model is given as:
</p>
\[
f_{cost}\left(\tilde{R}\ \Big | \ C_{frac}, c_{exp}\right) = C_{frac} \tilde{R}^{c_{exp}} +\left(1-C_{frac}\right)
......@@ -859,6 +863,7 @@
width: 1700,
height: 956.25, // 16/9
slideNumber: true,
defaultTiming: 80,
transition: 'slide', // none/fade/slide/convex/concave/zoom
transitionSpeed: 'fast',
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment