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

Contents of /MITgcm/pkg/cal/cal_daysformonth.F

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


Revision 1.2 - (show annotations) (download)
Thu Oct 9 04:19:19 2003 UTC (20 years, 6 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint51k_post, checkpoint62v, checkpoint57m_post, checkpoint52l_pre, checkpoint62u, hrcube4, hrcube5, checkpoint57g_pre, checkpoint62t, checkpoint57s_post, checkpoint58b_post, checkpoint57b_post, checkpoint52d_pre, checkpoint57g_post, checkpoint56b_post, checkpoint57y_post, checkpoint52j_pre, checkpoint51o_pre, checkpoint54d_post, checkpoint54e_post, checkpoint62c, checkpoint51l_post, checkpoint57r_post, checkpoint57d_post, checkpoint57i_post, checkpoint52l_post, checkpoint52k_post, checkpoint59, checkpoint58, checkpoint55, checkpoint54, checkpoint57, checkpoint56, checkpoint53, checkpoint52, checkpoint58f_post, checkpoint52f_post, checkpoint57n_post, checkpoint58d_post, checkpoint62s, checkpoint58a_post, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint57z_post, checkpoint54f_post, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62w, checkpoint62z, checkpoint62y, checkpoint62x, checkpoint58y_post, checkpoint51t_post, checkpoint58t_post, checkpoint51n_post, checkpoint55i_post, checkpoint58m_post, checkpoint57l_post, checkpoint52i_pre, hrcube_1, hrcube_2, hrcube_3, checkpoint51s_post, checkpoint57t_post, checkpoint55c_post, checkpoint63g, checkpoint52e_pre, checkpoint57v_post, checkpoint57f_post, checkpoint52e_post, checkpoint51n_pre, checkpoint53d_post, checkpoint60, checkpoint61, checkpoint62, checkpoint63, checkpoint57a_post, checkpoint57h_pre, checkpoint52b_pre, checkpoint54b_post, checkpoint58w_post, checkpoint57h_post, checkpoint51l_pre, checkpoint52m_post, checkpoint57y_pre, checkpoint55g_post, checkpoint51q_post, checkpoint52b_post, checkpoint52c_post, checkpoint58o_post, checkpoint57c_post, checkpoint58p_post, checkpoint58q_post, checkpoint52f_pre, checkpoint55d_post, checkpoint58e_post, checkpoint54a_pre, checkpoint63l, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint53c_post, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint55d_pre, checkpoint57c_pre, checkpoint58r_post, checkpoint55j_post, checkpoint54a_post, checkpoint55h_post, checkpoint58n_post, checkpoint51r_post, checkpoint51i_post, checkpoint57e_post, checkpoint55b_post, checkpoint53a_post, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59e, checkpoint59d, checkpoint59g, checkpoint59f, checkpoint59a, checkpoint55f_post, checkpoint59c, checkpoint59b, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59i, checkpoint59h, checkpoint59k, checkpoint52d_post, checkpoint53g_post, checkpoint57p_post, checkpint57u_post, checkpoint57q_post, eckpoint57e_pre, checkpoint58k_post, checkpoint52a_pre, checkpoint62b, checkpoint58v_post, checkpoint52i_post, checkpoint52h_pre, checkpoint56a_post, checkpoint58l_post, checkpoint53f_post, checkpoint57h_done, checkpoint52j_post, checkpoint57j_post, checkpoint57f_pre, checkpoint61f, checkpoint58g_post, branch-netcdf, checkpoint58x_post, checkpoint61n, checkpoint52n_post, checkpoint53b_pre, checkpoint59j, checkpoint58h_post, checkpoint56c_post, checkpoint58j_post, checkpoint57a_pre, checkpoint55a_post, checkpoint57o_post, checkpoint51o_post, checkpoint61q, checkpoint57k_post, checkpoint53b_post, checkpoint52a_post, checkpoint57w_post, checkpoint61e, checkpoint58i_post, ecco_c52_e35, checkpoint57x_post, checkpoint58c_post, checkpoint58u_post, checkpoint51m_post, checkpoint53d_pre, checkpoint58s_post, checkpoint55e_post, checkpoint61g, checkpoint61d, checkpoint54c_post, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint51p_post, checkpoint61z, checkpoint61x, checkpoint61y, checkpoint51u_post
Branch point for: branch-nonh, tg2-branch, netcdf-sm0, checkpoint51n_branch
Changes since 1.1: +3 -2 lines
 o first check-in for the "branch-genmake2" merge
 o verification suite as run on shelley (gcc 3.2.2):

Wed Oct  8 23:42:29 EDT 2003
                T           S           U           V
G D M    c        m  s        m  s        m  s        m  s
E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .
N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d
2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .

OPTFILE=NONE

Y Y Y Y 13 16 16 16  0 16 16 16 16 16 16 16 16 13 12  0  0 pass  adjustment.128x64x1
Y Y Y Y 16 16 16 16  0 16 16 16 16 16 16  0  0 16 16  0  0 pass  adjustment.cs-32x32x1
Y Y Y Y 16 16 16 16  0 16 16 16 16 16 16 22  0 16 16 22  0 pass  adjust_nlfs.cs-32x32x1
Y Y Y Y -- 13 13 16 16 13 13 13 13 16 16 16 16 16 16 16 16 N/O   advect_cs
Y Y Y Y -- 22 16 16 16 16 16 16 13 16 16 16 16 16 16 16 16 N/O   advect_xy
Y Y Y Y -- 13 16 13 16 16 16 16 16 16 16 22 16 16 16 16 16 N/O   advect_xz
Y Y Y Y 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 pass  aim.5l_cs
Y Y Y Y 14 16 16 16 16 16 16 16 16 13 16 16 16 16 16 13 16 pass  aim.5l_Equatorial_Channel
Y Y Y Y 16 16 16 16 16 16 16 16 16 16 16 13 16 16 13 13 16 pass  aim.5l_LatLon
Y Y Y Y 13 16 16 16 16 16 16 16 16 16 13 12 13 13 16 13 16 pass  exp0
Y Y Y Y 14 16 16 16 16 16 16 16 22 16 16 16 13 16 16 22 16 pass  exp1
Y Y Y Y 13 13 16 13 16 16 16 16 16 13 13 16 16 13 13 13 13 pass  exp2
Y Y Y Y 16 16 16 16 16 16 16 16 22 16 16 16 16 16 16 16 16 pass  exp4
Y Y Y Y 16 16 16 16 16 16 16 16 16 16 16 22 16 16 16 22 16 pass  exp5
Y Y Y Y 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 pass  front_relax
Y Y Y Y 14 16 16 13 13 16 16 13 13 16 13 13 16 12 13 13 16 pass  global_ocean.90x40x15
Y Y Y Y 10 16 16 13 13 16 13 16 16 13 13 13 13 16 16 13 16 FAIL  global_ocean.cs32x15
Y Y Y Y  6 11 12 13 13 12 13 16 13  9  9  9  9 10  9  9 11 FAIL  global_ocean_pressure
Y Y Y Y 14 16 16 13 16 16 16 13 13 13 13 13 16 12 16 13 16 pass  global_with_exf
Y Y Y Y 14 16 16 16 16 16 16 16 16 11 13 22 13 16 16  9 16 pass  hs94.128x64x5
Y Y Y Y 13 16 16 16 16 16 16 16 16 11 16 16 16 13 16 22 13 pass  hs94.1x64x5
Y Y Y Y 14 16 16 16 16 16 16 16 16 13 16 13 13 16 16 22 13 pass  hs94.cs-32x32x5
Y Y Y Y 10 10 16 13 13 16 16 16 22 16 13 13 13 13 13 22 13 FAIL  ideal_2D_oce
Y Y Y Y  8 16 16 16 16 16 16 16 16 13 13  8 16 16 16 16 16 FAIL  internal_wave
Y Y Y Y 14 16 16 16 16 16 16 16 16 13 13 22 13 13 13 22 16 pass  inverted_barometer
Y Y Y Y 12 16 16 16 16 16 16 16 16 16 13 12 13 13 13 13 13 FAIL  lab_sea
Y Y Y Y 11 16 16 16 16 16 16 16 13 13 13 12 13 16 13 12 13 FAIL  natl_box
Y Y Y Y 16 16 16 16 16 16 16 16 22 16 16 16 16 16 16 16 16 pass  plume_on_slope
Y Y Y Y 13 16 16 16 16 13 16 16 16 16 16 16 16 13 16 16 16 pass  solid-body.cs-32x32x1

1 C $Header: /u/u3/gcmpack/MITgcm/pkg/cal/cal_daysformonth.F,v 1.1.20.2 2003/10/07 20:46:37 adcroft Exp $
2 C $Name: $
3
4 #include "CAL_OPTIONS.h"
5
6 subroutine cal_DaysForMonth(
7 I imonth,
8 O firstday,
9 O lastday,
10 O ndays,
11 I mythid
12 & )
13
14 c ==================================================================
15 c SUBROUTINE cal_DaysForMonth
16 c ==================================================================
17 c
18 c o Given the current month of the integration this routine returns
19 c first, the last and the number of calendar days that will have
20 c to 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 c changed:
28 c
29 c ==================================================================
30 c SUBROUTINE cal_DaysForMonth
31 c ==================================================================
32
33 implicit none
34
35 c == global variables ==
36
37 #include "cal.h"
38
39 c == routine arguments ==
40
41 integer imonth
42 integer firstday
43 integer lastday
44 integer ndays
45 integer mythid
46
47 c == local variables ==
48
49 integer i
50 integer ierr
51 integer nummonths
52 integer numdays
53 integer firstyear
54 integer firstmonth
55 integer firstd
56 integer lyfirst
57 integer lastyear
58 integer lastmonth
59 integer lastd
60 integer lastsecs
61 integer lylast
62 integer currentyear
63 integer currentmonth
64 integer lycurrent
65
66 c == external ==
67
68 integer cal_IntMonths
69 external cal_IntMonths
70 integer cal_IsLeap
71 external cal_IsLeap
72
73 c == end of interface ==
74
75 lyfirst = cal_IsLeap( firstyear, mythid )
76 lylast = cal_IsLeap( lastyear, mythid )
77
78 nummonths = cal_Intmonths( mythid )
79
80 firstyear = modelstartdate(1)/10000
81 firstmonth = mod(modelstartdate(1)/100,100)
82 firstd = mod(modelstartdate(1),100)
83 lastyear = modelenddate(1)/10000
84 lastmonth = mod(modelenddate(1)/100,100)
85 lastd = mod(modelenddate(1),100)
86 lastsecs = modelenddate(2)/10000*secondsperhour +
87 & mod(modelenddate(2)/100,100)*secondsperminute +
88 & mod(modelenddate(2),100)
89
90 if ( nummonths .eq. 1 ) then
91 if ( imonth .eq. 1 ) then
92 c-- Get the number of days in the first month.
93 if ( firstmonth .eq. lastmonth ) then
94 if (lastsecs .eq. 0) then
95 c-- Not really another day.
96 lastday = lastd - 1
97 else
98 lastday = lastd
99 endif
100 firstday = 1
101 else if ( mod(firstmonth+1,nmonthyear) .eq. lastmonth ) then
102 c-- This can only happen if we end at midnight of the first
103 c-- day of the next month.
104 if ( ( modelenddate(2) .eq. 0 ) .and.
105 & ( mod(modelenddate(1),100) .eq. 1 ) ) then
106 firstday = firstd
107 lastday = ndaymonth(firstmonth,lyfirst)
108 else
109 c-- We do not end at midnight of the first day of
110 c-- the next month.
111 ierr = 2704
112 call cal_PrintError( ierr, mythid )
113 stop ' stopped in cal_DaysForMonth.'
114 endif
115 else
116 c-- The first and the last month are inconsistent with imonth.
117 ierr = 2703
118 call cal_PrintError( ierr, mythid )
119 stop ' stopped in cal_DaysForMonth.'
120 endif
121 else
122 c-- The variables nummonths and imonth are inconsistent;
123 c-- ( imonth .gt. nummonths ).
124 ierr = 2702
125 call cal_PrintError( ierr, mythid )
126 stop ' stopped in cal_DaysForMonth.'
127 endif
128
129 else if ( nummonths .gt. 1 ) then
130 c-- More than one month of integration.
131 if ( imonth .eq. 1 ) then
132 firstday = 1
133 lastday = ndaymonth(firstmonth,lyfirst) - firstd + 1
134 else if ( ( imonth .gt. 1 ) .and.
135 & ( imonth .lt. nummonths ) ) then
136 c-- Somewhere between first and last month.
137 currentmonth = firstmonth
138 currentyear = firstyear
139 numdays = ndaymonth(firstmonth,lyfirst) - firstd + 1
140 do i = 2,imonth-1
141 c-- Accumulate days of the intermediate months.
142 currentmonth = mod(currentmonth+1,nmonthyear)
143 if ( currentmonth .eq. 1 ) then
144 currentyear = currentyear + 1
145 endif
146 lycurrent = cal_IsLeap( currentyear, mythid )
147 numdays = numdays + ndaymonth(currentmonth,lycurrent)
148 enddo
149 currentmonth = mod(currentmonth+1,nmonthyear)
150 if ( currentmonth .eq. 1 ) then
151 currentyear = currentyear + 1
152 endif
153 lycurrent = cal_IsLeap( currentyear, mythid )
154 firstday = numdays + 1
155 lastday = numdays + ndaymonth(currentmonth,lycurrent)
156 else if ( imonth .eq. nummonths ) then
157 c-- The last month of the integration.
158 currentmonth = firstmonth
159 currentyear = firstyear
160 numdays = ndaymonth(firstmonth,lyfirst) - firstd + 1
161 do i = 2,nummonths-1
162 c-- Accumulate days of the intermediate months.
163 currentmonth = mod(currentmonth+1,nmonthyear)
164 if ( currentmonth .eq. 1 ) then
165 currentyear = currentyear + 1
166 endif
167 lycurrent = cal_IsLeap( currentyear, mythid )
168 numdays = numdays + ndaymonth(currentmonth,lycurrent)
169 enddo
170 c-- Prepare for the last month of integration.
171 currentmonth = mod(currentmonth+1,nmonthyear)
172 if ( currentmonth .eq. 1 ) then
173 currentyear = currentyear + 1
174 endif
175 lycurrent = cal_IsLeap( currentyear, mythid )
176 if ( ( modelenddate(2) .eq. 0 ) .and.
177 & ( mod(modelenddate(1),100) .eq. 1 ) ) then
178 c-- This can only happen if we end at midnight of the first
179 c-- day of the next month.
180 lastday = numdays + ndaymonth(currentmonth,lycurrent)
181 else
182 c-- We do not stop at midnight of the first day of the
183 c-- next month.
184 if (lastsecs .eq. 0) then
185 c-- But we might stop at midnight of a day.
186 lastday = numdays + lastd - 1
187 else
188 lastday = numdays + lastd
189 endif
190 endif
191 firstday = numdays + 1
192 else
193 c-- The variables imonth and nummonths are inconsistent.
194 ierr = 2705
195 call cal_PrintError( ierr, mythid )
196 stop ' stopped in cal_DaysForMonth.'
197 endif
198 else
199 c-- The number of months to integrate is wrong; check cal_IntMonths.
200 ierr = 2701
201 call cal_PrintError( ierr, mythid )
202 stop ' stopped in cal_DaysForMonth.'
203 endif
204
205 c-- The number of days to integrate in the given month.
206 ndays = lastday - firstday + 1
207
208 return
209 end
210

  ViewVC Help
Powered by ViewVC 1.1.22