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

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

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


Revision 1.1 - (hide 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 heimbach 1.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