Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Documentation
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Rotare
Documentation
Commits
e588f18d
Verified
Commit
e588f18d
authored
2 years ago
by
Thomas Lambert
Browse files
Options
Downloads
Patches
Plain Diff
feat(solvers): draft solvers
parent
683602fc
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Pipeline
#8728
passed
2 years ago
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
contents/preamble.tex
+0
-0
0 additions, 0 deletions
contents/preamble.tex
contents/tech-solvers.tex
+166
-0
166 additions, 0 deletions
contents/tech-solvers.tex
style/definitions.sty
+14
-11
14 additions, 11 deletions
style/definitions.sty
with
180 additions
and
11 deletions
contents/preamble.tex
0 → 100644
+
0
−
0
View file @
e588f18d
This diff is collapsed.
Click to expand it.
contents/tech-solvers.tex
+
166
−
0
View file @
e588f18d
...
@@ -14,4 +14,170 @@
...
@@ -14,4 +14,170 @@
\label
{
chap:tech:solvers
}
\label
{
chap:tech:solvers
}
\section
{
Blade Element theory
}
\label
{
chap:tech:solvers:BET
}
Thrust, torque and power for the whole rotor:
\begin{align}
\label
{
eq:tech:solvers:BET:thrust
}
\thrust
&
=
\nBlades
(d
\lift
\sin\indAngle
- d
\drag
\cos\indAngle
)
\\
\label
{
eq:tech:solvers:BET:torque
}
\torque
&
=
\nBlades
(d
\lift
\cos\indAngle
+ d
\drag
\sin\indAngle
)
\aRad\\
\label
{
eq:tech:solvers:BET:power
}
\power
&
=
\nBlades
(d
\lift
\cos\indAngle
+ d
\drag
\sin\indAngle
)
\aRad
\angVel
\end{align}
, where
$
\indAngle
$
is the induced angle:
\begin{equation}
\label
{
eq:tech:solvers:BET:indAngle
}
\tan
^{
-1
}
\indAngle
=
\dfrac
{
\aVel
_
A
}{
\aVel
_
T
}
\end{equation}
\section
{
Momentum theory
}
\label
{
chap:tech:solvers:mom
}
Mass flow rate through the disk:
\begin{equation}
\label
{
eq:tech:solvers:mom:mass
}
\mFlow
=
\dens
(
\aVel
_
A +
\indAxVel
) d
\area
=
\dens
(
\aVel
_
A +
\indAxVel
) 2
\pi
y dy
\end{equation}
Thrust:
\begin{equation}
\label
{
eq:tech:solvers:mom:thrust
}
\begin{split}
d
\thrust
&
=
\mFlow
\indAxWake
\\
&
=
\mFlow
(2
\indAxVel
)
\\
&
= 4
\pi
\dens
(
\aVel
_
A +
\indAxVel
)
\indAxVel
y dy
\end{split}
\end{equation}
Likewise, the torque is given by
\begin{equation}
\label
{
eq:tech:solvers:mom:torque
}
\begin{split}
d
\torque
&
=
\mFlow
\aRad
\indSwirl
\end{split}
\end{equation}
\section
{
Solvers
}
\label
{
chap:tech:solvers:solvers
}
\rotare
implements four different solvers, all of them based on the same set of
initial equations
(see~
\ref
{
eq:tech:solvers:BET:thrust
}
-
\ref
{
eq:tech:solvers:BET:power
}
and
\todo
{
ref
for momentum eq
}
).
These solver differs by introducing some additional assumptions or by modifying
the nonlinear system of equations (mostly the momentum equations) in order to
simplify its formulation or the convergence of its solution.
\subsection
{
Leishman solver
}
\label
{
chap:tech:solvers:leishman
}
This solver is based on the methodology described in
\todo
{
cite: Leishman
}
.
\subsection
{
Induction factor
}
\label
{
chap:tech:solvers:indfact
}
This solver is commonly used for the study of propellers or wind turbines. It
does not rely on additional assumptions, but rather on a reformulation of the
momentum equations in terms of induction factors. This induction factors lighten
a bit the formulation. The main drawback is that they are not compatible for the
analysis of rotors with zero external velocity (such as helicopter in hover or
propellers in idle).
We start by defining the axial and tangential (swirl) induction factors:
\begin{align}
\label
{
eq:tech:solvers:indfact:a
}
\aVel
_
A
&
= (1+
\axFact
)
\aVel
_
\infty
\\
\label
{
eq:tech:solvers:indfact:b
}
\aVel
_
T
&
= (1-b)
\angVel
\aRad
\end{align}
and then inject these in the momentum equations
\ref
{
eq:tech:solvers:mom:thrust
}
and (
\ref
{
eq:tech:solvers:mom:torque
}
).
As it can be seen directly in Eq.
\ref
{
eq:tech:solvers:indfact:a
}
, this
formulation falls down when the free stream velocity,
$
\aVel
_
\infty
$
, is zero.
In that situation, it is more interesting to keep the original formulation for
the thrust equation (in terms of velocities) and only use the tangential inflow
ratio in the torque equation.
Using the inflow factors, the thrust equations becomes:
\begin{equation}
\label
{
eq:tech:solvers:indfact:thurst
}
\begin{split}
d
\thrust
&
= 4
\pi
\dens
(
\aVel
_
A +
\indAxVel
)
\indAxVel
\aRad
dy
\\
&
= 4
\pi
\dens
(1 +
\axFact
) a
\aVel
_
\infty
^
2
\aRad
dy
\end{split}
\end{equation}
, and the torque equation becomes
\begin{equation}
\label
{
eq:tech:solvers:indfact:thurst
}
\begin{split}
d
\torque
&
= 2
\pi
\aRad
\dens
(
\aVel
_
A +
\indAxVel
) (2
\tgFact\angVel\aRad
)
\aRad
dy
\\
&
= 4
\pi
\aRad
^
3
\dens
(1 +
\axFact
)
\aVel
_
\infty
\tgFact
\angVel
dy
\end{split}
\end{equation}
\subsubsection
{
Resolution
}
The system made of the Blade Element equations and the new form of the momentum
equations is then solved using
\matlab
's
\lst
{
fsolve
}
function in order to
determine the value of both induction factors. The solution is initialized with
an axial inflow factor of 0.01 and assuming no swirl is induced.
\subsection
{
Induced velocities
}
\label
{
chap:tech:solvers:indvel
}
This solver is a pure resolution of the initial system, without any major
rewrite or additional assumptions. It is a bit more formal, but has the benefit
of being directly usable in any flow condition.
\subsubsection
{
Resolution
}
The system is solved using
\matlab
's
\lst
{
fsolve
}
function in order to determine
directly the induced velocities at the rotor disk. The solution is initialized
by considering that the axial induced velocity is 0.01 m/s and the tangential
component is 0.
\subsection
{
Stahlhut solver
}
\label
{
chap:tech:solvers:stahlhut
}
This solver relies on a complete rewriting of the system in a single nonlinear
transcendental equation. This improves significantly the convergence of the
system and facilitate the determination of a solution. The only drawback is that
the equation formed is much more complex and less intuitive than the ones at the
base of the system.
\section
{
Coaxial rotors
}
\label
{
chap:tech:solver:coax
}
The analysis of coaxial rotors is currently supported for either hovering/idle
rotors or axial flows only.
In that cases, the first rotor is evaluated exactly as if it was in isolation.
The axial and swirl velocity induced by the first rotor as then passed to the
second rotor as inlet velocity. The contraction of the wake is then calculated
based on the distance between the two rotors and the velocity profile is then
adapted accordingly.
The second rotor is then evaluated as if it was in isolation as well, but with
the new inlet velocity profile.
\section
{
Oblique flows
}
\label
{
chap:tech:solver:oblique
}
\rotare
currently implements oblique flows for single isolated rotors only. The
analysis of such flows for multi-rotor systems involves the determination of the
actual wake geometry. This is commonly done through other methods (vortex
sheets), which is currently out of the scope of this software.
For oblique flows, the solution of the blade elements will depend on the
azimuthal position of the blade. It is therefore required to calculate the
forces for all azimuthal positions and then integrate around the complete
circle.
This diff is collapsed.
Click to expand it.
style/definitions.sty
+
14
−
11
View file @
e588f18d
...
@@ -61,31 +61,34 @@
...
@@ -61,31 +61,34 @@
% --- Velocities ---------------------------------------------------------------
% --- Velocities ---------------------------------------------------------------
\newcommand
{
\indSwirl
}{
\ensuremath
{
u
_
i
}}
% Swirl velocity, in-plane toward rot blade
\newcommand
{
\indSwirl
}{
\ensuremath
{
u
_
i
}}
% Swirl velocity, in-plane toward rot blade
\newcommand
{
\indAxVel
}{
\ensuremath
{
u
_
i
}}
% Induced velocity, normal to rotor dis
\newcommand
{
\indAxVel
}{
\ensuremath
{
v
_
i
}}
% Induced velocity, normal to rotor dis
\newcommand
{
\airspeed
}{
\ensuremath
{
V
_
\infty
}}
% Freestream velocity
\newcommand
{
\airspeed
}{
\ensuremath
{
V
_
\infty
}}
% Freestream velocity
\newcommand
{
\velA
}{
\ensuremath
{
V
_
A
}}
% Axial velocity component
\newcommand
{
\aVel
}{
\ensuremath
{
V
}}
% Axial velocity component
\newcommand
{
\velR
}{
\ensuremath
{
V
_
R
}}
% Resultant velocity at the rotor plane
\newcommand
{
\indAxWake
}{
\ensuremath
{
v
_
w
}}
% Slipstream velocity downstream
\newcommand
{
\velRadial
}{
\ensuremath
{
V
_
\text
{
radial
}}}
% Radial component of freestream velocity
\newcommand
{
\indSwirlWake
}{
\ensuremath
{
u
_
w
}}
% Slipstream velocity downstream
\newcommand
{
\velT
}{
\ensuremath
{
V
_
T
}}
% Tangential component at the rotor plane
\newcommand
{
\axFact
}{
\ensuremath
{
a
}}
% Axial induction factor
\newcommand
{
\indAxWake
}{
\ensuremath
{
w
}}
% Slipstream velocity downstream
\newcommand
{
\tgFact
}{
\ensuremath
{
b
}}
% Tangential induciton factor
\newcommand
{
\angVel
}{
\ensuremath
{
\Omega
}}
% Angular velocity
\newcommand
{
\angVel
}{
\ensuremath
{
\Omega
}}
% Angular velocity
\newcommand
{
\aoa
}{
\ensuremath
{
\alpha
}}
% Angle of attack
\newcommand
{
\aoaZero
}{
\ensuremath
{
\alpha
_
0
}}
% Zero-lift angle of attack
% --- Angles -------------------------------------------------------------------
% --- Angles -------------------------------------------------------------------
\newcommand
{
\sweep
}{
\ensuremath
{
\Lambda
}}
% Circulation
\newcommand
{
\sweep
}{
\ensuremath
{
\Lambda
}}
% Sweep
\newcommand
{
\indAngle
}{
\ensuremath
{
\phi
}}
% Induced angle
\newcommand
{
\aoa
}{
\ensuremath
{
\alpha
}}
% Angle of attack
% --- Others -------------------------------------------------------------------
% --- Others -------------------------------------------------------------------
\newcommand
{
\area
}{
\ensuremath
{
A
}}
% (Rotor) Area
\newcommand
{
\area
}{
\ensuremath
{
A
}}
% (Rotor) Area
\newcommand
{
\radius
}{
\ensuremath
{
R
}}
% Rotor radius
\newcommand
{
\radius
}{
\ensuremath
{
R
}}
% Rotor radius
\newcommand
{
\r
el
Rad
}{
\ensuremath
{
r
}}
% Nondimensional radial position along the blade
\newcommand
{
\rRad
}{
\ensuremath
{
r
}}
% Nondimensional radial position along the blade
\newcommand
{
\a
bs
Rad
}{
\ensuremath
{
y
}}
% Radial distance along the blade
\newcommand
{
\aRad
}{
\ensuremath
{
y
}}
% Radial distance along the blade
\newcommand
{
\advRat
}{
\ensuremath
{
\mathcal
{
J
}}}
% Advance ratio
\newcommand
{
\advRat
}{
\ensuremath
{
\mathcal
{
J
}}}
% Advance ratio
\newcommand
{
\mFlow
}{
\ensuremath
{
\dot
{
m
}}}
% Mass flow rate
\newcommand
{
\mFlow
}{
\ensuremath
{
\dot
{
m
}}}
% Mass flow rate
\newcommand
{
\mach
}{
\ensuremath
{
\mathcal
{
M
}}}
% Mach number
\newcommand
{
\mach
}{
\ensuremath
{
\mathcal
{
M
}}}
% Mach number
\newcommand
{
\reynolds
}{
\ensuremath
{
\mathcal
{
Re
}}}
% Reynolds number
\newcommand
{
\dens
}{
\ensuremath
{
\rho
}}
% Density
\newcommand
{
\nBlades
}{
\ensuremath
{
N
_
b
}}
% Number of blades
\newcommand
{
\nBlades
}{
\ensuremath
{
N
_
b
}}
% Number of blades
% --- Forces, torques, powers, etc ---------------------------------------------
% --- Forces, torques, powers, etc ---------------------------------------------
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment