** Warning **
Issuing rollback() due to DESTROY without explicit disconnect() of DBD::mysql::db handle dbname=MITgcm at /usr/local/share/lxr/lib/LXR/Common.pm line 1224.
Last-Modified: Wed, 16 Sep 2025 05:14:15 GMT
Content-Type: text/html; charset=utf-8
MITgcm/MITgcm/pkg/ctrl/ctrl_get_gen_rec.F
File indexing completed on 2024-03-02 06:10:18 UTC
view on github raw file Latest commit 5cf43646 on 2024-03-01 18:50:49 UTC
7bfe6112e8 Jean* 0001 #include "CTRL_OPTIONS.h "
7109a141b2 Patr* 0002
0003 subroutine ctrl_get_gen_rec (
0004 I xx_genstartdate ,
0005 I xx_genperiod ,
0006 O fac ,
0007 O first ,
0008 O changed ,
0009 O count0 ,
0010 O count1 ,
4d72283393 Mart* 0011 I myTime , myIter , myThid )
7109a141b2 Patr* 0012
05e2fb6b68 Jean* 0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
7109a141b2 Patr* 0024
0025 implicit none
0026
05e2fb6b68 Jean* 0027
7109a141b2 Patr* 0028
0029 #include "SIZE.h "
594dbca4e4 Jean* 0030 #include "EEPARAMS.h "
0031 #include "PARAMS.h "
5cf4364659 Mart* 0032 #include "CTRL_SIZE.h "
4d72283393 Mart* 0033 #include "CTRL.h "
dff4940422 Patr* 0034 #ifdef ALLOW_CAL
7109a141b2 Patr* 0035 # include "cal.h "
0036 #endif
0037
05e2fb6b68 Jean* 0038
7109a141b2 Patr* 0039
0040 integer xx_genstartdate (4)
0041 _RL xx_genperiod
0042 _RL fac
0043 logical first
0044 logical changed
0045 integer count0
0046 integer count1
4d72283393 Mart* 0047 _RL myTime
0048 integer myIter
0049 integer myThid
7109a141b2 Patr* 0050
05e2fb6b68 Jean* 0051
7109a141b2 Patr* 0052
dff4940422 Patr* 0053 #ifdef ALLOW_CAL
7109a141b2 Patr* 0054
0055 integer mydate (4)
0056 integer previousdate (4)
0057 integer difftime (4)
0058
0059 integer fldcount
0060 _RL fldsecs
0061 integer prevfldcount
0062 _RL prevfldsecs
0063 integer flddate (4)
0064
0065 integer fldstartdate (4)
0066 _RL fldperiod
0067
594dbca4e4 Jean* 0068
cc7fa87b6d Gael* 0069
deacece587 Oliv* 0070 integer year0
0071 integer year1
0072
7109a141b2 Patr* 0073 logical lArgErr
ab460d1282 Mart* 0074 #else
0075
0076
03c07845ac Jean* 0077 _RL myRelTime , tmpFac
0078 INTEGER countP
6dfbc266bb Jean* 0079 #endif
7109a141b2 Patr* 0080
0081 #ifdef ECCO_VERBOSE
0082 character *(max_len_mbuf ) msgbuf
0083 #endif
0084
05e2fb6b68 Jean* 0085
7109a141b2 Patr* 0086
6dfbc266bb Jean* 0087 #ifdef ALLOW_CAL
7109a141b2 Patr* 0088 lArgErr = .true.
0089 fldperiod = 0.
0090
05e2fb6b68 Jean* 0091
7109a141b2 Patr* 0092
0093 call cal_CopyDate (
0094 I xx_genstartdate ,
0095 O fldstartdate ,
4d72283393 Mart* 0096 I myThid
7109a141b2 Patr* 0097 & )
0098 fldperiod = xx_genperiod
0099 lArgErr = .false.
951926fb9b Jean* 0100
05e2fb6b68 Jean* 0101
7109a141b2 Patr* 0102 if ( lArgErr ) then
0103 print *,' The subroutine *ctrl_get_gen_rec* has been called'
0104 print *,' with an illegal field specification.'
0105 stop ' ... stopped in ctrl_get_gen_rec.'
0106 endif
0107
79ee6da03d Mart* 0108 if ( xx_genperiod .eq. -12. _d 0 ) then
05e2fb6b68 Jean* 0109
0110
79ee6da03d Mart* 0111 call cal_GetMonthsRec (
0112 O fac , first , changed ,
deacece587 Oliv* 0113 O count0 , count1 , year0 , year1 ,
4d72283393 Mart* 0114 I myTime , myIter , myThid
79ee6da03d Mart* 0115 & )
0116 elseif ( fldperiod .eq. 0. _d 0 ) then
05e2fb6b68 Jean* 0117
0118
0119
4d72283393 Mart* 0120 first = ((myTime - modelstart ) .lt. 0.5*modelstep )
d2701cc5c1 Mart* 0121 changed = .false.
0122 fac = 1. _d 0
0123 count0 = 1
0124 count1 = count0
0125 else
05e2fb6b68 Jean* 0126
0127
4d72283393 Mart* 0128 call cal_GetDate ( myIter , myTime , mydate , myThid )
7109a141b2 Patr* 0129
05e2fb6b68 Jean* 0130
594dbca4e4 Jean* 0131
4d72283393 Mart* 0132
0133
b938a3c63b antn* 0134
cc7fa87b6d Gael* 0135
05e2fb6b68 Jean* 0136
d2701cc5c1 Mart* 0137 call cal_TimePassed ( fldstartdate , mydate , difftime ,
4d72283393 Mart* 0138 & myThid )
0139 call cal_ToSeconds ( difftime , fldsecs , myThid )
d2701cc5c1 Mart* 0140 fldsecs = int((fldsecs +0.5)/fldperiod )*fldperiod
0141 fldcount = int((fldsecs +0.5)/fldperiod ) + 1
7109a141b2 Patr* 0142
05e2fb6b68 Jean* 0143
4d72283393 Mart* 0144 first = ((myTime - modelstart ) .lt. 0.5*modelstep )
7109a141b2 Patr* 0145
d2701cc5c1 Mart* 0146 if ( first ) then
7109a141b2 Patr* 0147 changed = .false.
d2701cc5c1 Mart* 0148 else
4d72283393 Mart* 0149 call cal_GetDate ( myIter -1, myTime -modelstep ,
0150 & previousdate , myThid )
7109a141b2 Patr* 0151
0152 call cal_TimePassed ( fldstartdate , previousdate ,
4d72283393 Mart* 0153 & difftime , myThid )
0154 call cal_ToSeconds ( difftime , prevfldsecs , myThid )
7109a141b2 Patr* 0155 prevfldsecs = int((prevfldsecs +0.5)/fldperiod )*fldperiod
0156 prevfldcount = int((prevfldsecs +0.5)/fldperiod ) + 1
0157
0158 if (fldcount .ne. prevfldcount ) then
d2701cc5c1 Mart* 0159 changed = .true.
7109a141b2 Patr* 0160 else
d2701cc5c1 Mart* 0161 changed = .false.
7109a141b2 Patr* 0162 endif
d2701cc5c1 Mart* 0163 endif
7109a141b2 Patr* 0164
743c6cc502 Timo* 0165 count0 = fldcount
0166 count1 = fldcount + 1
7109a141b2 Patr* 0167
4d72283393 Mart* 0168 call cal_TimeInterval ( fldsecs , 'secs' , difftime , myThid )
0169 call cal_AddTime ( fldstartdate , difftime , flddate , myThid )
0170 call cal_TimePassed ( flddate , mydate , difftime , myThid )
0171 call cal_ToSeconds ( difftime , fldsecs , myThid )
7109a141b2 Patr* 0172
05e2fb6b68 Jean* 0173
0174
0175
d2701cc5c1 Mart* 0176 fac = 1. - fldsecs /fldperiod
7109a141b2 Patr* 0177
05e2fb6b68 Jean* 0178
03c07845ac Jean* 0179 endif
ab460d1282 Mart* 0180 #else /* not ALLOW_CAL */
6dfbc266bb Jean* 0181
ab460d1282 Mart* 0182
05e2fb6b68 Jean* 0183
ab460d1282 Mart* 0184
0185 myRelTime = myTime - startTime
0186 first = (myRelTime .lt. 0.5*deltaTClock )
6dfbc266bb Jean* 0187 if ( xx_genperiod .eq. 0. _d 0
ab460d1282 Mart* 0188 & .or. externForcingCycle .eq. 0. _d 0 ) then
6dfbc266bb Jean* 0189
ab460d1282 Mart* 0190
0191 changed = .false.
0192 count0 = 1
0193 count1 = 1
0194 fac = 1. _d 0
0195 else
03c07845ac Jean* 0196
0197
0198 CALL GET_PERIODIC_INTERVAL (
0199 O countP , count0 , count1 , tmpFac , fac ,
0200 I externForcingCycle , xx_genperiod ,
05e2fb6b68 Jean* 0201 I deltaTClock , myTime , myThid )
03c07845ac Jean* 0202
0203 IF ( count0 .NE. countP ) THEN
ab460d1282 Mart* 0204 changed = .true.
03c07845ac Jean* 0205 ELSE
ab460d1282 Mart* 0206 changed = .false.
03c07845ac Jean* 0207 ENDIF
0208 IF ( first ) changed = .false.
ab460d1282 Mart* 0209
0210 endif
0211
0212 #endif /* ALLOW_CAL */
0213
7109a141b2 Patr* 0214 #ifdef ECCO_VERBOSE
05e2fb6b68 Jean* 0215
4d72283393 Mart* 0216 _BEGIN_MASTER ( myThid )
7109a141b2 Patr* 0217 write (msgbuf ,'(a)' ) ' '
4d72283393 Mart* 0218 call print_message ( msgbuf , standardMessageUnit ,
0219 & SQUEEZE_RIGHT , myThid )
7109a141b2 Patr* 0220 write (msgbuf ,'(a,2x,l2,2x,l2,2x,D15.8)' )
0221 & ' first, changed, fac:' ,
0222 & first , changed , fac
4d72283393 Mart* 0223 call print_message ( msgbuf , standardMessageUnit ,
0224 & SQUEEZE_RIGHT , myThid )
7109a141b2 Patr* 0225 write (msgbuf ,'(a,i4,i4)' )
0226 & ' count0, count1:' ,
0227 & count0 , count1
4d72283393 Mart* 0228 call print_message ( msgbuf , standardMessageUnit ,
0229 & SQUEEZE_RIGHT , myThid )
7109a141b2 Patr* 0230 write (msgbuf ,'(a)' ) ' '
4d72283393 Mart* 0231 call print_message ( msgbuf , standardMessageUnit ,
0232 & SQUEEZE_RIGHT , myThid )
0233 _END_MASTER ( myThid )
7109a141b2 Patr* 0234 #endif
0235
0236 return
0237 end