Skip to content
Open
Show file tree
Hide file tree
Changes from 3 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
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ option(USE_DLL_INTERFACE "Enable runtime loading of dynamic libraries" on)
option(FPE_TRAP_ENABLED "Enable FPE trap in compiler options" off)
option(WIN_DLL_LOAD "Enable loading of Windows only DLL's (OrcaFlex, SoilDyn)" on) # This is mostly for testing purposes
option(BUILD_FASTFARM "Enable building FAST.Farm" off)
option(FASTFARM_TIMING_PRINTS "Enable FAST.Farm timing instrumentation and summary output" off)
option(BUILD_OPENFAST_CPP_API "Enable building OpenFAST - C++ API" off)
option(BUILD_OPENFAST_CPP_DRIVER "Enable building OpenFAST C++ driver using C++ CFD API" off)
option(BUILD_OPENFAST_LIB_DRIVER "Enable building OpenFAST driver using C++ Library API" off)
Expand Down
3 changes: 3 additions & 0 deletions glue-codes/fast-farm/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ add_executable(FAST.Farm
src/FASTWrapper_Types.f90
)
target_link_libraries(FAST.Farm openfastlib_static wdlib awaelib)
if (FASTFARM_TIMING_PRINTS)
target_compile_definitions(FAST.Farm PRIVATE FF_TIMING_PRINTS)
endif()
set_property(TARGET FAST.Farm PROPERTY LINKER_LANGUAGE Fortran)

string(TOUPPER ${CMAKE_Fortran_COMPILER_ID} _compiler_id)
Expand Down
80 changes: 75 additions & 5 deletions glue-codes/fast-farm/src/FAST_Farm.f90
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@ PROGRAM FAST_Farm
REAL(ReKi) :: SimStrtCPU !< User CPU time for simulation (without initialization)
REAL(ReKi) :: ProgStrtCPU !< User CPU time for program (with initialization)

#ifdef FF_TIMING_PRINTS
REAL(DbKi) :: tmSer0
REAL(DbKi) :: tmPar0
REAL(DbKi) :: tmPar1
#endif

! these should probably go in the FAST.Farm registry:
type(All_FastFarm_Data) :: farm

Expand All @@ -74,6 +80,10 @@ PROGRAM FAST_Farm

farm%p%NumTurbines = 0
t = 0

#ifdef FF_TIMING_PRINTS
call FarmTiming_Reset()
#endif

InputFileName = "" ! make sure we don't think this is a "default" inputFileName if not specified on command line
CALL CheckArgs( InputFileName, ErrStat=ErrStat, Flag=FlagArg )
Expand All @@ -85,7 +95,15 @@ PROGRAM FAST_Farm
endif

! Initialize AMReX library
#ifdef FF_TIMING_PRINTS
call cpu_time(tmSer0)
tmPar0 = FarmTiming_WallTime()
#endif
call amrex_init(arg_parmparse=.false.)
#ifdef FF_TIMING_PRINTS
call cpu_time(tmPar1)
call FarmTiming_Add('AMREX:Init', tmPar1-tmSer0, FarmTiming_WallTime()-tmPar0)
#endif

CALL FAST_ProgStart( Farm_Ver ) ! put this after CheckArgs because CheckArgs assumes we haven't called this routine, yet.

Expand All @@ -101,17 +119,33 @@ PROGRAM FAST_Farm
! Initialization
!...............................................................................................................................

call Farm_Initialize( farm, InputFileName, ErrStat, ErrMsg )
#ifdef FF_TIMING_PRINTS
call cpu_time(tmSer0)
tmPar0 = FarmTiming_WallTime()
#endif
call Farm_Initialize( farm, InputFileName, ErrStat, ErrMsg )
CALL CheckError( ErrStat, ErrMsg, 'during driver initialization' )
#ifdef FF_TIMING_PRINTS
call cpu_time(tmPar1)
call FarmTiming_Add('INIT', tmPar1-tmSer0, FarmTiming_WallTime()-tmPar0)
#endif

!...............................................................................................................................
! Initial Calculate Output
!...............................................................................................................................

CALL SimStatus_FirstTime( PrevSimTime, PrevClockTime, SimStrtTime, SimStrtCPU, t, farm%p%TMax )

call FARM_InitialCO(farm, ErrStat, ErrMsg)
#ifdef FF_TIMING_PRINTS
call cpu_time(tmSer0)
tmPar0 = FarmTiming_WallTime()
#endif
call FARM_InitialCO(farm, ErrStat, ErrMsg)
CALL CheckError( ErrStat, ErrMsg, 'during initial calculate output' )
#ifdef FF_TIMING_PRINTS
call cpu_time(tmPar1)
call FarmTiming_Add('ICO', tmPar1-tmSer0, FarmTiming_WallTime()-tmPar0)
#endif

END IF

Expand Down Expand Up @@ -140,16 +174,32 @@ PROGRAM FAST_Farm
t = n_t_global*farm%p%DT_low


CALL FARM_UpdateStates(t, n_t_global, farm, ErrStat, ErrMsg)
#ifdef FF_TIMING_PRINTS
call cpu_time(tmSer0)
tmPar0 = FarmTiming_WallTime()
#endif
CALL FARM_UpdateStates(t, n_t_global, farm, ErrStat, ErrMsg)

CALL CheckError( ErrStat, ErrMsg )
#ifdef FF_TIMING_PRINTS
call cpu_time(tmPar1)
call FarmTiming_Add('US', tmPar1-tmSer0, FarmTiming_WallTime()-tmPar0)
#endif

t = (n_t_global+1)*farm%p%DT_low


CALL FARM_CalcOutput(t, farm, ErrStat, ErrMsg)
#ifdef FF_TIMING_PRINTS
call cpu_time(tmSer0)
tmPar0 = FarmTiming_WallTime()
#endif
CALL FARM_CalcOutput(t, farm, ErrStat, ErrMsg)

CALL CheckError( ErrStat, ErrMsg )
#ifdef FF_TIMING_PRINTS
call cpu_time(tmPar1)
call FarmTiming_Add('CO', tmPar1-tmSer0, FarmTiming_WallTime()-tmPar0)
#endif

CALL SimStatus( PrevSimTime, PrevClockTime, t, farm%p%TMax )

Expand All @@ -160,12 +210,32 @@ PROGRAM FAST_Farm
! End:
!...............................................................................................................................

call FARM_End(farm, ErrStat, ErrMsg)
#ifdef FF_TIMING_PRINTS
call cpu_time(tmSer0)
tmPar0 = FarmTiming_WallTime()
#endif
call FARM_End(farm, ErrStat, ErrMsg)
#ifdef FF_TIMING_PRINTS
call cpu_time(tmPar1)
call FarmTiming_Add('END', tmPar1-tmSer0, FarmTiming_WallTime()-tmPar0)
#endif

! Finalize AMReX library
#ifdef FF_TIMING_PRINTS
call cpu_time(tmSer0)
tmPar0 = FarmTiming_WallTime()
#endif
call amrex_finalize()
#ifdef FF_TIMING_PRINTS
call cpu_time(tmPar1)
call FarmTiming_Add('AMREX:Finalize', tmPar1-tmSer0, FarmTiming_WallTime()-tmPar0)
#endif

CALL RunTimes( ProgStrtTime, ProgStrtCPU, SimStrtTime, SimStrtCPU, t )

#ifdef FF_TIMING_PRINTS
call FarmTiming_PrintSummary()
#endif
call NormStop()

CONTAINS
Expand Down
Loading
Loading