Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OLAF: Adding free near wake panels #1355

Merged
merged 16 commits into from
Dec 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 31 additions & 30 deletions docs/source/user/aerodyn-olaf/ExampleFiles/ExampleFile--OLAF.dat
Original file line number Diff line number Diff line change
@@ -1,45 +1,46 @@
--------------------------- OLAF (cOnvecting LAgrangian Filaments) INPUT FILE -----------------
Free wake input file for the Helix test case
--------------------------- GENERAL OPTIONS ---------------------------------------------------
5 IntMethod Integration method {1: Runge-Kutta 4th order, 5: Forward Euler 1st order, default: 5} (switch)
0.2 DTfvw Time interval for wake propagation. {default: dtaero} (s)
default FreeWakeStart Time when wake is free. (-) value = always free. {default: 0.0} (s)
default FullCircStart Time at which full circulation is reached. {default: 0.0} (s)
default IntMethod - Integration method {1: Runge-Kutta 4th order, 5: Forward Euler 1st order, default: 5} (switch)
0.2 DTfvw - Time interval for wake propagation. {default: dtaero} (s)
default FreeWakeStart - Time when wake is free. (-) value = always free. {default: 0.0} (s)
default FullCircStart - Time at which full circulation is reached. {default: 0.0} (s)
--------------------------- CIRCULATION SPECIFICATIONS ----------------------------------------
1 CircSolvingMethod Circulation solving method {1: Cl-Based, 2: No-Flow Through, 3: Prescribed, default: 1 }(switch)
default CircSolvConvCrit Convergence criteria {default: 0.001} [only if CircSolvingMethod=1] (-)
default CircSolvRelaxation Relaxation factor {default: 0.1} [only if CircSolvingMethod=1] (-)
default CircSolvMaxIter Maximum number of iterations for circulation solving {default: 30} (-)
"NA" PrescribedCircFile File containing prescribed circulation [only if CircSolvingMethod=3] (quoted string)
default CircSolvMethod - Circulation solving method {1: Cl-Based, 2: No-Flow Through, 3: Prescribed, default: 1 }(switch)
default CircSolvConvCrit - Convergence criteria {default: 0.001} [only if CircSolvMethod=1] (-)
default CircSolvRelaxation - Relaxation factor {default: 0.1} [only if CircSolvMethod=1] (-)
default CircSolvMaxIter - Maximum number of iterations for circulation solving {default: 30} (-)
"NA" PrescribedCircFile - File containing prescribed circulation [only if CircSolvMethod=3] (quoted string)
===============================================================================================
--------------------------- WAKE OPTIONS ------------------------------------------------------
------------------- WAKE EXTENT AND DISCRETIZATION --------------------------------------------
150 nNWPanel Number of near-wake panels (-)
400 nFWPanel Number of far-wake panels (-)
default nFWPanelFree Number of free far-wake panels (-) {default: nFWPanel}
False FWShedVorticity Include shed vorticity in the far wake {default: false}
150 nNWPanels - Number of near-wake panels (-)
default nNWPanelsFree - Number of free near-wake panels (-) {default: nNWPanels}
default nFWPanels - Number of far-wake panels (-) {default: 0}
default nFWPanelsFree - Number of free far-wake panels (-) {default: nNWPanels}
default FWShedVorticity - Include shed vorticity in the far wake {default: false}
------------------- WAKE REGULARIZATIONS AND DIFFUSION -----------------------------------------
0 DiffusionMethod Diffusion method to account for viscous effects {0: None, 1: Core Spreading, "default": 0}
2 RegDeterMethod Method to determine the regularization parameters {0: Constant, 1: Optimized, 2: Chord-scaled, 3: dr-scaled, default: 0 }
2 RegFunction Viscous diffusion function {0: None, 1: Rankine, 2: LambOseen, 3: Vatistas, 4: Denominator, "default": 3} (switch)
3 WakeRegMethod Wake regularization method {1: Constant, 2: Stretching, 3: Age, default: 1} (switch)
0.25 WakeRegFactor Wake regularization factor (m or -)
0.25 WingRegFactor Wing regularization factor (m or -)
1000 CoreSpreadEddyVisc Eddy viscosity in core spreading methods, typical values 1-1000
default DiffusionMethod - Diffusion method to account for viscous effects {0: None, 1: Core Spreading, "default": 0}
2 RegDeterMethod - Method to determine the regularization parameters {0: Constant, 1: Optimized, 2: Chord-scaled, 3: dr-scaled, default: 0 }
default RegFunction - Viscous diffusion function {0: None, 1: Rankine, 2: LambOseen, 3: Vatistas, 4: Denominator, "default": 3} (switch)
default WakeRegMethod - Wake regularization method {1: Constant, 2: Stretching, 3: Age, default: 1} (switch)
0.25 WakeRegFactor - Wake regularization factor (m or -)
0.25 WingRegFactor - Wing regularization factor (m or -)
1000 CoreSpreadEddyVisc - Eddy viscosity in core spreading methods, typical values 1-1000
------------------- WAKE TREATMENT OPTIONS ---------------------------------------------------
False TwrShadowOnWake Include tower flow disturbance effects on wake convection {default:false} [only if TwrPotent or TwrShadow]
0 ShearModel Shear Model {0: No treatment, 1: Mirrored vorticity, default: 0}
default TwrShadowOnWake - Include tower flow disturbance effects on wake convection {default:false} [only if TwrPotent or TwrShadow]
default ShearModel - Shear Model {0: No treatment, 1: Mirrored vorticity, default: 0}
------------------- SPEEDUP OPTIONS -----------------------------------------------------------
2 VelocityMethod Method to determine the velocity {1:Biot-Savart Segment, 2:Particle tree, 3: Segment tree, default: 1}
1.5 TreeBranchFactor Branch radius fraction above which a multipole calculation is used {default: 2.0} [only if VelocityMethod=2]
1 PartPerSegment Number of particles per segment [only if VelocityMethod=2]
default VelocityMethod - Method to determine the velocity {1:Segment N^2, 2:Particle tree, 3: Particle N^2, 4: Segment Tree, default: 2}
default TreeBranchFactor - Branch radius fraction above which a multipole calculation is used {default: 1.5} [only if VelocityMethod=2,4]
default PartPerSegment - Number of particles per segment [only if VelocityMethod=2,3]
===============================================================================================
--------------------------- OUTPUT OPTIONS ---------------------------------------------------
1 WrVTk Outputs Visualization Toolkit (VTK) (independent of .fst option) {0: NoVTK, 1: Write VTK at each time step} (flag)
1 nVTKBlades Number of blades for which VTK files are exported {0: No VTK per blade, n: VTK for blade 1 to n} (-)
2 VTKCoord Coordinate system used for VTK export. {1: Global, 2: Hub, 3: Both, "default": 1}
1 VTK_fps Frame rate for VTK output (frames per second) {"all" for all glue code timesteps, "default" for all OLAF timesteps} [only if WrVTK=1]
0 nGridOut Number of grid outputs
default WrVTk - Outputs Visualization Toolkit (VTK) (independent of .fst option) {0: NoVTK, 1: Write VTK at each time step, default: 0} (flag)
default nVTKBlades - Number of blades for which VTK files are exported {0: No VTK per blade, n: VTK for blade 1 to n, default: 0} (-)
default VTKCoord - Coordinate system used for VTK export. {1: Global, 2: Hub, 3: Both, default: 1}
default VTK_fps - Frame rate for VTK output (frames per second) {"all" for all glue code timesteps, "default" for all OLAF timesteps} [only if WrVTK=1]
0 nGridOut - Number of grid outputs
GridName GridType TStart TEnd DTGrid XStart XEnd nX YStart YEnd nY ZStart ZEnd nZ
(-) (-) (s) (s) (s) (m) (m) (-) (m) (m) (-) (m) (m) (-)
------------------------------------------------------------------------------------------------
84 changes: 57 additions & 27 deletions docs/source/user/aerodyn-olaf/InputFiles.rst
Original file line number Diff line number Diff line change
Expand Up @@ -89,20 +89,43 @@ Wake Extent and Discretization Options



