Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 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
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
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,8 @@ varcache
# Python cache files
openfast_io/dist/
openfast_io/openfast_io/_version.py

# docker with VScode config
*.code-workspace
docker-compose.yml
.devcontainer/
Binary file not shown.
Binary file not shown.
Binary file removed docs/OtherSupporting/FAST.Farm_Plan_Rev25.doc
Binary file not shown.
7 changes: 6 additions & 1 deletion glue-codes/fast-farm/src/FAST_Farm_Subs.f90
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,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 @@ -1818,6 +1822,7 @@ SUBROUTINE Transfer_AWAE_to_WD(farm)
farm%WD(nt)%u%V_plane(:,0:MaxPln) = farm%AWAE%y%V_plane(:,0:MaxPln,nt) ! Advection, deflection, and meandering velocity of wake planes, m/s
farm%WD(nt)%u%Vx_wind_disk = farm%AWAE%y%Vx_wind_disk(nt) ! Rotor-disk-averaged ambient wind speed, normal to planes, m/s
farm%WD(nt)%u%TI_amb = farm%AWAE%y%TI_amb(nt) ! Ambient turbulence intensity of wind at rotor disk
farm%WD(nt)%u%wakePlaneDomainExit(:,0:MaxPln) = farm%AWAE%y%wakePlaneDomainExit(:,0:MaxPln,nt) ! Per-dimension domain exit flags
END DO

