Skip to content

Commit

Permalink
Merge pull request #447 from andrew-platt/f/vc
Browse files Browse the repository at this point in the history
Free Vortex Wake within AeroDyn15
  • Loading branch information
andrew-platt authored Jul 17, 2020
2 parents e77fabe + 36922c3 commit 5aacf65
Show file tree
Hide file tree
Showing 96 changed files with 23,932 additions and 1,644 deletions.
5 changes: 4 additions & 1 deletion .github/actions/compile-and-test/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ ctest -VV -R nwtc_library_utest
ctest -VV -j7 -R bd_
ctest -VV -R beamdyn_utest

# OLAF free vortex wake tests
ctest -VV -R fvw_utest

# OpenFAST linearization tests
# Dont run these in parallel, copying the case files can fail in a race condition
ctest -VV -L linear
Expand All @@ -49,4 +52,4 @@ ctest -VV -L linear
## - 9, 16 because they're very sensitive
## - 19, 20 because theyre too long
## - 17, 22, 23 becuase we dont know why they fail :(
ctest -VV -j8 -I 1,1,1,2,3,4,5,6,7,8,10,11,12,13,14,15,18,21,24,25,26
ctest -VV -j8 -I 1,1,1,2,3,4,5,6,7,8,10,11,12,13,14,15,18,21,24,25,26,27,28
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[submodule "reg_tests/r-test"]
path = reg_tests/r-test
url = https://github.com/openfast/r-test.git
url = https://github.com/OpenFAST/r-test.git
[submodule "unit_tests/pfunit"]
path = unit_tests/pfunit
url = https://github.com/Goddard-Fortran-Ecosystem/pFUnit.git
5 changes: 3 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@ option(BUILD_SHARED_LIBS "Enable building shared libraries" off)
option(DOUBLE_PRECISION "Treat REAL as double precision" on)
option(USE_DLL_INTERFACE "Enable runtime loading of dynamic libraries" on)
option(FPE_TRAP_ENABLED "Enable FPE trap in compiler options" off)
option(ORCA_DLL_LOAD "Enable OrcaFlex Library Load" off)
option(ORCA_DLL_LOAD "Enable OrcaFlex Library Load" on)
option(BUILD_OPENFAST_CPP_API "Enable building OpenFAST - C++ API" off)
option(OPENMP "Enable OpenMP support" off)

# Precompiler/preprocessor flag configuration
# Do this before configuring modules so that the flags are included
Expand Down Expand Up @@ -169,4 +170,4 @@ endif()
option(BUILD_DOCUMENTATION "Build documentation." OFF)
if(BUILD_DOCUMENTATION)
add_subdirectory(docs)
endif()
endif()
22 changes: 21 additions & 1 deletion cmake/OpenfastFortranOptions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ macro(set_fast_gfortran)
endif(NOT WIN32)

# Fix free-form compilation for OpenFAST
#set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffree-line-length-none -cpp -fopenmp")
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffree-line-length-none -cpp")

# Deal with Double/Single precision
Expand All @@ -93,7 +94,7 @@ macro(set_fast_gfortran)

# debug flags
if(CMAKE_BUILD_TYPE MATCHES Debug)
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fcheck=all -pedantic -fbacktrace" )
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fcheck=all -pedantic -fbacktrace " )
endif()

if(CYGWIN)
Expand All @@ -102,6 +103,12 @@ macro(set_fast_gfortran)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS},--stack,${stack_size}")
endif()

# OPENMP
if (OPENMP)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fopenmp")
set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fopenmp" )
endif()

endmacro(set_fast_gfortran)

#
Expand Down Expand Up @@ -131,6 +138,12 @@ macro(set_fast_intel_fortran_posix)
if(CMAKE_BUILD_TYPE MATCHES Debug)
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -check all -traceback" )
endif()

# OPENMP
if (OPENMP)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qopenmp")
set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -qopenmp" )
endif()
endmacro(set_fast_intel_fortran_posix)

#
Expand All @@ -157,4 +170,11 @@ macro(set_fast_intel_fortran_windows)
if(CMAKE_BUILD_TYPE MATCHES Debug)
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} /check:all /traceback" )
endif()

# OPENMP
if (OPENMP)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /qopenmp")
set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} /qopenmp" )
endif()

endmacro(set_fast_intel_fortran_windows)
Binary file modified docs/OtherSupporting/OutListParameters.xlsx
Binary file not shown.
6 changes: 6 additions & 0 deletions docs/_static/css/math_eq.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
.math {
text-align: left;
}
.eqno {
float: right;
}
2 changes: 2 additions & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@ def runDoxygen(sourcfile, doxyfileIn, doxyfileOut):
]

def setup(app):
app.add_css_file('css/math_eq.css')
app.add_object_type(
"confval",
"confval",
Expand All @@ -257,3 +258,4 @@ def setup(app):
objname="CMake configuration value",
indextemplate="pair: %s; CMake configuration"
)

