Calculate the rotation Angle at the mud line.

Dear all,
I defined the ssi stiffness matrix file in subdyn and want to output the solution result at the rotation Angle at the mud line. How should I operate? Which element in the Out list table file is related to the corner at the mud line?

Dear @Long.Li,

In the SubDyn model of the OC3-monopile, MemberID 1 connects JointID 1 and 2 and JointID 1 is the first node of this member. So, to output the translation and rotation of this node, you should add member 1, node 1 to the member output list and then select the nodal displacements and rotations in the SSOutList. Members 2 and 3 were previously listed in this member output list; you can see below where I increased NMOutputs from 2 to 3 and added member 1, node 1 to the table in the 3rd row:

             3   NMOutputs   - Number of members whose forces/displacements/velocities/accelerations will be output (-) [Must be <= 99].
MemberID   NOutCnt    NodeCnt ![NOutCnt=how many nodes to get output for [< 10]; NodeCnt are local ordinal numbers from the start of the member, and must be >=1 and <= NDiv+1] If NMOutputs=0 leave blank as well.
  (-)        (-)        (-)
   2          1          1
   3          1          1
   1          1          1

In this case, the displacement and rotations of member 1, node 1 can be output via the SSOutList through outputs:

"M3N1TDxss, M3N1TDyss, M3N1TDzss, M3N1RDxe, M3N1RDye, M3N1RDze"

Best regards,

1 Like

Dear@Jason.Jonkman
Thank you for the swift response!
Following your operation, I made the calculation and found that M3N1TDXss, M3N1TDYss, M3N1TDZss, M3N1RDXe, M3N1RDYe, and M3N1RDe were not found in the.out result file. I think the following code might still need further modification. I have tried several modifications but all failed. I would like to ask you how to make further modifications? Thank you again for your answer. It has been of great help to me.

3 NMOutputs - Number of members whose forces/displacements/velocities/accelerations will be output (-) [Must be <= 99].
MemberID NOutCnt NodeCnt ![NOutCnt=how many nodes to get output for [< 10]; NodeCnt are local ordinal numbers from the start of the member, and must be >=1 and <= NDiv+1] If NMOutputs=0 leave blank as well.
(-) (-) (-)
2 1 1
3 1 1
1 1 1
------------------------- SSOutList: The next line(s) contains a list of output parameters that will be output in .SD.out or .out. ------
“M2N1MKxe, M2N1MKye” - The local side-to-side and fore-aft bending moments at node 1 of member 3 (located at 0 m, i.e. MSL).
“M1N1MKxe, M1N1MKye” - The local side-to-side and fore-aft bending moments at node 1 of member 2 (located at -10 m, i.e. half way between MSL and mudline).
“-ReactFXss, -ReactFYss, -ReactFZss” - Base reactions: fore-aft shear, side-to-side shear and vertical forces at the mudline.
“-ReactMXss, -ReactMYss, -ReactMZss” - Base reactions: side-to-side, fore-aft and yaw moments at the mudline.
END of output channels and end of file. (the word “END” must appear in the first 3 columns of this line)

Dear@ Jason.Jonkman
Thank you for the swift response!
Following your operation, I made the calculation and found that M3N1TDXss, M3N1TDYss, M3N1TDZss, M3N1RDXe, M3N1RDYe, and M3N1RDe were not found in the.out result file. I think the following code might still need further modification. I have tried several modifications but all failed. I would like to ask you how to make further modifications? Thank you again for your answer. It has been of great help to me.

3 NMOutputs - Number of members whose forces/displacements/velocities/accelerations will be output (-) [Must be <= 99].
MemberID NOutCnt NodeCnt ![NOutCnt=how many nodes to get output for [< 10]; NodeCnt are local ordinal numbers from the start of the member, and must be >=1 and <= NDiv+1] If NMOutputs=0 leave blank as well.
(-) (-) (-)
2 1 1
3 1 1
1 1 1
------------------------- SSOutList: The next line(s) contains a list of output parameters that will be output in .SD.out or .out. ------
“M2N1MKxe, M2N1MKye” - The local side-to-side and fore-aft bending moments at node 1 of member 3 (located at 0 m, i.e. MSL).
“M1N1MKxe, M1N1MKye” - The local side-to-side and fore-aft bending moments at node 1 of member 2 (located at -10 m, i.e. half way between MSL and mudline).
“-ReactFXss, -ReactFYss, -ReactFZss” - Base reactions: fore-aft shear, side-to-side shear and vertical forces at the mudline.
“-ReactMXss, -ReactMYss, -ReactMZss” - Base reactions: side-to-side, fore-aft and yaw moments at the mudline.
END of output channels and end of file. (the word “END” must appear in the first 3 columns of this line)

Dear @Long.Li,

To get these outputs, you must add the following line in the SSOutList before the line starting in END.

"M3N1TDxss, M3N1TDyss, M3N1TDzss, M3N1RDxe, M3N1RDye, M3N1RDze"

Best regards,

1 Like

Dear@ Jason.Jonkman
I’ve learned. Thank you very much for your help.
Best regards,

Dear Jason.Jonkman
I want to calculate many cases like the ones mentioned. I encountered a problem when generating the.fst files in batches based on the code for batch calculation of open fast written by one of my teachers. The code was for version v3.x, which is the current OpenFAST v4. The version of the.fst file generated using the code written by the teacher before cannot be calculated. I compared the code that can be calculated, and the main difference is this part in the picture. I would like to ask if I need to modify the genOpenFASTCases.f90 code. How should it be modified? In addition, when I calculate the batch generated.fst files, the main errors in the log are: (I also attached the code written by Teacher Yang later)

OpenFAST - v4.0.4
Compile Info:

  • Compiler: Intel(R) Fortran Compiler 2021
  • Architecture: 64 bit
  • Precision: single
  • OpenMP: No
  • Date: Apr 28 2025
  • Time: 22:53:58
    Execution Info:
  • Date: 06/19/2025
  • Time: 21:17:53+0800

OpenFAST input file heading:
FAST Certification Test #19: NREL 5.0 MW Baseline Wind Turbine with OC3 Monopile RF
Configuration, for use in offshore analysis

Running ElastoDyn.
Running InflowWind.

Reading a 31x31 grid (145 m wide, 17.5 m to 162.5 m above ground) with a characteristic wind
speed of 12 m/s. This full-field file was generated by TurbSim (from
OpenFAST-v3.0.0-98-g7bde6b54) on 14-Sep-2021 at 11:49:55.

Processed 1442 time steps of 20-Hz grid-field data (72.05 seconds).
Running SeaState.
Generating incident wave kinematics and current time history.
Calculating second order difference frequency wave kinematics.
Calculating second order sum frequency wave kinematics.
Running AeroDyn.
AeroDyn: projMod: 1
Projection: legacy (NoSweepPitchTwist), BEM: legacy (2D)
Running HydroDyn.
Running SubDyn.
Fixed bottom case detected
Guyan extra moment will be included in loads (fixed-bottom case detected)
Performing Craig-Bampton reduction 60 DOFs → 0 modes + 6 DOFs
Using static improvement method for gravity and ext. loads
Running ServoDyn.

FAST_InitializeAll:ED_Init:ED_ReadInput:ReadBladeInputs:ReadBladeFile:The ElastoDyn Blade file,
. ... /5MW_Baseline/NRELOffshrBsline5MW_Blade.dat, DISTRIBUTED BLADE PROPERTIES table contains the
PitchAxis column. This column is unused and will be removed in future releases
FAST_InitializeAll:SrvD_Init:ParseInputFileInfo:ParseR8Var:

A fatal error occurred when parsing data from
“.\NRELOffshrBsline5MW_OC3Monopile_ServoDyn_1002.dat”.
The variable “TPitManS(1)” was not found on line #9.

OpenFAST encountered an error during module initialization.
Simulation error level: FATAL ERROR
Aborting OpenFAST.
Teacher Yang’s code:

program genOpenFASTCases

USE IFPORT

implicit none

! Variables
! Main input
character (len=1024) :: LdCaseFile,SmpFstFile,OutRootName,TurbSimExe,TurbSimInp,FASTExe,BatFileName,InflowFile,HydroFile,AeroDynFile_DYN,AeroDynFile_EQU
character (len=1024) :: OutFstFileName,TurbSimInpNew,WindFileNew,InflowFileNew,HydroFileNew,BaseFolder,commandLine,WndPath,BatName,AeroDynFile
integer :: NumBatFiles,NumCasein1Bat,AeroDynType
logical :: WrtRunBat

! local variables
real, allocatable :: WndSpd(:),WvHt(:),WvPrd(:slight_smile:
integer, allocatable :: CaseID(:),RndSeed(:),WvMode(:),WvSpc(:),WvRdSd(:slight_smile:
character(len=1024),allocatable :: WndSpc(:slight_smile:

integer :: NumCases,lenInflow

!
integer :: i,j,k ! index
character (len=10) :: TmpChar ! Temporary character
integer :: FEXIST,res

! Body of genOpenFASTCases
open (1,file = “inputforgenOpenFASTCases.txt”)
do i=1,3
read (1,)
enddo ! skip comments
read(1,
) LdCaseFile !- The file that contains load definitions
read(1,) SmpFstFile !- The sample of fst file in which the input file of each module has been specfied correctly.
read(1,
) OutRootName !- Rootname of the output files
read(1,) TurbSimExe !- TurbSim executable file
read(1,
) TurbSimInp !- TurbSim input file
read(1,) WrtRunBat !- Write a bat file for running these cases
read(1,
) FASTExe !- FAST executable file
read(1,) BatFileName !- Filename of the bat files
read(1,
) NumBatFiles !- Number of Bat files

close(1)

! Read load case definitions
open(1, file = trim(LdCaseFile))
read (1,) NumCases
allocate (CaseID(NumCases)) ! Allocate dimensions
allocate (WndSpd(NumCases))
allocate (WndSpc(NumCases))
allocate (RndSeed(NumCases))
allocate (WvMode(NumCases))
allocate (WvHt(NumCases))
allocate (WvPrd(NumCases))
allocate (WvSpc(NumCases))
allocate (WvRdSd(NumCases))
read(1,
) ! Skip the comment
do i=1,NumCases
read (1,) CaseID(i),WndSpd(i),WndSpc(i),RndSeed(i),WvMode(i),WvHt(i),WvPrd(i),WvSpc(i),WvRdSd(i)
if (WvMode(i)<1 .or. WvMode(i)>2) then
write(TmpChar,‘(I5)’) i
write(
,) ‘WvMode of CaseID ‘//trim(adjustl(TmpChar))//‘must be set to 1 (regular wave) or 2 (irregular wave)’
stop
elseif ((WvSpc(i)<1 .and. WvSpc(i)>2) .and. WvMode(i)==2 ) then
write(TmpChar,’(I5)’) i
write(
,*) 'WvSpc of CaseID '//trim(adjustl(TmpChar))//‘must be set to 1 (P-M spectrum) or 2 (Jonswap) when an irregular wave mode is selected.’
stop
endif
enddo ! end reading load case definitions
close(1)

! Get Input sample files of inflowWind and HydroDyn modules
open (1,file = trim(SmpFstFile))
do i=1,14
read(1,) ! Go to the 15th line
enddo
read (1,
) AeroDynType
do i=1,21
read(1,) ! Go to the 37nd line
enddo
read (1,
) InflowFile
inquire(FILE=trim(InflowFile),EXIST=FEXIST)
if(.not.FEXIST) then
write (,) trim(InflowFile)//’ does not exist, please check’
stop
endif
lenInflow = len(trim(InflowFile))
do i=1,lenInflow
if (InflowFile(i:i)==‘' .or. InflowFile(i:i)==’/’ ) then
BaseFolder = InflowFile(1:i-1)
exit
else
cycle
endif
enddo
read (1,) AeroDynFile
inquire(FILE=trim(AeroDynFile),EXIST=FEXIST)
if(.not.FEXIST) then
write (
,) trim(AeroDynFile)//’ does not exist, please check’
stop
endif
read (1,
)
read (1,) HydroFile
inquire(FILE=trim(HydroFile),EXIST=FEXIST)
if(.not.FEXIST) then
write (
,*) trim(HydroFile)//’ does not exist, please check’
stop
endif
close(1)

! switch dynamic and equal inflow mode for AeroDyn 14

if (AeroDynType == 1) then   ! AeroDyn14
   AeroDynFile_DYN = AeroDynFile(1:len(trim(AeroDynFile))-4)//'_DYN.dat'
   AeroDynFile_EQU = AeroDynFile(1:len(trim(AeroDynFile))-4)//'_EQU.dat'
   call genAeroDynDynEqu (AeroDynFile,AeroDynFile_DYN,AeroDynFile_EQU) 
else   ! AeroDyn15
   AeroDynFile_DYN = AeroDynFile
   AeroDynFile_EQU = AeroDynFile
endif

! Generate FAST inputs
do i=1,NumCases
write(TmpChar,‘(I5)’) CaseID(i)
! Write a notice
write (,) ‘We are generating input files for the ‘//trim(adjustl(TmpChar))//‘th(st,nd,rd) case’
OutFstFileName = trim(OutRootName)//’‘//trim(adjustl(TmpChar))//’.fst’
TurbSimInpNew = trim(OutRootName)//‘WindData’//trim(adjustl(TmpChar))//‘.inp’
WindFileNew = trim(OutRootName)//‘WindData’//trim(adjustl(TmpChar))//‘.bts’
InflowFileNew = InflowFile(1:len(trim(InflowFile))-4)//'
’//trim(adjustl(TmpChar))//‘.dat’
HydroFileNew = HydroFile (1:len(trim(HydroFile ))-4)//‘_’//trim(adjustl(TmpChar))//‘.dat’
! Generate wind files
call genTurbSimInp (TurbSimInp,TurbSimInpNew,WndSpd(i),WndSpc(i),RndSeed(i))
commandLine = trim(TurbSimExe)//’ ‘//trim(TurbSimInpNew)
res = SYSTEMQQ(trim(commandline))
! Generate new inflowWind file
call genInflowFile (InflowFile,InflowFileNew,WindFileNew)
WndPath = trim(BaseFolder)//’\WindData’
inquire(DIRECTORY=trim(WndPath),EXIST=FEXIST)
if(.not.FEXIST) then
res = MAKEDIRQQ(trim(WndPath))
endif
commandLine = 'copy ‘//trim(WindFileNew)//’ ‘//trim(WndPath)//’'//trim(WindFileNew)
res = SYSTEMQQ(trim(commandLine)) ! copy new wind file to the specific directory (10MWRWT\WindData)
! Generate new HydroDyn file
call genHydroDynFile (HydroFile,HydroFileNew,WvMode(i),WvHt(i),WvPrd(i),WvSpc(i),WvRdSd(i))
! Generate new FST file
if (WndSpd(i)<8) then
call genFSTfile (SmpFstFile,OutFstFileName,InflowFileNew,HydroFileNew,AeroDynFile_EQU)
else
call genFSTfile (SmpFstFile,OutFstFileName,InflowFileNew,HydroFileNew,AeroDynFile_DYN)
endif

enddo ! end generating case files

! Write a notice

write (*,*) 'We have generated the input files for all cases, please check'

! Write bat files
if (WrtRunBat) then
NumCasein1Bat = ceiling(NumCases1.0/NumBatFiles)
do i=1,NumBatFiles-1
write(TmpChar,‘(I5)’),i
BatName = trim(BatFileName)//‘_’//trim(adjustl(TmpChar))//‘.bat’
open (1001, file = trim(BatName) )
do j=1,NumCasein1Bat
write(TmpChar,‘(I5)’) CaseID(NumCasein1Bat
(i-1)+j)
write (1001,‘(A)’) trim(FASTExe)//’ ‘//trim(OutRootName)//’‘//trim(adjustl(TmpChar))//’.fst’
enddo
close (1001)
enddo
write (TmpChar,‘(I5)’),NumBatFiles
BatName = trim(BatFileName)//'
‘//trim(adjustl(TmpChar))//’.bat’
open(1001, file = trim(BatName) )
do i=NumCasein1Bat*(NumBatFiles-1)+1,NumCases
write(TmpChar,‘(I5)’) CaseID(i)
write (1001,‘(A)’) trim(FASTExe)//’ ‘//trim(OutRootName)//’_‘//trim(adjustl(TmpChar))//’.fst’
enddo
close(1001)
endif
! Done writing

end program genOpenFASTCases

!-----------------------------------------
! To generate turbsim input file based on
! wind speed, random seed and wind spectrum
!-----------------------------------------
subroutine genTurbSimInp (FileIn,FileOut,WndSpd,WndSpc,RndSeed)
implicit none

character (len=1024) :: FileIn,FileOut,lineStr
character (len=10) :: WndSpc
real :: WndSpd
integer :: RndSeed,i,STATUS
character(len=20) :: StrSeed,StrWndSpd

open (101,file = trim(FileIn),STATUS = 'OLD')
open (102,file = trim(FileOut))
i = 0
do while(.TRUE.)  
   read (101,'(A1024)',IOSTAT=STATUS) lineStr
   if (status/=0)  exit  
   i = i + 1  
   if (i==5)  then       ! The seeds
      write(StrSeed,*) RndSeed
      lineStr = trim(adjustl(StrSeed))//'      RandSeed1       - First random seed  (-2147483648 to 2147483647)'
   endif
   if (i==31)  then       ! The spectrum
      lineStr = '"'//trim(WndSpc)//'"      TurbModel       - Turbulence model ("IECKAI","IECVKM","GP_LLJ","NWTCUP","SMOOTH","WF_UPW","WF_07D","WF_14D","TIDAL","API","USRINP","TIMESR", or "NONE")'
   endif
 if (i==40) then       ! The wind speed
      write(StrWndSpd,'(F10.6)') WndSpd
      lineStr = trim(adjustl(StrWndSpd))//'    URef            - Mean (total) velocity at the reference height [m/s] (or "default" for JET velocity profile) [must be 1-hr mean for API model; otherwise is the mean over AnalysisTime seconds]'
   endif
   write(102,'(A)') trim(lineStr)    
enddo
close(101)
close(102)

end subroutine genTurbSimInp

! ------------------------------------------
! genInflowFile: to generate new inflow wind file
! by changing the input wind field
! ------------------------------------------

subroutine genInflowFile (FileIn,FileOut,WindFileNew)

implicit none

character (len=1024) :: FileIn,FileOut,WindFileNew,lineStr
integer :: i,STATUS

open (101,file = trim(FileIn),STATUS = 'OLD')
open (102,file = trim(FileOut))
i = 0
do while(.TRUE.)  
   read (101,'(A1024)',IOSTAT=STATUS) lineStr
   if (status/=0)  exit  
   i = i + 1  
   if (i==5)  then       ! The seeds
      lineStr = '  3    WindType       - switch for wind file type (1=steady; 2=uniform; 3=binary TurbSim FF; 4=binary Bladed-style FF; 5=HAWC format; 6=User defined)'
   
   elseif (i==21) then
      lineStr = '"WindData\'//trim(WindFileNew)//'"    Filename_BTS       - Name of the Full field wind file to use (.bts)'
   endif
   write(102,'(A)') trim(lineStr)    
enddo
close(101)
close(102)

end subroutine genInflowFile

! ------------------------------------------
! genHydroDynFile: to generate new HydroDyn input
! by changing wave definitions
! ------------------------------------------

subroutine genHydroDynFile (FileIn,FileOut,WvMode,WvHt,WvPrd,WvSpc,WvRdSd)

implicit none

character (len=1024) :: FileIn,FileOut,lineStr
integer :: i,STATUS,WvMode,WvSpc,WvRdSd
real :: WvHt,WvPrd
character (len=20):: TmpChar

open (101,file = trim(FileIn),STATUS = 'OLD')
open (102,file = trim(FileOut))
i = 0
do while(.TRUE.)  
   read (101,'(A1024)',IOSTAT=STATUS) lineStr
   if (status/=0)  exit  
   i = i + 1  
   if (i==9)  then       ! Wave mode
      write(TmpChar,'(I2)')  WvMode
      lineStr = trim(adjustl(TmpChar))//'     WaveMod        - Incident wave kinematics model {0: none=still water, 1: regular (periodic), 1P#: regular with user-specified phase, 2: JONSWAP/Pierson-Moskowitz spectrum (irregular), 3: White noise spectrum (irregular), 4: user-defined spectrum from routine UserWaveSpctrm (irregular), 5: Externally generated wave-elevation time series, 6: Externally generated full wave-kinematics time series [option 6 is invalid for PotMod/=0]} (switch)'
   elseif (i==13) then
      write(TmpChar,'(F8.4)')  WvHt
      lineStr = trim(adjustl(TmpChar))//'     WaveHs         - Significant wave height of incident waves (meters) [used only when WaveMod=1, 2, or 3]'
   elseif (i==14) then
      write(TmpChar,'(F8.4)')  WvPrd
      lineStr = trim(adjustl(TmpChar))//'	  WaveTp		 -Peak-spectral period of incident waves       (sec) [used only when WaveMod=1 or 2]'   
   elseif (i==15) then
      if (WvMode == 2 .and. WvSpc == 1)  then ! P-M spectrum
         lineStr = '1.0   WavePkShp      - Peak-shape parameter of incident wave spectrum (-) or DEFAULT (string) [used only when WaveMod=2; use 1.0 for Pierson-Moskowitz]'  
      elseif(WvMode == 2 .and. WvSpc == 2) then ! JONSWAP spectrum
         lineStr = '"Default"   WavePkShp      - Peak-shape parameter of incident wave spectrum (-) or DEFAULT (string) [used only when WaveMod=2; use 1.0 for Pierson-Moskowitz]'     
      endif
   elseif (i==23) then
       write(TmpChar,'(I11)')  WvRdSd
       lineStr = trim(adjustl(TmpChar))//'	  WaveSeed(1)    - First  random seed of incident waves [-2147483648 to 2147483647]    (-)       [unused when WaveMod=0, 5, or 6]'
   endif
   write(102,'(A)') trim(lineStr)    
enddo
close(101)
close(102)

end subroutine genHydroDynFile

!------------------------------------------
!genFSTfile: generate FAST input file
!------------------------------------------
subroutine genFSTfile (FileIn,FileOut,InflowFileNew,HydroFileNew,AeroDynFile)

implicit none

character (len=1024) :: FileIn,FileOut,lineStr,InflowFileNew,HydroFileNew,AeroDynFile
integer :: i,STATUS

open (101,file = trim(FileIn),STATUS = 'OLD')
open (102,file = trim(FileOut))
i = 0
do while(.TRUE.)  
   read (101,'(A1024)',IOSTAT=STATUS) lineStr
   if (status/=0)  exit  
   i = i + 1  
   if (i==37)  then       ! Wave mode
      lineStr = '"'//trim(adjustl(InflowFileNew))//'"    InflowFile      - Name of file containing inflow wind input parameters (quoted string)'
   elseif (i==38) then
      lineStr =  '"'//trim(AeroDynFile)//'"  	   AeroFile        - Name of file containing aerodynamic input parameters (quoted string)'
   elseif (i==40) then
      lineStr =  '"'//trim(HydroFileNew)//'"    HydroFile       - Name of file containing hydrodynamic input parameters (quoted string)'
   endif
   write(102,'(A)') trim(lineStr)    
enddo
close(101)
close(102)

end subroutine genFSTfile

!------------------------------------------
!genFSTfile: generate AeroDyn input for dynamic and equal inflow modes
!------------------------------------------
subroutine genAeroDynDynEqu (FileIn,FileOut1,FileOut2)

implicit none

character (len=1024) :: FileIn,FileOut1,FileOut2,lineStr1,lineStr2
integer :: i,STATUS

open (101,file = trim(FileIn),STATUS = 'OLD')
open (102,file = trim(FileOut1))
open (103,file = trim(FileOut2))
i = 0
do while(.TRUE.)  
   read (101,'(A1024)',IOSTAT=STATUS) lineStr1
   lineStr2 = lineStr1
   if (status/=0)  exit  
   i = i + 1  
   if (i==5)  then       ! Inflow mode
      lineStr1 = 'DYNIN                            InfModel       - Inflow model [DYNIN or EQUIL] (unquoted string)'
      lineStr2 = 'EQUIL                            InfModel       - Inflow model [DYNIN or EQUIL] (unquoted string)'
   endif
   write(102,'(A)') trim(lineStr1)    
   write(103,'(A)') trim(lineStr2)   
enddo
close(101)
close(102)
close(103)

end subroutine genAeroDynDynEqu


Best regards,

Dear @Long.Li,

I have not reviewed the source code you’ve shared. But if you upgrade from OpenFAST from v3.x to v4.x, you’ll need to ensure that your input file formatting is consistent with the upgrade. Input file changes with each release of OpenFAST are documented here: 4.1.2. API changes between versions — OpenFAST v4.1.0 documentation. You can also review the sample OpenFAST input files provided in the OpenFAST r-test (r-test/glue-codes/openfast at main · OpenFAST/r-test · GitHub) for your models of interest, which are upgraded with each OpenFAST release. And if OpenFAST aborts during model initialization because it can’t read an input file properly (such as in your case for TPitManS(1)), you can always enable the Echo option to debug issues associated with input file formatting.

Best regards,

1 Like

Dear Jason.Jonkman
Thank you for your reply.
Best regards,