END SUBROUTINE Transfer_AWAE_to_WD
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
263 changes: 163 additions & 100 deletions modules/awae/src/AWAE.f90

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions modules/awae/src/AWAE_IO.f90
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ subroutine WriteDisWindFiles( n, WrDisSkp1, p, y, m, errStat, errMsg )
! TimeStamp
write(Tstr, '(i' // trim(Num2LStr(p%VTK_tWidth)) //'.'// trim(Num2LStr(p%VTK_tWidth)) // ')') n_out ! TODO use n instead..

FileName = trim(p%OutFileVTKRoot)//".Low.Dis."//trim(Tstr)//".vtk"
FileName = trim(p%OutFileFFvtkRoot)//".Low.Dis."//trim(Tstr)//".vtk"
call WrVTK_SP_header( FileName, "Low resolution disturbed wind for time = "//trim(num2lstr(t_out))//" seconds.", Un, errStat2, errMsg2 )
call SetErrStat(errStat2, errMsg2, ErrStat, ErrMsg, RoutineName)
if (ErrStat >= AbortErrLev) return
Expand All @@ -92,7 +92,7 @@ subroutine WriteDisWindFiles( n, WrDisSkp1, p, y, m, errStat, errMsg )
! We are only writing out the first of the high res data for a given low res time step
! NOTE: y%Vdist_high(nt)%data(:,:,:,:,1) is at T=t_low, and index 0 is at T=t_low-DT_high

FileName = trim(p%OutFileVTKRoot)//".HighT"//trim(num2lstr(nt))//".Dis."//trim(Tstr)//".vtk"
FileName = trim(p%OutFileFFvtkRoot)//".HighT"//trim(num2lstr(nt))//".Dis."//trim(Tstr)//".vtk"
call WrVTK_SP_header( FileName, "High resolution disturbed wind for time = "//trim(num2lstr(t_out))//" seconds.", Un, errStat2, errMsg2 )
call SetErrStat(errStat2, errMsg2, ErrStat, ErrMsg, RoutineName)
if (ErrStat >= AbortErrLev) return
Expand Down
26 changes: 17 additions & 9 deletions modules/awae/src/AWAE_Registry.txt
Original file line number Diff line number Diff line change
Expand Up @@ -127,13 +127,13 @@ typedef ^ MiscVarType IntKi iPlaneTurbTurb {:}{:}{:} - - "Fir
typedef ^ MiscVarType IntKi iPlaneTurbChunk {:}{:}{:} - - "First and Last plane index by source turbine and destination chunk index" -
typedef ^ MiscVarType Logical LowResChunkHasWake {:} - - "Low-res gridFirst and Last plane index by source turbine and destination chunk index" -
typedef ^ MiscVarType ReKi MaxWakePointSep - - - "Maximum separation between wake points" -
typedef ^ MiscVarType Logical parallelFlag {:}{:} - - "" -
typedef ^ MiscVarType ReKi r_s {:}{:} - - "" -
typedef ^ MiscVarType ReKi r_e {:}{:} - - "" -
typedef ^ MiscVarType ReKi rhat_s {:}{:}{:} - - "" -
typedef ^ MiscVarType ReKi rhat_e {:}{:}{:} - - "" -
typedef ^ MiscVarType ReKi pvec_cs {:}{:}{:} - - "" -
typedef ^ MiscVarType ReKi pvec_ce {:}{:}{:} - - "" -
typedef ^ MiscVarType Logical parallelFlag {:}{:} - - "Flag indicating whether adjacent wake planes np and np+1 are (numerically) parallel for each turbine; dims: (plane-pair index np, turbine index nt)" -
typedef ^ MiscVarType ReKi r_s {:}{:} - - "Perpendicular distance from the start wake-plane center p_plane(:,np,nt) to the intersection line of adjacent (non-parallel) wake planes np and np+1; dims: (plane-pair index np, turbine index nt)" m
typedef ^ MiscVarType ReKi r_e {:}{:} - - "Perpendicular distance from the end wake-plane center p_plane(:,np+1,nt) to the intersection line of adjacent (non-parallel) wake planes np and np+1; dims: (plane-pair index np, turbine index nt)" m
typedef ^ MiscVarType ReKi rhat_s {:}{:}{:} - - "Unit vector lying in the start wake plane (np) pointing from the plane-plane intersection line toward the start plane center; dims: (XYZ component, plane-pair index np, turbine index nt)" -
typedef ^ MiscVarType ReKi rhat_e {:}{:}{:} - - "Unit vector lying in the end wake plane (np+1) pointing from the plane-plane intersection line toward the end plane center; dims: (XYZ component, plane-pair index np, turbine index nt)" -
typedef ^ MiscVarType ReKi pvec_cs {:}{:}{:} - - "Closest point on the plane-plane intersection line to the start wake-plane center, p_plane(:,np,nt) - r_s*rhat_s; dims: (XYZ component, plane-pair index np, turbine index nt)" m
typedef ^ MiscVarType ReKi pvec_ce {:}{:}{:} - - "Closest point on the plane-plane intersection line to the end wake-plane center, p_plane(:,np+1,nt) - r_e*rhat_e; dims: (XYZ component, plane-pair index np, turbine index nt)" m
#
typedef ^ MiscVarType SiKi outVizXYPlane {:}{:}{:}{:} - - "An array holding the output data for a 2D visualization slice" -
typedef ^ MiscVarType SiKi outVizYZPlane {:}{:}{:}{:} - - "An array holding the output data for a 2D visualization slice" -
Expand All @@ -145,7 +145,10 @@ typedef ^ MiscVarType InflowWind_OutputType y_IfW_High {:} - - "InflowWi

#wake added turbulence
typedef ^ MiscVarType ReKi V_amb_low_disk {:}{:} - - "Rotor averaged ambiend wind speed for each wind turbine (3 x nWT)" m/s
typedef ^ MiscVarType IntKi planeDomainExit {:}{:} 0 - "Value indicates edge number (0: still in domain, +/-1: +/-X, +/-2: +/-Y, +/-3: +/-Z) the plane crossed" -
typedef ^ MiscVarType IntKi planeDomainExit {:}{:}{:} 0 - "Per-dimension flag (0: still in domain, -1: crossed lower bound, +1: crossed upper bound) for each plane [dim,plane,turbine]" -

#visualization
typedef ^ MiscVarType IntKi WakeVTK_StartN {:}{:} - - "Time step when wake plane starts - counted by N_dtLow. Indices [wakenum,turbnum]" -

# Low-resolution grid chunk data
typedef ^ LRGChunkType IntKi iChunk {3} - - "XYZ index of chunk" -
Expand Down Expand Up @@ -225,8 +228,12 @@ typedef ^ ParameterType IntKi NOutDisWindXZ - - - "Number
typedef ^ ParameterType ReKi OutDisWindY {:} - - "Y coordinates of XZ planes for output of disturbed wind data across the low-resolution domain [1 to NOutDisWindXZ]" meters
typedef ^ ParameterType LOGICAL OutDisWindYvalid {:} - - "Valid XZ planes for output of disturbed wind data across the low-resolution domain [1 to NOutDisWindXZ]" -
typedef ^ ParameterType CHARACTER(1024) OutFileRoot - - - "The root name derived from the primary FAST.Farm input file" -
typedef ^ ParameterType CHARACTER(1024) OutFileVTKRoot - - - "The root name for VTK outputs" -
typedef ^ ParameterType CHARACTER(1024) OutFileFFvtkRoot - - - "The root name for VTK outputs" -
typedef ^ ParameterType CHARACTER(1024) OutFileFFvtkWakeRoot - - - "The root name for VTK outputs for wake planes" -
typedef ^ ParameterType CHARACTER(1024) OutFileFFvtkWakeNullData - - - "Null data for an unpopulated wake plane" -
typedef ^ ParameterType IntKi VTK_tWidth - - - "Number of characters for VTK timestamp outputs" -
typedef ^ ParameterType IntKi VTK_tWidthPlanes - 0 - "Number of charactes for the VTK plane numbers" -
typedef ^ ParameterType LOGICAL WrPlanes - .false. - "Write plane data out" -
#typedef ^ ParameterType OutParmType OutParam {:} - - "Names and units (and other characteristics) of all requested output parameters" -
#wake added turbulence
typedef ^ ParameterType Logical WAT_Enabled - - - "Switch for turning on and off wake-added turbulence" -
Expand All @@ -239,6 +246,7 @@ typedef ^ OutputType AWAE_HighWindGrid Vdist_High {:} - -
typedef ^ OutputType ReKi V_plane {:}{:}{:} - - "Advection, deflection, and meandering velocity of wake planes for each turbine" m/s
typedef ^ OutputType ReKi TI_amb {:} - - "Ambient turbulence intensity of wind at rotor disk for each turbine" -
typedef ^ OutputType ReKi Vx_wind_disk {:} - - "Rotor-disk-averaged ambient wind speed, normal to disk, for each turbine" m/s
typedef ^ OutputType ReKi wakePlaneDomainExit {:}{:}{:} 0 - "Per-dimension flag (0: in domain, -1: crossed lower, +1: crossed upper) for each plane [dim,plane,turbine]" -


# ..... Inputs ...........................................................................................................
Expand Down
Loading
Loading