Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
686636e
AWAE: add missing description of some variables and routines.
andrew-platt May 12, 2026
2ec4f49
AWAE: write wake-plane wireframes to VTK output
andrew-platt May 13, 2026
0eb4bbf
FF: update plan to rev26
andrew-platt May 13, 2026
ec7299e
AWAE: add vtk outputs for each plane. First cut
andrew-platt May 13, 2026
f9694ed
AWAE: add a .vtk.series file for wireframe outputs
andrew-platt May 13, 2026
5c0f840
AWAE: change name for vtkroot, add wake vtk root
andrew-platt May 14, 2026
ddade81
WD: edges of wake planes were not updated in cartesian/curled
andrew-platt May 20, 2026
6a8721e
AWAE/WD: unitinitialized allocatable arrays
andrew-platt May 21, 2026
cf96c93
WD: init values for cartesian/curl planes 0+1
andrew-platt May 21, 2026
d6198e0
FF: update MaxPlanes calculation for cartesian/curl
andrew-platt May 21, 2026
f5ab30a
AWAE: wake plane vtk output missing z contibution
andrew-platt May 21, 2026
0a0fefe
AWAE: move wake visualization into subdirectory
andrew-platt May 21, 2026
a7c102c
FF: change calculations for MaxNumPlanes
andrew-platt May 26, 2026
450056b
docs: add docs for FAST.Farm wake extent
andrew-platt May 26, 2026
791baa8
WD: fix smooth tapering from `numDFull` to `numDBuff` for curled wake
rthedin May 29, 2026
525238e
AWAE: add flag placeholder for when to write planes
andrew-platt Jun 8, 2026
cc3d13b
Merge pull request #32 from rthedin/bugfix/taperfix
andrew-platt Jun 8, 2026
2b6292a
AWAE: extract VTK wake-plane output into new AWAE_vtk module
andrew-platt Jun 10, 2026
c285f45
AWAE: add Write_WireFrame_Series for per-turbine wireframe .vtk.serie…
andrew-platt Jun 11, 2026
d78d541
AWAE: add .vtk.series writer for disturbed-wind slices
andrew-platt Jun 11, 2026
155d40d
Fix missing Vx_wake2 initialization at T=0 for Curl/Cartesian wake mo…
andrew-platt Jun 18, 2026
c192db7
Update .gitignore for VScode + docker configs
andrew-platt Jun 19, 2026
c898551
WD: error handling fix from GH copilot
andrew-platt Jun 19, 2026
13536ed
AWAE: put GridTol back in
andrew-platt Jun 19, 2026
2d2320f
Update TSinflow_curl results after correcting decay
andrew-platt Jun 23, 2026
9601550
AWAE: make planeDomainExit 3D and handle each dimension independently
andrew-platt Jul 1, 2026
19d514a
AWAE/WD: pass wake plane domain-exit flags to WakeDynamics for OOB me…
andrew-platt Jul 2, 2026
0755f49
WD: minor code cleanup, swap order plane merging checks
andrew-platt Jul 2, 2026
8056096
Fix amrex_reader_utest to compile in both single and double precision
andrew-platt Jul 7, 2026
db047db
WakeDynamics: drop individual buffer-exit planes with shift instead o…
andrew-platt Jul 9, 2026
fb80e5e
Replace wakePlaneDomainExit with LowResBounds parameter in WakeDynamics
andrew-platt Jul 9, 2026
bae9581
Merge remote-tracking branch 'OpenFAST/rc-5.0.1' into b/FF_wake_start…
andrew-platt Jul 30, 2026
fa084f8
Merge remote-tracking branch 'OpenFAST/rc-5.0.1' into b/FF_wake_start…
andrew-platt Jul 30, 2026
5a24afa
WD: merge any OOB plane pair, not just adjacent planes
andrew-platt Jul 31, 2026
0df2251
Merge remote-tracking branch 'OpenFAST/rc-5.0.1' into b/FF_wake_start…
andrew-platt Aug 11, 2026
9f33fd7
Merge remote-tracking branch 'OpenFAST/rc-5.0.1' into b/FF_wake_start…
andrew-platt Aug 13, 2026
b6b0626
Add testdrive-based unit test structure for WakeDynamics
andrew-platt Aug 13, 2026
d19d3c4
Fix stack array-bounds overflow when all wake planes are simultaneous…
andrew-platt Aug 13, 2026
5f6850d
WD: only warn once per turbine when MaxNumPlanes is exceeded
andrew-platt Aug 14, 2026
caa6cc2
AWAE: fix off-by-one in high-res AMReX sub-volume count
rthedin Aug 26, 2026
cd27b63
AWAE: compare AMReX directory indices numerically, not lexicographically
rthedin Aug 26, 2026
442e8e2
AWAE: widen AMReX directory index field instead of overflowing to '****'
rthedin Aug 26, 2026
7a72ec0
AWAE: add AMReX directory index tables to ParameterType
rthedin Aug 26, 2026
3d56a20
AWAE: match AMReX sub-volumes to time steps by header time, not index…
rthedin Aug 26, 2026
2c03a68
AWAE: look up AMReX directory index from the table instead of recompu…
rthedin Aug 26, 2026
8d5c39f
AWAE: drop the now-unused AMReX directory stride parameters
rthedin Aug 26, 2026
508ff59
AWAE: add regression tests for variable-stride and wide AMReX indices
rthedin Aug 26, 2026
26d0e9f
AWAE: stop reading every AMReX header on disk during sub-volume search
rthedin Aug 26, 2026
6c745a7
docs: describe time-based AMReX sub-volume matching
rthedin Aug 26, 2026
d3f4ebf
AWAE: read all velocity components from an AMReX plotfile in one pass
rthedin Aug 26, 2026
e377536
AWAE: add unit tests for ReadWindAMReX
rthedin Aug 27, 2026
b1ba1b2
unit_tests: link amrex_reader_utest with the Fortran driver
rthedin Aug 27, 2026
65a6204
Merge remote-tracking branch 'OpenFAST/rc-5.0.1' into b/FF_wake_start…
andrew-platt Aug 28, 2026
2a1010c
unit_tests: drop -cxxlib from the amrex_reader_utest link
rthedin Aug 28, 2026
3340239
AWAE: do not stop the AMReX sub-volume scan while steps are still unc…
rthedin Aug 28, 2026
bd48a65
AWAE: require three components on both AMReX read paths; check index …
rthedin Aug 28, 2026
3e9c46b
AWAE: initialize ErrStat/ErrMsg before the AMReX #ifdef in the shims
rthedin Aug 28, 2026
1d891e8
AWAE: test the header text parser against real sub-volume output
rthedin Aug 28, 2026
0c872de
docs: AMReX high-resolution step count and finer LES cadence
rthedin Aug 28, 2026
6f87289
Merge pull request #33 from rthedin/f/amrex_index
andrew-platt Aug 31, 2026
7762283
AWAE: review fixes for the AMReX reader
andrew-platt Aug 31, 2026
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
Binary file not shown.
Binary file not shown.
Binary file removed docs/OtherSupporting/FAST.Farm_Plan_Rev25.doc
Binary file not shown.
67 changes: 49 additions & 18 deletions docs/source/user/fast.farm/InputFiles.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1134,31 +1134,62 @@ The sub-volume directories must follow the naming convention
and ``1`` through **NumTurbines** for the high-resolution domain of
each wind turbine.

