Skip to content

OLAF: Redundant wake reconstruction for multiple VTK grid outputs - #3470

Open
RBergua wants to merge 4 commits into
OpenFAST:rc-5.0.1from
RBergua:OLAF_VTK_grid_outputs
Open

RBergua wants to merge 4 commits into
OpenFAST:rc-5.0.1from
RBergua:OLAF_VTK_grid_outputs

Conversation

@RBergua

@RBergua RBergua commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

Feature or improvement description
In the current OLAF version, WriteVTKOutputs subroutine in FVW.f90 loops over each requested grid and calls InducedVelocitiesAll_OnGrid. This routine rebuilds the entire induction data from scratch on every call. Basically, OLAF (i) takes every vortex panel and converts them to segments, (ii) those segments are then converted into particles, and (iii) finally the induction tree is built to evaluate the induced velocity at the actual grid points. Since this calculation is the same for every grid except for the evaluation at the actual grid points, the data could be reused, making this process much more efficient.

The code itself acknowledges this inefficiency in FVW.f90:
! Compute induced velocity on grid, TODO use the same Tree for all CalcOutput

Example of 6 grids (VTK outputs) requested in OLAF:

6       nGridOut           Number of grid outputs (the result is written down in the vtk_fvw folder using the name used in GridName below. The name also includes a number that corresponds to the time step specified below as DTOut).
GridName    GridType (1 = velocity, 2 = velocity and vorticity) TStart TEnd           DTOut (all = AeroDyn time step, default: OLAF time step)     XStart    XEnd   nX    YStart   YEnd    nY    ZStart   ZEnd   nZ
(-)           (-)                                                (s)    (s)            (s)                                                          (m)      (m)    (-)    (m)     (m)     (-)    (m)     (m)    (-)
"1D"           1                                                  0     5.0             default                                                 0.3897   0.3897     1  "Ypoints.dat"  -     -     1       1       1      
"2D"           1                                                  0     5.0             default                                                 1.3197   1.3197     1  "Ypoints.dat"  -     -     1       1       1    
"4D"           1                                                  0     5.0             default                                                 3.1797   3.1797     1  "Ypoints.dat"  -     -     1       1       1
"6D"           1                                                  0     5.0             default                                                 5.0397   5.0397     1  "Ypoints.dat"  -     -     1       1       1  
"8D"           1                                                  0     5.0             default                                                 6.8997   6.8997     1  "Ypoints.dat"  -     -     1       1       1
"10D"          1                                                  0     5.0             default                                                 8.7597   8.7597     1  "Ypoints.dat"  -     -     1       1       1

The proposed changes improve the time spent inside WriteVTKOutputs. Such improvements are proportional to the number of grid outputs (nGridOut) requested, how often they are requested (DTOut), and the number of wake panels used (e.g., nNWPanels). As an example, running 5 seconds with the above configuration, the total wall-clock time was improved by 5%.

For reference, the VTK outputs before and after this change are the same. These changes only impact the computational time. See an example below for illustration purposes:
image

@RBergua RBergua added this to the v5.0.1 milestone Sep 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant