Skip to content

Commit 92c80cc

Browse files
committed
SeaSt c-bind: fix WaveTimeShift after dev merge
- routines that WaveTimeShift had been added to no longer exist, so restructure the approach
1 parent 7935e21 commit 92c80cc

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

modules/seastate/src/SeaSt_WaveField.f90

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ function WaveField_GetNodeWaveElev1( WaveField, WaveField_m, Time, pos, ErrStat,
3838
ErrMsg = ""
3939

4040
IF (ALLOCATED(WaveField%WaveElev1)) THEN
41-
CALL WaveField_Interp_Setup3D( Time, pos, WaveField%SrfGridParams, WaveField_m, ErrStat2, ErrMsg2 )
41+
CALL WaveField_Interp_Setup3D( Time+WaveField%WaveTimeShift, pos, WaveField%SrfGridParams, WaveField_m, ErrStat2, ErrMsg2 )
4242
CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName )
4343
Zeta = GridInterp3D(WaveField%WaveElev1,WaveField_m)
4444
ELSE
@@ -68,7 +68,7 @@ function WaveField_GetNodeWaveElev2( WaveField, WaveField_m, Time, pos, ErrStat,
6868
ErrMsg = ""
6969

7070
IF (ALLOCATED(WaveField%WaveElev2)) THEN
71-
CALL WaveField_Interp_Setup3D( Time, pos, WaveField%SrfGridParams, WaveField_m, ErrStat2, ErrMsg2 )
71+
CALL WaveField_Interp_Setup3D( Time+WaveField%WaveTimeShift, pos, WaveField%SrfGridParams, WaveField_m, ErrStat2, ErrMsg2 )
7272
CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName )
7373
Zeta = GridInterp3D(WaveField%WaveElev2,WaveField_m)
7474
ELSE
@@ -126,7 +126,7 @@ SUBROUTINE WaveField_GetNodeWaveNormal( WaveField, WaveField_m, Time, pos, n, Er
126126
ErrStat = ErrID_None
127127
ErrMsg = ""
128128

129-
call GridInterpSetupN( (/Real(Time,ReKi),pos(1),pos(2)/), WaveField%SrfGridParams, WaveField_m, ErrStat2, ErrMsg2 )
129+
call GridInterpSetupN( (/Real(Time+WaveField%WaveTimeShift,ReKi),pos(1),pos(2)/), WaveField%SrfGridParams, WaveField_m, ErrStat2, ErrMsg2 )
130130
slope = GridInterpS( WaveField%WaveElev1, WaveField%SrfGridParams, WaveField_m )
131131
if (ALLOCATED(WaveField%WaveElev2)) then
132132
slope = slope + GridInterpS( WaveField%WaveElev2, WaveField%SrfGridParams, WaveField_m )
@@ -183,7 +183,7 @@ SUBROUTINE WaveField_GetNodeWaveKin( WaveField, WaveField_m, Time, pos, forceNod
183183
IF ( pos(3) <= 0.0_ReKi) THEN ! Node is at or below the SWL
184184
nodeInWater = 1_IntKi
185185
! Use location to obtain interpolated values of kinematics
186-
CALL WaveField_Interp_Setup4D( Time, pos, WaveField%GridDepth, WaveField%VolGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
186+
CALL WaveField_Interp_Setup4D( Time+WaveField%WaveTimeShift, pos, WaveField%GridDepth, WaveField%VolGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
187187
FV(:) = GridInterp4DVec( WaveField%WaveVel, WaveField_m )
188188
FA(:) = GridInterp4DVec( WaveField%WaveAcc, WaveField_m )
189189
FDynP = GridInterp4D ( WaveField%WaveDynP, WaveField_m )
@@ -209,7 +209,7 @@ SUBROUTINE WaveField_GetNodeWaveKin( WaveField, WaveField_m, Time, pos, forceNod
209209
IF ( pos(3) <= 0.0_SiKi) THEN ! Node is below the SWL - evaluate wave dynamics as usual
210210

211211
! Use location to obtain interpolated values of kinematics
212-
CALL WaveField_Interp_Setup4D( Time, pos, WaveField%GridDepth, WaveField%VolGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
212+
CALL WaveField_Interp_Setup4D( Time+WaveField%WaveTimeShift, pos, WaveField%GridDepth, WaveField%VolGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
213213
FV(:) = GridInterp4DVec( WaveField%WaveVel, WaveField_m )
214214
FA(:) = GridInterp4DVec( WaveField%WaveAcc, WaveField_m )
215215
FDynP = GridInterp4D ( WaveField%WaveDynP, WaveField_m )
@@ -220,7 +220,7 @@ SUBROUTINE WaveField_GetNodeWaveKin( WaveField, WaveField_m, Time, pos, forceNod
220220
ELSE ! Node is above SWL - need wave stretching
221221

222222
! Vertical wave stretching
223-
CALL WaveField_Interp_Setup4D( Time, posXY0, WaveField%GridDepth, WaveField%VolGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
223+
CALL WaveField_Interp_Setup4D( Time+WaveField%WaveTimeShift, posXY0, WaveField%GridDepth, WaveField%VolGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
224224
FV(:) = GridInterp4DVec( WaveField%WaveVel, WaveField_m )
225225
FA(:) = GridInterp4DVec( WaveField%WaveAcc, WaveField_m )
226226
FDynP = GridInterp4D ( WaveField%WaveDynP, WaveField_m )
@@ -230,7 +230,7 @@ SUBROUTINE WaveField_GetNodeWaveKin( WaveField, WaveField_m, Time, pos, forceNod
230230

231231
! Extrapoled wave stretching
232232
IF (WaveField%WaveStMod == 2) THEN
233-
CALL WaveField_Interp_Setup3D( Time, posXY, WaveField%SrfGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
233+
CALL WaveField_Interp_Setup3D( Time+WaveField%WaveTimeShift, posXY, WaveField%SrfGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
234234
FV(:) = FV(:) + GridInterp3DVec( WaveField%PWaveVel0, WaveField_m ) * pos(3)
235235
FA(:) = FA(:) + GridInterp3DVec( WaveField%PWaveAcc0, WaveField_m ) * pos(3)
236236
FDynP = FDynP + GridInterp3D ( WaveField%PWaveDynP0, WaveField_m ) * pos(3)
@@ -249,7 +249,7 @@ SUBROUTINE WaveField_GetNodeWaveKin( WaveField, WaveField_m, Time, pos, forceNod
249249
posPrime(3) = MIN( posPrime(3), 0.0_ReKi) ! Clamp z-position to zero. Needed when forceNodeInWater=.TRUE.
250250

251251
! Obtain the wave-field variables by interpolation with the mapped position.
252-
CALL WaveField_Interp_Setup4D( Time, posPrime, WaveField%GridDepth, WaveField%VolGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
252+
CALL WaveField_Interp_Setup4D( Time+WaveField%WaveTimeShift, posPrime, WaveField%GridDepth, WaveField%VolGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
253253
FV(:) = GridInterp4DVec( WaveField%WaveVel, WaveField_m )
254254
FA(:) = GridInterp4DVec( WaveField%WaveAcc, WaveField_m )
255255
FDynP = GridInterp4D ( WaveField%WaveDynP, WaveField_m )
@@ -311,7 +311,7 @@ SUBROUTINE WaveField_GetNodeWaveVelAcc( WaveField, WaveField_m, Time, pos, force
311311
IF ( pos(3) <= 0.0_ReKi) THEN ! Node is at or below the SWL
312312
nodeInWater = 1_IntKi
313313
! Use location to obtain interpolated values of kinematics
314-
CALL WaveField_Interp_Setup4D( Time, pos, WaveField%GridDepth, WaveField%VolGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
314+
CALL WaveField_Interp_Setup4D( Time+WaveField%WaveTimeShift, pos, WaveField%GridDepth, WaveField%VolGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
315315
FV(:) = GridInterp4DVec( WaveField%WaveVel, WaveField_m )
316316
FA(:) = GridInterp4DVec( WaveField%WaveAcc, WaveField_m )
317317
ELSE ! Node is above the SWL
@@ -331,7 +331,7 @@ SUBROUTINE WaveField_GetNodeWaveVelAcc( WaveField, WaveField_m, Time, pos, force
331331
IF ( pos(3) <= 0.0_SiKi) THEN ! Node is below the SWL - evaluate wave dynamics as usual
332332

333333
! Use location to obtain interpolated values of kinematics
334-
CALL WaveField_Interp_Setup4D( Time, pos, WaveField%GridDepth, WaveField%VolGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
334+
CALL WaveField_Interp_Setup4D( Time+WaveField%WaveTimeShift, pos, WaveField%GridDepth, WaveField%VolGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
335335
FV(:) = GridInterp4DVec( WaveField%WaveVel, WaveField_m )
336336
FA(:) = GridInterp4DVec( WaveField%WaveAcc, WaveField_m )
337337

@@ -344,7 +344,7 @@ SUBROUTINE WaveField_GetNodeWaveVelAcc( WaveField, WaveField_m, Time, pos, force
344344

345345
! Extrapoled wave stretching
346346
IF (WaveField%WaveStMod == 2) THEN
347-
CALL WaveField_Interp_Setup3D( Time, posXY, WaveField%SrfGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
347+
CALL WaveField_Interp_Setup3D( Time+WaveField%WaveTimeShift, posXY, WaveField%SrfGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
348348
FV(:) = FV(:) + GridInterp3DVec( WaveField%PWaveVel0, WaveField_m ) * pos(3)
349349
FA(:) = FA(:) + GridInterp3DVec( WaveField%PWaveAcc0, WaveField_m ) * pos(3)
350350
END IF
@@ -359,7 +359,7 @@ SUBROUTINE WaveField_GetNodeWaveVelAcc( WaveField, WaveField_m, Time, pos, force
359359
posPrime(3) = MIN( posPrime(3), 0.0_ReKi) ! Clamp z-position to zero. Needed when forceNodeInWater=.TRUE.
360360

361361
! Obtain the wave-field variables by interpolation with the mapped position.
362-
CALL WaveField_Interp_Setup4D( Time, posPrime, WaveField%GridDepth, WaveField%VolGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
362+
CALL WaveField_Interp_Setup4D( Time+WaveField%WaveTimeShift, posPrime, WaveField%GridDepth, WaveField%VolGridParams, WaveField_m, ErrStat2, ErrMsg2 ); if (Failed()) return;
363363
FV(:) = GridInterp4DVec( WaveField%WaveVel, WaveField_m )
364364
FA(:) = GridInterp4DVec( WaveField%WaveAcc, WaveField_m )
365365

modules/seastate/src/SeaState.f90

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,10 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init
173173

174174
! Store the WaveTimeShift
175175
p%WaveField%WaveTimeShift = InitInp%WaveTimeShift
176+
if (p%WaveField%WaveTimeShift < 0.0_DbKi) then
177+
call SetErrStat(ErrID_Fatal, 'WaveTimeShift from driver code cannot be negative', ErrStat, ErrMsg, RoutineName)
178+
return
179+
endif
176180

177181
! Copy Waves initialization output into the initialization input type for the WAMIT module
178182
p%WaveDT = InputFileData%Waves%WaveDT

0 commit comments

Comments
 (0)