- *<index>* is a zero-padded integer index with the same field width as
**DirStartIndex**. The index for time step :math:`n` is
:math:`\text{DirStartNum} + n \times \Delta_\text{index}`, where
:math:`\text{DirStartNum}` is the integer value of **DirStartIndex**
and :math:`\Delta_\text{index}` is the stride between successive
directory indices (determined automatically by FAST.Farm by scanning
the available directories).

During initialization, FAST.Farm reads the header of the starting
sub-volume for each domain (low-resolution sub-volume 0 and each
high-resolution sub-volume 1 through **NumTurbines**) to obtain the
grid properties, then calls the directory-discovery routine to confirm
that a sufficient number of time steps exist and that the grid
properties are consistent across all time steps. Specifically, FAST.Farm
verifies:

- That at least **NumDT** low-resolution and high-resolution
directories are available for the simulation duration.
- *<index>* is an integer index, zero-padded to at least the field width
of **DirStartIndex** and widened as needed when the step counter grows
past that width.

FAST.Farm does **not** assume a constant stride between successive
directory indices. During initialization it reads the ``Header`` of each
directory matching the prefix and assigns it to a time step by the
simulation time recorded there: the directory used for time step
:math:`n` is the one whose header time is
:math:`t_\text{start} + n\,\Delta t`, where :math:`t_\text{start}` is the
header time of the directory named by **DirStartIndex** and
:math:`\Delta t` is **DT_Low-AMReX** for the low-resolution domain or
**DT_High-AMReX** for the high-resolution domains.

This supports precursor data written with a varying solver time step --
for example an AMR-Wind run that transitions from ``time.initial_dt`` to
``fixed_dt``, where the stride between directory indices changes but the
output interval in time does not -- provided the output interval itself
is uniform.

Times are matched to within a tolerance of
:math:`\max(10^{-6}\ \mathrm{s},\ 10^{-9}(|t_\text{start}| + |t|))`, which
accommodates the floating-point drift accumulated by a long precursor
simulation while remaining far tighter than a single output interval.