**nNWPanel** [-] specifies the number of near-wake (NW) panels (i.e. FVW time steps, **DTfvw**) used for the extent of the near-wake lattice.
**nNWPanels** [-] specifies the number of near-wake (NW) panels (i.e. FVW time steps, **DTfvw**) used for the extent of the near-wake lattice.
See :numref:`Guidelines-OLAF` for recommendations on setting this parameter.

**nFWPanel** [-] specifies the number of panels (FVW time steps) used for the far wake (where the tip and root vortex are rolled-up to speed up computational time).
**nNWPanelsFree** [-] specifies the number of near-wake panels (in FVW time steps), for which the
wake is convected as "free."
If *nNWPanelsFree* is equal to
*nNWPanels*, then the entire near wake is free.
Otherwise, the Lagrangian markers
located within the buffer zone ("frozen near wake") delimited by *nNWPanelsFree* and *nNWsPanel*
are all convected with a common and decaying induced velocity but with a varying free-stream.
(see :numref:`sec:vortconvfrozen:`).
This option can be used to speed up the simulation and stabilize the end of the "near-wake" region.
It can potentially remove the need for the far wake region.
Currently, the induced velocity of the frozen near wake is arbitrarily determined as the average over
the last 20 panels of the free near wake.
The decay of the convection velocity is such that the induced velocity is about 50% at the end of the frozen near wake.
The convection velocity of the frozen wake requires additional verification and validation, and
might change in future releases.
If a "frozen" near-wake region is used then the "free" far-wake region needs to be of zero length (**nFWPanelsFree=0**)
By default, this variable is set to **nNWPanels** (no frozen wake).
See :numref:`Guidelines-OLAF` for recommendations on setting up this parameter.

