/[MITgcm]/MITgcm/pkg/cal/cal_set.F
ViewVC logotype

Diff of /MITgcm/pkg/cal/cal_set.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.8 by jmc, Thu Apr 5 22:00:08 2012 UTC revision 1.9 by jmc, Sun Apr 8 19:17:09 2012 UTC
# Line 97  C       The reference date for the Grego Line 97  C       The reference date for the Grego
97  C       and its format: ( yymmdd , hhmmss , leap year, weekday )  C       and its format: ( yymmdd , hhmmss , leap year, weekday )
98  C                                             (1/2)    (1 - 7)  C                                             (1/2)    (1 - 7)
99  C       The Gregorian calendar starts on Friday, 15 Oct. 1582.  C       The Gregorian calendar starts on Friday, 15 Oct. 1582.
100          refdate(1) = 15821015          refDate(1) = 15821015
101          refdate(2) = 0          refDate(2) = 0
102          refdate(3) = 1          refDate(3) = 1
103          refdate(4) = 1          refDate(4) = 1
104    
105  C       Number of months per year and other useful numbers.  C       Number of months per year and other useful numbers.
106          nmonthyear       = 12          nDaysNoLeap      = 365
107          ndaysnoleap      = 365          nDaysLeap        = 366
108          ndaysleap        = 366          nMaxDayMonth     = 31
109          nmaxdaymonth     = 31          hoursPerDay      = 24
110          hoursperday      = 24          minutesPerHour   = 60
111          minutesperday    = 1440          minutesPerDay    = minutesPerHour*hoursPerDay
112          minutesperhour   = 60          secondsPerMinute = 60
113          secondsperday    = 86400          secondsPerHour   = secondsPerMinute*minutesPerHour
114          secondsperhour   = 3600          secondsPerDay    = secondsPerMinute*minutesPerDay
         secondsperminute = 60  
115    
116  C       Number of days per month.  C       Number of days per month.
117  C       The "magic" number 2773 derives from the sequence: 101010110101  C       The "magic" number 2773 derives from the sequence: 101010110101
# Line 121  C         alternative would be to take 2 Line 120  C         alternative would be to take 2
120  C         executed in reverse order. Accidentially, the latter  C         executed in reverse order. Accidentially, the latter
121  C         is a prime number.  C         is a prime number.
122          k=2773          k=2773
123          do i=1,nmonthyear          do i=1,nMonthYear
124            j = mod(k,2)            j = mod(k,2)
125            k = (k-j)/2            k = (k-j)/2
126            ndaymonth(i,1) = 30+j            nDayMonth(i,1) = 30+j
127            ndaymonth(i,2) = 30+j            nDayMonth(i,2) = 30+j
128          enddo          enddo
129          ndaymonth(2,1) = 28          nDayMonth(2,1) = 28
130          ndaymonth(2,2) = 29          nDayMonth(2,2) = 29
131    
132  C       Week days.  C       Week days.
133          dayofweek(1) = 'FRI'          dayOfWeek(1) = 'FRI'
134          dayofweek(2) = 'SAT'          dayOfWeek(2) = 'SAT'
135          dayofweek(3) = 'SUN'          dayOfWeek(3) = 'SUN'
136          dayofweek(4) = 'MON'          dayOfWeek(4) = 'MON'
137          dayofweek(5) = 'TUE'          dayOfWeek(5) = 'TUE'
138          dayofweek(6) = 'WED'          dayOfWeek(6) = 'WED'
139          dayofweek(7) = 'THU'          dayOfWeek(7) = 'THU'
140    
141        else if ( TheCalendar .eq. 'model') then        else if ( TheCalendar .eq. 'model') then
142          usingModelCalendar = .TRUE.          usingModelCalendar = .TRUE.
143  C       Assume a model calendar having 12 months with thirty days each.  C       Assume a model calendar having 12 months with thirty days each.
144  C       Reference date is the first day of year 0 at 0am, and model day 1.  C       Reference date is the first day of year 0 at 0am, and model day 1.
145          refdate(1) = 00000101          refDate(1) = 00000101
146          refdate(2) = 0          refDate(2) = 0
147          refdate(3) = 1          refDate(3) = 1
148          refdate(4) = 1          refDate(4) = 1
149    
150  C       Some useful numbers.  C       Some useful numbers.
151          nmonthyear       = 12          nDaysNoLeap      = 360
152          ndaysnoleap      = 360          nDaysLeap        = 360
153          ndaysleap        = 360          nMaxDayMonth     = 30
154          nmaxdaymonth     = 30          hoursPerDay      = 24
155          hoursperday      = 24          minutesPerHour   = 60
156          minutesperday    = 1440          minutesPerDay    = minutesPerHour*hoursPerDay
157          minutesperhour   = 60          secondsPerMinute = 60
158          secondsperday    = 86400          secondsPerHour   = secondsPerMinute*minutesPerHour
159          secondsperhour   = 3600          secondsPerDay    = secondsPerMinute*minutesPerDay
160          secondsperminute = 60          do i=1,nMonthYear
161          do i=1,nmonthyear            nDayMonth(i,1) = 30
162            ndaymonth(i,1) = 30            nDayMonth(i,2) = 30
           ndaymonth(i,2) = 30  
