/[MITgcm]/MITgcm/pkg/ecco/cost_averagesflags.F
ViewVC logotype

Annotation of /MITgcm/pkg/ecco/cost_averagesflags.F

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


Revision 1.5 - (hide annotations) (download)
Tue Oct 9 00:02:50 2007 UTC (16 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint63p, checkpoint63q, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint60, checkpoint61, checkpoint62, checkpoint63, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59i, checkpoint59k, checkpoint59j, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q, checkpoint61z, checkpoint61x, checkpoint61y
Changes since 1.4: +6 -5 lines
add missing cvs $Header:$ or $Name:$

1 jmc 1.5 C $Header: $
2     C $Name: $
3 heimbach 1.1
4     #include "COST_CPPOPTIONS.h"
5    
6    
7     subroutine cost_AveragesFlags(
8     I myiter,
9     I mytime,
10     I mythid,
11     O first,
12 heimbach 1.3 O last,
13 heimbach 1.1 O startofday,
14     O startofmonth,
15 heimbach 1.3 O startofyear,
16 heimbach 1.1 O inday,
17     O inmonth,
18 heimbach 1.3 O inyear,
19 heimbach 1.1 O endofday,
20     O endofmonth,
21 heimbach 1.3 O endofyear,
22 heimbach 1.1 O sum1day,
23     O dayrec,
24     O sum1mon,
25 heimbach 1.3 O monrec,
26     O sum1year,
27     O yearrec
28 heimbach 1.1 & )
29    
30     c ==================================================================
31     c SUBROUTINE cost_AveragesFlags
32     c ==================================================================
33     c
34     c o Get flags for the daily and monthly time averaging.
35     c
36     c started: Christian Eckert eckert@mit.edu 24-Feb-2000
37     c
38     c - Introduced in order to create a package for the
39     c MITgcmUV.
40     c
41     c changed:
42     c
43     c ==================================================================
44     c SUBROUTINE cost_AveragesFlags
45     c ==================================================================
46    
47     implicit none
48    
49     c == global variables ==
50    
51     #include "EEPARAMS.h"
52     #include "SIZE.h"
53    
54     #include "cal.h"
55    
56     c == routine arguments ==
57    
58     integer myiter
59     _RL mytime
60     integer mythid
61     logical first
62     logical startofday
63     logical startofmonth
64 heimbach 1.3 logical startofyear
65 heimbach 1.1 logical inday
66     logical inmonth
67 heimbach 1.3 logical inyear
68 heimbach 1.1 logical last
69     logical endofday
70     logical endofmonth
71 heimbach 1.3 logical endofyear
72 heimbach 1.1 integer sum1day
73     integer dayrec
74     integer sum1mon
75     integer monrec
76 heimbach 1.3 integer sum1year
77     integer yearrec
78 heimbach 1.1
79     c == local variables ==
80    
81     integer mydate(4)
82     integer nextdate(4)
83     integer prevdate(4)
84     integer timediff(4)
85     integer datediff(4)
86     integer targetdate(4)
87     integer targetdate1
88     integer targetdate2
89     integer mydateday
90     integer mydatemonth
91 heimbach 1.3 integer mydateyear
92 heimbach 1.1 integer nextdateday
93     integer nextdatemonth
94 heimbach 1.3 integer nextdateyear
95 heimbach 1.1 integer prevdateday
96     integer prevdatemonth
97 heimbach 1.3 integer prevdateyear
98 heimbach 1.1
99     logical equal
100    
101     c == external functions ==
102    
103     logical cal_CompDates
104     external cal_CompDates
105    
106     integer cal_NumInts
107     external cal_NumInts
108    
109     c == end of interface ==
110    
111     c-- First, get some dates.
112     call cal_GetDate( myiter, mytime, mydate, mythid )
113     call cal_GetDate( myiter+1, mytime+modelstep, nextdate, mythid )
114    
115     call cal_TimeInterval( -modelstep, 'secs', timediff, mythid )
116     call cal_AddTime( mydate, timediff, prevdate, mythid )
117    
118     ce print*,' time average flags: mydate = ', mydate
119     ce print*,' time average flags: nextdate = ', nextdate
120     ce print*,' time average flags: prevdate = ', prevdate
121    
122     c-- Where are we with respect to the calendar?
123    
124     c-- The very first model step?
125     equal = cal_CompDates(modelstartdate,mydate,mythid)
126     if ( equal ) then
127     first = .true.
128     dayrec = 0
129     monrec = 0
130 heimbach 1.3 yearrec = 0
131 heimbach 1.1 else
132     first = .false.
133     endif
134    
135     c-- The very last model step?
136     equal = cal_CompDates(modelenddate,mydate,mythid)
137     if ( equal ) then
138     last = .true.
139     else
140     last = .false.
141     endif
142    
143     c-- Start of a calendar day?
144     mydateday = mod(mydate(1),100)
145     prevdateday = mod(prevdate(1),100)
146     if ( mydateday .ne. prevdateday ) then
147     startofday = .true.
148     else
149     startofday = .false.
150     endif
151    
152     c-- End of a calendar day?
153     mydateday = mod(mydate(1),100)
154     nextdateday = mod(nextdate(1),100)
155     if ( mydateday .ne. nextdateday ) then
156     endofday = .true.
157     else
158     endofday = .false.
159     endif
160    
161     c-- In a calendar day? As coded here, inday can not be true
162     c-- for either the first or the last timestep in the day.
163     c-- So the cases are mutually exclusive.
164     if ( ( mydateday .eq. prevdateday ) .and.
165     & ( mydateday .eq. nextdateday ) ) then
166     inday = .true.
167     else
168     inday = .false.
169     endif
170    
171     c-- Determine sum1day and dayrec explicitly.
172     if ( last .or. endofday ) then
173     if ( mydate(1) .eq. modelstartdate(1) ) then
174     call cal_CopyDate( modelstartdate, targetdate, mythid )
175     dayrec = 1
176     else
177     targetdate(1) = mydate(1)
178     targetdate(2) = 0
179     targetdate(3) = mydate(3)
180     targetdate(4) = mydate(4)
181     call cal_TimePassed( modelstartdate, targetdate, datediff,
182     & mythid )
183     if ( datediff(2) .eq. 0) then
184     dayrec = datediff(1) + 1
185     else
186     dayrec = datediff(1) + 2
187     endif
188     endif
189     call cal_TimeInterval( modelstep, 'secs', timediff, mythid )
190    
191     sum1day =
192     & cal_NumInts( targetdate, mydate, timediff, mythid ) + 1
193     else
194     sum1day = 0
195     endif
196    
197     c-- Start of a calendar month?
198     mydatemonth = mod(mydate(1)/100,100)
199     prevdatemonth = mod(prevdate(1)/100,100)
200     if ( mydatemonth .ne. prevdatemonth ) then
201     startofmonth = .true.
202     else
203     startofmonth = .false.
204     endif
205    
206     c-- End of a calendar month?
207     mydatemonth = mod(mydate(1)/100,100)
208     nextdatemonth = mod(nextdate(1)/100,100)
209     if ( mydatemonth .ne. nextdatemonth ) then
210     endofmonth = .true.
211     else
212     endofmonth = .false.
213     endif
214    
215     c-- In a calendar month? As coded here, inmonth can not be true
216     c-- for either the first or the last timestep in the month.
217     c-- So the cases are mutually exclusive.
218     if ( ( mydatemonth .eq. prevdatemonth ) .and.
219     & ( mydatemonth .eq. nextdatemonth ) ) then
220     inmonth = .true.
221     else
222     inmonth = .false.
223     endif
224    
225     c-- Determine sum1mon and monrec explicitly.
226     if ( last .or. endofmonth ) then
227     if ( (mydate(1)/100)*100 .eq. (modelstartdate(1)/100)*100 ) then
228     call cal_CopyDate( modelstartdate, targetdate, mythid )
229     monrec = 1
230     else
231     targetdate1 = (mydate(1)/100)*100+1
232     targetdate2 = 0
233     call cal_FullDate( targetdate1, targetdate2, targetdate,
234     & mythid )
235     if ( mydate(1)/10000 .eq. modelstartdate(1)/10000 ) then
236     monrec = mod( mydate(1)/100, 100 )
237     & - mod( modelstartdate(1)/100, 100 ) + 1
238     else
239     monrec = mod( mydate(1)/100, 100 )
240     & + nmonthyear - mod(modelstartdate(1)/100,100) + 1
241     & + ( mydate(1)/10000 - modelstartdate(1)/10000 - 1)*
242 jmc 1.5 & nmonthyear
243 heimbach 1.1 endif
244     endif
245     call cal_TimeInterval( modelstep, 'secs', timediff, mythid )
246    
247 jmc 1.5 sum1mon =
248 heimbach 1.1 & cal_NumInts( targetdate, mydate, timediff, mythid ) + 1
249     else
250     sum1mon = 0
251     endif
252    
253 heimbach 1.3 c-- Start of a Year?
254     mydateyear = int(mydate(1)/10000)
255     prevdateyear = int(prevdate(1)/10000)
256     if ( mydateyear .ne. prevdateyear ) then
257     startofyear = .true.
258     else
259     startofyear = .false.
260     endif
261    
262     c-- End of a Year?
263     mydateyear = int(mydate(1)/10000)
264     nextdateyear = int(nextdate(1)/10000)
265     if ( mydateyear .ne. nextdateyear ) then
266     endofyear = .true.
267     else
268     endofyear = .false.
269     endif
270    
271     c-- In a calendar year? As coded here, inyear can not be true
272     c-- for either the first or the last timestep in the year.
273     c-- So the cases are mutually exclusive.
274     if ( ( mydateyear .eq. prevdateyear ) .and.
275     & ( mydateyear .eq. nextdateyear ) ) then
276     inyear = .true.
277     else
278     inyear = .false.
279     endif
280    
281     c-- Determine sum1year and yearrec explicitly.
282     if ( last .or. endofyear ) then
283 jmc 1.5 if ( int(mydate(1)/10000) .eq.
284 heimbach 1.4 & int(modelstartdate(1)/10000) ) then
285 heimbach 1.3 call cal_CopyDate( modelstartdate, targetdate, mythid )
286     yearrec = 1
287     else
288 heimbach 1.4 targetdate1 = int(mydate(1)/10000)*10000+101
289 heimbach 1.3 targetdate2 = 0
290     call cal_FullDate( targetdate1, targetdate2, targetdate,
291     & mythid )
292     yearrec = mydate(1)/10000 - modelstartdate(1)/10000 + 1
293     endif
294     c
295     call cal_TimeInterval( modelstep, 'secs', timediff, mythid )
296    
297 jmc 1.5 sum1year =
298 heimbach 1.3 & cal_NumInts( targetdate, mydate, timediff, mythid ) + 1
299     else
300     sum1year = 0
301     endif
302    
303 heimbach 1.1 end

  ViewVC Help
Powered by ViewVC 1.1.22