1 change: 1 addition & 0 deletions docs/source/install/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,7 @@ The CMake options specific to OpenFAST and their default settings are:
GENERATE_TYPES - Use the openfast-regsitry to autogenerate types modules
ORCA_DLL_LOAD - Enable OrcaFlex library load (Default: OFF)
USE_DLL_INTERFACE - Enable runtime loading of dynamic libraries (Default: ON)
OPENMP - Enable OpenMP parallelization in FVW (Default: OFF)

Additional system-specific options may exist for a given system, but those
should not impact the OpenFAST configuration. As mentioned above, the
Expand Down
19 changes: 19 additions & 0 deletions docs/source/user/aerodyn-olaf/Acknowledgments.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
.. _Acknowledgments:

Acknowledgments
===============

This work was authored by the National Renewable Energy Laboratory,
operated by Alliance for Sustainable Energy, LLC, for the U.S.
Department of Energy (DOE) under Contract No. DE-AC36-08GO28308. Funding
provided by the U.S. Department of Energy Office of Energy Efficiency
and Renewable Energy Wind Energy Technologies Office. The views
expressed in the article do not necessarily represent the views of the
DOE or the U.S. Government. The U.S. Government retains and the
publisher, by accepting the article for publication, acknowledges that
the U.S. Government retains a nonexclusive, paid-up, irrevocable,
worldwide license to publish or reproduce the published form of this
work, or allow others to do so, for U.S. Government purposes.

The authors are also grateful to the Big Adaptive Rotor program for
supporting the development of this software.
52 changes: 52 additions & 0 deletions docs/source/user/aerodyn-olaf/Acronyms.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
.. _Acronyms:

List of Symbols
===============

+-----------------------------+---------------------------------------+
| BEM | blade-element momentum |
+-----------------------------+---------------------------------------+
| CFD | computational fluid dynamics |
+-----------------------------+---------------------------------------+
| DOE | U.S. Department of Energy |
+-----------------------------+---------------------------------------+
| :math:`F_v` | core radius factor |
+-----------------------------+---------------------------------------+
| :math:`t` | time |
+-----------------------------+---------------------------------------+
| FVW | free vortex wake |
+-----------------------------+---------------------------------------+
| :math:`N` | number of rotor revolutions before |
| | wake cutoff condition |
+-----------------------------+---------------------------------------+
| :math:`\vec{r}` | vector between point of interest and |
| | vortex segment |
+-----------------------------+---------------------------------------+
| :math:`\vec{r}(\psi,\zeta)` | position vector of Lagrangian markers |
+-----------------------------+---------------------------------------+
| :math:`r_c` | core radius |
+-----------------------------+---------------------------------------+
| :math:`r_{c0}` | initial core radius |
+-----------------------------+---------------------------------------+
| OLAF | cOnvecting LAgrangian Filaments |
+-----------------------------+---------------------------------------+
| :math:`\alpha` | numerical constant :math:`=1.25643` |
+-----------------------------+---------------------------------------+
| :math:`\Gamma` | circulation strength |
+-----------------------------+---------------------------------------+
| :math:`\delta` | measure of viscous diffusion |
+-----------------------------+---------------------------------------+
| :math:`\epsilon` | measure of strain |
+-----------------------------+---------------------------------------+
| :math:`\Delta \psi` | step size for blade rotation |
+-----------------------------+---------------------------------------+
| :math:`\Omega` | rotational speed of wind turbine |
+-----------------------------+---------------------------------------+
| :math:`\zeta` | vortex wake age |
+-----------------------------+---------------------------------------+
| :math:`\zeta_0` | vortex wake age offset |
+-----------------------------+---------------------------------------+
| :math:`\nu` | kinematic viscosity |
+-----------------------------+---------------------------------------+
| :math:`\psi` | azimuth blade position |
+-----------------------------+---------------------------------------+
13 changes: 13 additions & 0 deletions docs/source/user/aerodyn-olaf/AppendixA.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
.. _OLAF-Primary-Input-File:

Appendix A: OLAF Primary Input File
===================================


**Check the regression test cases for updates to this input file.**

.. container::
:name: Tab:OLAFinputfile

.. literalinclude:: ExampleFiles/ExampleFile--OLAF.txt
:linenos:
12 changes: 12 additions & 0 deletions docs/source/user/aerodyn-olaf/AppendixB.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
.. _Prescribed-Circulation-Input-File:

Appendix B: Prescribed Circulation Input File
=============================================

**Check the regression tests for updated versions of this file.**

.. container::
:name: TabPrescribeCirc

.. literalinclude:: ExampleFiles/ExampleFile--PrescribeCirc.txt
:linenos:
35 changes: 35 additions & 0 deletions docs/source/user/aerodyn-olaf/AppendixC.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
.. _OLAF-List-of-Output-Channels:

Appendix C: OLAF List of Output Channels
========================================

This is a list of all possible output parameters from the OLAF module.
The names are grouped by meaning, but can be ordered in the OUTPUTS
section of the *AeroDyn15* primary input file, as the user sees fit.
:math:`N\beta` refers to output node, :math:`\beta`, where :math:`\beta`
is a number in the range [1,9], corresponding to entry, :math:`\beta`,
in the **OutNd** list. :math:`B\alpha` is prefixed to each output name,
where :math:`\alpha` is a number in the range [1,3], corresponding to
the blade number.