**nFWPanels** [-] specifies the number of panels (FVW time steps) used for the far wake (where the tip and root vortex are rolled-up to speed up computational time).
See :numref:`Guidelines-OLAF` for recommendations on setting this parameter.
Default value: 0.


**nFWPanelFree** [-] specifies the number of far-wake panels (in FVW time steps), for which the
**nFWPanelsFree** [-] specifies the number of far-wake panels (in FVW time steps), for which the
wake is convected as "free."
If *nFWPanelFree* is greater than
*nFWPanel*, then the entire far-wake is free. Otherwise, the Lagrangian markers
located within the buffer zone delimited by *nNWPanelFree* and *nNWPanel*
are convected with the average velocity.
By default, this variable is set to **nFWPanel**.
If *nFWPanelsFree* is equal to
*nFWPanels*, then the entire far-wake is free. Otherwise, the Lagrangian markers
located within the buffer zone ("frozen far wake") delimited by *nNWPanelsFree* and *nNWPanels*
are all convected with a common induced velocity but with a varying free-stream.
Currently, the induced velocity for the frozen far wake is determined as
the average over the free far-wake when **nNWPanelsFree=nNWPanels** (i.e. no frozen near wake),
or, using the same convection as the end of the frozen near wake otherwise.
By default, this variable is set to **nFWPanels**.
See :numref:`Guidelines-OLAF` for recommendations on setting up this parameter.


Expand All @@ -118,7 +141,7 @@ Wake Regularization and Diffusion Options
for viscous diffusion. There are two options: 1) no diffusion *[0]* and 2) the
core-spreading method *[1]*. The default option is *[0]*.

**RegDetMethod** [switch] specifies which method is used to determine the
**RegDeterMethod** [switch] specifies which method is used to determine the
regularization parameters. There are four options: 1) constant *[0]* and 2)
optimized *[1]*, 3) chord *[2]*, and 4) span *[3]*.
The optimized option determines all the parameters in this section for the user.
Expand All @@ -133,15 +156,15 @@ The default and recomment option is *[3]*.
,\quad
r_{c,\text{blade}}(r) = \text{WingRegParam}

When **RegDetMethod==2**, the regularization parameters is set according to the local chord:
When **RegDeterMethod==2**, the regularization parameters is set according to the local chord:

.. math::

r_{c,\text{wake}}(r) = \text{WakeRegParam} \cdot c(r)
,\quad
r_{c,,\text{blade}}(r) = \text{WingRegParam} \cdot c(r)

When **RegDetMethod==3**, the regularization parameters is set according to the spanwise discretization:
When **RegDeterMethod==3**, the regularization parameters is set according to the spanwise discretization:

.. math::

Expand All @@ -158,14 +181,15 @@ See :numref:`Guidelines-OLAF` for recommendations on setting up this parameter.
the singularity of the vortex elements, as specified in
:numref:`sec:vortconv`. There are five options: 1) no correction *[0]*,
2) the Rankine method *[1]*, 3) the Lamb-Oseen method *[2]*, 4) the Vatistas
method *[3]*, and 5) the denominator offset method *[4]*. The functions are
given in . The default option is *[3]*.
method *[3]*, and 5) the denominator offset method *[4]*.
The functions are given in :numref:`sec:RegularizationFunction`.
The default option is *[3]*.

**WakeRegMethod** [switch] specifies the method of determining viscous core
radius (i.e., the regularization parameter). There are three options: 1)
constant *[1]*, 2) stretching *[2]*, and 3) age *[3]*. The methods are
described in :numref:`sec:corerad`. The default option is *[1]*.
The recommended option is *[3]*.
described in :numref:`sec:corerad`.
The default option is *[3]*.

