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

Annotation of /MITgcm/pkg/cal/cal_addtime.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, 1 month 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_addtime.F,v 1.5 2001/02/02 16:57:22 heimbach Exp $
2    
3     #include "CAL_CPPOPTIONS.h"
4    
5     subroutine cal_AddTime(
6     I date,
7     I interval,
8     O added,
9     I mythid
10     & )
11    
12     c ==================================================================
13     c SUBROUTINE cal_AddTime
14     c ==================================================================
15     c
16     c o Add a time interval either to a calendar date or to a time
17     c interval.
18     c
19     c started: Christian Eckert eckert@mit.edu 30-Jun-1999
20     c
21     c changed: Christian Eckert eckert@mit.edu 29-Dec-1999
22     c
23     c - restructured the original version in order to have a
24     c better interface to the MITgcmUV.
25     c
26     c Christian Eckert eckert@mit.edu 03-Feb-2000
27     c
28     c - Introduced new routine and function names, cal_<NAME>,
29     c for verion 0.1.3.
30     c
31     c ralf.giering@fastopt.de 31-May-2000
32     c datesecs was computed at wrong place (cph)
33     c
34     c ==================================================================
35     c SUBROUTINE cal_AddTime
36     c ==================================================================
37    
38     implicit none
39    
40     c == global variables ==
41    
42     #include "cal.h"
43    
44     c == routine arguments ==
45    
46     integer date(4)
47     integer interval(4)
48     integer added(4)
49     integer mythid
50    
51     c == local variables ==
52    
53     integer intsecs
54     integer datesecs
55     integer nsecs
56     integer hhmmss
57     integer yi,mi,di,si,li,wi
58     integer ndays
59     integer date_1,date_2
60     integer intv_1,intv_2
61     integer fac
62     integer iday
63     integer switch
64     integer ndayssub
65     integer ierr
66    
67     c == external ==
68    
69     integer cal_IsLeap
70     external cal_IsLeap
71    
72     c == end of interface ==
73    
74     date_1 = 0
75     date_2 = 0
76    
77     fac = 1
78    
79     if (interval(4) .eq. -1) then
80    
81     if (date(4) .eq. -1) then
82     if (date(1) .ge. 0) then
83     date_1 = date(1)
84     date_2 = date(2)
85     intv_1 = interval(1)
86     intv_2 = interval(2)
87     else
88     if (interval(1) .lt. 0) then
89     date_1 = -date(1)
90     date_2 = -date(2)
91     intv_1 = -interval(1)
92     intv_2 = -interval(2)
93     fac = -1
94     else
95     date_1 = interval(1)
96     date_2 = interval(2)
97     intv_1 = date(1)
98     intv_2 = date(2)
99     fac = 1
100     endif
101     endif
102     else
103     if (interval(1) .ge. 0) then
104     intv_1 = interval(1)
105     intv_2 = interval(2)
106     else
107     intv_1 = -interval(1)
108     intv_2 = -interval(2)
109     fac = -1
110     endif
111     endif
112    
113     intsecs = fac*(intv_2/10000*secondsperhour +
114     & (mod(intv_2/100,100)*secondsperminute +
115     & mod(intv_2,100)))
116    
117     if (date(4) .eq. -1) then
118     datesecs = date_2/10000*secondsperhour +
119     & mod(date_2/100,100)*secondsperminute +
120     & mod(date_2,100)
121     date_1 = date_1 + intv_1
122     nsecs = datesecs + intsecs
123     if ((date_1 .gt. 0) .and.
124     & (nsecs .lt. 0)) then
125     date_1 = date_1 - 1
126     nsecs = nsecs + secondsperday
127     endif
128     nsecs = fac*nsecs
129     yi = 0
130     mi = 0
131     di = fac*date_1
132     li = 0
133     wi = -1
134     else
135     call cal_ConvDate( date,yi,mi,di,si,li,wi,mythid )
136     if ((interval(1) .ge. 0) .and.
137     & (interval(2) .ge. 0)) then
138     nsecs = si + intsecs
139     ndays = nsecs/secondsperday
140     nsecs = mod(nsecs,secondsperday)
141     do iday = 1,interval(1)+ndays
142     di = di + 1
143     if (di .gt. ndaymonth(mi,li)) then
144     di = 1
145     mi = mi + 1
146     endif
147     switch = (mi-1)/nmonthyear
148     yi = yi + switch
149     mi = mod(mi-1,nmonthyear)+1
150     if (switch .eq. 1) li = cal_IsLeap( yi, mythid )
151     enddo
152     wi = mod(wi+interval(1)+ndays-1,7)+1
153     else
154     nsecs = si + intsecs
155     if (nsecs .ge. 0) then
156     ndayssub = intv_1
157     else
158     nsecs = nsecs + secondsperday
159     ndayssub = intv_1 + 1
160     endif
161     do iday = 1,ndayssub
162     di = di - 1
163     if (di .eq. 0) then
164     mi = mod(mi+10,nmonthyear)+1
165     switch = mi/nmonthyear
166     yi = yi - switch
167     if (switch .eq. 1) li = cal_IsLeap( yi, mythid )
168     di = ndaymonth(mi,li)
169     endif
170     enddo
171     wi = mod(wi+6-mod(ndayssub,7),7)+1
172     endif
173     endif
174    
175     c Convert to calendar format.
176     added(1) = yi*10000 + mi*100 + di
177     hhmmss = nsecs/secondsperminute
178     added(2) = hhmmss/minutesperhour*10000 +
179     & (mod(fac*hhmmss,minutesperhour)*100 +
180     & mod(fac*nsecs,secondsperminute))*fac
181     added(3) = li
182     added(4) = wi
183     else
184    
185     ierr = 601
186     call cal_PrintError( ierr, mythid)
187     stop ' stopped in cal_AddTime.'
188    
189     endif
190    
191     return
192     end
193    

  ViewVC Help
Powered by ViewVC 1.1.22