.. list-table:: Available OLAF Output Channels
:widths: 25 15 50
:header-rows: 1
:align: center
:name: Tab:OLAFoutputs

* - Channel Name(s)
- Units
- Description
* - :math:`B \alpha N \beta Gam`
- :math:`m^2/s`
- Circulation along the blade


..
============================ ============= ===========================
Channel Name(s) Units Description
============================ ============= ===========================
:math:`B \alpha N \beta Gam` :math:`m^2/s` Circulation along the blade
============================ ============= ===========================
42 changes: 42 additions & 0 deletions docs/source/user/aerodyn-olaf/ExampleFiles/ExampleFile--OLAF.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
--------------------------- OLAF (cOnvecting LAgrangian Filaments) INPUT FILE -----------------
Free wake input file for the Helix test case
--------------------------- GENERAL OPTIONS ---------------------------------------------------
5 IntMethod Integration method {5: Forward Euler 1st order, default: 5} (switch)
0.2 DTfvw Time interval for wake propagation. {default: dtaero} (s)
5 FreeWakeStart Time when wake is free. (-) value = always free. {default: 0.0} (s)
2.0 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)
0.01 CircSolvConvCrit Convergence criteria {default: 0.001} [only if CircSolvingMethod=1] (-)
0.1 CircSolvRelaxation Relaxation factor {default: 0.1} [only if CircSolvingMethod=1] (-)
30 CircSolvMaxIter Maximum number of iterations for circulation solving {default: 30} (-)
"NA" PrescribedCircFile File containing prescribed circulation [only if CircSolvingMethod=3] (quoted string)
===============================================================================================
--------------------------- WAKE OPTIONS ------------------------------------------------------
------------------- WAKE EXTENT AND DISCRETIZATION --------------------------------------------
50 nNWPanel Number of near-wake panels [integer] (-)
400 WakeLength Total wake distance [integer] (number of time steps)
default FreeWakeLength Wake length that is free [integer] (number of time steps) {default: WakeLength}
False 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}
0 RegDeterMethod Method to determine the regularization parameters {0: Manual, 1: Optimized, default: 0 }
2 RegFunction Viscous diffusion function {0: None, 1: Rankine, 2: LambOseen, 3: Vatistas, 4: Denominator, "default": 3} (switch)
0 WakeRegMethod Wake regularization method {1: Constant, 2: Stretching, 3: Age, default: 1} (switch)
2.0 WakeRegFactor Wake regularization factor (m)
2.0 WingRegFactor Wing regularization factor (m)
100 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}
------------------- SPEEDUP OPTIONS -----------------------------------------------------------
2 VelocityMethod Method to determine the velocity {1:Biot-Savart Segment, 2:Particle 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]
===============================================================================================
--------------------------- 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, "default": 1}
1 VTK_fps Frame rate for VTK output (frames per second) {"all" for all glue code timesteps, "default" for all OLAF timesteps} [used only if WrVTK=1]
------------------------------------------------------------------------------------------------
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
r/R [-], Gamma [m^2/s]
0.048488, 0.000000
0.087326, 0.442312
0.126163, 6.909277
0.165000, 23.678557
0.203837, 55.650700
0.242674, 74.091529
0.281512, 84.205843
0.320349, 88.740429
0.359186, 89.730814
0.398023, 88.568114
0.436860, 87.114743
0.475698, 86.110557
0.514535, 85.705529
0.553372, 85.215829
0.592209, 84.547371
0.631047, 83.774329
0.669884, 82.889157
0.708721, 81.635600
0.747558, 79.788700
0.786395, 77.195200
0.825233, 73.765100
0.864070, 69.275900
0.902907, 62.965400
0.941744, 53.603300
0.980581, 39.854000
31 changes: 31 additions & 0 deletions docs/source/user/aerodyn-olaf/FutureWork.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
.. _Future-Work:

Future Work
===========

This first implementation phase focused on single-turbine capabilities,
fulfilling the basic requirements for the design of large and novel
rotor concepts. Future development work will turn toward the
implementation of features enabling multiple-turbine simulations on
medium-to-large-scale computational clusters. The reduction of the
computational time will also be of focus. This may be achieved using
tree techniques such as the fast multipole method. Further algorithmic
options, such as vortex amalgamation in the far wake, will be considered
to speed up the simulation. The framework presented in this manual is
compatible with grid-free or grid-based vortex particle formulations.
Such particle-based implementations will also be envisaged in the
future. Further validation of the code against measurements and
higher-order tools will be pursued. Applications to cases known to be
challenging for the BEM algorithm will also be investigated, such as
highly flexible rotors, offshore floating turbines, small-scale wind
farms, multiple-rotor turbines, or kites.

The following list contains future work on OLAF software:

- Lagrangian particles

- Multiple turbines, integration into FAST.Farm

- Code speed-up

- Dedicated dynamic stall model
Loading

0 comments on commit 5aacf65

Please sign in to comment.