File indexing completed on 2018-03-02 18:36:09 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
97c37ca14a Jean*0001 #include "CPP_EEOPTIONS.h"
0002
0003
0004
0005
0006
0007 SUBROUTINE GET_PERIODIC_INTERVAL(
0008 O tRec0, tRec1, tRec2, wght1, wght2,
0009 I cycleLength, recSpacing, deltaT,
0010 I currentTime, myThid )
0011
0012
0013
0014
0015
0016
6420b04106 Jean*0017
0018
97c37ca14a Jean*0019
6420b04106 Jean*0020
97c37ca14a Jean*0021
0022
0023
0024
0025
0026
0027
0028 IMPLICIT NONE
0029 #include "EEPARAMS.h"
0030
0031
6420b04106 Jean*0032
97c37ca14a Jean*0033
0034
0035
0036
0037 _RL cycleLength, recSpacing, deltaT, currentTime
0038 INTEGER myThid
0039
0040
0041
0042
0043
0044
0045 INTEGER tRec0, tRec1, tRec2
0046 _RL wght1, wght2
0047
0048
0049
0050
0051
0052 INTEGER nbRec
0053 CHARACTER*(MAX_LEN_MBUF) msgBuf
6420b04106 Jean*0054 _RL locTime, modTime, tmpTime
97c37ca14a Jean*0055
0056
6420b04106 Jean*0057
0058 _RL F90MODULO, arg1, arg2
0059
0060
0061 F90MODULO(arg1,arg2) = MOD(MOD(arg1,arg2)+arg2,arg2)
0062
0063
0064
97c37ca14a Jean*0065 tRec0 = 0
0066 tRec1 = 0
0067 tRec2 = 0
0068 wght1 = 0.
0069 wght2 = 0.
0070
6420b04106 Jean*0071 IF ( cycleLength.LT.0. .OR.
97c37ca14a Jean*0072 & recSpacing .LE.0. ) THEN
6420b04106 Jean*0073 IF ( cycleLength.LT.0. ) WRITE(msgBuf,'(A)')
0074 & 'GET_PERIODIC_INTERVAL requires cycleLength >= 0'
97c37ca14a Jean*0075 IF ( recSpacing .LE.0. ) WRITE(msgBuf,'(A)')
0076 & 'GET_PERIODIC_INTERVAL requires recSpacing > 0'
0077 CALL PRINT_ERROR( msgBuf, myThid )
0078 WRITE(msgBuf,'(A,2(A,1PE16.8))') 'GET_PERIODIC_INTERVAL: ',
0079 & 'cycleLength=', cycleLength, ' , recSpacing=', recSpacing
0080 CALL PRINT_ERROR( msgBuf, myThid )
0081 STOP 'ABNORMAL END: S/R GET_PERIODIC_INTERVAL'
0082 ELSE
0083 nbRec = NINT(cycleLength/recSpacing)
0084 ENDIF
0085 tmpTime = nbRec*recSpacing
0086 IF ( cycleLength.NE.tmpTime ) THEN
0087 WRITE(msgBuf,'(2A,I5,A)') 'GET_PERIODIC_INTERVAL: ',
0088 & 'cycleLength not multiple of recSpacing:'
0089 CALL PRINT_ERROR( msgBuf, myThid )
0090 WRITE(msgBuf,'(A,2(A,1PE16.8))') 'GET_PERIODIC_INTERVAL: ',
0091 & 'cycleLength=', cycleLength, ' , recSpacing=', recSpacing
0092 CALL PRINT_ERROR( msgBuf, myThid )
0093 STOP 'ABNORMAL END: S/R GET_PERIODIC_INTERVAL'
0094 ENDIF
0095
6420b04106 Jean*0096 IF ( cycleLength.EQ.0. _d 0 ) THEN
0097
0098
0099 locTime = currentTime - recSpacing*0.5
0100 modTime = F90MODULO(locTime,recSpacing)
97c37ca14a Jean*0101
0102
6420b04106 Jean*0103 tRec1 = 1 + NINT( (locTime-modTime)/recSpacing )
0104 tRec2 = 1 + tRec1
97c37ca14a Jean*0105
0106
6420b04106 Jean*0107 wght2 = modTime / recSpacing
0108 wght1 = 1. _d 0 - wght2
97c37ca14a Jean*0109
0110
6420b04106 Jean*0111 locTime = locTime-deltaT
0112 modTime = F90MODULO( locTime, recSpacing )
0113 tRec0 = 1 + NINT( (locTime-modTime)/recSpacing )
0114
0115 ELSE
0116
0117
0118 locTime = currentTime - recSpacing*0.5
0119 & + cycleLength*( 2 - NINT(currentTime/cycleLength) )
0120
0121
0122 tmpTime = MOD( locTime, cycleLength )
0123 tRec1 = 1 + INT( tmpTime/recSpacing )
0124 tRec2 = 1 + MOD( tRec1, nbRec )
0125
0126
0127 wght2 = ( tmpTime - recSpacing*(tRec1 - 1) )/recSpacing
0128 wght1 = 1. _d 0 - wght2
0129
0130
0131 tmpTime = MOD( locTime-deltaT, cycleLength )
0132 tRec0 = 1 + INT(tmpTime/recSpacing)
0133
0134 ENDIF
97c37ca14a Jean*0135
0136 RETURN
0137 END