/[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.1 - (show annotations) (download)
Mon May 14 22:07:26 2001 UTC (23 years ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint46n_post, checkpoint47e_post, checkpoint44e_post, checkpoint46l_post, checkpoint46g_pre, checkpoint47c_post, release1_p13_pre, checkpoint50c_post, checkpoint46f_post, checkpoint48e_post, checkpoint50c_pre, checkpoint44f_post, checkpoint46b_post, checkpoint43a-release1mods, ecco_c50_e32, ecco_c50_e33, ecco_c50_e30, ecco_c50_e31, release1_p13, checkpoint40pre3, checkpoint40pre1, checkpoint40pre7, checkpoint40pre6, checkpoint48i_post, checkpoint40pre9, checkpoint40pre8, checkpoint46l_pre, chkpt44d_post, checkpoint51, checkpoint50, release1_p8, release1_p9, checkpoint50d_post, release1_p1, release1_p2, release1_p3, release1_p4, release1_p5, release1_p6, release1_p7, checkpoint50b_pre, checkpoint44e_pre, checkpoint51f_post, release1_b1, ecco_c51_e34d, ecco_c51_e34e, ecco_c51_e34f, ecco_c51_e34g, ecco_c51_e34a, ecco_c51_e34b, ecco_c51_e34c, checkpoint48b_post, checkpoint43, checkpoint51d_post, checkpoint48c_pre, checkpoint47d_pre, release1_chkpt44d_post, checkpoint47a_post, checkpoint48d_pre, checkpoint51j_post, checkpoint47i_post, checkpoint47d_post, icebear5, icebear4, icebear3, icebear2, checkpoint46d_pre, checkpoint40pre2, checkpoint48d_post, release1-branch_tutorials, checkpoint48f_post, checkpoint45d_post, checkpoint46j_pre, chkpt44a_post, checkpoint44h_pre, checkpoint48h_post, checkpoint40pre4, ecco_c50_e29, checkpoint51b_pre, checkpoint46a_post, checkpoint47g_post, checkpoint46j_post, checkpoint51h_pre, checkpoint46k_post, ecco_c50_e28, chkpt44c_pre, checkpoint48a_post, checkpoint45a_post, checkpoint50f_post, checkpoint50a_post, checkpoint50f_pre, ecco_c44_e19, ecco_c44_e18, ecco_c44_e17, ecco_c44_e16, release1_p12, release1_p10, release1_p11, release1_p16, release1_p17, release1_p14, release1_p15, checkpoint47j_post, ecco_c50_e33a, branch-exfmods-tag, checkpoint44g_post, branchpoint-genmake2, checkpoint46e_pre, checkpoint48c_post, checkpoint45b_post, checkpoint46b_pre, release1-branch-end, release1_final_v1, checkpoint51b_post, checkpoint51c_post, checkpoint46c_pre, checkpoint46, checkpoint47b_post, checkpoint44b_post, ecco_c51_e34, checkpoint46h_pre, checkpoint46m_post, checkpoint46a_pre, checkpoint50g_post, checkpoint45c_post, ecco_ice2, ecco_ice1, checkpoint44h_post, checkpoint46g_post, release1_p12_pre, checkpoint39, ecco_c44_e22, checkpoint50h_post, checkpoint50e_pre, checkpoint50i_post, ecco_c44_e25, checkpoint51i_pre, checkpoint40pre5, checkpoint47f_post, checkpoint50e_post, chkpt44a_pre, checkpoint46i_post, ecco_c44_e23, ecco_c44_e20, ecco_c44_e21, ecco_c44_e26, ecco_c44_e27, ecco_c44_e24, checkpoint46c_post, ecco-branch-mod1, ecco-branch-mod2, ecco-branch-mod3, ecco-branch-mod4, ecco-branch-mod5, checkpoint50d_pre, checkpoint46e_post, release1_beta1, checkpoint51e_post, checkpoint44b_pre, checkpoint42, checkpoint40, checkpoint41, checkpoint47, checkpoint44, checkpoint45, checkpoint48, checkpoint49, checkpoint46h_post, checkpoint51f_pre, chkpt44c_post, checkpoint48g_post, checkpoint47h_post, checkpoint44f_pre, checkpoint51g_post, checkpoint46d_post, checkpoint50b_post, release1-branch_branchpoint, checkpoint51a_post
Branch point for: c24_e25_ice, branch-exfmods-curt, release1_final, release1-branch, branch-genmake2, release1, ecco-branch, release1_50yr, icebear, release1_coupled
Added calendar package.
Not currently supported by mitgcm, i.e. disabled by default.

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

  ViewVC Help
Powered by ViewVC 1.1.22