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

Annotation of /MITgcm/pkg/cal/cal_stepsforday.F

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


Revision 1.3 - (hide annotations) (download)
Tue Mar 16 00:11:46 2010 UTC (14 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62v, checkpoint62u, checkpoint62t, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62w, checkpoint62z, checkpoint62y, checkpoint62x, checkpoint63g, checkpoint64, checkpoint65, checkpoint63, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint65o, checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, HEAD
Changes since 1.2: +9 -9 lines
avoid unbalanced quote (single or double) in commented line

1 jmc 1.3 C $Header: /u/gcmpack/MITgcm/pkg/cal/cal_stepsforday.F,v 1.2 2003/10/09 04:19:19 edhill Exp $
2 edhill 1.2 C $Name: $
3 heimbach 1.1
4 edhill 1.2 #include "CAL_OPTIONS.h"
5 heimbach 1.1
6     subroutine cal_StepsForDay(
7     I iday,
8     O firststep,
9     O laststep,
10     O nsteps,
11     I mythid
12     & )
13    
14     c ==================================================================
15     c SUBROUTINE cal_StepsForDay
16     c ==================================================================
17     c
18     c o Given the current day of the integration this routine returns
19     c first, the last and the number of model steps the will have to
20     c be performed.
21     c
22     c This routine also checks consistency of variables quite
23     c extensively.
24     c
25     c started: Christian Eckert eckert@mit.edu 06-Apr-2000
26     c
27 jmc 1.3 c changed:
28 heimbach 1.1 c
29     c ==================================================================
30     c SUBROUTINE cal_StepsForDay
31     c ==================================================================
32    
33     implicit none
34    
35     c == global variables ==
36    
37     #include "cal.h"
38    
39     c == routine arguments ==
40    
41     integer iday
42     integer firststep
43     integer laststep
44     integer nsteps
45     integer mythid
46    
47     c == local variables ==
48    
49     integer ierr
50     integer mdstep
51     integer numdays
52     integer numsteps
53     integer frac1
54     integer frac2
55     integer frac3
56     integer frac4
57     integer fullsteps
58     integer firstyear
59     integer firstmonth
60     integer firstday
61     integer lyfirst
62     integer startsecs
63     integer lastday
64     integer endsecs
65    
66     c == external ==
67    
68     external cal_IntDays
69     integer cal_IntDays
70     external cal_IsLeap
71     integer cal_IsLeap
72    
73     c == end of interface ==
74    
75     numdays = cal_IntDays( mythid )
76     lyfirst = cal_IsLeap( firstyear, mythid )
77    
78     mdstep = int(modelstep)
79    
80     firstyear = modelstartdate(1)/10000
81     firstmonth = mod(modelstartdate(1)/100,100)
82     firstday = mod(modelstartdate(1),100)
83     lastday = mod(modelenddate(1),100)
84    
85     startsecs = (modelstartdate(2)/10000)*secondsperhour +
86     & mod(modelstartdate(2)/100,100)*secondsperminute +
87     & mod(modelstartdate(2),100)
88     endsecs = (modelenddate(2)/10000)*secondsperhour +
89     & mod(modelenddate(2)/100,100)*secondsperminute +
90     & mod(modelenddate(2),100)
91    
92     if ( numdays .eq. 1 ) then
93     if ( iday .eq. firstday ) then
94     c-- Get the number of steps in the first day.
95     if ( firstday .eq. lastday ) then
96     firststep = 1
97     laststep = modelintsteps
98     else if ( mod(firstday+1,ndaymonth(firstmonth,lyfirst)) .eq.
99     & lastday ) then
100     c-- This can only happen if we end at midnight of the next day.
101     if ( modelenddate(2) .eq. 0 ) then
102     firststep = 1
103     laststep = modelintsteps
104     c-- Note: This holds only if modelenddate was determined
105 jmc 1.3 c-- such that it coincides with the model final time.
106 heimbach 1.1 else
107     c-- We do not end at midnight of the first day of
108     c-- the next month.
109     ierr = 2604
110     call cal_PrintError( ierr, mythid )
111     stop ' stopped in cal_StepsForDay.'
112     endif
113     else
114     c-- The first and the last day are inconsistent with iday.
115     ierr = 2603
116     call cal_PrintError( ierr, mythid )
117     stop ' stopped in cal_StepsForDay.'
118     endif
119     else
120     c-- The variables numdays and iday are inconsistent;
121     c-- ( iday .gt. numdays ).
122     ierr = 2602
123     call cal_PrintError( ierr, mythid )
124     stop ' stopped in cal_StepsForDay.'
125     endif
126    
127     else if ( numdays .gt. 1 ) then
128     c-- More than one day of integration.
129     if ( iday .eq. 1 ) then
130     firststep = 1
131     laststep = int((secondsperday - startsecs)/mdstep)
132     else if ( ( iday .gt. 1 ) .and.
133     & ( iday .lt. numdays) ) then
134     c-- Somewhere between first and last month.
135     c-- The first steps in iday.
136     fullsteps = int((secondsperday - startsecs)/mdstep)
137     numsteps = fullsteps
138 jmc 1.3 c-- What is left in the first day (frac1).
139 heimbach 1.1 frac1 = (secondsperday - startsecs) - fullsteps*mdstep
140     fullsteps = int(secondsperday/modelstep)
141 jmc 1.3 c-- What is left in a complete day (frac2).
142 heimbach 1.1 frac2 = secondsperday - fullsteps*mdstep
143 jmc 1.3 c-- What is left up to the current day (frac3).
144 heimbach 1.1 frac3 = frac1 + frac2*(iday - 1)
145     numsteps = numsteps + (iday - 1)*fullsteps +
146     & frac3/mdstep
147     laststep = numsteps
148     firststep = laststep - secondsperday/mdstep + 1
149    
150     else if ( iday .eq. numdays ) then
151     c-- The last day of integration.
152     c-- The first step in iday.
153     fullsteps = int((secondsperday - startsecs)/mdstep)
154     numsteps = fullsteps
155 jmc 1.3 c-- What is left in the first day (frac1).
156 heimbach 1.1 frac1 = (secondsperday - startsecs) - fullsteps*mdstep
157     fullsteps = int(secondsperday/modelstep)
158 jmc 1.3 c-- What is left in a complete day (frac2).
159 heimbach 1.1 frac2 = secondsperday - fullsteps*mdstep
160 jmc 1.3 c-- What is left up to the day before the last (frac3).
161 heimbach 1.1 frac3 = frac1 + frac2*(iday - 2)
162     numsteps = numsteps + (iday - 2)*fullsteps
163     c-- The last step in iday.
164     if ( modelenddate(2) .eq. 0 ) then
165     c-- This can only happen if we end at midnight of the next day.
166     laststep = numsteps + fullsteps
167     firststep = numsteps + 1
168     c-- Note: There should be no fraction left
169     c-- ( mod(frac3,mdstep) = frac3/mdstep ) if modelenddate
170     c-- is based on an integral number of timesteps.
171     else
172     frac4 = frac3 + endsecs
173     numsteps = numsteps + frac4/mdstep
174     laststep = numsteps
175    
176     c-- Note: There should be no fraction left
177     c-- ( mod(frac4,mdstep = frac4/mdstep ) if modelenddate
178     c-- is based on an integral number of timesteps.
179    
180     firststep = laststep - endsecs/mdstep + 1
181     endif
182     else
183     c-- The variables iday and numdays are inconsistent.
184     ierr = 2605
185     call cal_PrintError( ierr, mythid )
186     stop ' stopped in cal_DaysForMonth.'
187     endif
188     else
189     c-- The number of days to integrate is wrong; check cal_IntDays.
190     ierr = 2601
191     call cal_PrintError( ierr, mythid )
192     stop ' stopped in cal_StepsForDay.'
193     endif
194    
195     c-- The number of days to integrate in the given month.
196     nsteps = laststep - firststep + 1
197    
198     return
199     end
200    

  ViewVC Help
Powered by ViewVC 1.1.22