Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:41:47 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
4e66ab0b67 Oliv*0001 #include "LONGSTEP_OPTIONS.h"
                0002 
                0003 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0004 CBOP
                0005 C     !ROUTINE: LONGSTEP_CHECK_ITERS
                0006 
                0007 C     !INTERFACE:
                0008       SUBROUTINE LONGSTEP_CHECK_ITERS( myThid )
                0009 
                0010 C     !DESCRIPTION:
                0011 C     Check that starttime and endtime are multiples of long time step.
                0012 C     Fix endtime if not, abort if starttime is not.
                0013 
                0014 C     !USES:
                0015       IMPLICIT NONE
                0016 #include "SIZE.h"
                0017 #include "EEPARAMS.h"
                0018 #include "LONGSTEP_PARAMS.h"
                0019 #include "PARAMS.h"
                0020 
                0021 C     !INPUT PARAMETERS:
                0022       INTEGER myThid
                0023 CEOP
                0024 
                0025 #ifdef ALLOW_LONGSTEP
                0026 
                0027 C     !LOCAL VARIABLES:
                0028 C     extraIter  :: extra iterations added to finish on a longstep
                0029 C     msgBuf     :: message buffer
                0030       INTEGER extraIter
                0031       CHARACTER*(MAX_LEN_MBUF) msgBuf
                0032 
                0033       IF (MOD(nIter0, LS_nIter) .NE. 0) THEN
                0034 C       Restarting from a pickup in the middle of a longstep will lead
                0035 C       to invalid vel,... averages, so we abort
                0036         WRITE(msgBuf,'(2A,2I10)')
                0037      &       ' LONGSTEP_CHECK_ITERS: nIter0 is not a multiple of',
                0038      &       ' LS_niter', nIter0, LS_niter
                0039         CALL PRINT_ERROR( msgBuf, myThid )
                0040         STOP 'ABNORMAL END: S/R LONGSTEP_CHECK_ITERS'
                0041       ENDIF
                0042 
                0043       IF (MOD(nEndIter, LS_nIter) .NE. 0) THEN
                0044 C       Add as many time steps as necessary to bring endtime to the end
                0045 C       of a long time step, so that the pickup will be valid.
914c1bc31b Oliv*0046         WRITE(msgBuf,'(3A)') '**WARNING** ',
4e66ab0b67 Oliv*0047      &       ' LONGSTEP_CHECK_ITERS: nEndIter is not a multiple of',
914c1bc31b Oliv*0048      &       ' LS_niter:'
                0049         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0050      &                      SQUEEZE_RIGHT , myThid)
                0051         WRITE(msgBuf,'(2A,2I10)') '**WARNING** ',
                0052      &       ' LONGSTEP_CHECK_ITERS:     ', nEndIter, LS_niter
                0053         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0054      &                      SQUEEZE_RIGHT , myThid)
4e66ab0b67 Oliv*0055         extraIter = LS_nIter - MOD(nEndIter, LS_nIter)
                0056         nEndIter = nEndIter + extraIter
                0057         nTimeSteps = nEndIter - nIter0
b4566ab81c Jean*0058         endTime = baseTime + deltaTClock*DFLOAT(nEndIter)
914c1bc31b Oliv*0059         WRITE(msgBuf,'(2A)') '**WARNING** ',
4e66ab0b67 Oliv*0060      &       ' LONGSTEP_CHECK_ITERS: adjusting to'
914c1bc31b Oliv*0061         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0062      &                      SQUEEZE_RIGHT , myThid)
                0063         WRITE(msgBuf,'(2A,I10)') '**WARNING** ',
4e66ab0b67 Oliv*0064      &       ' LONGSTEP_CHECK_ITERS:     nEndIter   =', nEndIter
914c1bc31b Oliv*0065         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0066      &                      SQUEEZE_RIGHT , myThid)
                0067         WRITE(msgBuf,'(2A,I10)') '**WARNING** ',
4e66ab0b67 Oliv*0068      &       ' LONGSTEP_CHECK_ITERS:     nTimeSteps =', nTimeSteps
914c1bc31b Oliv*0069         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0070      &                      SQUEEZE_RIGHT , myThid)
                0071         WRITE(msgBuf,'(2A,1PE23.15)') '**WARNING** ',
4e66ab0b67 Oliv*0072      &       ' LONGSTEP_CHECK_ITERS:     endTime    =', endTime
914c1bc31b Oliv*0073         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0074      &                      SQUEEZE_RIGHT , myThid)
4e66ab0b67 Oliv*0075 C       log to standard output too
                0076         WRITE(msgBuf,'(2A)') 'S/R LONGSTEP_CHECK_ITERS: ',
                0077      &    ' adjusting endTime:'
                0078         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0079      &                      SQUEEZE_RIGHT , 1)
                0080         CALL WRITE_0D_RL( endTime, INDEX_NONE,'endTime =',
                0081      &'   /* Integration ending time ( s ). */')
                0082         CALL WRITE_0D_I( nTimeSteps, INDEX_NONE,'nTimeSteps =',
                0083      &'   /* Number of timesteps */')
                0084       ENDIF
                0085 
                0086 #endif /* ALLOW_LONGSTEP */
                0087 
                0088       RETURN
                0089       END