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

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

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


Revision 1.2 - (hide annotations) (download)
Thu Oct 9 04:19:19 2003 UTC (20 years, 7 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint51k_post, checkpoint57m_post, checkpoint52l_pre, hrcube4, hrcube5, checkpoint57g_pre, 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, checkpoint58a_post, checkpoint57z_post, checkpoint54f_post, checkpoint62a, 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, checkpoint52e_pre, checkpoint57v_post, checkpoint57f_post, checkpoint52e_post, checkpoint51n_pre, checkpoint53d_post, checkpoint60, checkpoint61, checkpoint62, 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, checkpoint53c_post, 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 edhill 1.2 C $Header: /u/u3/gcmpack/MITgcm/pkg/cal/cal_stepsforday.F,v 1.1.20.2 2003/10/07 20:46:37 adcroft Exp $
2     C $Name: $
3 heimbach 1.1
4 edhill 1.2 #include "CAL_OPTIONS.h"
5 heimbach 1.1
6     subroutine cal_StepsForDay(
7     I iday,
8     O firststep,
9     O laststep,
10     O nsteps,
11     I mythid
12     & )
13    
14     c ==================================================================
15     c SUBROUTINE cal_StepsForDay
16     c ==================================================================
17     c
18     c o Given the current day of the integration this routine returns
19     c first, the last and the number of model steps the will have to
20     c 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_StepsForDay
31     c ==================================================================
32    
33     implicit none
34    
35     c == global variables ==
36    
37     #include "cal.h"
38    
39     c == routine arguments ==
40    
41     integer iday
42     integer firststep
43     integer laststep
44     integer nsteps
45     integer mythid
46    
47     c == local variables ==
48    
49     integer ierr
50     integer mdstep
51     integer numdays
52     integer numsteps
53     integer frac1
54     integer frac2
55     integer frac3
56     integer frac4
57     integer fullsteps
58     integer firstyear
59     integer firstmonth
60     integer firstday
61     integer lyfirst
62     integer startsecs
63     integer lastday
64     integer endsecs
65    
66     c == external ==
67    
68     external cal_IntDays
69     integer cal_IntDays
70     external cal_IsLeap
71     integer cal_IsLeap
72    
73     c == end of interface ==
74    
75     numdays = cal_IntDays( mythid )
76     lyfirst = cal_IsLeap( firstyear, mythid )
77    
78     mdstep = int(modelstep)
79    
80     firstyear = modelstartdate(1)/10000
81     firstmonth = mod(modelstartdate(1)/100,100)
82     firstday = mod(modelstartdate(1),100)
83     lastday = mod(modelenddate(1),100)
84    
85     startsecs = (modelstartdate(2)/10000)*secondsperhour +
86     & mod(modelstartdate(2)/100,100)*secondsperminute +
87     & mod(modelstartdate(2),100)
88     endsecs = (modelenddate(2)/10000)*secondsperhour +
89     & mod(modelenddate(2)/100,100)*secondsperminute +
90     & mod(modelenddate(2),100)
91    
92     if ( numdays .eq. 1 ) then
93     if ( iday .eq. firstday ) then
94     c-- Get the number of steps in the first day.
95     if ( firstday .eq. lastday ) then
96     firststep = 1
97     laststep = modelintsteps
98     else if ( mod(firstday+1,ndaymonth(firstmonth,lyfirst)) .eq.
99     & lastday ) then
100     c-- This can only happen if we end at midnight of the next day.
101     if ( modelenddate(2) .eq. 0 ) then
102     firststep = 1
103     laststep = modelintsteps
104     c-- Note: This holds only if modelenddate was determined
105     c-- such that it coincides with the model's final time.
106     else
107     c-- We do not end at midnight of the first day of
108     c-- the next month.
109     ierr = 2604
110     call cal_PrintError( ierr, mythid )
111     stop ' stopped in cal_StepsForDay.'
112     endif
113     else
114     c-- The first and the last day are inconsistent with iday.
115     ierr = 2603
116     call cal_PrintError( ierr, mythid )
117     stop ' stopped in cal_StepsForDay.'
118     endif
119     else
120     c-- The variables numdays and iday are inconsistent;
121     c-- ( iday .gt. numdays ).
122     ierr = 2602
123     call cal_PrintError( ierr, mythid )
124     stop ' stopped in cal_StepsForDay.'
125     endif
126    
127     else if ( numdays .gt. 1 ) then
128     c-- More than one day of integration.
129     if ( iday .eq. 1 ) then
130     firststep = 1
131     laststep = int((secondsperday - startsecs)/mdstep)
132     else if ( ( iday .gt. 1 ) .and.
133     & ( iday .lt. numdays) ) then
134     c-- Somewhere between first and last month.
135     c-- The first steps in iday.
136     fullsteps = int((secondsperday - startsecs)/mdstep)
137     numsteps = fullsteps
138     c-- What's left in the first day (frac1).
139     frac1 = (secondsperday - startsecs) - fullsteps*mdstep
140     fullsteps = int(secondsperday/modelstep)
141     c-- What's left in a complete day (frac2).
142     frac2 = secondsperday - fullsteps*mdstep
143     c-- What's left up to the current day (frac3).
144     frac3 = frac1 + frac2*(iday - 1)
145     numsteps = numsteps + (iday - 1)*fullsteps +
146     & frac3/mdstep
147     laststep = numsteps
148     firststep = laststep - secondsperday/mdstep + 1
149    
150     else if ( iday .eq. numdays ) then
151     c-- The last day of integration.
152     c-- The first step in iday.
153     fullsteps = int((secondsperday - startsecs)/mdstep)
154     numsteps = fullsteps
155     c-- What's left in the first day (frac1).
156     frac1 = (secondsperday - startsecs) - fullsteps*mdstep
157     fullsteps = int(secondsperday/modelstep)
158     c-- What's left in a complete day (frac2).
159     frac2 = secondsperday - fullsteps*mdstep
160     c-- What's left up to the day before the last (frac3).
161     frac3 = frac1 + frac2*(iday - 2)
162     numsteps = numsteps + (iday - 2)*fullsteps
163     c-- The last step in iday.
164     if ( modelenddate(2) .eq. 0 ) then
165     c-- This can only happen if we end at midnight of the next day.
166     laststep = numsteps + fullsteps
167     firststep = numsteps + 1
168     c-- Note: There should be no fraction left
169     c-- ( mod(frac3,mdstep) = frac3/mdstep ) if modelenddate
170     c-- is based on an integral number of timesteps.
171     else
172     frac4 = frac3 + endsecs
173     numsteps = numsteps + frac4/mdstep
174     laststep = numsteps
175    
176     c-- Note: There should be no fraction left
177     c-- ( mod(frac4,mdstep = frac4/mdstep ) if modelenddate
178     c-- is based on an integral number of timesteps.
179    
180     firststep = laststep - endsecs/mdstep + 1
181     endif
182     else
183     c-- The variables iday and numdays are inconsistent.
184     ierr = 2605
185     call cal_PrintError( ierr, mythid )
186     stop ' stopped in cal_DaysForMonth.'
187     endif
188     else
189     c-- The number of days to integrate is wrong; check cal_IntDays.
190     ierr = 2601
191     call cal_PrintError( ierr, mythid )
192     stop ' stopped in cal_StepsForDay.'
193     endif
194    
195     c-- The number of days to integrate in the given month.
196     nsteps = laststep - firststep + 1
197    
198     return
199     end
200    

  ViewVC Help
Powered by ViewVC 1.1.22