From fc9586bb5a0618f4bc537fcf009f3ba330a6b504 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Mon, 31 Mar 2025 10:26:31 -0600 Subject: [PATCH 01/27] Add "nouninit" to debug flags for IntelLLVM There is a bug in 2024 and 2025 IFX compiler that creates a conflict with `-lm` and `-ldl` if `check uninit` is enabled. --- cmake/OpenfastFortranOptions.cmake | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/cmake/OpenfastFortranOptions.cmake b/cmake/OpenfastFortranOptions.cmake index 127e1d8783..bc0d585310 100644 --- a/cmake/OpenfastFortranOptions.cmake +++ b/cmake/OpenfastFortranOptions.cmake @@ -164,7 +164,11 @@ macro(set_fast_intel_fortran_posix) # debug flags if(CMAKE_BUILD_TYPE MATCHES Debug) - set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -check all,noarg_temp_created -traceback -init=huge,infinity" ) + if(${CMAKE_Fortran_COMPILER_ID} MATCHES "IntelLLVM") + set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -check all,noarg_temp_created,nouninit -traceback -init=huge,infinity" ) + else() + set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -check all,noarg_temp_created -traceback -init=huge,infinity" ) + endif() endif() # If double precision, make real and double constants 64 bits @@ -222,7 +226,11 @@ macro(set_fast_intel_fortran_windows) # debug flags if(CMAKE_BUILD_TYPE MATCHES Debug) - set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} /check:all,noarg_temp_created /traceback /Qinit=huge,infinity" ) + if(${CMAKE_Fortran_COMPILER_ID} MATCHES "IntelLLVM") + set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} /check:all,noarg_temp_created,nouninit /traceback /Qinit=huge,infinity" ) + else() + set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} /check:all,noarg_temp_created /traceback /Qinit=huge,infinity" ) + endif() endif() check_f2008_features() From b33eb87444d8a8b405e2b9a40c5bc0c7d790c36d Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Mon, 31 Mar 2025 13:43:56 -0600 Subject: [PATCH 02/27] [BugFix] FF OMP critical needed around file closing The `close(Un)` is not atomic, so it may not have released the file before declaring the unit available. This can cause issues with opening a whole bunch of files simulataneously. There are other places that need this fix as well. --- modules/nwtc-library/src/VTK.f90 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/nwtc-library/src/VTK.f90 b/modules/nwtc-library/src/VTK.f90 index c23cf7133b..33edade34d 100644 --- a/modules/nwtc-library/src/VTK.f90 +++ b/modules/nwtc-library/src/VTK.f90 @@ -160,12 +160,13 @@ SUBROUTINE ReadVTK_SP_info( FileName, descr, dims, origin, gridSpacing, vecLabel END IF !$OMP critical(fileopen_critical) - CALL GetNewUnit( Un, ErrStat, ErrMsg ) + CALL GetNewUnit( Un, ErrStat2, ErrMsg2 ) CALL OpenFInpFile ( Un, TRIM(FileName), ErrStat, ErrMsg ) !$OMP end critical(fileopen_critical) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) if (ErrStat >= AbortErrLev) return - CALL ReadCom( Un, FileName, 'File header: Module Version (line 1)', ErrStat2, ErrMsg2, 0 ) + CALL ReadCom( Un, FileName, 'File header: Module Version (line 1)', ErrStat2, ErrMsg2, 0 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) CALL ReadStr( Un, FileName, descr, 'descr', 'File Description line', ErrStat2, ErrMsg2, 0 ) @@ -343,7 +344,9 @@ SUBROUTINE ReadVTK_SP_vectors( FileName, Un, dims, gridVals, ErrStat, ErrMsg ) READ(Un,*, IOSTAT=ErrStat2) gridVals(1:3,1:dims(1),1:dims(2),1:dims(3)) + !$OMP critical(fileopen_critical) close(Un) + !$OMP end critical(fileopen_critical) if (ErrStat2 /= 0) then CALL SetErrStat( ErrID_Fatal, 'Invalid vtk file: '//trim(FileName)//'.', ErrStat, ErrMsg, 'ReadVTK_SP_vectors' ) end if From 34934dbe5bace8f4cdd9f46b78a5963b54c3c541 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Mon, 31 Mar 2025 14:00:40 -0600 Subject: [PATCH 03/27] nwtclib: increase maximum error message length to 2^16 --- modules/nwtc-library/src/NWTC_Base.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nwtc-library/src/NWTC_Base.f90 b/modules/nwtc-library/src/NWTC_Base.f90 index 3cc5d1e65d..1a58ac468a 100644 --- a/modules/nwtc-library/src/NWTC_Base.f90 +++ b/modules/nwtc-library/src/NWTC_Base.f90 @@ -33,7 +33,7 @@ MODULE NWTC_Base ! General constants: INTEGER, PARAMETER :: BITS_IN_ADDR = C_INTPTR_T*8 !< The number of bits in an address (32-bit or 64-bit). - INTEGER, PARAMETER :: ErrMsgLen = 1024 !< The maximum number of characters in an error message in the FAST framework + INTEGER, PARAMETER :: ErrMsgLen = 65536 !< The maximum number of characters in an error message in the FAST framework INTEGER(IntKi), PARAMETER :: ChanLen = 20 !< The maximum allowable length of channel names (i.e., width of output columns) in the FAST framework INTEGER(IntKi), PARAMETER :: OutStrLenM1 = ChanLen - 1 !< The maximum allowable length of channel names without optional "-" or "M" at the beginning to indicate the negative of the channel From 494e6bd3c91a43c1582dc975c18726cc36270b84 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Mon, 31 Mar 2025 16:34:59 -0600 Subject: [PATCH 04/27] Change ErrMsgLen from 65536 to more reasonable 8196 --- modules/nwtc-library/src/NWTC_Base.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nwtc-library/src/NWTC_Base.f90 b/modules/nwtc-library/src/NWTC_Base.f90 index 1a58ac468a..4e25d16c9e 100644 --- a/modules/nwtc-library/src/NWTC_Base.f90 +++ b/modules/nwtc-library/src/NWTC_Base.f90 @@ -33,7 +33,7 @@ MODULE NWTC_Base ! General constants: INTEGER, PARAMETER :: BITS_IN_ADDR = C_INTPTR_T*8 !< The number of bits in an address (32-bit or 64-bit). - INTEGER, PARAMETER :: ErrMsgLen = 65536 !< The maximum number of characters in an error message in the FAST framework + INTEGER, PARAMETER :: ErrMsgLen = 8196 !< The maximum number of characters in an error message in the FAST framework INTEGER(IntKi), PARAMETER :: ChanLen = 20 !< The maximum allowable length of channel names (i.e., width of output columns) in the FAST framework INTEGER(IntKi), PARAMETER :: OutStrLenM1 = ChanLen - 1 !< The maximum allowable length of channel names without optional "-" or "M" at the beginning to indicate the negative of the channel From 004aa6030c013e52a8b74dc2a3bc67f74b743aea Mon Sep 17 00:00:00 2001 From: Mayank Chetan Date: Wed, 2 Apr 2025 21:39:06 -0600 Subject: [PATCH 05/27] @ptrbortolotti: generate BD files if fst_vt dictionary BD keys are not empty --- openfast_io/openfast_io/FAST_reader.py | 8 ++++---- openfast_io/openfast_io/FAST_writer.py | 15 +++++++-------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/openfast_io/openfast_io/FAST_reader.py b/openfast_io/openfast_io/FAST_reader.py index 8bd0d3438e..c7a5db763c 100644 --- a/openfast_io/openfast_io/FAST_reader.py +++ b/openfast_io/openfast_io/FAST_reader.py @@ -3250,11 +3250,11 @@ def execute(self): moordyn_file = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['MooringFile'])) if os.path.isfile(moordyn_file): self.read_MoorDyn(moordyn_file) - if self.fst_vt['Fst']['CompElast'] == 2: - bd_file1 = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['BDBldFile(1)'])) - bd_file2 = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['BDBldFile(2)'])) - bd_file3 = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['BDBldFile(3)'])) + bd_file1 = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['BDBldFile(1)'])) + bd_file2 = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['BDBldFile(2)'])) + bd_file3 = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['BDBldFile(3)'])) + if os.path.exists(bd_file1): # if the files are the same then we only need to read it once, need to handle the cases where we have a 2 or 1 bladed rotor # Check unique BeamDyn blade files and read only once if identical if bd_file1 == bd_file2 and bd_file1 == bd_file3: diff --git a/openfast_io/openfast_io/FAST_writer.py b/openfast_io/openfast_io/FAST_writer.py index 4046357cd5..98c6677ecd 100644 --- a/openfast_io/openfast_io/FAST_writer.py +++ b/openfast_io/openfast_io/FAST_writer.py @@ -239,18 +239,17 @@ def execute(self): if 'options' in self.fst_vt['MoorDyn'] and 'WaterKin' in self.fst_vt['MoorDyn']['options']: self.write_WaterKin(os.path.join(self.FAST_runDirectory,self.fst_vt['MoorDyn']['WaterKin_file'])) - if self.fst_vt['Fst']['CompElast'] == 2: - - # look at if the the self.fst_vt['BeamDyn'] is an array, if so, loop through the array - # if its a dictionary, just write the same BeamDyn file - - if isinstance(self.fst_vt['BeamDyn'], list): - for i_BD, BD in enumerate(self.fst_vt['BeamDyn']): + # # look at if the the self.fst_vt['BeamDyn'] is an array, if so, loop through the array + # # if its a dictionary, just write the same BeamDyn file + if isinstance(self.fst_vt['BeamDyn'], list): + for i_BD, BD in enumerate(self.fst_vt['BeamDyn']): + if not BD == {}: self.fst_vt['Fst']['BDBldFile(%d)'%(i_BD+1)] = self.FAST_namingOut + '_BeamDyn_%d.dat'%(i_BD+1) self.write_BeamDyn(bldInd = i_BD) - elif isinstance(self.fst_vt['BeamDyn'], dict): + elif isinstance(self.fst_vt['BeamDyn'], dict): + if not self.fst_vt['BeamDyn'] == {}: self.fst_vt['Fst']['BDBldFile(1)'] = self.FAST_namingOut + '_BeamDyn.dat' self.fst_vt['Fst']['BDBldFile(2)'] = self.fst_vt['Fst']['BDBldFile(1)'] self.fst_vt['Fst']['BDBldFile(3)'] = self.fst_vt['Fst']['BDBldFile(1)'] From 55a13eeef96b06a2aeaa6ee7fb679cb55831b515 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Mon, 31 Mar 2025 13:49:46 -0600 Subject: [PATCH 06/27] Add documentation on the IntelLLVM `nouninit` flag in cmake --- cmake/OpenfastFortranOptions.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmake/OpenfastFortranOptions.cmake b/cmake/OpenfastFortranOptions.cmake index bc0d585310..84f647d684 100644 --- a/cmake/OpenfastFortranOptions.cmake +++ b/cmake/OpenfastFortranOptions.cmake @@ -165,6 +165,9 @@ macro(set_fast_intel_fortran_posix) # debug flags if(CMAKE_BUILD_TYPE MATCHES Debug) if(${CMAKE_Fortran_COMPILER_ID} MATCHES "IntelLLVM") + # NOTE: there is a bug in the 2024 and 2025 IFX compiler causing conflicts between the `check:uninit` and `-lm -ldl` flags + # When this is fixed in IFX, we will want to update this to check against versions before fix + # See here: https://community.intel.com/t5/Intel-Fortran-Compiler/ifx-IFX-2023-2-0-20230721-linker-problems-with-check-uninit/m-p/1527816 set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -check all,noarg_temp_created,nouninit -traceback -init=huge,infinity" ) else() set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -check all,noarg_temp_created -traceback -init=huge,infinity" ) From ad4297bfd3c2914e6d9d1ba202a9006c903f5259 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Mon, 31 Mar 2025 13:56:24 -0600 Subject: [PATCH 07/27] nwtclib: rewrite GetNewUnit for more speed, increase number of units Co-authored-by: Derek Slaughter --- modules/nwtc-library/src/NWTC_IO.f90 | 65 +++++++++------------------- 1 file changed, 20 insertions(+), 45 deletions(-) diff --git a/modules/nwtc-library/src/NWTC_IO.f90 b/modules/nwtc-library/src/NWTC_IO.f90 index 0e256faaa5..0bef14ceb6 100644 --- a/modules/nwtc-library/src/NWTC_IO.f90 +++ b/modules/nwtc-library/src/NWTC_IO.f90 @@ -1799,20 +1799,13 @@ SUBROUTINE FindLine ( Str , MaxLen , StrEnd ) END SUBROUTINE FindLine !======================================================================= !> This routine returns the next unit number greater than 9 that is not currently in use. -!! If it cannot find any unit between 10 and 99 that is available, it either aborts or returns an appropriate error status/message. +!! If it cannot find any unit between 10 and 2^16-1 that is available, it either aborts or returns an appropriate error status/message. SUBROUTINE GetNewUnit ( UnIn, ErrStat, ErrMsg ) - - - ! Argument declarations. - INTEGER, INTENT(OUT) :: UnIn !< Logical unit for the file. INTEGER(IntKi), INTENT(OUT), OPTIONAL :: ErrStat !< The error status code; If not present code aborts CHARACTER(*), INTENT(OUT), OPTIONAL :: ErrMsg !< The error message, if an error occurred - - ! Local declarations. - INTEGER :: Un ! Unit number LOGICAL :: Opened ! Flag indicating whether or not a file is opened. INTEGER(IntKi), PARAMETER :: StartUnit = 10 ! Starting unit number to check (numbers less than 10 reserved) @@ -1820,48 +1813,30 @@ SUBROUTINE GetNewUnit ( UnIn, ErrStat, ErrMsg ) ! macos -- 256 (change with ulimit -n) ! linux -- 1024 (change with ulimit -n) ! windows -- 512 (not sure how to change -- ADP) - INTEGER(IntKi), PARAMETER :: MaxUnit = 1024 ! The maximum unit number available (or 10 less than the number of files you want to have open at a time) + INTEGER(IntKi), PARAMETER :: MaxUnit = 65535 ! The maximum unit number available (or 10 less than the number of files you want to have open at a time) CHARACTER(ErrMsgLen) :: Msg ! Temporary error message + ! See if unit is connected to an open file. Check the next largest number until it is not opened. + do Un = StartUnit, MaxUnit + UnIn = Un + inquire(unit=Un, opened=Opened) + if (Opened) cycle + if (present(ErrStat)) ErrStat = ErrID_None + if (present(ErrMsg)) ErrMsg = '' + return + end do - ! Initialize subroutine outputs - - Un = StartUnit - - IF ( PRESENT( ErrStat ) ) ErrStat = ErrID_None - IF ( PRESENT( ErrMsg ) ) ErrMsg = '' - - ! See if unit is connected to an open file. Check the next largest number until it is not opened. - - DO - - INQUIRE ( UNIT=Un , OPENED=Opened ) - - IF ( .NOT. Opened ) EXIT - Un = Un + 1 - - IF ( Un > MaxUnit ) THEN - - Msg = 'GetNewUnit() was unable to find an open file unit specifier between '//TRIM(Num2LStr(StartUnit)) & - //' and '//TRIM(Num2LStr(MaxUnit))//'.' - - IF ( PRESENT( ErrStat ) ) THEN - ErrStat = ErrID_Severe - IF ( PRESENT( ErrMsg) ) ErrMsg = Msg - ELSE - CALL ProgAbort( Msg ) - END IF - - EXIT ! stop searching now - - END IF - - - END DO + Msg = 'GetNewUnit() was unable to find an open file unit specifier between '//TRIM(Num2LStr(StartUnit)) & + //' and '//TRIM(Num2LStr(MaxUnit))//'.' - UnIn = Un + UnIn = -1 + if (present(ErrStat)) then + ErrStat = ErrID_Severe + if (present(ErrMsg)) ErrMsg = Msg + else + call ProgAbort(Msg) + end if - RETURN END SUBROUTINE GetNewUnit !======================================================================= !> This function returns a text description of the ErrID (ErrStat) code. From 1406ceb47a68b87c73fecab319f65cf6cb614c59 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 1 Apr 2025 17:14:04 -0600 Subject: [PATCH 08/27] awae: remove unecessary pointers/targets --- modules/awae/src/AWAE.f90 | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/modules/awae/src/AWAE.f90 b/modules/awae/src/AWAE.f90 index cec3d20e3e..656d4201d2 100644 --- a/modules/awae/src/AWAE.f90 +++ b/modules/awae/src/AWAE.f90 @@ -779,7 +779,7 @@ end subroutine HighResGridCalcOutput subroutine AWAE_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitOut, errStat, errMsg ) type(AWAE_InitInputType), intent(in ) :: InitInp !< Input data for initialization routine type(AWAE_InputType), intent( out) :: u !< An initial guess for the input; input mesh must be defined - type(AWAE_ParameterType),target,intent( out) :: p !< Parameters + type(AWAE_ParameterType), intent( out) :: p !< Parameters type(AWAE_ContinuousStateType), intent( out) :: x !< Initial continuous states type(AWAE_DiscreteStateType), intent( out) :: xd !< Initial discrete states type(AWAE_ConstraintStateType), intent( out) :: z !< Initial guess of the constraint states @@ -799,7 +799,7 @@ subroutine AWAE_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitO character(ErrMsgLen) :: errMsg2 ! temporary error message character(*), parameter :: RoutineName = 'AWAE_Init' type(InflowWind_InitInputType) :: IfW_InitInp - type(InflowWind_InitOutputType), target :: IfW_InitOut + type(InflowWind_InitOutputType) :: IfW_InitOut ! Initialize variables for this routine errStat = ErrID_None @@ -1112,12 +1112,9 @@ subroutine CheckModAmb3Boundaries() real(ReKi) :: ff_lim(2) real(ReKi) :: hr_lim(2) real(ReKi), parameter :: GridTol = 1.0E-3 ! Tolerance from IfW for checking the high-res grid (Mod_AmbWind=3 only). - type(FlowFieldType), pointer :: ff ! alias to shorten notation to fullfield - type(WindFileDat), pointer :: wfi ! alias to shorten notation to WindFileInfo character(1024) :: tmpMsg - ff => p%IfW(nt)%FlowField - wfi => IfW_InitOut%WindFileInfo + associate(ff => p%IfW(nt)%FlowField, wfi => IfW_InitOut%WindFileInfo) tmpMsg = NewLine//NewLine//'Turbine '//trim(Num2LStr(nt))//' -- Mod_AmbWind=3 requires the FAST.Farm high-res grid '// & 'is entirely contained within the flow-field from InflowWind. '//NewLine//' Try setting:'//NewLine @@ -1192,6 +1189,7 @@ subroutine CheckModAmb3Boundaries() ErrMsg2 = NewLine//NewLine//'Turbine '//trim(Num2LStr(nt))//' -- Mod_AmbWind=3 requires InflowWind propagation direction alignment with X or Y (0, 90, 180, 270 degrees).' endif endif + end associate end subroutine CheckModAmb3Boundaries logical function Failed() From ff2597d43330230bd28c3d2dd7b2d64d4ebad99d Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 1 Apr 2025 17:15:55 -0600 Subject: [PATCH 09/27] nwtclib: more OMP critical(fileopen_critical) Changed fileopenNWTCio_critical to fileopen_critical so all file open is the same OMP critical --- modules/nwtc-library/src/NWTC_IO.f90 | 18 ++++++++++-------- modules/nwtc-library/src/VTK.f90 | 8 ++++++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/modules/nwtc-library/src/NWTC_IO.f90 b/modules/nwtc-library/src/NWTC_IO.f90 index 0bef14ceb6..d05aac27c1 100644 --- a/modules/nwtc-library/src/NWTC_IO.f90 +++ b/modules/nwtc-library/src/NWTC_IO.f90 @@ -2465,7 +2465,7 @@ SUBROUTINE OpenEcho ( Un, OutFile, ErrStat, ErrMsg, ProgVer ) ! Get a unit number for the echo file: - !$OMP critical(fileopenNWTCio_critical) + !$OMP critical(fileopen_critical) IF ( Un < 0 ) THEN CALL GetNewUnit( Un, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2,ErrStat, ErrMsg, RoutineName ) @@ -2476,7 +2476,7 @@ SUBROUTINE OpenEcho ( Un, OutFile, ErrStat, ErrMsg, ProgVer ) CALL OpenFOutFile( Un, OutFile, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2,ErrStat, ErrMsg, RoutineName ) - !$OMP end critical(fileopenNWTCio_critical) + !$OMP end critical(fileopen_critical) IF ( ErrStat >= AbortErrLev ) RETURN @@ -4703,13 +4703,13 @@ RECURSIVE SUBROUTINE ReadComFile ( FileInfo, FileIndx, AryInd, StartLine, LastLi RETURN END IF - !$OMP critical(fileopenNWTCio_critical) + !$OMP critical(fileopen_critical) CALL GetNewUnit ( UnIn, ErrStatLcl, ErrMsg2 ) CALL SetErrStat( ErrStatLcl, ErrMsg2, ErrStat, ErrMsg, RoutineName ) CALL OpenFInpFile ( UnIn, FileInfo%FileList(FileIndx), ErrStatLcl, ErrMsg2 ) CALL SetErrStat( ErrStatLcl, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - !$OMP end critical(fileopenNWTCio_critical) + !$OMP end critical(fileopen_critical) IF ( ErrStat >= AbortErrLev ) RETURN @@ -6639,11 +6639,11 @@ RECURSIVE SUBROUTINE ScanComFile ( FirstFile, ThisFile, LastFile, StartLine, Las ! Open the input file. UnIn = -1 - !$OMP critical(fileopenNWTCio_critical) + !$OMP critical(fileopen_critical) CALL GetNewUnit ( UnIn, ErrStatLcl, ErrMsg2 ) CALL OpenFInpFile ( UnIn, Filename, ErrStatLcl, ErrMsg2 ) - !$OMP end critical(fileopenNWTCio_critical) + !$OMP end critical(fileopen_critical) IF ( ErrStatLcl /= 0 ) THEN CALL SetErrStat( ErrStatLcl, ErrMsg2, ErrStat, ErrMsg, RoutineName ) CALL Cleanup() @@ -6951,7 +6951,7 @@ SUBROUTINE WrBinFAST(FileName, FileID, DescStr, ChanName, ChanUnit, TimeData, Al ! Generate the unit number for the binary file UnIn = 0 - !$OMP critical(fileopenNWTCio_critical) + !$OMP critical(fileopen_critical) CALL GetNewUnit( UnIn, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) @@ -6961,7 +6961,7 @@ SUBROUTINE WrBinFAST(FileName, FileID, DescStr, ChanName, ChanUnit, TimeData, Al CALL OpenBOutFile ( UnIn, TRIM(FileName), ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - !$OMP end critical(fileopenNWTCio_critical) + !$OMP end critical(fileopen_critical) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() RETURN @@ -7922,8 +7922,10 @@ subroutine ReadDelimFile(Filename, nCol, array, errStat, errMsg, nHeaderLines, p endif ! Open file + !$OMP critical(fileopen_critical) call GetNewUnit(UnIn) call OpenFInpFile(UnIn, Filename_Loc, errStat2, errMsg2); if(Failed()) return + !$OMP end critical(fileopen_critical) ! Count number of lines nLine = line_count(UnIn, errStat2, errMsg2); if(Failed()) return if (allocated(array)) deallocate(array) diff --git a/modules/nwtc-library/src/VTK.f90 b/modules/nwtc-library/src/VTK.f90 index 33edade34d..ae106c821d 100644 --- a/modules/nwtc-library/src/VTK.f90 +++ b/modules/nwtc-library/src/VTK.f90 @@ -119,7 +119,9 @@ SUBROUTINE WrVTK_footer( Un ) WRITE(Un,'(A)') ' ' WRITE(Un,'(A)') ' ' WRITE(Un,'(A)') '' + !$OMP critical(fileopen_critical) CLOSE(Un) + !$OMP end critical(fileopen_critical) RETURN END SUBROUTINE WrVTK_footer @@ -316,7 +318,9 @@ SUBROUTINE ReadVTK_SP_info( FileName, descr, dims, origin, gridSpacing, vecLabel END IF IF ( (ErrStat >= AbortErrLev) .or. closeOnReturn ) THEN + !$OMP critical(fileopen_critical) close(Un) + !$OMP end critical(fileopen_critical) Un = -1 RETURN END IF @@ -409,7 +413,9 @@ SUBROUTINE WrVTK_SP_vectors3D( Un, dataDescr, dims, origin, gridSpacing, gridVal WRITE(Un,'(A,i15)') 'POINT_DATA ', nPts WRITE(Un,'(A)') 'VECTORS '//trim(dataDescr)//' float' WRITE(Un,'(3(f10.2,1X))') gridVals + !$OMP critical(fileopen_critical) close(Un) + !$OMP end critical(fileopen_critical) RETURN END SUBROUTINE WrVTK_SP_vectors3D @@ -501,7 +507,9 @@ logical function vtk_new_ascii_file(filename,label,mvtk) subroutine vtk_close_file(mvtk) type(VTK_Misc),intent(inout) :: mvtk if ( mvtk%bFileOpen ) then + !$OMP critical(fileopen_critical) close(mvtk%vtk_unit) + !$OMP end critical(fileopen_critical) mvtk%bFileOpen=.false. endif endsubroutine From a6df8d4ca271396a195f2cbe78b166e6d53c2709 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 1 Apr 2025 17:19:08 -0600 Subject: [PATCH 10/27] nwtclib: remove extra GetWords call in ReadR4AryWDefault Also remove from Read84AryWDefault. Somehow this was triggering a segfault with IFX. No idea how. --- modules/nwtc-library/src/NWTC_IO.f90 | 6 ------ 1 file changed, 6 deletions(-) diff --git a/modules/nwtc-library/src/NWTC_IO.f90 b/modules/nwtc-library/src/NWTC_IO.f90 index d05aac27c1..bed8342f54 100644 --- a/modules/nwtc-library/src/NWTC_IO.f90 +++ b/modules/nwtc-library/src/NWTC_IO.f90 @@ -6114,9 +6114,6 @@ subroutine ReadR4AryWDefault ( UnIn, Fil, Ary, AryLen, AryName, AryDescr, AryDef if ( index(Word(1), "DEFAULT" ) /= 1 ) then ! If it's not "default", read this variable; otherwise use the DEFAULT value - ! Values exist, so reread line into AryLen of words - call GetWords( Line, Word(AryLen), AryLen) - ! read the first AryLen numbers from the line read (Line,*,iostat=IOS) ( Ary(Ind), Ind=1,AryLen ) @@ -6178,9 +6175,6 @@ subroutine ReadR8AryWDefault ( UnIn, Fil, Ary, AryLen, AryName, AryDescr, AryDef if ( index(Word(1), "DEFAULT" ) /= 1 ) then ! If it's not "default", read this variable; otherwise use the DEFAULT value - ! Values exist, so reread line into AryLen of words - call GetWords( Line, Word(AryLen), AryLen) - ! read the first AryLen numbers from the line read (Line,*,iostat=IOS) ( Ary(Ind), Ind=1,AryLen ) From d0d2069e75d9401327ec1636bf6695a733396d82 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 1 Apr 2025 17:45:33 -0600 Subject: [PATCH 11/27] nwtclib: remove nested OMP critical(fileopen_critical) --- modules/nwtc-library/src/NWTC_IO.f90 | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/nwtc-library/src/NWTC_IO.f90 b/modules/nwtc-library/src/NWTC_IO.f90 index bed8342f54..e63ec42e02 100644 --- a/modules/nwtc-library/src/NWTC_IO.f90 +++ b/modules/nwtc-library/src/NWTC_IO.f90 @@ -7916,10 +7916,8 @@ subroutine ReadDelimFile(Filename, nCol, array, errStat, errMsg, nHeaderLines, p endif ! Open file - !$OMP critical(fileopen_critical) call GetNewUnit(UnIn) call OpenFInpFile(UnIn, Filename_Loc, errStat2, errMsg2); if(Failed()) return - !$OMP end critical(fileopen_critical) ! Count number of lines nLine = line_count(UnIn, errStat2, errMsg2); if(Failed()) return if (allocated(array)) deallocate(array) From d433129e8b876452ae5af7c34538db07c978b7fd Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 1 Apr 2025 18:10:59 -0600 Subject: [PATCH 12/27] nwtclib: rename filename_critical to avoid race conditions --- modules/nwtc-library/src/NWTC_IO.f90 | 16 ++++++------- modules/nwtc-library/src/VTK.f90 | 36 ++++++++++++++-------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/modules/nwtc-library/src/NWTC_IO.f90 b/modules/nwtc-library/src/NWTC_IO.f90 index e63ec42e02..41f16ca38e 100644 --- a/modules/nwtc-library/src/NWTC_IO.f90 +++ b/modules/nwtc-library/src/NWTC_IO.f90 @@ -2465,7 +2465,7 @@ SUBROUTINE OpenEcho ( Un, OutFile, ErrStat, ErrMsg, ProgVer ) ! Get a unit number for the echo file: - !$OMP critical(fileopen_critical) + !$OMP critical(fileopenNWTCio_critical) IF ( Un < 0 ) THEN CALL GetNewUnit( Un, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2,ErrStat, ErrMsg, RoutineName ) @@ -2476,7 +2476,7 @@ SUBROUTINE OpenEcho ( Un, OutFile, ErrStat, ErrMsg, ProgVer ) CALL OpenFOutFile( Un, OutFile, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2,ErrStat, ErrMsg, RoutineName ) - !$OMP end critical(fileopen_critical) + !$OMP end critical(fileopenNWTCio_critical) IF ( ErrStat >= AbortErrLev ) RETURN @@ -4703,13 +4703,13 @@ RECURSIVE SUBROUTINE ReadComFile ( FileInfo, FileIndx, AryInd, StartLine, LastLi RETURN END IF - !$OMP critical(fileopen_critical) + !$OMP critical(fileopenNWTCio_critical) CALL GetNewUnit ( UnIn, ErrStatLcl, ErrMsg2 ) CALL SetErrStat( ErrStatLcl, ErrMsg2, ErrStat, ErrMsg, RoutineName ) CALL OpenFInpFile ( UnIn, FileInfo%FileList(FileIndx), ErrStatLcl, ErrMsg2 ) CALL SetErrStat( ErrStatLcl, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - !$OMP end critical(fileopen_critical) + !$OMP end critical(fileopenNWTCio_critical) IF ( ErrStat >= AbortErrLev ) RETURN @@ -6633,11 +6633,11 @@ RECURSIVE SUBROUTINE ScanComFile ( FirstFile, ThisFile, LastFile, StartLine, Las ! Open the input file. UnIn = -1 - !$OMP critical(fileopen_critical) + !$OMP critical(fileopenNWTCio_critical) CALL GetNewUnit ( UnIn, ErrStatLcl, ErrMsg2 ) CALL OpenFInpFile ( UnIn, Filename, ErrStatLcl, ErrMsg2 ) - !$OMP end critical(fileopen_critical) + !$OMP end critical(fileopenNWTCio_critical) IF ( ErrStatLcl /= 0 ) THEN CALL SetErrStat( ErrStatLcl, ErrMsg2, ErrStat, ErrMsg, RoutineName ) CALL Cleanup() @@ -6945,7 +6945,7 @@ SUBROUTINE WrBinFAST(FileName, FileID, DescStr, ChanName, ChanUnit, TimeData, Al ! Generate the unit number for the binary file UnIn = 0 - !$OMP critical(fileopen_critical) + !$OMP critical(fileopenNWTCio_critical) CALL GetNewUnit( UnIn, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) @@ -6955,7 +6955,7 @@ SUBROUTINE WrBinFAST(FileName, FileID, DescStr, ChanName, ChanUnit, TimeData, Al CALL OpenBOutFile ( UnIn, TRIM(FileName), ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - !$OMP end critical(fileopen_critical) + !$OMP end critical(fileopenNWTCio_critical) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() RETURN diff --git a/modules/nwtc-library/src/VTK.f90 b/modules/nwtc-library/src/VTK.f90 index ae106c821d..e4ffc614d0 100644 --- a/modules/nwtc-library/src/VTK.f90 +++ b/modules/nwtc-library/src/VTK.f90 @@ -93,10 +93,10 @@ SUBROUTINE WrVTK_header( FileName, NumberOfPoints, NumberOfLines, NumberOfPolys, INTEGER(IntKi) , INTENT( OUT) :: ErrStat !< error level/status of OpenFOutFile operation CHARACTER(*) , INTENT( OUT) :: ErrMsg !< message when error occurs - !$OMP critical(fileopen_critical) + !$OMP critical(fileopenNWTCio_critical) CALL GetNewUnit( Un, ErrStat, ErrMsg ) CALL OpenFOutFile ( Un, TRIM(FileName), ErrStat, ErrMsg ) - !$OMP end critical(fileopen_critical) + !$OMP end critical(fileopenNWTCio_critical) if (ErrStat >= AbortErrLev) return ! Write a VTP mesh file (Polygonal VTK file) with positions and polygons (surfaces) @@ -119,9 +119,9 @@ SUBROUTINE WrVTK_footer( Un ) WRITE(Un,'(A)') ' ' WRITE(Un,'(A)') ' ' WRITE(Un,'(A)') '' - !$OMP critical(fileopen_critical) + !$OMP critical(fileopenNWTCio_critical) CLOSE(Un) - !$OMP end critical(fileopen_critical) + !$OMP end critical(fileopenNWTCio_critical) RETURN END SUBROUTINE WrVTK_footer @@ -161,10 +161,10 @@ SUBROUTINE ReadVTK_SP_info( FileName, descr, dims, origin, gridSpacing, vecLabel closeOnReturn = .FALSE. END IF - !$OMP critical(fileopen_critical) + !$OMP critical(fileopenNWTCio_critical) CALL GetNewUnit( Un, ErrStat2, ErrMsg2 ) CALL OpenFInpFile ( Un, TRIM(FileName), ErrStat, ErrMsg ) - !$OMP end critical(fileopen_critical) + !$OMP end critical(fileopenNWTCio_critical) call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) if (ErrStat >= AbortErrLev) return @@ -318,9 +318,9 @@ SUBROUTINE ReadVTK_SP_info( FileName, descr, dims, origin, gridSpacing, vecLabel END IF IF ( (ErrStat >= AbortErrLev) .or. closeOnReturn ) THEN - !$OMP critical(fileopen_critical) + !$OMP critical(fileopenNWTCio_critical) close(Un) - !$OMP end critical(fileopen_critical) + !$OMP end critical(fileopenNWTCio_critical) Un = -1 RETURN END IF @@ -348,9 +348,9 @@ SUBROUTINE ReadVTK_SP_vectors( FileName, Un, dims, gridVals, ErrStat, ErrMsg ) READ(Un,*, IOSTAT=ErrStat2) gridVals(1:3,1:dims(1),1:dims(2),1:dims(3)) - !$OMP critical(fileopen_critical) + !$OMP critical(fileopenNWTCio_critical) close(Un) - !$OMP end critical(fileopen_critical) + !$OMP end critical(fileopenNWTCio_critical) if (ErrStat2 /= 0) then CALL SetErrStat( ErrID_Fatal, 'Invalid vtk file: '//trim(FileName)//'.', ErrStat, ErrMsg, 'ReadVTK_SP_vectors' ) end if @@ -368,10 +368,10 @@ SUBROUTINE WrVTK_SP_header( FileName, descr, Un, ErrStat, ErrMsg ) INTEGER(IntKi) , INTENT( OUT) :: ErrStat !< error level/status of OpenFOutFile operation CHARACTER(*) , INTENT( OUT) :: ErrMsg !< message when error occurs - !$OMP critical(fileopen_critical) + !$OMP critical(fileopenNWTCio_critical) CALL GetNewUnit( Un, ErrStat, ErrMsg ) CALL OpenFOutFile ( Un, TRIM(FileName), ErrStat, ErrMsg ) - !$OMP end critical(fileopen_critical) + !$OMP end critical(fileopenNWTCio_critical) if (ErrStat >= AbortErrLev) return WRITE(Un,'(A)') '# vtk DataFile Version 3.0' @@ -413,9 +413,9 @@ SUBROUTINE WrVTK_SP_vectors3D( Un, dataDescr, dims, origin, gridSpacing, gridVal WRITE(Un,'(A,i15)') 'POINT_DATA ', nPts WRITE(Un,'(A)') 'VECTORS '//trim(dataDescr)//' float' WRITE(Un,'(3(f10.2,1X))') gridVals - !$OMP critical(fileopen_critical) + !$OMP critical(fileopenNWTCio_critical) close(Un) - !$OMP end critical(fileopen_critical) + !$OMP end critical(fileopenNWTCio_critical) RETURN END SUBROUTINE WrVTK_SP_vectors3D @@ -461,7 +461,7 @@ logical function vtk_new_ascii_file(filename,label,mvtk) logical :: b if (.not. mvtk%bFileOpen) then - !$OMP critical(fileopen_critical) + !$OMP critical(fileopenNWTCio_critical) CALL GetNewUnit( mvtk%vtk_unit ) if (mvtk%bBinary) then ! Fortran 2003 stream, otherwise intel fortran ! @@ -477,7 +477,7 @@ logical function vtk_new_ascii_file(filename,label,mvtk) else open(mvtk%vtk_unit,file=trim(adjustl(filename)),iostat=iostatvar,action="write",status='replace') endif - !$OMP end critical(fileopen_critical) + !$OMP end critical(fileopenNWTCio_critical) if (iostatvar == 0) then if (mvtk%bBinary) then write(mvtk%vtk_unit)'# vtk DataFile Version 3.0'//NewLine @@ -507,9 +507,9 @@ logical function vtk_new_ascii_file(filename,label,mvtk) subroutine vtk_close_file(mvtk) type(VTK_Misc),intent(inout) :: mvtk if ( mvtk%bFileOpen ) then - !$OMP critical(fileopen_critical) + !$OMP critical(fileopenNWTCio_critical) close(mvtk%vtk_unit) - !$OMP end critical(fileopen_critical) + !$OMP end critical(fileopenNWTCio_critical) mvtk%bFileOpen=.false. endif endsubroutine From bb42472f6f8cdbc6c5bf3684681877c31443ab79 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Wed, 2 Apr 2025 01:27:45 -0600 Subject: [PATCH 13/27] awae: add info on OMP_STACKSIZE Segmentation faults can occur if the OMP PARALLEL DO has enough private memory per thread that it exceeds the default OMP_STACKSIZE="4 M". If this happens, `export OMP_STACKSIZE="32 M"` or suitably large value. Calculating the values for this don't exactly work out as I would expect, but are in the ballpark (see code note) --- modules/awae/src/AWAE.f90 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/awae/src/AWAE.f90 b/modules/awae/src/AWAE.f90 index 656d4201d2..8ec2bbe113 100644 --- a/modules/awae/src/AWAE.f90 +++ b/modules/awae/src/AWAE.f90 @@ -701,6 +701,13 @@ subroutine HighResGridCalcOutput(n, u, p, xd, y, m, errStat, errMsg) ! NOTE: loop here is different from low res grid, doing: turbines > grid > turbines(nt/=nt2) > planes ! instead of grid > turbines > planes ! TODO explain + ! + ! WARNING: the way this is setup can use a lot of memory, and may run out of OMP stack. If that happens, + ! use `export OMP_STACKSIZE="32 M"` (default is 4 M). + ! Rough calculation of memory expected: + ! maxN_wake * 13 * OMP_NUM_THREADS * = size in bytes + ! HOWEVER, real world testing shows that for 103 threads with 114 turbines and maxN_wake=101346 is more like + ! maxN_wake * 40 * = size in bytes NumGrid_high = p%nX_high*p%nY_high*p%nZ_high do nt = 1,p%NumTurbines From 410279ce02557d50566f9a691d47175be2c457bd Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Wed, 2 Apr 2025 14:21:07 -0600 Subject: [PATCH 14/27] docs: add troubleshooting info for FF seg faults --- .../Troubleshooting_SegFaultScreen.png | Bin 0 -> 13125 bytes docs/source/user/fast.farm/RunningFFarm.rst | 33 ++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 docs/source/user/fast.farm/Pictures/Troubleshooting_SegFaultScreen.png diff --git a/docs/source/user/fast.farm/Pictures/Troubleshooting_SegFaultScreen.png b/docs/source/user/fast.farm/Pictures/Troubleshooting_SegFaultScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..95a03dca5a3c0c6ce1bc6565c24a66e807bb8e61 GIT binary patch literal 13125 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 o2dzK*HTaK<^Ug1 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 J<@`Uq{})_or%3<+ literal 0 HcmV?d00001 diff --git a/docs/source/user/fast.farm/RunningFFarm.rst b/docs/source/user/fast.farm/RunningFFarm.rst index bdae0343e8..fcba5a0e24 100644 --- a/docs/source/user/fast.farm/RunningFFarm.rst +++ b/docs/source/user/fast.farm/RunningFFarm.rst @@ -14,3 +14,36 @@ available in the :ref:`installation` documentation. .. note:: Checkpoint-restart capability has not yet been implemented within FAST.Farm. + + +Troubleshooting +--------------- + +Segmentation fault at start +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Very large FAST.Farm simulations may experience a segmentation fault if +insufficient stack memory is set aside for OpenMP. This may appear on +simulations with more than 50 turbines spaced over tens of kilometers. If this +is the case, the fault is likely to occur right after screen displays the T=0 +timestep. + +.. image:: Pictures/Troubleshooting_SegFaultScreen.png + +To increase the stack assigned to the OpenMP process on linux based machines, +the environment variable `OMP_STACKSIZE` can be increased from the default 4 MB +(Intel compiled) to 32 MB (or more) by + +.. code-block:: + + export OMP_STACKSIZE="32 M" + +If this solves the segmentation fault, then the root cause is from the +parallelization with OpenMP not having sufficient stack reserve. If this does +not solve the issue, then there may be other problems that should be reported. + +For further reading on segmentation faults with OpenMP, see `stackoverflow +comment +`_ +and `Intel OpenMP documentation +`_. From bb1d6f1dc857bad69768bd5e67105537a66991cf Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Wed, 2 Apr 2025 15:08:38 -0600 Subject: [PATCH 15/27] nwtclib: remove uneccessary array in ReadR4AryWDefault --- modules/nwtc-library/src/NWTC_IO.f90 | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/nwtc-library/src/NWTC_IO.f90 b/modules/nwtc-library/src/NWTC_IO.f90 index 41f16ca38e..241a7bc672 100644 --- a/modules/nwtc-library/src/NWTC_IO.f90 +++ b/modules/nwtc-library/src/NWTC_IO.f90 @@ -6100,7 +6100,7 @@ subroutine ReadR4AryWDefault ( UnIn, Fil, Ary, AryLen, AryName, AryDescr, AryDef integer :: Ind ! Index into the string array. Assumed to be one digit. integer :: IOS ! I/O status returned from the read statement. - character(30) :: Word(AryLen) ! String to hold the words on the line. + character(30) :: Word ! String to hold the words on the line. character(2048) :: Line ! The contents of a line returned from ReadLine() with comment removed. integer :: LineLen ! Length of line read in @@ -6109,10 +6109,10 @@ subroutine ReadR4AryWDefault ( UnIn, Fil, Ary, AryLen, AryName, AryDescr, AryDef if (ErrStat >= AbortErrLev) return ! check for default - call GetWords(Line, Word(1), 1) - call Conv2UC( Word(1) ) + call GetWords(Line, Word, 1) + call Conv2UC( Word ) - if ( index(Word(1), "DEFAULT" ) /= 1 ) then ! If it's not "default", read this variable; otherwise use the DEFAULT value + if ( index(Word, "DEFAULT" ) /= 1 ) then ! If it's not "default", read this variable; otherwise use the DEFAULT value ! read the first AryLen numbers from the line read (Line,*,iostat=IOS) ( Ary(Ind), Ind=1,AryLen ) @@ -6161,7 +6161,7 @@ subroutine ReadR8AryWDefault ( UnIn, Fil, Ary, AryLen, AryName, AryDescr, AryDef integer :: Ind ! Index into the string array. Assumed to be one digit. integer :: IOS ! I/O status returned from the read statement. - character(30) :: Word(AryLen) ! String to hold the words on the line. + character(30) :: Word ! String to hold the words on the line. character(2048) :: Line ! The contents of a line returned from ReadLine() with comment removed. integer :: LineLen ! Length of line read in @@ -6170,10 +6170,10 @@ subroutine ReadR8AryWDefault ( UnIn, Fil, Ary, AryLen, AryName, AryDescr, AryDef if (ErrStat >= AbortErrLev) return ! check for default - call GetWords(Line, Word(1), 1) - call Conv2UC( Word(1) ) + call GetWords(Line, Word, 1) + call Conv2UC( Word ) - if ( index(Word(1), "DEFAULT" ) /= 1 ) then ! If it's not "default", read this variable; otherwise use the DEFAULT value + if ( index(Word, "DEFAULT" ) /= 1 ) then ! If it's not "default", read this variable; otherwise use the DEFAULT value ! read the first AryLen numbers from the line read (Line,*,iostat=IOS) ( Ary(Ind), Ind=1,AryLen ) From 5361499ab82729b3c5eef6088217943ef8b1a257 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Wed, 2 Apr 2025 15:26:16 -0600 Subject: [PATCH 16/27] awae: missing OMP critical The routine isn't actually used... yet. But for completeness adding the critical around the close so it isn't an issue later when I actually use the routine --- modules/awae/src/AWAE_IO.f90 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/awae/src/AWAE_IO.f90 b/modules/awae/src/AWAE_IO.f90 index 4d8d5e37bc..86ee0b77c5 100644 --- a/modules/awae/src/AWAE_IO.f90 +++ b/modules/awae/src/AWAE_IO.f90 @@ -513,7 +513,9 @@ SUBROUTINE AWAE_PrintSum( p, u, y, ErrStat, ErrMsg ) + !$OMP critical(fileopen_critical) CLOSE(UnSu) + !$OMP end critical(fileopen_critical) RETURN END SUBROUTINE AWAE_PrintSum From 3e73c6b111b7738d0cbefe272e18426d13fa42f8 Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Fri, 4 Apr 2025 14:21:50 +0000 Subject: [PATCH 17/27] Disable HeapArrays when using Intel compilers because it caused a memory leak with the IFX compiler. --- cmake/OpenfastFortranOptions.cmake | 8 ++------ vs-build/FASTlib/FASTlib.vfproj | 14 +++++++------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/cmake/OpenfastFortranOptions.cmake b/cmake/OpenfastFortranOptions.cmake index bc0d585310..218e437a22 100644 --- a/cmake/OpenfastFortranOptions.cmake +++ b/cmake/OpenfastFortranOptions.cmake @@ -158,9 +158,7 @@ endmacro(set_fast_intel_fortran) # arch # macro(set_fast_intel_fortran_posix) - # Set size where temporary are stored on heap instead of stack - # 1000: size in kB (1 MB) - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fpic -fpp -heap-arrays 1000") + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fpic -fpp") # debug flags if(CMAKE_BUILD_TYPE MATCHES Debug) @@ -207,9 +205,7 @@ macro(set_fast_intel_fortran_windows) # Turn off specific warnings # - 5199: too many continuation lines # - 5268: 132 column limit - # Set size where temporary are stored on heap instead of stack - # 1000: size in kB (1 MB) - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /Qdiag-disable:5199,5268 /fpp /heap-arrays:1000") + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /Qdiag-disable:5199,5268 /fpp") # If double precision, make constants double precision if (DOUBLE_PRECISION) diff --git a/vs-build/FASTlib/FASTlib.vfproj b/vs-build/FASTlib/FASTlib.vfproj index 4d87a023a7..e983b4491d 100644 --- a/vs-build/FASTlib/FASTlib.vfproj +++ b/vs-build/FASTlib/FASTlib.vfproj @@ -23,7 +23,7 @@ - + @@ -32,7 +32,7 @@ - + @@ -50,7 +50,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -104,7 +104,7 @@ - + @@ -122,7 +122,7 @@ - + From 8b453e127b2a3ae4e674ef8f9483c52a44f63d1d Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Fri, 4 Apr 2025 14:45:10 +0000 Subject: [PATCH 18/27] Use HeapArrays="" in VS projects --- vs-build/FAST-farm/FAST-Farm.vfproj | 12 ++++++------ vs-build/FASTlib/FASTlib.vfproj | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/vs-build/FAST-farm/FAST-Farm.vfproj b/vs-build/FAST-farm/FAST-Farm.vfproj index 4ad7d14ac5..ccd5bd0cc6 100644 --- a/vs-build/FAST-farm/FAST-Farm.vfproj +++ b/vs-build/FAST-farm/FAST-Farm.vfproj @@ -5,7 +5,7 @@ - + @@ -15,7 +15,7 @@ - + @@ -25,7 +25,7 @@ - + @@ -35,7 +35,7 @@ - + @@ -45,7 +45,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/vs-build/FASTlib/FASTlib.vfproj b/vs-build/FASTlib/FASTlib.vfproj index e983b4491d..1f81fd86f6 100644 --- a/vs-build/FASTlib/FASTlib.vfproj +++ b/vs-build/FASTlib/FASTlib.vfproj @@ -23,7 +23,7 @@ - + @@ -32,7 +32,7 @@ - + @@ -50,7 +50,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -104,7 +104,7 @@ - + @@ -122,7 +122,7 @@ - + From f2a1c533f34d7cff0ef63bb15c7443043ebd2f82 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Fri, 4 Apr 2025 01:20:50 -0600 Subject: [PATCH 19/27] nwtclib: add `(in x.xx days)` to simstatus --- modules/nwtc-library/src/NWTC_Num.f90 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/nwtc-library/src/NWTC_Num.f90 b/modules/nwtc-library/src/NWTC_Num.f90 index 4316131007..d24ad7b406 100644 --- a/modules/nwtc-library/src/NWTC_Num.f90 +++ b/modules/nwtc-library/src/NWTC_Num.f90 @@ -5697,6 +5697,7 @@ SUBROUTINE SimStatus( PrevSimTime, PrevClockTime, ZTime, TMax, DescStrIn, StatIn REAL(ReKi), PARAMETER :: SecPerDay = 24*60*60.0_ReKi ! Number of seconds per day + REAL(SiKi) :: DaysRemain ! Days remaining (decimal) INTEGER(4) :: EndHour ! The hour when the simulations is expected to complete. INTEGER(4) :: EndMin ! The minute when the simulations is expected to complete. INTEGER(4) :: EndSec ! The second when the simulations is expected to complete. @@ -5704,6 +5705,7 @@ SUBROUTINE SimStatus( PrevSimTime, PrevClockTime, ZTime, TMax, DescStrIn, StatIn CHARACTER(MaxWrScrLen) :: BlankLine CHARACTER( 8) :: ETimeStr ! String containing the end time. + CHARACTER( 10) :: DaysRemainStr !< decimal format of number of days left CHARACTER( 10) :: DescStr !< optional additional string to print for SimStatus CHARACTER(200) :: StatInfo !< optional additional string to print for SimStatus @@ -5744,18 +5746,20 @@ SUBROUTINE SimStatus( PrevSimTime, PrevClockTime, ZTime, TMax, DescStrIn, StatIn ! Estimate the end time in hours, minutes, and seconds SimTimeLeft = REAL( ( TMax - ZTime )*DeltTime/( ZTime - PrevSimTime ), ReKi ) ! DeltTime/( ZTime - PrevSimTime ) is the delta_ClockTime divided by the delta_SimulationTime + DaysRemain = real((CurrClockTime+SimTimeLeft) / real(SecPerDay,ReKi),SiKi) EndTime = MOD( CurrClockTime+SimTimeLeft, SecPerDay ) EndHour = INT( EndTime*InSecHr ) EndMin = INT( ( EndTime - REAL( 3600*EndHour ) )*InSecMn ) EndSec = NINT( EndTime - REAL( 3600*EndHour + 60*EndMin ) ) !bjj: this NINT can make the seconds say "60" WRITE (ETimeStr,"(I2.2,2(':',I2.2))") EndHour, EndMin, EndSec + WRITE (DaysRemainStr,"(f10.3)") DaysRemain BlankLine = "" CALL WrOver( BlankLine ) ! BlankLine contains MaxWrScrLen spaces CALL WrOver ( trim(DescStr)//' Time: '//TRIM( Num2LStr( NINT( ZTime ) ) )//' of '//TRIM( Num2LStr( TMax ) )// & ' seconds. '//trim(StatInfo)// & - ' Estimated final completion at '//ETimeStr//'.') + ' Estimated final completion at '//ETimeStr//' (in '//trim(adjustl(DaysRemainStr))//' days).') ! Let's save this time as the previous time for the next call to the routine PrevClockTime = CurrClockTime From 4b07c86490780efc384da4c023d869c35b028931 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 8 Apr 2025 10:50:49 -0600 Subject: [PATCH 20/27] awae: remove some extra omp comments --- modules/awae/src/AWAE.f90 | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/modules/awae/src/AWAE.f90 b/modules/awae/src/AWAE.f90 index 8ec2bbe113..fd80cd6b9a 100644 --- a/modules/awae/src/AWAE.f90 +++ b/modules/awae/src/AWAE.f90 @@ -1293,9 +1293,6 @@ subroutine AWAE_UpdateStates( t, n, u, p, x, xd, z, OtherState, m, errStat, errM errMsg = "" ! Read the ambient wind data that is needed for t+dt, i.e., n+1 -!#ifdef _OPENMP -! t1 = omp_get_wtime() -!#endif if ( (n+1) == (p%NumDT-1) ) then n_high_low = 0 @@ -1306,10 +1303,6 @@ subroutine AWAE_UpdateStates( t, n, u, p, x, xd, z, OtherState, m, errStat, errM if ( p%Mod_AmbWind == 1 ) then ! read from file the ambient flow for the n+1 time step call ReadLowResWindFile(n+1, p, m%Vamb_Low, errStat2, errMsg2); if (Failed()) return; - !#ifdef _OPENMP - ! t2 = omp_get_wtime() - ! write(*,*) ' AWAE_UpdateStates: Time spent reading Low Res data : '//trim(num2lstr(t2-t1))//' seconds' - !#endif !$OMP PARALLEL DO DEFAULT(Shared) PRIVATE(nt, i_hl, errStat2, errMsg2) !Private(nt,tm2,tm3) do nt = 1,p%NumTurbines @@ -1405,11 +1398,6 @@ subroutine AWAE_UpdateStates( t, n, u, p, x, xd, z, OtherState, m, errStat, errM xd%WAT_B_Box(1:3) = xd%WAT_B_Box(1:3) + xd%Ufarm(1:3)*real(p%dt_low,ReKi) endif -!#ifdef _OPENMP -! t1 = omp_get_wtime() -! write(*,*) ' AWAE_UpdateStates: Time spent reading High Res data : '//trim(num2lstr(t1-t2))//' seconds' -!#endif - contains logical function Failed() call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) From 1e4b4167fe1b6ccc2cfcd6ed52c8770454d2fa14 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 8 Apr 2025 12:30:27 -0600 Subject: [PATCH 21/27] Update changelog for v4.0.3 --- docs/changelogs/ReleaseProcess.md | 54 ++++++++++---------- docs/changelogs/v4.0.3.md | 83 +++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 27 deletions(-) create mode 100644 docs/changelogs/v4.0.3.md diff --git a/docs/changelogs/ReleaseProcess.md b/docs/changelogs/ReleaseProcess.md index dd29564573..74f2a02caf 100644 --- a/docs/changelogs/ReleaseProcess.md +++ b/docs/changelogs/ReleaseProcess.md @@ -49,33 +49,33 @@ After posting and tagging release * Run one of the executables and check the version info. Muck about with VS if there is an issue. * Also run `dumpbin.exe /dependents .exe` to check static linking * NOTE: build the simulink last -- it messes up some things otherwise - - [ ] AeroDisk_Driver_x64.exe - - [ ] AeroDyn_Driver_x64.exe - - [ ] AeroDyn_Driver_x64_OpenMP.exe - - [ ] AeroDyn_Inflow_C_Binding_x64.dll - - [ ] AeroDyn_Inflow_C_Binding_x64_OpenMP.dll - - [ ] BeamDyn_Driver_x64.exe - - [ ] DISCON.dll (x64) - - [ ] DISCON_ITIBarge.dll (x64) - - [ ] DISCON_OC3Hywind.dll (x64) - - [ ] DISCON_SC.dll (x64) - - [ ] FAST.Farm_x64.exe - - [ ] FAST.Farm_x64_OMP.exe - - [ ] FAST_SFunc.mexw64 -- build from MATLAB - - [ ] HydroDynDriver_x64.exe - - [ ] HydroDyn_C_Binding_x64.dll - - [ ] IfW_C_Binding_x64.dll - - [ ] InflowWind_Driver_x64.exe - - [ ] InflowWind_Driver_x64_OpenMP.exe - - [ ] MoorDyn_Driver_x64.exe - - [ ] MoorDyn_C_Binding_x64.dll - - [ ] OpenFAST-Simulink_x64.dll -- change `additional dependencies` in the `OpenFAST-Simulink` project in `FAST` to point to correct install of MATLAB - - [ ] openfast_x64.exe - - [ ] SeaStateDriver_x64.exe - - [ ] SimpleElastoDyn_x64.exe - - [ ] SubDyn_x64.exe - - [ ] Turbsim_x64.exe - - [ ] UnsteadyAero_x64.exe + - [ ] `AeroDisk_Driver_x64.exe` + - [ ] `AeroDyn_Driver_x64.exe` + - [ ] `AeroDyn_Driver_x64_OpenMP.exe` + - [ ] `AeroDyn_Inflow_c_binding_x64.dll` + - [ ] `AeroDyn_Inflow_c_binding_x64_OpenMP.dll` + - [ ] `BeamDyn_Driver_x64.exe` + - [ ] `DISCON.dll` (x64) + - [ ] `DISCON_ITIBarge.dll` (x64) + - [ ] `DISCON_OC3Hywind.dll` (x64) + - [ ] `DISCON_SC.dll` (x64) + - [ ] `FAST.Farm_x64.exe` + - [ ] `FAST.Farm_x64_OMP.exe` + - [ ] `FAST_SFunc.mexw64` -- build from MATLAB + - [ ] `HydroDynDriver_x64.exe` + - [ ] `HydroDyn_c_binding_x64.dll` + - [ ] `InflowWind_c_binding_x64.dll` + - [ ] `InflowWind_Driver_x64.exe` + - [ ] `InflowWind_Driver_x64_OpenMP.exe` + - [ ] `MoorDyn_Driver_x64.exe` + - [ ] `MoorDyn_c_binding_x64.dll` + - [ ] `OpenFAST-Simulink_x64.dll` -- change `additional dependencies` in the `OpenFAST-Simulink` project in `FAST` to point to correct install of MATLAB + - [ ] `openfast_x64.exe` + - [ ] `SeaStateDriver_x64.exe` + - [ ] `SimpleElastoDyn_x64.exe` + - [ ] `SubDyn_x64.exe` + - [ ] `Turbsim_x64.exe` + - [ ] `UnsteadyAero_x64.exe` 5. Upload all filesUnset the no tracking of files ``` git ls-files -v | grep "^[a-z]" diff --git a/docs/changelogs/v4.0.3.md b/docs/changelogs/v4.0.3.md new file mode 100644 index 0000000000..2ac2e6bc0d --- /dev/null +++ b/docs/changelogs/v4.0.3.md @@ -0,0 +1,83 @@ +**Feature or improvement description** +Pull request to merge `rc-4.0.3` into `main` and create a tagged release for v4.0.3 + +See the milestone and project pages for additional information + + https://github.com/OpenFAST/openfast/milestone/19 + +Test results, if applicable +See GitHub Actions + +### Release checklist: +- [ ] Update the documentation version in docs/conf.py +- [ ] Update the versions in docs/source/user/api\_change.rst +- [ ] Verify readthedocs builds correctly +- [ ] Create a tag in OpenFAST +- [ ] Create a merge commit in r-test and add a corresponding annotated tag +- [ ] Compile executables for Windows builds + - [ ] `AeroDisk_Driver_x64.exe` + - [ ] `AeroDyn_Driver_x64.exe` + - [ ] `AeroDyn_Driver_x64_OpenMP.exe` + - [ ] `AeroDyn_Inflow_c_binding_x64.dll` + - [ ] `AeroDyn_Inflow_c_binding_x64_OpenMP.dll` + - [ ] `BeamDyn_Driver_x64.exe` + - [ ] `DISCON.dll (x64)` + - [ ] `DISCON_ITIBarge.dll (x64)` + - [ ] `DISCON_OC3Hywind.dll (x64)` + - [ ] `DISCON_SC.dll (x64)` + - [ ] `FAST.Farm_x64.exe` + - [ ] `FAST.Farm_x64_OMP.exe` + - [ ] `FAST_SFunc.mexw64` + - [ ] `HydroDynDriver_x64.exe` + - [ ] `HydroDyn_C_Binding_x64.dll` + - [ ] `IinflowWind_c_binding_x64.dll` + - [ ] `InflowWind_Driver_x64.exe` + - [ ] `InflowWind_Driver_x64_OpenMP.exe` + - [ ] `MoorDyn_Driver_x64.exe` + - [ ] `MoorDyn_c_binding_x64.dll` + - [ ] `OpenFAST-Simulink_x64.dll` + - [ ] `openfast_x64.exe` + - [ ] `SeaStateDriver_x64.exe` + - [ ] `SimpleElastoDyn_x64.exe` + - [ ] `SubDyn_x64.exe` + - [ ] `Turbsim_x64.exe` + - [ ] `UnsteadyAero_x64.exe` + +# Changelog + +## Overview + +This release includes several bug fixes and improvements for _FAST.Farm_, including segmentation faults with large farms, file I/O collision fixes, increased error message length, and compile issues. + +## General + +### Build Systems + +#2709 Add "nouninit" to debug flags for IntelLLVM (@andrew-platt) + +#2732 Disable use of heap arrays for the Intel fortran compilers (@deslaughter) + + +### openfast_io + +#2727 generate BD files if fst_vt dictionary BD keys are not empty (@mayankchetan) + + +## Solvers + +### FAST.Farm + +#2711 Fix FAST.Farm issues with OMP (segfaults mostly) (@andrew-platt) + + +## Module changes + +### NWTC library + +#2710 Increase length of error messages (@andrew-platt) + + +## Input file changes + +No input file changes are required from 4.0.2. + From fbdf17f749e258e4001f73721acde6f596ce4e59 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 8 Apr 2025 12:36:54 -0600 Subject: [PATCH 22/27] update version info for 4.0.3 --- docs/changelogs/v4.0.3.md | 1 + docs/conf.py | 2 +- docs/source/user/api_change.rst | 6 ++++++ openfast_io/pyproject.toml | 2 +- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/changelogs/v4.0.3.md b/docs/changelogs/v4.0.3.md index 2ac2e6bc0d..2634e0b2e0 100644 --- a/docs/changelogs/v4.0.3.md +++ b/docs/changelogs/v4.0.3.md @@ -11,6 +11,7 @@ See GitHub Actions ### Release checklist: - [ ] Update the documentation version in docs/conf.py - [ ] Update the versions in docs/source/user/api\_change.rst +- [ ] Update version info in openfast\_io/pyproject.toml - [ ] Verify readthedocs builds correctly - [ ] Create a tag in OpenFAST - [ ] Create a merge commit in r-test and add a corresponding annotated tag diff --git a/docs/conf.py b/docs/conf.py index 4e08f4e551..bb9d65f674 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -138,7 +138,7 @@ def runDoxygen(sourcfile, doxyfileIn, doxyfileOut): # The short X.Y version. version = u'4.0' # The full version, including alpha/beta/rc tags. -release = u'v4.0.2' +release = u'v4.0.3' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/source/user/api_change.rst b/docs/source/user/api_change.rst index 6f40c92e4c..06492245a2 100644 --- a/docs/source/user/api_change.rst +++ b/docs/source/user/api_change.rst @@ -10,6 +10,12 @@ The line number corresponds to the resulting line number after all changes are i Thus, be sure to implement each in order so that subsequent line numbers are correct. +OpenFAST v4.0.2 to OpenFAST v4.0.3 +---------------------------------- + +No input file changes were made. + + OpenFAST v4.0.1 to OpenFAST v4.0.2 ---------------------------------- diff --git a/openfast_io/pyproject.toml b/openfast_io/pyproject.toml index 1df210e668..7595361ef7 100644 --- a/openfast_io/pyproject.toml +++ b/openfast_io/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "hatchling.build" [project] name = "openfast_io" # dynamic = ["version"] -version = "4.0.2" +version = "4.0.3" description = "Readers and writers for OpenFAST files." license = {file = "../LICENSE"} authors = [ From a515cb11543a8d4176104fa574833951fa0909a5 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 8 Apr 2025 12:40:08 -0600 Subject: [PATCH 23/27] update changelog info for 4.0.3 --- docs/changelogs/v4.0.3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelogs/v4.0.3.md b/docs/changelogs/v4.0.3.md index 2634e0b2e0..d31ed37c54 100644 --- a/docs/changelogs/v4.0.3.md +++ b/docs/changelogs/v4.0.3.md @@ -13,7 +13,7 @@ See GitHub Actions - [ ] Update the versions in docs/source/user/api\_change.rst - [ ] Update version info in openfast\_io/pyproject.toml - [ ] Verify readthedocs builds correctly -- [ ] Create a tag in OpenFAST +- [ ] Create an annotated tag in OpenFAST during merge (mark as most recent if necessary) - [ ] Create a merge commit in r-test and add a corresponding annotated tag - [ ] Compile executables for Windows builds - [ ] `AeroDisk_Driver_x64.exe` From 00438ea301d448f2bf540ac0eee0876ba714f91c Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 8 Apr 2025 12:53:21 -0600 Subject: [PATCH 24/27] nwtclib: Days left was calculated incorrectly --- modules/nwtc-library/src/NWTC_Num.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nwtc-library/src/NWTC_Num.f90 b/modules/nwtc-library/src/NWTC_Num.f90 index d24ad7b406..97284cde29 100644 --- a/modules/nwtc-library/src/NWTC_Num.f90 +++ b/modules/nwtc-library/src/NWTC_Num.f90 @@ -5746,7 +5746,7 @@ SUBROUTINE SimStatus( PrevSimTime, PrevClockTime, ZTime, TMax, DescStrIn, StatIn ! Estimate the end time in hours, minutes, and seconds SimTimeLeft = REAL( ( TMax - ZTime )*DeltTime/( ZTime - PrevSimTime ), ReKi ) ! DeltTime/( ZTime - PrevSimTime ) is the delta_ClockTime divided by the delta_SimulationTime - DaysRemain = real((CurrClockTime+SimTimeLeft) / real(SecPerDay,ReKi),SiKi) + DaysRemain = real((SimTimeLeft) / real(SecPerDay,ReKi),SiKi) EndTime = MOD( CurrClockTime+SimTimeLeft, SecPerDay ) EndHour = INT( EndTime*InSecHr ) EndMin = INT( ( EndTime - REAL( 3600*EndHour ) )*InSecMn ) From e7f019b209869ef6b2a82f12b5f86320302baf1c Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 8 Apr 2025 13:00:04 -0600 Subject: [PATCH 25/27] update release notes for bugfix commit --- docs/changelogs/v4.0.3.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelogs/v4.0.3.md b/docs/changelogs/v4.0.3.md index d31ed37c54..e600c53e1b 100644 --- a/docs/changelogs/v4.0.3.md +++ b/docs/changelogs/v4.0.3.md @@ -76,6 +76,7 @@ This release includes several bug fixes and improvements for _FAST.Farm_, includ ### NWTC library #2710 Increase length of error messages (@andrew-platt) +#2741 bug in simulation status number of days left (@andrew-platt) ## Input file changes From 6a8f468ed1e4ba448891bb1ce2375efec1979790 Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Tue, 8 Apr 2025 15:29:45 -0400 Subject: [PATCH 26/27] Remove MAP as an additional dependency in VS FASTLib.vfproj. Use solution build dependencies instead. --- vs-build/FAST/FAST.sln | 2 ++ vs-build/FASTlib/FASTlib.vfproj | 28 ++++++++++++++-------------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/vs-build/FAST/FAST.sln b/vs-build/FAST/FAST.sln index f1f08b2b9d..795885ea98 100644 --- a/vs-build/FAST/FAST.sln +++ b/vs-build/FAST/FAST.sln @@ -5,6 +5,7 @@ VisualStudioVersion = 15.0.28307.902 MinimumVisualStudioVersion = 10.0.40219.1 Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "FAST", "FAST.vfproj", "{18AE8067-CCC6-4479-A0DB-C4089EF9FE71}" ProjectSection(ProjectDependencies) = postProject + {BF86702A-CB17-4050-8AE9-078CDC5910D3} = {BF86702A-CB17-4050-8AE9-078CDC5910D3} {1A440C5B-CBA6-47D9-9CC2-C1CBA8C00BF9} = {1A440C5B-CBA6-47D9-9CC2-C1CBA8C00BF9} EndProjectSection EndProject @@ -23,6 +24,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FAST_Registry", "..\Registr EndProject Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "OpenFAST-Simulink", "..\OpenFAST-Simulink\OpenFAST-Simulink.vfproj", "{C3C93CC0-EDD7-438F-988C-1F917FAEFA67}" ProjectSection(ProjectDependencies) = postProject + {BF86702A-CB17-4050-8AE9-078CDC5910D3} = {BF86702A-CB17-4050-8AE9-078CDC5910D3} {1A440C5B-CBA6-47D9-9CC2-C1CBA8C00BF9} = {1A440C5B-CBA6-47D9-9CC2-C1CBA8C00BF9} EndProjectSection EndProject diff --git a/vs-build/FASTlib/FASTlib.vfproj b/vs-build/FASTlib/FASTlib.vfproj index 1f81fd86f6..ccbd7789a6 100644 --- a/vs-build/FASTlib/FASTlib.vfproj +++ b/vs-build/FASTlib/FASTlib.vfproj @@ -6,7 +6,7 @@ - + @@ -15,7 +15,7 @@ - + @@ -24,7 +24,7 @@ - + @@ -33,7 +33,7 @@ - + @@ -42,7 +42,7 @@ - + @@ -51,7 +51,7 @@ - + @@ -60,7 +60,7 @@ - + @@ -69,7 +69,7 @@ - + @@ -78,7 +78,7 @@ - + @@ -87,7 +87,7 @@ - + @@ -96,7 +96,7 @@ - + @@ -105,7 +105,7 @@ - + @@ -114,7 +114,7 @@ - + @@ -123,7 +123,7 @@ - + From 2ac5c584dd34e24c24ae658bf89ac90fedacdfc6 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 8 Apr 2025 14:26:05 -0600 Subject: [PATCH 27/27] update changelog with PR 2742 --- docs/changelogs/v4.0.3.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/changelogs/v4.0.3.md b/docs/changelogs/v4.0.3.md index e600c53e1b..ef15af0a25 100644 --- a/docs/changelogs/v4.0.3.md +++ b/docs/changelogs/v4.0.3.md @@ -48,11 +48,11 @@ See GitHub Actions ## Overview -This release includes several bug fixes and improvements for _FAST.Farm_, including segmentation faults with large farms, file I/O collision fixes, increased error message length, and compile issues. +This release includes several bug fixes and improvements for _FAST.Farm_, including segmentation faults with large farms, file I/O collision fixes, increased error message length, and build/compile issues. ## General -### Build Systems +### CMake build system #2709 Add "nouninit" to debug flags for IntelLLVM (@andrew-platt) @@ -64,6 +64,11 @@ This release includes several bug fixes and improvements for _FAST.Farm_, includ #2727 generate BD files if fst_vt dictionary BD keys are not empty (@mayankchetan) +### Visual Studio build + +#2742 Fix VS build for FAST when using IFX Complier (@deslaughter) + + ## Solvers ### FAST.Farm @@ -76,6 +81,7 @@ This release includes several bug fixes and improvements for _FAST.Farm_, includ ### NWTC library #2710 Increase length of error messages (@andrew-platt) + #2741 bug in simulation status number of days left (@andrew-platt)