**WakeRegFactor** [m, or -] specifies the wake regularization parameter, which is the
regularization value used at the initialization of a vortex element. If the
Expand All @@ -181,7 +205,8 @@ See :numref:`Guidelines-OLAF` for recommendations on setting up this parameter.
:math:`\delta`. The parameter is used for the core-spreading method
(*DiffusionMethod* = *[1]*) and the regularization method with age
(*WakeRegMethod* = *[3]*). The variable :math:`\delta` is described in
:numref:`sec:corerad`. The default value is :math:`100`.
:numref:`sec:corerad`.
The default value is :math:`100`.

Wake Treatment Options
~~~~~~~~~~~~~~~~~~~~~~
Expand Down Expand Up @@ -210,20 +235,21 @@ There are four options:
2) Particle-Tree formulation *[2]*,
3) :math:`N^2` Biot-Savart computation using a particle representation,
4) Segment-Tree formulation.
The default option is *[1]*.
Option *[2]* and *[3]* requires the specification of *PartPerSegment* (see below).
Option *[4]* is expected to give results close to option *[1]* while offering
significant speedup, and this option does not require the specification of *PartPerSegment*.
The default option is *[2]*.


**TreeBranchFactor** [-] specifies the dimensionless distance, in branch radius,
above which a multipole calculation is used instead of a direct evaluation. This
option is only used in conjunction with the tree code
(*VelocityMethod* = *[2]*).
above which a multipole calculation is used instead of a direct evaluation.
Only used when *VelocityMethod* = *[2,4]*.
Default value: 1.5.

**PartPerSegment** [-] specifies the number of particles that are used when a
vortex segment is represented by vortex particles. The default value is
:math:`1`.
vortex segment is represented by vortex particles.
Only used when *VelocityMethod* = *[2,3]*).
The default value is :math:`1`.

Output Options
~~~~~~~~~~~~~~
Expand All @@ -237,19 +263,23 @@ used with `VTK_fps=0` to output only at the end of the simulation).
The outputs are written in the
folder, ``vtk_fvw.`` The parameters *WrVTK*, *VTKCoord*, and *VTK_fps* are
independent of the glue code VTK output options.
Default value: 0.


**VTKBlades** [-] specifies how many blade VTK files are to be written out.
*VTKBlades* :math:`= n` outputs VTK files for :math:`n` blades, with :math:`0`
being an acceptable value. The default value is :math:`1`.
**nVTKBlades** [-] specifies how many blade VTK files are to be written out.
*nVTKBlades* :math:`= n` outputs VTK files for :math:`n` blades, with :math:`0`
being an acceptable value.
The default value is :math:`0`.

**VTKCoord** [switch] specifies in which coordinate system the VTK files are
written. There are two options: 1) global coordinate system *[1]* and 2) hub
coordinate system *[2]*. The default option is *[1]*.
coordinate system *[2]*.
The default option is *[1]*.

**VTK_fps** [:math:`1`/sec] specifies the output frequency of the VTK files. The
provided value is rounded to the nearest allowable multiple of the time step.
The default value is :math:`1/dt_\text{fvw}`. Specifying *VTK_fps* = *[all]*,
The default value is :math:`1/dt_\text{fvw}`.
Specifying *VTK_fps* = *[all]*,
is equivalent to using the value :math:`1/dt_\text{aero}`. If *VTK_fps<0*, then
no outputs are created, except if *WrVTK=2*.

Expand Down
4 changes: 2 additions & 2 deletions docs/source/user/aerodyn-olaf/Introduction.rst
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,11 @@ which may be different from the time step of AeroDyn. After an optional
initialization period, the wake is allowed to move and distort, thus changing
the wake structure as the markers are convected downstream. To limit
computational expense, the root and tip vortices are truncated after a specified
distance (taken as a number of panels **nNWPanel**) downstream from the turbine.
distance (taken as a number of panels **nNWPanels**) downstream from the turbine.
The wake truncation
violates Helmholtz's first law and hence introduces an erroneous boundary
condition. To alleviate this, the wake is "frozen" in a buffer zone between a
specified buffer distance, **nFWPanelFree**, and **nFWPanel**.
specified buffer distance, **nFWPanelsFree**, and **nFWPanels**.
In this
buffer zone, the markers convect at the average ambient velocity. In this way,
truncation error is minimized~(:cite:`olaf-Leishman02_1`). The buffer zone is
Expand Down
Loading