Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
4 changes: 4 additions & 0 deletions glue-codes/fast-farm/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ add_executable(FAST.Farm
src/FASTWrapper_Types.f90
)
target_link_libraries(FAST.Farm openfastlib_static wdlib awaelib)
if (FASTFARM_TIMING_PRINTS)
target_sources(FAST.Farm PRIVATE src/FAST_Farm_timings.f90)
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