Having obtained the grid properties from the starting sub-volume of each
domain (low-resolution sub-volume 0 and each high-resolution sub-volume 1
through **NumTurbines**), FAST.Farm verifies:

- That every required time step is represented by a directory: steps 0
through **NumDT** - 1 for the low-resolution domain, and steps 0
through (**NumDT** - 1) x (**DT_Low-AMReX** / **DT_High-AMReX**) for each
high-resolution domain. A time step matched by no directory (missing
data) is a fatal error naming the time step and its expected simulation
time, as is a time step matched by more than one of the directories
scanned (for example, overlapping output left behind by a restart). The
duplicate check is not exhaustive: the scan stops early once every
required step has been matched, so a stale duplicate at a higher
directory index than the first directory past the simulation window is
not read. Directories whose header time falls between two required
steps are ignored, so the LES may write its sub-volumes at a finer
cadence than FAST.Farm reads them, provided the FAST.Farm time step is
an integer multiple of the output interval.

- That the grid dimensions, origin, and spacing are identical across
all time steps for a given sub-volume.

- That the grid dimensions are the same for all high-resolution
sub-volumes (one per turbine).

- That every high-resolution sub-volume is written at the same
simulation times as sub-volume 1. FAST.Farm uses a single
**DT_High-AMReX** for the whole farm, so a sub-volume on a different
set of times would supply its turbine a different instant than the
rest of the farm.

Because the grid properties are determined from the precursor data
files, the user does not specify low- or high-resolution grid dimensions
or origins in the FAST.Farm primary input file when using
Expand Down
12 changes: 11 additions & 1 deletion glue-codes/fast-farm/src/FAST_Farm_Subs.f90
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,11 @@ SUBROUTINE Farm_Initialize( farm, InputFile, ErrStat, ErrMsg )
call AllocAry( farm%p%MaxNumPlanes, farm%p%NumTurbines, 'farm%p%MaxNumPlanes', ErrStat2, ErrMsg2); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName); if (Failed()) return
do i=1,farm%p%NumTurbines
! Eventually, we will have different settings for different rotors
farm%p%MaxNumPlanes(i) = ceiling( 15.0 * ( WD_InitInput%InputFileData%NumDFull + WD_InitInput%InputFileData%NumDBuff ) / AWAE_InitInput%InputFileData%C_Meander )
if (WD_InitInput%InputFileData%Mod_Wake == Mod_Wake_Polar) then
farm%p%MaxNumPlanes(i) = ceiling( 18.0 * ( WD_InitInput%InputFileData%NumDFull + WD_InitInput%InputFileData%NumDBuff ) / AWAE_InitInput%InputFileData%C_Meander )
else
farm%p%MaxNumPlanes(i) = ceiling( 54.0 * ( WD_InitInput%InputFileData%NumDFull + WD_InitInput%InputFileData%NumDBuff ) )
endif
farm%p%MaxNumPlanes(i) = max( 2, min( farm%p%MaxNumPlanes(i) , farm%p%n_TMax + 2 ) )
end do

Expand Down Expand Up @@ -698,6 +702,12 @@ SUBROUTINE Farm_InitWD( farm, WD_InitInp, ErrStat, ErrMsg )
WD_InitInp%TurbNum = nt
WD_InitInp%MaxNumPlanes = farm%p%MaxNumPlanes(nt)
WD_InitInp%OutFileRoot = farm%p%OutFileRoot
WD_InitInp%LowResBounds(1,1) = farm%p%X0_low
WD_InitInp%LowResBounds(2,1) = farm%p%Y0_low
WD_InitInp%LowResBounds(3,1) = farm%p%Z0_low
WD_InitInp%LowResBounds(1,2) = farm%p%X0_low + farm%p%dX_low * real(farm%p%nX_low - 1, ReKi)
WD_InitInp%LowResBounds(2,2) = farm%p%Y0_low + farm%p%dY_low * real(farm%p%nY_low - 1, ReKi)
WD_InitInp%LowResBounds(3,2) = farm%p%Z0_low + farm%p%dZ_low * real(farm%p%nZ_low - 1, ReKi)

! note that WD_Init has Interval as INTENT(IN) so, we don't need to worry about overwriting farm%p%dt_low here:
call WD_Init( WD_InitInp, farm%WD(nt)%u, farm%WD(nt)%p, farm%WD(nt)%x, farm%WD(nt)%xd, farm%WD(nt)%z, &
Expand Down
1 change: 1 addition & 0 deletions modules/awae/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ add_library(awaelib STATIC
src/AWAE.f90
src/AWAE_IO.f90
src/AWAE_Types.f90
src/AWAE_vtk.f90
src/amrex_utils.F90
)
target_link_libraries(awaelib awaelib_c ifwlib nwtclibs)
Expand Down
Loading
Loading