163          enddo          enddo
164    
165  C       Week days (Model Day 1 - 7).  C       Week days (Model Day 1 - 7).
166          dayofweek(1) = 'MD1'          dayOfWeek(1) = 'MD1'
167          dayofweek(2) = 'MD2'          dayOfWeek(2) = 'MD2'
168          dayofweek(3) = 'MD3'          dayOfWeek(3) = 'MD3'
169          dayofweek(4) = 'MD4'          dayOfWeek(4) = 'MD4'
170          dayofweek(5) = 'MD5'          dayOfWeek(5) = 'MD5'
171          dayofweek(6) = 'MD6'          dayOfWeek(6) = 'MD6'
172          dayofweek(7) = 'MD7'          dayOfWeek(7) = 'MD7'
173    
174  c     else if ( TheCalendar .eq. 'julian') then  c     else if ( TheCalendar .eq. 'julian') then
175  c       usingJulianCalendar = .TRUE.  c       usingJulianCalendar = .TRUE.
# Line 189  C-    Record completion of calendar sett Line 187  C-    Record completion of calendar sett
187        cal_setStatus = 1        cal_setStatus = 1
188    
189  C     Map the numerical model parameters. --> common blocks in CALENDAR.h  C     Map the numerical model parameters. --> common blocks in CALENDAR.h
190        modelstart       = modstart        modelStart       = modstart
191        modelend         = modend        modelEnd         = modend
192        modelstep        = modstep        modelStep        = modstep
193        modeliter0       = moditerini        modelIter0       = moditerini
194        modeliterend     = moditerend        modelIterEnd     = moditerend
195        modelintsteps    = modintsteps        modelIntSteps    = modintsteps
196    
197  C     Do first consistency checks  C     Do first consistency checks
198  C     o Time step.  C     o Time step.
199        if ( modelstep .le. 0. ) then        if ( modelStep .le. 0. ) then
200          ierr = 102          ierr = 102
201          call cal_PrintError( ierr, myThid )          call cal_PrintError( ierr, myThid )
202          stop ' stopped in cal_Set.'          stop ' stopped in cal_Set.'
203        endif        endif
204        if ( modelstep .lt. 1. ) then        if ( modelStep .lt. 1. ) then
205          ierr = 103          ierr = 103
206          call cal_PrintError( ierr, myThid )          call cal_PrintError( ierr, myThid )
207          stop ' stopped in cal_Set.'          stop ' stopped in cal_Set.'
208        endif        endif
209        if ( abs(modelstep - nint(modelstep)) .gt. 0.000001 ) then        if ( abs(modelStep - nint(modelStep)) .gt. 0.000001 ) then
210          ierr = 104          ierr = 104
211          call cal_PrintError( ierr, myThid )          call cal_PrintError( ierr, myThid )
212          stop ' stopped in cal_Set.'          stop ' stopped in cal_Set.'
213        else        else
214          modelstep = float(nint(modelstep))          modelStep = float(nint(modelStep))
215        endif        endif
216    
217  C-    Record completion of calendar settings: stage 2 = numerical model parms  C-    Record completion of calendar settings: stage 2 = numerical model parms
# Line 225  C     Complete the start date specificat Line 223  C     Complete the start date specificat
223    
224  C     From here on, the final calendar settings are determined by the  C     From here on, the final calendar settings are determined by the
225  C     following variables:  C     following variables:
226  C               modelstart, modelstep*modelintsteps & modelBaseDate  C               modelStart, modelStep*modelIntSteps & modelBaseDate
227    
228        runtimesecs = modelintsteps*modelstep        runtimesecs = modelIntSteps*modelStep
229    
230  C     Determine the startdate of the integration.  C     Determine the startdate of the integration.
231  c     iterinisecs = float(modeliter0)*modelstep  c     iterinisecs = float(modelIter0)*modelStep
232  C-jmc: above does not work if baseTime <> 0 ; fix it below:  C-jmc: above does not work if baseTime <> 0 ; fix it below:
233        iterinisecs = modelstart        iterinisecs = modelStart
234        call cal_TimeInterval( iterinisecs, 'secs', iterinitime, myThid )        call cal_TimeInterval( iterinisecs, 'secs', iterinitime, myThid )
235        call cal_AddTime( modelBaseDate, iterinitime, modelstartdate,        call cal_AddTime( modelBaseDate, iterinitime, modelStartDate,
236       &                  myThid )       &                  myThid )
237    
238        call cal_TimeInterval( runtimesecs, 'secs', timediff, myThid )        call cal_TimeInterval( runtimesecs, 'secs', timediff, myThid )
239        call cal_AddTime( modelstartdate, timediff, modelenddate,        call cal_AddTime( modelStartDate, timediff, modelEndDate,
240       &                  myThid )       &                  myThid )
241    
242  C-    Record completion of calendar settings: stage 3 = fully set-up.  C-    Record completion of calendar settings: stage 3 = fully set-up.

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.9

  ViewVC Help
Powered by ViewVC 1.1.22