/[MITgcm]/MITgcm/pkg/ctrl/ctrl_init.F
ViewVC logotype

Diff of /MITgcm/pkg/ctrl/ctrl_init.F

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

revision 1.8 by heimbach, Mon Jun 23 22:29:05 2003 UTC revision 1.31 by heimbach, Fri May 29 06:12:05 2009 UTC
# Line 1  Line 1 
1    C
2  C $Header$  C $Header$
3    C $Name$
4    
5  #include "CTRL_CPPOPTIONS.h"  #include "CTRL_CPPOPTIONS.h"
6    
   
7        subroutine ctrl_init( mythid )        subroutine ctrl_init( mythid )
8    
9  c     ==================================================================  c     ==================================================================
# Line 37  c              - Added call to ctrl_pack Line 38  c              - Added call to ctrl_pack
38  c              - Alternatively: transfer writing of scale files to  c              - Alternatively: transfer writing of scale files to
39  c                ctrl_unpack  c                ctrl_unpack
40  c  c
41    c              Dimitris Menemenlis menemenlis@mit.edu 7-Mar-2003
42    c              - To be consistent with usage in ctrl_getrec.F,
43    c                startrec and endrec need to be referenced to
44    c                model time = 0, not to startTime.
45    c                Also "- modelstep" -> "+ modelstep/2":
46    c old:      startrec = int((modelstart - diffsecs)/
47    c old:   &                 xx_???period) + 1
48    c old:      endrec = int((modelend   - diffsecs - modelstep)/
49    c old:   &                 xx_???period) + 2
50    c new:      startrec = int((modelstart + startTime - diffsecs)/
51    c new:   &                 xx_???period) + 1
52    c new:      endrec = int((modelend + startTime - diffsecs + modelstep/2)/
53    c new:   &                 xx_???period) + 2
54    c
55    c              heimbach@mit.edu totally restructured 28-Oct-2003
56    c
57  c     ==================================================================  c     ==================================================================
58  c     SUBROUTINE ctrl_init  c     SUBROUTINE ctrl_init
59  c     ==================================================================  c     ==================================================================
# Line 50  c     == global variables == Line 67  c     == global variables ==
67  #include "PARAMS.h"  #include "PARAMS.h"
68  #include "GRID.h"  #include "GRID.h"
69  #include "ctrl.h"  #include "ctrl.h"
70    #include "optim.h"
71    
72  #ifdef ALLOW_CALENDAR  #ifdef ALLOW_CAL
73  #include "cal.h"  # include "cal.h"
74  #endif  #endif
75  #ifdef ALLOW_OBCS_CONTROL  #ifdef ALLOW_OBCS_CONTROL
76  # include "OBCS.h"  # include "OBCS.h"
77  #endif  #endif
 #ifdef ALLOW_ECCO_OPTIMIZATION  
 #include "optim.h"  
 #endif  
78    
79  c     == routine arguments ==  c     == routine arguments ==
80    
# Line 73  c     == local variables == Line 88  c     == local variables ==
88        integer jtlo,jthi        integer jtlo,jthi
89        integer jmin,jmax        integer jmin,jmax
90        integer imin,imax        integer imin,imax
       integer ntmp  
       integer ivarindex  
91    
92          integer ntmp
93          integer ivar
94        integer iobcs        integer iobcs
95        integer il        integer il
96        integer errio        integer errio
97        integer startrec        integer startrec
98        integer endrec        integer endrec
99          integer diffrec
100        integer difftime(4)        integer difftime(4)
101        _RL     diffsecs        _RL     diffsecs
       _RL     dummy  
102    
       character*(80)   ymaskobcs  
103        character*(max_len_prec) record        character*(max_len_prec) record
104        character*(max_len_mbuf) msgbuf        character*(max_len_mbuf) msgbuf
105          character*2 whichxyz
       integer nwetc3d  
106    
107  c     == external ==  c     == external ==
108    
# Line 107  c     == end of interface == Line 120  c     == end of interface ==
120        imin = 1-olx        imin = 1-olx
121        imax = snx+olx        imax = snx+olx
122    
       _BEGIN_MASTER( myThid )  
   
123  c--     Set default values.  c--     Set default values.
124          do ivarindex = 1,maxcvars        do ivar = 1,maxcvars
125            ncvarindex(ivarindex) = -1           ncvarindex(ivar) = -1
126            ncvarrecs(ivarindex)  =  0           ncvarrecs(ivar)  =  0
127            ncvarxmax(ivarindex)  =  0           ncvarxmax(ivar)  =  0
128            ncvarymax(ivarindex)  =  0           ncvarymax(ivar)  =  0
129            ncvarnrmax(ivarindex) =  0           ncvarnrmax(ivar) =  0
130            ncvargrd(ivarindex)   = '?'           ncvargrd(ivar)   = '?'
131          enddo        enddo
   
         write(msgbuf,'(a)') ' '  
         call print_message( msgbuf, standardmessageunit,  
      &                      SQUEEZE_RIGHT , mythid)  
         write(msgbuf,'(a)')  
      &    ' ctrl_init: Initializing temperature and salinity'  
         call print_message( msgbuf, standardmessageunit,  
      &                      SQUEEZE_RIGHT , mythid)  
         write(msgbuf,'(a)')  
      &    '                   part of the control vector.'  
         call print_message( msgbuf, standardmessageunit,  
      &                      SQUEEZE_RIGHT , mythid)  
         write(msgbuf,'(a,a)')  
      &    '                   The initial surface fluxes are set',  
      &                      ' to zero.'  
         call print_message( msgbuf, standardmessageunit,  
      &                      SQUEEZE_RIGHT , mythid)  
         write(msgbuf,'(a)') ' '  
         call print_message( msgbuf, standardmessageunit,  
      &                      SQUEEZE_RIGHT , mythid)  
       _END_MASTER( mythid )  
132    
133        _BARRIER        _BARRIER
134    
# Line 154  cph    index 17    reserved for passive Line 144  cph    index 17    reserved for passive
144  cph    index 18,19 reserved for sst, sss  cph    index 18,19 reserved for sst, sss
145  cph    index 20             for hFacC  cph    index 20             for hFacC
146  cph    index 21-22          for efluxy, efluxp  cph    index 21-22          for efluxy, efluxp
147  cph    index 23-24          for bottom drag  cph    index 23             for bottom drag
148    cph    index 24
149    cph    index 25-26          for edtaux, edtauy
150    cph    index 27-29          for uvel0, vvel0, etan0
151    cph    index 30-31          for relax. SST, SSS
152    cph    index 32    reserved for precip (atmos. state)
153    cph    index 33    reserved for swflux (atmos. state)
154    cph    index 34    reserved for swdown (atmos. state)
155    cph          35                 lwflux
156    cph          36                 lwdown
157    cph          37                 evap
158    cph          38                 snowprecip
159    cph          39                 apressure
160    cph          40                 runoff
161    cph          41                 seaice SIAREA
162    cph          42                 seaice SIHEFF
163    cph          43                 seaice SIHSNOW
164  cph)  cph)
165    
166  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
167  c--  c--
168  #ifdef ALLOW_THETA0_CONTROL  #ifdef ALLOW_THETA0_CONTROL
169  c--   Initial state temperature contribution.  c--   Initial state temperature contribution.
170          call ctrl_init_ctrlvar (
171        _BEGIN_MASTER( mythid )       &     xx_theta_file, 1, 101, 1, 1, 1,
172          ivarindex             = 1       &     snx, sny, nr, 'c', '3d', mythid )
         ncvarindex(ivarindex) = 101  
         ncvarrecs(ivarindex)  =   1  
         ncvarxmax(ivarindex)  = snx  
         ncvarymax(ivarindex)  = sny  
         ncvarnrmax(ivarindex) =  nr  
         ncvargrd(ivarindex)   = 'c'  
       _END_MASTER( mythid )  
   
173  #endif /* ALLOW_THETA0_CONTROL */  #endif /* ALLOW_THETA0_CONTROL */
174    
175  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
176  c--  c--
177  #ifdef ALLOW_SALT0_CONTROL  #ifdef ALLOW_SALT0_CONTROL
178  c--   Initial state salinity contribution.  c--   Initial state salinity contribution.
179          call ctrl_init_ctrlvar (
180        _BEGIN_MASTER( mythid )       &     xx_salt_file, 2, 102, 1, 1, 1,
181          ivarindex             = 2       &     snx, sny, nr, 'c', '3d', mythid )
         ncvarindex(ivarindex) = 102  
         ncvarrecs(ivarindex)  =   1  
         ncvarxmax(ivarindex)  = snx  
         ncvarymax(ivarindex)  = sny  
         ncvarnrmax(ivarindex) =  nr  
         ncvargrd(ivarindex)   = 'c'  
       _END_MASTER( mythid )  
   
182  #endif /* ALLOW_SALT0_CONTROL */  #endif /* ALLOW_SALT0_CONTROL */
183    
184  c--   ===========================  c--   ===========================
185  c--   Surface flux contributions.  c--   Surface flux contributions.
186  c--   ===========================  c--   ===========================
187    
188  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
189  c--  c--
190  #if (defined (ALLOW_HFLUX_CONTROL))  #if (defined (ALLOW_HFLUX_CONTROL))
191  c--   Heat flux.  c--   Heat flux.
192    
193        _BEGIN_MASTER( mythid )  # ifdef ALLOW_CAL
194  #ifdef ALLOW_CALENDAR          call cal_FullDate( xx_hfluxstartdate1, xx_hfluxstartdate2,
195         &                     xx_hfluxstartdate , mythid )
196          call cal_TimePassed( xx_hfluxstartdate, modelstartdate,          call cal_TimePassed( xx_hfluxstartdate, modelstartdate,
197       &                       difftime, mythid )       &                       difftime, mythid )
198          call cal_ToSeconds ( difftime, diffsecs, mythid )          call cal_ToSeconds ( difftime, diffsecs, mythid )
199          startrec = int((modelstart - diffsecs)/          if ( xx_hfluxperiod .EQ. 0 ) then
200            startrec=1
201            endrec=12
202            else
203            startrec = int((modelstart + startTime - diffsecs)/
204       &                 xx_hfluxperiod) + 1       &                 xx_hfluxperiod) + 1
205          endrec   = int((modelend   - diffsecs - modelstep)/          endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
206       &                 xx_hfluxperiod) + 2       &                 xx_hfluxperiod) + 2
207  #else          endif
208    # else
209          startrec = 1          startrec = 1
210          endrec   = 1          endrec   = 1
211  #endif  # endif
212          ivarindex                = 3          diffrec  = endrec - startrec + 1
213          ncvarindex(ivarindex)    = 103          call ctrl_init_ctrlvar (
214          ncvarrecs(ivarindex)     = endrec - startrec + 1       &       xx_hflux_file, 3, 103, diffrec, startrec, endrec,
215          ncvarrecstart(ivarindex) = startrec       &       snx, sny, 1, 'c', 'xy', mythid )
         ncvarrecsend(ivarindex)  = endrec  
         ncvarxmax(ivarindex)     = snx  
         ncvarymax(ivarindex)     = sny  
         ncvarnrmax(ivarindex)    =   1  
         ncvargrd(ivarindex)      = 'c'  
       _END_MASTER( mythid )  
216    
217  #elif (defined (ALLOW_ATEMP_CONTROL))  #elif (defined (ALLOW_ATEMP_CONTROL))
218  c--   Atmos. temperature  c--   Atmos. temperature
219    
220        _BEGIN_MASTER( mythid )  # ifdef ALLOW_CAL
221  #ifdef ALLOW_CALENDAR          call cal_FullDate( xx_atempstartdate1, xx_atempstartdate2,
222         &                     xx_atempstartdate , mythid )
223          call cal_TimePassed( xx_atempstartdate, modelstartdate,          call cal_TimePassed( xx_atempstartdate, modelstartdate,
224       &                       difftime, mythid )       &                       difftime, mythid )
225          call cal_ToSeconds ( difftime, diffsecs, mythid )          call cal_ToSeconds ( difftime, diffsecs, mythid )
226          startrec = int((modelstart - diffsecs)/          if ( xx_atempperiod .EQ. 0 ) then
227            startrec=1
228            endrec=12
229            else
230            startrec = int((modelstart + startTime - diffsecs)/
231       &                 xx_atempperiod) + 1       &                 xx_atempperiod) + 1
232          endrec   = int((modelend   - diffsecs - modelstep)/          endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
233       &                 xx_atempperiod) + 2       &                 xx_atempperiod) + 2
234  #else          endif
235    # else
236          startrec = 1          startrec = 1
237          endrec   = 1          endrec   = 1
238  #endif  # endif
239          ivarindex                = 7          diffrec  = endrec - startrec + 1
240          ncvarindex(ivarindex)    = 107          call ctrl_init_ctrlvar (
241          ncvarrecs(ivarindex)     = endrec - startrec + 1       &       xx_atemp_file, 7, 107, diffrec, startrec, endrec,
242          ncvarrecstart(ivarindex) = startrec       &       snx, sny, 1, 'c', 'xy', mythid )
         ncvarrecsend(ivarindex)  = endrec  
         ncvarxmax(ivarindex)     = snx  
         ncvarymax(ivarindex)     = sny  
         ncvarnrmax(ivarindex)    =   1  
         ncvargrd(ivarindex)      = 'c'  
       _END_MASTER( mythid )  
243    
244  #elif (defined (ALLOW_HFLUX0_CONTROL))  #elif (defined (ALLOW_HFLUX0_CONTROL))
245  c--   initial forcing only  c--   initial forcing only
246        _BEGIN_MASTER( mythid )          call ctrl_init_ctrlvar (
247          ncvarindex(3) = 103       &       xx_hflux_file, 3, 103, 1, 1, 1,
248          ncvarrecs(3)  =   1       &       snx, sny, 1, 'c', 'xy', mythid )
         ncvarxmax(3)  = snx  
         ncvarymax(3)  = sny  
         ncvarnrmax(3) =   1  
         ncvargrd(3)   = 'c'  
       _END_MASTER( mythid )  
249    
250  #endif /* ALLOW_HFLUX_CONTROL */  #endif /* ALLOW_HFLUX_CONTROL */
251    
252  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
253  c--  c--
254  #if (defined (ALLOW_SFLUX_CONTROL))  #if (defined (ALLOW_SFLUX_CONTROL))
255  c--   Salt flux.  c--   Salt flux.
256    
257        _BEGIN_MASTER( mythid )  # ifdef ALLOW_CAL
258  #ifdef ALLOW_CALENDAR          call cal_FullDate( xx_sfluxstartdate1, xx_sfluxstartdate2,
259         &                     xx_sfluxstartdate , mythid )
260          call cal_TimePassed( xx_sfluxstartdate, modelstartdate,          call cal_TimePassed( xx_sfluxstartdate, modelstartdate,
261       &                       difftime, mythid )       &                       difftime, mythid )
262          call cal_ToSeconds ( difftime, diffsecs, mythid )          call cal_ToSeconds ( difftime, diffsecs, mythid )
263          startrec = int((modelstart - diffsecs)/          if ( xx_sfluxperiod .EQ. 0 ) then
264            startrec=1
265            endrec=12
266            else
267            startrec = int((modelstart + startTime - diffsecs)/
268       &                 xx_sfluxperiod) + 1       &                 xx_sfluxperiod) + 1
269          endrec   = int((modelend   - diffsecs - modelstep)/          endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
270       &                 xx_sfluxperiod) + 2       &                 xx_sfluxperiod) + 2
271  #else          endif
272    # else
273          startrec = 1          startrec = 1
274          endrec   = 1          endrec   = 1
275  #endif  # endif
276          ivarindex                = 4          diffrec  = endrec - startrec + 1
277          ncvarindex(ivarindex)    = 104          call ctrl_init_ctrlvar (
278          ncvarrecs(ivarindex)     = endrec - startrec + 1       &       xx_sflux_file, 4, 104, diffrec, startrec, endrec,
279          ncvarrecstart(ivarindex) = startrec       &       snx, sny, 1, 'c', 'xy', mythid )
280          ncvarrecsend(ivarindex)  = endrec  
         ncvarxmax(ivarindex)     = snx  
         ncvarymax(ivarindex)     = sny  
         ncvarnrmax(ivarindex)    =   1  
         ncvargrd(ivarindex)      = 'c'  
       _END_MASTER( mythid )  
   
281  #elif (defined (ALLOW_AQH_CONTROL))  #elif (defined (ALLOW_AQH_CONTROL))
282  c--   Atmos. humidity  c--   Atmos. humidity
283    
284        _BEGIN_MASTER( mythid )  # ifdef ALLOW_CAL
285  #ifdef ALLOW_CALENDAR          call cal_FullDate( xx_aqhstartdate1, xx_aqhstartdate2,
286         &                     xx_aqhstartdate , mythid )
287          call cal_TimePassed( xx_aqhstartdate, modelstartdate,          call cal_TimePassed( xx_aqhstartdate, modelstartdate,
288       &                       difftime, mythid )       &                       difftime, mythid )
289          call cal_ToSeconds ( difftime, diffsecs, mythid )          call cal_ToSeconds ( difftime, diffsecs, mythid )
290          startrec = int((modelstart - diffsecs)/          if ( xx_aqhperiod .EQ. 0 ) then
291            startrec=1
292            endrec=12
293            else
294            startrec = int((modelstart + startTime - diffsecs)/
295       &                 xx_aqhperiod) + 1       &                 xx_aqhperiod) + 1
296          endrec   = int((modelend   - diffsecs - modelstep)/          endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
297       &                 xx_aqhperiod) + 2       &                 xx_aqhperiod) + 2
298  #else          endif
299    # else
300          startrec = 1          startrec = 1
301          endrec   = 1          endrec   = 1
302  #endif  # endif
303          ivarindex                = 8          diffrec  = endrec - startrec + 1
304          ncvarindex(ivarindex)    = 108          call ctrl_init_ctrlvar (
305          ncvarrecs(ivarindex)     = endrec - startrec + 1       &       xx_aqh_file, 8, 108, diffrec, startrec, endrec,
306          ncvarrecstart(ivarindex) = startrec       &       snx, sny, 1, 'c', 'xy', mythid )
         ncvarrecsend(ivarindex)  = endrec  
         ncvarxmax(ivarindex)     = snx  
         ncvarymax(ivarindex)     = sny  
         ncvarnrmax(ivarindex)    =   1  
         ncvargrd(ivarindex)      = 'c'  
       _END_MASTER( mythid )  
307    
308  #elif (defined (ALLOW_SFLUX0_CONTROL))  #elif (defined (ALLOW_SFLUX0_CONTROL))
309  c--   initial forcing only  c--   initial forcing only
310        _BEGIN_MASTER( mythid )          call ctrl_init_ctrlvar (
311          ncvarindex(4) = 104       &       xx_sflux_file, 4, 104, 1, 1, 1,
312          ncvarrecs(4)  =   1       &       snx, sny, 1, 'c', 'xy', mythid )
         ncvarxmax(4)  = snx  
         ncvarymax(4)  = sny  
         ncvarnrmax(4) =   1  
         ncvargrd(4)   = 'c'  
       _END_MASTER( mythid )  
313    
314  #endif /* ALLOW_SFLUX_CONTROL */  #endif /* ALLOW_SFLUX_CONTROL */
315    
316  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
317  c--  c--
318  #if (defined (ALLOW_USTRESS_CONTROL))  #if (defined (ALLOW_USTRESS_CONTROL))
319  c--   Zonal wind stress.  c--   Zonal wind stress.
320    
321        _BEGIN_MASTER( mythid )  # ifdef ALLOW_CAL
322  #ifdef ALLOW_CALENDAR          call cal_FullDate( xx_tauustartdate1,  xx_tauustartdate2,
323         &                     xx_tauustartdate,   mythid )
324          call cal_TimePassed( xx_tauustartdate, modelstartdate,          call cal_TimePassed( xx_tauustartdate, modelstartdate,
325       &                       difftime, mythid )       &                       difftime, mythid )
326          call cal_ToSeconds ( difftime, diffsecs, mythid )          call cal_ToSeconds ( difftime, diffsecs, mythid )
327          startrec = int((modelstart - diffsecs)/          if ( xx_tauuperiod .EQ. 0 ) then
328            startrec=1
329            endrec=12
330            else
331            startrec = int((modelstart + startTime - diffsecs)/
332       &                 xx_tauuperiod) + 1       &                 xx_tauuperiod) + 1
333          endrec   = int((modelend   - diffsecs - modelstep)/          endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
334       &                 xx_tauuperiod) + 2       &                 xx_tauuperiod) + 2
335  #else          endif
336    # else
337          startrec = 1          startrec = 1
338          endrec   = 1          endrec   = 1
339  #endif  # endif
340          ivarindex                = 5          diffrec  = endrec - startrec + 1
341          ncvarindex(ivarindex)    = 105          call ctrl_init_ctrlvar (
342          ncvarrecs(ivarindex)     = endrec - startrec + 1       &       xx_tauu_file, 5, 105, diffrec, startrec, endrec,
343          ncvarrecstart(ivarindex) = startrec       &       snx, sny, 1, 'w', 'xy', mythid )
         ncvarrecsend(ivarindex)  = endrec  
         ncvarxmax(ivarindex)     = snx  
         ncvarymax(ivarindex)     = sny  
         ncvarnrmax(ivarindex)    =   1  
         ncvargrd(ivarindex)      = 'w'  
       _END_MASTER( mythid )  
344    
345  #elif (defined (ALLOW_UWIND_CONTROL))  #elif (defined (ALLOW_UWIND_CONTROL))
346  c--   Zonal wind speed.  c--   Zonal wind speed.
347    
348        _BEGIN_MASTER( mythid )  # ifdef ALLOW_CAL
349  #ifdef ALLOW_CALENDAR          call cal_FullDate( xx_uwindstartdate1, xx_uwindstartdate2,
350         &                     xx_uwindstartdate , mythid )
351          call cal_TimePassed( xx_uwindstartdate, modelstartdate,          call cal_TimePassed( xx_uwindstartdate, modelstartdate,
352       &                       difftime, mythid )       &                       difftime, mythid )
353          call cal_ToSeconds ( difftime, diffsecs, mythid )          call cal_ToSeconds ( difftime, diffsecs, mythid )
354          startrec = int((modelstart - diffsecs)/          if ( xx_uwindperiod .EQ. 0 ) then
355            startrec=1
356            endrec=12
357            else
358            startrec = int((modelstart + startTime - diffsecs)/
359       &                 xx_uwindperiod) + 1       &                 xx_uwindperiod) + 1
360          endrec   = int((modelend   - diffsecs - modelstep)/          endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
361       &                 xx_uwindperiod) + 2       &                 xx_uwindperiod) + 2
362  #else          endif
363    # else
364          startrec = 1          startrec = 1
365          endrec   = 1          endrec   = 1
366  #endif  # endif
367          ivarindex                = 9          diffrec  = endrec - startrec + 1
368          ncvarindex(ivarindex)    = 109          call ctrl_init_ctrlvar (
369          ncvarrecs(ivarindex)     = endrec - startrec + 1       &       xx_uwind_file, 9, 109, diffrec, startrec, endrec,
370          ncvarrecstart(ivarindex) = startrec       &       snx, sny, 1, 'c', 'xy', mythid )
         ncvarrecsend(ivarindex)  = endrec  
         ncvarxmax(ivarindex)     = snx  
         ncvarymax(ivarindex)     = sny  
         ncvarnrmax(ivarindex)    =   1  
         ncvargrd(ivarindex)      = 'w'  
       _END_MASTER( mythid )  
371    
372  #elif (defined (ALLOW_TAUU0_CONTROL))  #elif (defined (ALLOW_TAUU0_CONTROL))
373  c--   initial forcing only  c--   initial forcing only
374        _BEGIN_MASTER( mythid )          call ctrl_init_ctrlvar (
375          ncvarindex(5) = 105       &       xx_tauu_file, 5, 105, 1, 1, 1,
376          ncvarrecs(5)  =   1       &       snx, sny, 1, 'w', 'xy', mythid )
         ncvarxmax(5)  = snx  
         ncvarymax(5)  = sny  
         ncvarnrmax(5) =   1  
         ncvargrd(5)   = 'w'  
       _END_MASTER( mythid )  
377    
378  #endif /* ALLOW_USTRESS_CONTROL */  #endif /* ALLOW_USTRESS_CONTROL */
379    
380  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
381  c--  c--
382  #if (defined (ALLOW_VSTRESS_CONTROL))  #if (defined (ALLOW_VSTRESS_CONTROL))
383  c--   Meridional wind stress.  c--   Meridional wind stress.
384    
385        _BEGIN_MASTER( mythid )  # ifdef ALLOW_CAL
386  #ifdef ALLOW_CALENDAR          call cal_FullDate( xx_tauvstartdate1,  xx_tauvstartdate2,
387         &                     xx_tauvstartdate,   mythid )
388          call cal_TimePassed( xx_tauvstartdate, modelstartdate,          call cal_TimePassed( xx_tauvstartdate, modelstartdate,
389       &                       difftime, mythid )       &                       difftime, mythid )
390          call cal_ToSeconds ( difftime, diffsecs, mythid )          call cal_ToSeconds ( difftime, diffsecs, mythid )
391          startrec = int((modelstart - diffsecs)/          if ( xx_tauvperiod .EQ. 0 ) then
392            startrec=1
393            endrec=12
394            else
395            startrec = int((modelstart + startTime - diffsecs)/
396       &                 xx_tauvperiod) + 1       &                 xx_tauvperiod) + 1
397          endrec   = int((modelend   - diffsecs - modelstep)/          endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
398       &                 xx_tauvperiod) + 2       &                 xx_tauvperiod) + 2
399  #else          endif
400    # else
401          startrec = 1          startrec = 1
402          endrec   = 1          endrec   = 1
403  #endif  # endif
404          ivarindex                = 6          diffrec  = endrec - startrec + 1
405          ncvarindex(ivarindex)    = 106          call ctrl_init_ctrlvar (
406          ncvarrecs(ivarindex)     = endrec - startrec + 1       &       xx_tauv_file, 6, 106, diffrec, startrec, endrec,
407          ncvarrecstart(ivarindex) = startrec       &       snx, sny, 1, 's', 'xy', mythid )
         ncvarrecsend(ivarindex)  = endrec  
         ncvarxmax(ivarindex)     = snx  
         ncvarymax(ivarindex)     = sny  
         ncvarnrmax(ivarindex)    =   1  
         ncvargrd(ivarindex)      = 's'  
       _END_MASTER( mythid )  
408    
409  #elif (defined (ALLOW_VWIND_CONTROL))  #elif (defined (ALLOW_VWIND_CONTROL))
410  c--   Meridional wind speed.  c--   Meridional wind speed.
411    
412        _BEGIN_MASTER( mythid )  # ifdef ALLOW_CAL
413  #ifdef ALLOW_CALENDAR          call cal_FullDate( xx_vwindstartdate1, xx_vwindstartdate2,
414         &                     xx_vwindstartdate , mythid )
415          call cal_TimePassed( xx_vwindstartdate, modelstartdate,          call cal_TimePassed( xx_vwindstartdate, modelstartdate,
416       &                       difftime, mythid )       &                       difftime, mythid )
417          call cal_ToSeconds ( difftime, diffsecs, mythid )          call cal_ToSeconds ( difftime, diffsecs, mythid )
418          startrec = int((modelstart - diffsecs)/          if ( xx_vwindperiod .EQ. 0 ) then
419            startrec=1
420            endrec=12
421            else
422            startrec = int((modelstart + startTime - diffsecs)/
423       &                 xx_vwindperiod) + 1       &                 xx_vwindperiod) + 1
424          endrec   = int((modelend   - diffsecs - modelstep)/          endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
425       &                 xx_vwindperiod) + 2       &                 xx_vwindperiod) + 2
426  #else          endif
427    # else
428          startrec = 1          startrec = 1
429          endrec   = 1          endrec   = 1
430  #endif  # endif
431          ivarindex                = 10          diffrec  = endrec - startrec + 1
432          ncvarindex(ivarindex)    = 110          call ctrl_init_ctrlvar (
433          ncvarrecs(ivarindex)     = endrec - startrec + 1       &       xx_vwind_file, 10, 110, diffrec, startrec, endrec,
434          ncvarrecstart(ivarindex) = startrec       &       snx, sny, 1, 'c', 'xy', mythid )
         ncvarrecsend(ivarindex)  = endrec  
         ncvarxmax(ivarindex)     = snx  
         ncvarymax(ivarindex)     = sny  
         ncvarnrmax(ivarindex)    =   1  
         ncvargrd(ivarindex)      = 's'  
       _END_MASTER( mythid )  
435    
436  #elif (defined (ALLOW_TAUV0_CONTROL))  #elif (defined (ALLOW_TAUV0_CONTROL))
437  c--   initial forcing only  c--   initial forcing only
438        _BEGIN_MASTER( mythid )          call ctrl_init_ctrlvar (
439          ncvarindex(6) = 106       &       xx_tauv_file, 6, 106, 1, 1, 1,
440          ncvarrecs(6)  =   1       &       snx, sny, 1, 's', 'xy', mythid )
         ncvarxmax(6)  = snx  
         ncvarymax(6)  = sny  
         ncvarnrmax(6) =   1  
         ncvargrd(6)   = 's'  
       _END_MASTER( mythid )  
441    
442  #endif /* ALLOW_VSTRESS_CONTROL */  #endif /* ALLOW_VSTRESS_CONTROL */
443    
444  c-------------------------------------------------------------------------------------------  c--   ===========================
445    c--   Open boundary contributions.
446    c--   ===========================
447    
448    c----------------------------------------------------------------------
449  c--  c--
450  #ifdef ALLOW_OBCSN_CONTROL  #ifdef ALLOW_OBCSN_CONTROL
451  c--   Northern obc.  c--   Northern obc.
452    
453        _BEGIN_MASTER( mythid )  # ifdef ALLOW_CAL
454  #ifdef ALLOW_CALENDAR          call cal_FullDate( xx_obcsnstartdate1,  xx_obcsnstartdate2,
455         &                     xx_obcsnstartdate,   mythid )
456          call cal_TimePassed( xx_obcsnstartdate, modelstartdate,          call cal_TimePassed( xx_obcsnstartdate, modelstartdate,
457       &                       difftime, mythid )       &                       difftime, mythid )
458          call cal_ToSeconds ( difftime, diffsecs, mythid )          call cal_ToSeconds ( difftime, diffsecs, mythid )
459          startrec = int((modelstart - diffsecs)/          startrec = int((modelstart - diffsecs)/xx_obcsnperiod) + 1
460       &                 xx_obcsnperiod) + 1          startrec = (startrec - 1)*nobcs + 1
461          endrec   = int((modelend   - diffsecs)/          endrec   = int((modelend   - diffsecs)/xx_obcsnperiod) + 2
462       &                 xx_obcsnperiod) + 2          endrec   = (endrec - startrec + 1)*nobcs
463  #else  # else
464          startrec = 1          startrec = 1
465          endrec   = 1          endrec   = 1
466  #endif  # endif
467          ivarindex                = 11          diffrec  = endrec
468          ncvarindex(ivarindex)    = 111          call ctrl_init_ctrlvar (
469          ncvarrecs(ivarindex)     = (endrec - startrec + 1)*nobcs       &       xx_obcsn_file, 11, 111, diffrec, startrec, endrec,
470          ncvarrecstart(ivarindex) = (startrec - 1)*nobcs + 1       &       snx, 1, nr, 'm', 'xz', mythid )
         ncvarrecsend(ivarindex)  = endrec*nobcs  
         ncvarxmax(ivarindex)     = snx  
         ncvarymax(ivarindex)     =   1  
         ncvarnrmax(ivarindex)    =  nr  
         ncvargrd(ivarindex)      = 'm'  
       _END_MASTER( mythid )  
471    
472  #endif /* ALLOW_OBCSN_CONTROL */  #endif /* ALLOW_OBCSN_CONTROL */
473    
474    c----------------------------------------------------------------------
475    c--
476  #ifdef ALLOW_OBCSS_CONTROL  #ifdef ALLOW_OBCSS_CONTROL
477  c--   Southern obc.  c--   Southern obc.
478    
479  c-------------------------------------------------------------------------------------------  # ifdef ALLOW_CAL
480  c--          call cal_FullDate( xx_obcssstartdate1,  xx_obcssstartdate2,
481        _BEGIN_MASTER( mythid )       &                     xx_obcssstartdate,   mythid )
 #ifdef ALLOW_CALENDAR  
482          call cal_TimePassed( xx_obcssstartdate, modelstartdate,          call cal_TimePassed( xx_obcssstartdate, modelstartdate,
483       &                       difftime, mythid )       &                       difftime, mythid )
484          call cal_ToSeconds ( difftime, diffsecs, mythid )          call cal_ToSeconds ( difftime, diffsecs, mythid )
485          startrec = int((modelstart - diffsecs)/          startrec = int((modelstart - diffsecs)/xx_obcssperiod) + 1
486       &                 xx_obcssperiod) + 1          startrec = (startrec - 1)*nobcs + 1
487          endrec   = int((modelend   - diffsecs)/          endrec   = int((modelend   - diffsecs)/xx_obcssperiod) + 2
488       &                 xx_obcssperiod) + 2          endrec   = (endrec - startrec + 1)*nobcs
489  #else  # else
490          startrec = 1          startrec = 1
491          endrec   = 1          endrec   = 1
492  #endif  # endif
493          ivarindex                = 12          diffrec  = endrec
494          ncvarindex(ivarindex)    = 112          call ctrl_init_ctrlvar (
495          ncvarrecs(ivarindex)     = (endrec - startrec + 1)*nobcs       &       xx_obcss_file, 12, 112, diffrec, startrec, endrec,
496          ncvarrecstart(ivarindex) = (startrec - 1)*nobcs + 1       &       snx, 1, nr, 'm', 'xz', mythid )
         ncvarrecsend(ivarindex)  = endrec*nobcs  
         ncvarxmax(ivarindex)     = snx  
         ncvarymax(ivarindex)     =   1  
         ncvarnrmax(ivarindex)    =  nr  
         ncvargrd(ivarindex)      = 'm'  
       _END_MASTER( mythid )  
497    
498  #endif /* ALLOW_OBCSS_CONTROL */  #endif /* ALLOW_OBCSS_CONTROL */
499    
500  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
501  c--  c--
502  #ifdef ALLOW_OBCSW_CONTROL  #ifdef ALLOW_OBCSW_CONTROL
503  c--   Western obc.  c--   Western obc.
504    
505        _BEGIN_MASTER( mythid )  # ifdef ALLOW_CAL
506  #ifdef ALLOW_CALENDAR          call cal_FullDate( xx_obcswstartdate1,  xx_obcswstartdate2,
507         &                     xx_obcswstartdate,   mythid )
508          call cal_TimePassed( xx_obcswstartdate, modelstartdate,          call cal_TimePassed( xx_obcswstartdate, modelstartdate,
509       &                       difftime, mythid )       &                       difftime, mythid )
510          call cal_ToSeconds ( difftime, diffsecs, mythid )          call cal_ToSeconds ( difftime, diffsecs, mythid )
511          startrec = int((modelstart - diffsecs)/          startrec = int((modelstart - diffsecs)/xx_obcswperiod) + 1
512       &                 xx_obcswperiod) + 1          startrec = (startrec - 1)*nobcs + 1
513          endrec   = int((modelend   - diffsecs)/          endrec   = int((modelend   - diffsecs)/xx_obcswperiod) + 2
514       &                 xx_obcswperiod) + 2          endrec   = (endrec - startrec + 1)*nobcs
515  #else  # else
516          startrec = 1          startrec = 1
517          endrec   = 1          endrec   = 1
518  #endif  # endif
519          ivarindex                = 13          diffrec  = endrec
520          ncvarindex(ivarindex)    = 113          call ctrl_init_ctrlvar (
521          ncvarrecs(ivarindex)     = (endrec - startrec + 1)*nobcs       &       xx_obcsw_file, 13, 113, diffrec, startrec, endrec,
522          ncvarrecstart(ivarindex) = (startrec - 1)*nobcs + 1       &       1, sny, nr, 'm', 'yz', mythid )
         ncvarrecsend(ivarindex)  = endrec*nobcs  
         ncvarxmax(ivarindex)     =   1  
         ncvarymax(ivarindex)     = sny  
         ncvarnrmax(ivarindex)    =  nr  
         ncvargrd(ivarindex)      = 'm'  
       _END_MASTER( mythid )  
523    
524  #endif /* ALLOW_OBCSW_CONTROL */  #endif  /* ALLOW_OBCSW_CONTROL */
525    
526  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
527  c--  c--
528  #ifdef ALLOW_OBCSE_CONTROL  #ifdef ALLOW_OBCSE_CONTROL
529  c--   Eastern obc.  c--   Eastern obc.
530    
531        _BEGIN_MASTER( mythid )  # ifdef ALLOW_CAL
532  #ifdef ALLOW_CALENDAR          call cal_FullDate( xx_obcsestartdate1,  xx_obcsestartdate2,
533         &                     xx_obcsestartdate,   mythid )
534          call cal_TimePassed( xx_obcsestartdate, modelstartdate,          call cal_TimePassed( xx_obcsestartdate, modelstartdate,
535       &                       difftime, mythid )       &                       difftime, mythid )
536          call cal_ToSeconds ( difftime, diffsecs, mythid )          call cal_ToSeconds ( difftime, diffsecs, mythid )
537          startrec = int((modelstart - diffsecs)/          startrec = int((modelstart - diffsecs)/xx_obcseperiod) + 1
538       &                 xx_obcseperiod) + 1          startrec = (startrec - 1)*nobcs + 1
539          endrec   = int((modelend   - diffsecs)/          endrec   = int((modelend   - diffsecs)/xx_obcseperiod) + 2
540       &                 xx_obcseperiod) + 2          endrec   = (endrec - startrec + 1)*nobcs
541  #else  # else
542          startrec = 1          startrec = 1
543          endrec   = 1          endrec   = 1
544  #endif  # endif
545          ivarindex                = 14          diffrec  = endrec
546          ncvarindex(ivarindex)    = 114          call ctrl_init_ctrlvar (
547          ncvarrecs(ivarindex)     = (endrec - startrec + 1)*nobcs       &       xx_obcse_file, 14, 114, diffrec, startrec, endrec,
548          ncvarrecstart(ivarindex) = (startrec - 1)*nobcs + 1       &       1, sny, nr, 'm', 'yz', mythid )
         ncvarrecsend(ivarindex)  = endrec*nobcs  
         ncvarxmax(ivarindex)     =   1  
         ncvarymax(ivarindex)     = sny  
         ncvarnrmax(ivarindex)    =  nr  
         ncvargrd(ivarindex)      = 'm'  
       _END_MASTER( mythid )  
549    
550  #endif /* ALLOW_OBCSE_CONTROL */  #endif /* ALLOW_OBCSE_CONTROL */
551    
552  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
553  c--  c--
554  #ifdef ALLOW_DIFFKR_CONTROL  #ifdef ALLOW_DIFFKR_CONTROL
555        _BEGIN_MASTER( mythid )          call ctrl_init_ctrlvar (
556          ivarindex                = 15       &       xx_diffkr_file, 15, 115, 1, 1, 1,
557          ncvarindex(ivarindex)    = 115       &       snx, sny, nr, 'c', '3d', mythid )
         ncvarrecs (ivarindex)    =   1  
         ncvarxmax (ivarindex)    = snx  
         ncvarymax (ivarindex)    = sny  
         ncvarnrmax(ivarindex)    =  nr  
         ncvargrd  (ivarindex)    = 'c'  
       _END_MASTER( mythid )  
558  #endif /* ALLOW_DIFFKR_CONTROL */  #endif /* ALLOW_DIFFKR_CONTROL */
559    
560  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
561  c--  c--
562  #ifdef ALLOW_KAPGM_CONTROL  #ifdef ALLOW_KAPGM_CONTROL
563        _BEGIN_MASTER( mythid )          call ctrl_init_ctrlvar (
564          ivarindex                = 16       &       xx_kapgm_file, 16, 116, 1, 1, 1,
565          ncvarindex(ivarindex)    = 116       &       snx, sny, nr, 'c', '3d', mythid )
         ncvarrecs (ivarindex)    =   1  
         ncvarxmax (ivarindex)    = snx  
         ncvarymax (ivarindex)    = sny  
         ncvarnrmax(ivarindex)    =  nr  
         ncvargrd  (ivarindex)    = 'c'  
       _END_MASTER( mythid )  
566  #endif /* ALLOW_KAPGM_CONTROL */  #endif /* ALLOW_KAPGM_CONTROL */
567    
568  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
569  c--  c--
570  #ifdef ALLOW_TR10_CONTROL  #ifdef ALLOW_TR10_CONTROL
571        _BEGIN_MASTER( mythid )          call ctrl_init_ctrlvar (
572          ivarindex                = 17       &       xx_tr1_file, 17, 117, 1, 1, 1,
573          ncvarindex(ivarindex)    = 117       &       snx, sny, nr, 'c', '3d', mythid )
         ncvarrecs (ivarindex)    =   1  
         ncvarxmax (ivarindex)    = snx  
         ncvarymax (ivarindex)    = sny  
         ncvarnrmax(ivarindex)    =  nr  
         ncvargrd  (ivarindex)    = 'c'  
       _END_MASTER( mythid )  
574  #endif /* ALLOW_TR10_CONTROL */  #endif /* ALLOW_TR10_CONTROL */
575    
576  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
577  c--  c--
578  #ifdef ALLOW_SST0_CONTROL  #if (defined (ALLOW_SST_CONTROL))
579        _BEGIN_MASTER( mythid )  
580          ivarindex                = 18  # ifdef ALLOW_CAL
581          ncvarindex(ivarindex)    = 118          call cal_FullDate( xx_sststartdate1, xx_sststartdate2,
582          ncvarrecs (ivarindex)    =   1       &                     xx_sststartdate , mythid )
583          ncvarxmax (ivarindex)    = snx          call cal_TimePassed( xx_sststartdate, modelstartdate,
584          ncvarymax (ivarindex)    = sny       &                       difftime, mythid )
585          ncvarnrmax(ivarindex)    =   1          call cal_ToSeconds ( difftime, diffsecs, mythid )
586          ncvargrd  (ivarindex)    = 'c'          if ( xx_sstperiod .EQ. 0 ) then
587        _END_MASTER( mythid )          startrec=1
588  #endif /* ALLOW_SST0_CONTROL */          endrec=12
589            else
590  c-------------------------------------------------------------------------------------------          startrec = int((modelstart + startTime - diffsecs)/
591  c--       &                 xx_sstperiod) + 1
592  #ifdef ALLOW_SSS0_CONTROL          endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
593        _BEGIN_MASTER( mythid )       &                 xx_sstperiod) + 2
594          ivarindex                = 19          endif
595          ncvarindex(ivarindex)    = 119  # else
596          ncvarrecs (ivarindex)    =   1          startrec = 1
597          ncvarxmax (ivarindex)    = snx          endrec   = 1
598          ncvarymax (ivarindex)    = sny  # endif
599          ncvarnrmax(ivarindex)    =   1          diffrec  = endrec - startrec + 1
600          ncvargrd  (ivarindex)    = 'c'          call ctrl_init_ctrlvar (
601        _END_MASTER( mythid )       &       xx_sst_file, 18, 118, diffrec, startrec, endrec,
602         &       snx, sny, 1, 'c', 'xy', mythid )
603    
604    #elif (defined (ALLOW_SST0_CONTROL))
605    
606            call ctrl_init_ctrlvar (
607         &       xx_sst_file, 18, 118, 1, 1, 1,
608         &       snx, sny, 1, 'c', 'xy', mythid )
609    
610    #endif /* ALLOW_SST_CONTROL */
611    
612    c----------------------------------------------------------------------
613    c--
614    #if (defined (ALLOW_SSS_CONTROL))
615    
616    # ifdef ALLOW_CAL
617            call cal_FullDate( xx_sssstartdate1, xx_sssstartdate2,
618         &                     xx_sssstartdate , mythid )
619            call cal_TimePassed( xx_sssstartdate, modelstartdate,
620         &                       difftime, mythid )
621            call cal_ToSeconds ( difftime, diffsecs, mythid )
622            if ( xx_sssperiod .EQ. 0 ) then
623            startrec=1
624            endrec=12
625            else
626            startrec = int((modelstart + startTime - diffsecs)/
627         &                 xx_sssperiod) + 1
628            endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
629         &                 xx_sssperiod) + 2
630            endif
631    # else
632            startrec = 1
633            endrec   = 1
634    # endif
635            diffrec  = endrec - startrec + 1
636            call ctrl_init_ctrlvar (
637         &       xx_sss_file, 19, 119, diffrec, startrec, endrec,
638         &       snx, sny, 1, 'c', 'xy', mythid )
639    
640    #elif (defined (ALLOW_SSS0_CONTROL))
641    
642            call ctrl_init_ctrlvar (
643         &       xx_sss_file, 19, 119, 1, 1, 1,
644         &       snx, sny, 1, 'c', 'xy', mythid )
645    
646  #endif /* ALLOW_SSS0_CONTROL */  #endif /* ALLOW_SSS0_CONTROL */
647    
648  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
649  c--  c--
650  #ifdef ALLOW_HFACC_CONTROL  #ifdef ALLOW_DEPTH_CONTROL
651        _BEGIN_MASTER( mythid )          call ctrl_init_ctrlvar (
652          ivarindex                = 20       &       xx_depth_file, 20, 120, 1, 1, 1,
653          ncvarindex(ivarindex)    = 120       &       snx, sny,  1, 'c', 'xy', mythid )
654          ncvarrecs (ivarindex)    =   1  #endif /* ALLOW_DEPTH_CONTROL */
         ncvarxmax (ivarindex)    = snx  
         ncvarymax (ivarindex)    = sny  
         ncvargrd  (ivarindex)    = 'c'  
 #ifdef ALLOW_HFACC3D_CONTROL  
         ncvarnrmax(ivarindex)    =  nr  
 #else  
         ncvarnrmax(ivarindex)    =   1  
 #endif /*ALLOW_HFACC3D_CONTROL*/  
       _END_MASTER( mythid )  
 #endif /* ALLOW_HFACC_CONTROL */  
655    
656  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
657  c--  c--
658  #ifdef ALLOW_EFLUXY0_CONTROL  #ifdef ALLOW_EFLUXY0_CONTROL
659        _BEGIN_MASTER( mythid )          call ctrl_init_ctrlvar (
660          ivarindex                = 21       &       xx_efluxy_file, 21, 121, 1, 1, 1,
661          ncvarindex(ivarindex)    = 121       &       snx, sny, nr, 's', '3d', mythid )
         ncvarrecs(ivarindex)     =   1  
         ncvarxmax(ivarindex)     = snx  
         ncvarymax(ivarindex)     = sny  
         ncvarnrmax(ivarindex)    =  nr  
         ncvargrd(ivarindex)      = 's'  
       _END_MASTER( mythid )  
662  #endif /* ALLOW_EFLUXY0_CONTROL */  #endif /* ALLOW_EFLUXY0_CONTROL */
663    
664  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
665  c--  c--
666  #ifdef ALLOW_EFLUXP0_CONTROL  #ifdef ALLOW_EFLUXP0_CONTROL
667        _BEGIN_MASTER( mythid )          call ctrl_init_ctrlvar (
668          ivarindex                = 22       &       xx_efluxp_file, 22, 122, 1, 1, 1,
669          ncvarindex(ivarindex)    = 122       &       snx, sny, nr, 'v', '3d', mythid )
         ncvarrecs(ivarindex)     =   1  
         ncvarxmax(ivarindex)     = snx  
         ncvarymax(ivarindex)     = sny  
         ncvarnrmax(ivarindex)    =  nr  
         ncvargrd(ivarindex)      = 'v'  
       _END_MASTER( mythid )  
670  #endif /* ALLOW_EFLUXP0_CONTROL */  #endif /* ALLOW_EFLUXP0_CONTROL */
671    
672  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
673  c--  c--
674  #ifdef ALLOW_BOTTOMDRAG_CONTROL  #ifdef ALLOW_BOTTOMDRAG_CONTROL
675        _BEGIN_MASTER( mythid )          call ctrl_init_ctrlvar (
676          ivarindex                = 23       &       xx_bottomdrag_file, 23, 123, 1, 1, 1,
677          ncvarindex(ivarindex)    = 123       &       snx, sny, 1, 'c', 'xy', mythid )
         ncvarrecs (ivarindex)    =   1  
         ncvarxmax (ivarindex)    = snx  
         ncvarymax (ivarindex)    = sny  
         ncvarnrmax(ivarindex)    =   1  
         ncvargrd  (ivarindex)    = 'c'  
       _END_MASTER( mythid )  
678  #endif /* ALLOW_BOTTOMDRAG_CONTROL */  #endif /* ALLOW_BOTTOMDRAG_CONTROL */
679    
680  c-------------------------------------------------------------------------------------------  c----------------------------------------------------------------------
681  c-------------------------------------------------------------------------------------------  c--
682  c-------------------------------------------------------------------------------------------  #ifdef ALLOW_HFLUXM_CONTROL
683            call ctrl_init_ctrlvar (
684  c--   Determine the number of wet points in each tile:       &       xx_hfluxm_file, 24, 124, 1, 1, 1,
685  c--   maskc, masks, and maskw.       &       snx, sny, 1, 'c', 'xy', mythid )
686    #endif /* ALLOW_HFLUXM_CONTROL */
 c--   Set loop ranges.  
       jmin = 1  
       jmax = sny  
       imin = 1  
       imax = snx  
687    
688  c--   Initialise the counters.  c----------------------------------------------------------------------
689        do bj = jtlo,jthi  c--
690          do bi = itlo,ithi  #ifdef ALLOW_EDDYPSI_CONTROL
691            do k = 1,nr          call ctrl_init_ctrlvar (
692              nwetctile(bi,bj,k) = 0       &       xx_edtaux_file, 25, 125, 1, 1, 1,
693              nwetstile(bi,bj,k) = 0       &       snx, sny, nr, 'w', '3d', mythid )
694              nwetwtile(bi,bj,k) = 0  
695              nwetvtile(bi,bj,k) = 0          call ctrl_init_ctrlvar (
696            enddo       &       xx_edtauy_file, 26, 126, 1, 1, 1,
697          enddo       &       snx, sny, nr, 's', '3d', mythid )
698        enddo  #endif /* ALLOW_EDDYPSI_CONTROL */
699    
700  #ifdef ALLOW_OBCS_CONTROL  c----------------------------------------------------------------------
701  c--   Initialise obcs counters.  c--
702        do bj = jtlo,jthi  #ifdef ALLOW_UVEL0_CONTROL
703          do bi = itlo,ithi          call ctrl_init_ctrlvar (
704            do k = 1,nr       &       xx_uvel_file, 27, 127, 1, 1, 1,
705              do iobcs = 1,nobcs       &       snx, sny, nr, 'w', '3d', mythid )
706  #ifdef ALLOW_OBCSN_CONTROL  #endif /* ALLOW_UVEL0_CONTROL */
               nwetobcsn(bi,bj,k,iobcs) = 0  
 #endif  
 #ifdef ALLOW_OBCSS_CONTROL  
               nwetobcss(bi,bj,k,iobcs) = 0  
 #endif  
 #ifdef ALLOW_OBCSW_CONTROL  
               nwetobcsw(bi,bj,k,iobcs) = 0  
 #endif  
 #ifdef ALLOW_OBCSE_CONTROL  
               nwetobcse(bi,bj,k,iobcs) = 0  
 #endif  
             enddo  
           enddo  
         enddo  
       enddo  
 #endif  
707    
708  c--   Count wet points on each tile.  c----------------------------------------------------------------------
709        do bj = jtlo,jthi  c--
710          do bi = itlo,ithi  #ifdef ALLOW_VVEL0_CONTROL
711            do k = 1,nr          call ctrl_init_ctrlvar (
712              do j = jmin,jmax       &       xx_vvel_file, 28, 128, 1, 1, 1,
713                do i = imin,imax       &       snx, sny, nr, 's', '3d', mythid )
714  c--             Center mask.  #endif /* ALLOW_VVEL0_CONTROL */
                 if (hFacC(i,j,k,bi,bj) .ne. 0.) then  
                   nwetctile(bi,bj,k) = nwetctile(bi,bj,k) + 1  
                 endif  
 c--             South mask.  
                 if (maskS(i,j,k,bi,bj) .eq. 1.) then  
                   nwetstile(bi,bj,k) = nwetstile(bi,bj,k) + 1  
                 endif  
 c--             West mask.  
                 if (maskW(i,j,k,bi,bj) .eq. 1.) then  
                   nwetwtile(bi,bj,k) = nwetwtile(bi,bj,k) + 1  
                 endif  
 #if (defined (ALLOW_EFLUXP0_CONTROL))  
 c--             Vertical mask.  
                 if (hFacV(i,j,k,bi,bj) .ne. 0.) then  
                   nwetvtile(bi,bj,k) = nwetvtile(bi,bj,k) + 1  
                 endif  
 #endif  
               enddo  
             enddo  
           enddo  
         enddo  
       enddo  
715    
716  #ifdef ALLOW_OBCSN_CONTROL  c----------------------------------------------------------------------
717  c--   Count wet points at Northern boundary.  c--
718  c--   mask conventions are adopted from obcs_apply_ts, obcs_apply_uv  #ifdef ALLOW_ETAN0_CONTROL
719        ymaskobcs = 'maskobcsn'          call ctrl_init_ctrlvar (
720        call ctrl_mask_set_xz(       &       xx_etan_file, 29, 129, 1, 1, 1,
721       &                       0, OB_Jn, nwetobcsn, ymaskobcs, mythid       &       snx, sny, 1, 'c', 'xy', mythid )
722       &                     )  #endif /* ALLOW_VVEL0_CONTROL */
 #endif  
723    
724  #ifdef ALLOW_OBCSS_CONTROL  c----------------------------------------------------------------------
725  c--   Count wet points at Northern boundary.  c--
726  c--   mask conventions are adopted from obcs_apply_ts, obcs_apply_uv  #ifdef ALLOW_RELAXSST_CONTROL
727        ymaskobcs = 'maskobcss'          call ctrl_init_ctrlvar (
728        call ctrl_mask_set_xz(       &       xx_relaxsst_file, 30, 130, 1, 1, 1,
729       &                       1, OB_Js, nwetobcss, ymaskobcs, mythid       &       snx, sny, 1, 'c', 'xy', mythid )
730       &                     )  #endif /* ALLOW_RELAXSST_CONTROL */
 #endif  
731    
732  #ifdef ALLOW_OBCSW_CONTROL  c----------------------------------------------------------------------
733  c--   Count wet points at Northern boundary.  c--
734  c--   mask conventions are adopted from obcs_apply_ts, obcs_apply_uv  #ifdef ALLOW_RELAXSSS_CONTROL
735        ymaskobcs = 'maskobcsw'          call ctrl_init_ctrlvar (
736        call ctrl_mask_set_yz(       &       xx_relaxsss_file, 31, 131, 1, 1, 1,
737       &                       1, OB_Iw, nwetobcsw, ymaskobcs, mythid       &       snx, sny, 1, 'c', 'xy', mythid )
738       &                     )  #endif /* ALLOW_RELAXSSS_CONTROL */
 #endif  
739    
740  #ifdef ALLOW_OBCSE_CONTROL  c----------------------------------------------------------------------
741  c--   Count wet points at Northern boundary.  c--
742  c--   mask conventions are adopted from obcs_apply_ts, obcs_apply_uv  #ifdef ALLOW_PRECIP_CONTROL
743        ymaskobcs = 'maskobcse'  c--   Atmos. precipitation
       call ctrl_mask_set_yz(  
      &                       0, OB_Ie, nwetobcse, ymaskobcs, mythid  
      &                     )  
 #endif  
744    
745        _BEGIN_MASTER( mythid )  # ifdef ALLOW_CAL
746  c--   Determine the total number of control variables.          call cal_FullDate( xx_precipstartdate1, xx_precipstartdate2,
747        nvartype   = 0       &                     xx_precipstartdate , mythid )
748        nvarlength = 0          call cal_TimePassed( xx_precipstartdate, modelstartdate,
749        do i = 1,maxcvars       &                       difftime, mythid )
750  c          call cal_ToSeconds ( difftime, diffsecs, mythid )
751           if ( ncvarindex(i) .ne. -1 ) then          if ( xx_precipperiod .EQ. 0 ) then
752              nvartype = nvartype + 1          startrec=1
753              do bj = jtlo,jthi          endrec=12
754                 do bi = itlo,ithi          else
755                    do k = 1,ncvarnrmax(i)          startrec = int((modelstart + startTime - diffsecs)/
756                       if ( ncvargrd(i) .eq. 'c' ) then       &                 xx_precipperiod) + 1
757                          nvarlength = nvarlength +          endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
758       &                       ncvarrecs(i)*nwetctile(bi,bj,k)       &                 xx_precipperiod) + 2
759                       else if ( ncvargrd(i) .eq. 's' ) then          endif
760                          nvarlength = nvarlength +  # else
761       &                       ncvarrecs(i)*nwetstile(bi,bj,k)          startrec = 1
762                       else if ( ncvargrd(i) .eq. 'w' ) then          endrec   = 1
763                          nvarlength = nvarlength +  # endif
764       &                       ncvarrecs(i)*nwetwtile(bi,bj,k)          diffrec  = endrec - startrec + 1
765                       else if ( ncvargrd(i) .eq. 'v' ) then          call ctrl_init_ctrlvar (
766                          nvarlength = nvarlength +       &       xx_precip_file, 32, 132, diffrec, startrec, endrec,
767       &                       ncvarrecs(i)*nwetvtile(bi,bj,k)       &       snx, sny, 1, 'c', 'xy', mythid )
                      else if ( ncvargrd(i) .eq. 'm' ) then  
 #ifdef ALLOW_OBCS_CONTROL  
                         do iobcs = 1, nobcs  
                            if ( i .eq. 11 ) then  
 #ifdef ALLOW_OBCSN_CONTROL  
                               nvarlength = nvarlength +  
      &                             (ncvarrecs(i)/nobcs)  
      &                             *nwetobcsn(bi,bj,k,iobcs)  
 #endif  
                            else if ( i .eq. 12 ) then  
 #ifdef ALLOW_OBCSS_CONTROL  
                               nvarlength = nvarlength +  
      &                             (ncvarrecs(i)/nobcs)  
      &                             *nwetobcss(bi,bj,k,iobcs)  
 #endif  
                            else if ( i .eq. 13 ) then  
 #ifdef ALLOW_OBCSW_CONTROL  
                               nvarlength = nvarlength +  
      &                             (ncvarrecs(i)/nobcs)  
      &                             *nwetobcsw(bi,bj,k,iobcs)  
 #endif  
                            else if ( i .eq. 14 ) then  
 #ifdef ALLOW_OBCSE_CONTROL  
                               nvarlength = nvarlength +  
      &                             (ncvarrecs(i)/nobcs)  
      &                             *nwetobcse(bi,bj,k,iobcs)  
 #endif  
                            end if  
                         enddo  
 #endif  
                      else  
                         print*,'ctrl_init: invalid grid location'  
                         print*,'     control variable = ',ncvarindex(i)  
                         print*,'     grid location    = ',ncvargrd(i)  
                         stop   ' ... stopped in ctrl_init'  
                      endif  
                   enddo  
                enddo  
             enddo  
          endif  
       enddo  
768    
769  cph(  #endif /* ALLOW_PRECIP_CONTROL */
       print *, 'ph-wet 1: nvarlength = ', nvarlength  
       print *, 'ph-wet 2: surface wet C = ', nwetctile(1,1,1)  
       print *, 'ph-wet 3: surface wet W = ', nwetwtile(1,1,1)  
       print *, 'ph-wet 4: surface wet S = ', nwetstile(1,1,1)  
       print *, 'ph-wet 4a:surface wet V = ', nwetvtile(1,1,1)  
       nwetc3d = 0  
       do k = 1, Nr  
          nwetc3d = nwetc3d + nwetctile(1,1,k)  
       end do  
       print *, 'ph-wet 5: 3D wet points = ', nwetc3d  
       do i = 1, maxcvars  
          print *, 'ph-wet 6: no recs for i = ', i, ncvarrecs(i)  
       end do  
       print *, 'ph-wet 7: ',  
      &     2*nwetc3d +  
      &     ncvarrecs(3)*nwetctile(1,1,1) +  
      &     ncvarrecs(4)*nwetctile(1,1,1) +  
      &     ncvarrecs(5)*nwetwtile(1,1,1) +  
      &     ncvarrecs(6)*nwetstile(1,1,1)  
       print *, 'ph-wet 8: ',  
      &     2*nwetc3d +  
      &     ncvarrecs(7)*nwetctile(1,1,1) +  
      &     ncvarrecs(8)*nwetctile(1,1,1) +  
      &     ncvarrecs(9)*nwetwtile(1,1,1) +  
      &     ncvarrecs(10)*nwetstile(1,1,1)  
 #ifdef ALLOW_OBCSN_CONTROL  
       print *, 'ph-wet 9: surface wet obcsn = '  
      &     , nwetobcsn(1,1,1,1), nwetobcsn(1,1,1,2)  
      &     , nwetobcsn(1,1,1,3), nwetobcsn(1,1,1,4)  
 #endif  
 #ifdef ALLOW_OBCSS_CONTROL  
       print *, 'ph-wet 10: surface wet obcss = '  
      &     , nwetobcss(1,1,1,1), nwetobcss(1,1,1,2)  
      &     , nwetobcss(1,1,1,3), nwetobcss(1,1,1,4)  
 #endif  
 #ifdef ALLOW_OBCSW_CONTROL  
       print *, 'ph-wet 11: surface wet obcsw = '  
      &     , nwetobcsw(1,1,1,1), nwetobcsw(1,1,1,2)  
      &     , nwetobcsw(1,1,1,3), nwetobcsw(1,1,1,4)  
 #endif  
 #ifdef ALLOW_OBCSE_CONTROL  
       print *, 'ph-wet 12: surface wet obcse = '  
      &     , nwetobcse(1,1,1,1), nwetobcse(1,1,1,2)  
      &     , nwetobcse(1,1,1,3), nwetobcse(1,1,1,4)  
 #endif  
 cph)  
         
       CALL GLOBAL_SUM_INT( nvarlength,  myThid )  
770    
771        print *, 'ph-wet 13: global nvarlength vor k=', k, nvarlength  c----------------------------------------------------------------------
772    c--
773    #ifdef ALLOW_SWFLUX_CONTROL
774    c--   Atmos. swflux
775    
776  c  # ifdef ALLOW_CAL
777  c     Summation of wet point counters          call cal_FullDate( xx_swfluxstartdate1, xx_swfluxstartdate2,
778  c       &                     xx_swfluxstartdate , mythid )
779        do k = 1, nr          call cal_TimePassed( xx_swfluxstartdate, modelstartdate,
780         &                       difftime, mythid )
781            call cal_ToSeconds ( difftime, diffsecs, mythid )
782            if ( xx_swfluxperiod .EQ. 0 ) then
783            startrec=1
784            endrec=12
785            else
786            startrec = int((modelstart + startTime - diffsecs)/
787         &                 xx_swfluxperiod) + 1
788            endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
789         &                 xx_swfluxperiod) + 2
790            endif
791    # else
792            startrec = 1
793            endrec   = 1
794    # endif
795            diffrec  = endrec - startrec + 1
796            call ctrl_init_ctrlvar (
797         &       xx_swflux_file, 33, 133, diffrec, startrec, endrec,
798         &       snx, sny, 1, 'c', 'xy', mythid )
799    
800           ntmp=0  #endif /* ALLOW_SWFLUX_CONTROL */
          do bj=1,nSy  
             do bi=1,nSx  
                ntmp=ntmp+nWetcTile(bi,bj,k)  
             enddo  
          enddo  
          CALL GLOBAL_SUM_INT( ntmp,  myThid )  
          nWetcGlobal(k)=ntmp  
   
          print *, 'ph-wet 14a: global nWet... vor k=', k, ntmp  
   
          ntmp=0  
          do bj=1,nSy  
             do bi=1,nSx  
                ntmp=ntmp+nWetsTile(bi,bj,k)  
             enddo  
          enddo  
          CALL GLOBAL_SUM_INT( ntmp,  myThid )  
          nWetsGlobal(k)=ntmp  
   
          print *, 'ph-wet 14b: global nWet... vor k=', k, ntmp  
   
          ntmp=0  
          do bj=1,nSy  
             do bi=1,nSx  
                ntmp=ntmp+nWetwTile(bi,bj,k)  
             enddo  
          enddo  
          CALL GLOBAL_SUM_INT( ntmp,  myThid )  
          nWetwGlobal(k)=ntmp  
   
          print *, 'ph-wet 14c: global nWet... vor k=', k, ntmp  
   
          ntmp=0  
          do bj=1,nSy  
             do bi=1,nSx  
                ntmp=ntmp+nWetvTile(bi,bj,k)  
             enddo  
          enddo  
          CALL GLOBAL_SUM_INT( ntmp,  myThid )  
          nWetvGlobal(k)=ntmp  
801    
802           print *, 'ph-wet 14d: global nWet... vor k=', k, ntmp  c----------------------------------------------------------------------
803    c--
804    #ifdef ALLOW_SWDOWN_CONTROL
805    c--   Atmos. swdown
806    
807  #ifdef ALLOW_OBCSN_CONTROL  # ifdef ALLOW_CAL
808           do iobcs = 1, nobcs          call cal_FullDate( xx_swdownstartdate1, xx_swdownstartdate2,
809              ntmp=0       &                     xx_swdownstartdate , mythid )
810              do bj=1,nSy          call cal_TimePassed( xx_swdownstartdate, modelstartdate,
811                 do bi=1,nSx       &                       difftime, mythid )
812                    ntmp=ntmp+nwetobcsn(bi,bj,k,iobcs)          call cal_ToSeconds ( difftime, diffsecs, mythid )
813                 enddo          if ( xx_swdownperiod .EQ. 0 ) then
814              enddo          startrec=1
815              CALL GLOBAL_SUM_INT( ntmp,  myThid )          endrec=12
816              nwetobcsnglo(k,iobcs)=ntmp          else
817           enddo          startrec = int((modelstart + startTime - diffsecs)/
818  #endif       &                 xx_swdownperiod) + 1
819  #ifdef ALLOW_OBCSS_CONTROL          endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
820           do iobcs = 1, nobcs       &                 xx_swdownperiod) + 2
821              ntmp=0          endif
822              do bj=1,nSy  # else
823                 do bi=1,nSx          startrec = 1
824                    ntmp=ntmp+nwetobcss(bi,bj,k,iobcs)          endrec   = 1
825                 enddo  # endif
826              enddo          diffrec  = endrec - startrec + 1
827              CALL GLOBAL_SUM_INT( ntmp,  myThid )          call ctrl_init_ctrlvar (
828              nwetobcssglo(k,iobcs)=ntmp       &       xx_swdown_file, 34, 134, diffrec, startrec, endrec,
829           enddo       &       snx, sny, 1, 'c', 'xy', mythid )
 #endif  
 #ifdef ALLOW_OBCSW_CONTROL  
          do iobcs = 1, nobcs  
             ntmp=0  
             do bj=1,nSy  
                do bi=1,nSx  
                   ntmp=ntmp+nwetobcsw(bi,bj,k,iobcs)  
                enddo  
             enddo  
             CALL GLOBAL_SUM_INT( ntmp,  myThid )  
             nwetobcswglo(k,iobcs)=ntmp  
          enddo  
 #endif  
 #ifdef ALLOW_OBCSE_CONTROL  
          do iobcs = 1, nobcs  
             ntmp=0  
             do bj=1,nSy  
                do bi=1,nSx  
                   ntmp=ntmp+nwetobcse(bi,bj,k,iobcs)  
                enddo  
             enddo  
             CALL GLOBAL_SUM_INT( ntmp,  myThid )  
             nwetobcseglo(k,iobcs)=ntmp  
          enddo  
 #endif  
830    
831        enddo  #endif /* ALLOW_SWDOWN_CONTROL */
832    
833        print*, 'ctrl_init: no. of control variables: ', nvartype  c----------------------------------------------------------------------
834        print*, 'ctrl_init: control vector length:    ', nvarlength  c--
835        _END_MASTER( mythid )  #ifdef ALLOW_LWFLUX_CONTROL
836    c--   Atmos. lwflux
837    
838  c     write masks and weights to files to be read by a master process  # ifdef ALLOW_CAL
839  c          call cal_FullDate( xx_lwfluxstartdate1, xx_lwfluxstartdate2,
840        call active_write_xyz( 'hFacC', hFacC,   1, 0, mythid, dummy)       &                     xx_lwfluxstartdate , mythid )
841        call active_write_xyz( 'maskW', maskW,   1, 0, mythid, dummy)          call cal_TimePassed( xx_lwfluxstartdate, modelstartdate,
842        call active_write_xyz( 'maskS', maskS,   1, 0, mythid, dummy)       &                       difftime, mythid )
843  #if (defined (ALLOW_EFLUXP0_CONTROL))          call cal_ToSeconds ( difftime, diffsecs, mythid )
844        call active_write_xyz( 'hFacV', hFacV,   1, 0, mythid, dummy)          if ( xx_lwfluxperiod .EQ. 0 ) then
845  #endif          startrec=1
846            endrec=12
847            else
848            startrec = int((modelstart + startTime - diffsecs)/
849         &                 xx_lwfluxperiod) + 1
850            endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
851         &                 xx_lwfluxperiod) + 2
852            endif
853    # else
854            startrec = 1
855            endrec   = 1
856    # endif
857            diffrec  = endrec - startrec + 1
858            call ctrl_init_ctrlvar (
859         &       xx_lwflux_file, 35, 135, diffrec, startrec, endrec,
860         &       snx, sny, 1, 'c', 'xy', mythid )
861    
862  c--   Summarize the control vector's setup.  #endif /* ALLOW_LWFLUX_CONTROL */
       _BEGIN_MASTER( mythid )  
 cph        call ctrl_Summary( mythid )  
       _END_MASTER( mythid )  
863    
864        _BARRIER  c----------------------------------------------------------------------
865    c--
866    #ifdef ALLOW_LWDOWN_CONTROL
867    c--   Atmos. lwdown
868    
869    # ifdef ALLOW_CAL
870            call cal_FullDate( xx_lwdownstartdate1, xx_lwdownstartdate2,
871         &                     xx_lwdownstartdate , mythid )
872            call cal_TimePassed( xx_lwdownstartdate, modelstartdate,
873         &                       difftime, mythid )
874            call cal_ToSeconds ( difftime, diffsecs, mythid )
875            if ( xx_lwdownperiod .EQ. 0 ) then
876            startrec=1
877            endrec=12
878            else
879            startrec = int((modelstart + startTime - diffsecs)/
880         &                 xx_lwdownperiod) + 1
881            endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
882         &                 xx_lwdownperiod) + 2
883            endif
884    # else
885            startrec = 1
886            endrec   = 1
887    # endif
888            diffrec  = endrec - startrec + 1
889            call ctrl_init_ctrlvar (
890         &       xx_lwdown_file, 36, 136, diffrec, startrec, endrec,
891         &       snx, sny, 1, 'c', 'xy', mythid )
892    
893    #endif /* ALLOW_LWDOWN_CONTROL */
894    
895    c----------------------------------------------------------------------
896    c--
897    #ifdef ALLOW_EVAP_CONTROL
898    c--   Atmos. evap
899    
900    # ifdef ALLOW_CAL
901            call cal_FullDate( xx_evapstartdate1, xx_evapstartdate2,
902         &                     xx_evapstartdate , mythid )
903            call cal_TimePassed( xx_evapstartdate, modelstartdate,
904         &                       difftime, mythid )
905            call cal_ToSeconds ( difftime, diffsecs, mythid )
906            if ( xx_evapperiod .EQ. 0 ) then
907            startrec=1
908            endrec=12
909            else
910            startrec = int((modelstart + startTime - diffsecs)/
911         &                 xx_evapperiod) + 1
912            endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
913         &                 xx_evapperiod) + 2
914            endif
915    # else
916            startrec = 1
917            endrec   = 1
918    # endif
919            diffrec  = endrec - startrec + 1
920            call ctrl_init_ctrlvar (
921         &       xx_evap_file, 37, 137, diffrec, startrec, endrec,
922         &       snx, sny, 1, 'c', 'xy', mythid )
923    
924    #endif /* ALLOW_EVAP_CONTROL */
925    
926    c----------------------------------------------------------------------
927    c--
928    #ifdef ALLOW_SNOWPRECIP_CONTROL
929    c--   Atmos. snowprecip
930    
931    # ifdef ALLOW_CAL
932            call cal_FullDate( xx_snowprecipstartdate1,
933         &      xx_snowprecipstartdate2, xx_snowprecipstartdate , mythid )
934            call cal_TimePassed( xx_snowprecipstartdate, modelstartdate,
935         &                       difftime, mythid )
936            call cal_ToSeconds ( difftime, diffsecs, mythid )
937            if ( xx_snowprecipperiod .EQ. 0 ) then
938            startrec=1
939            endrec=12
940            else
941            startrec = int((modelstart + startTime - diffsecs)/
942         &                 xx_snowprecipperiod) + 1
943            endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
944         &                 xx_snowprecipperiod) + 2
945            endif
946    # else
947            startrec = 1
948            endrec   = 1
949    # endif
950            diffrec  = endrec - startrec + 1
951            call ctrl_init_ctrlvar (
952         &       xx_snowprecip_file, 38, 138, diffrec, startrec, endrec,
953         &       snx, sny, 1, 'c', 'xy', mythid )
954    
955    #endif /* ALLOW_SNOWPRECIP_CONTROL */
956    
957    c----------------------------------------------------------------------
958    c--
959    #ifdef ALLOW_APRESSURE_CONTROL
960    c--   Atmos. apressure
961    
962    # ifdef ALLOW_CAL
963            call cal_FullDate( xx_apressurestartdate1,
964         &      xx_apressurestartdate2, xx_apressurestartdate , mythid )
965            call cal_TimePassed( xx_apressurestartdate, modelstartdate,
966         &                       difftime, mythid )
967            call cal_ToSeconds ( difftime, diffsecs, mythid )
968            if ( xx_apressureperiod .EQ. 0 ) then
969            startrec=1
970            endrec=12
971            else
972            startrec = int((modelstart + startTime - diffsecs)/
973         &                 xx_apressureperiod) + 1
974            endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
975         &                 xx_apressureperiod) + 2
976            endif
977    # else
978            startrec = 1
979            endrec   = 1
980    # endif
981            diffrec  = endrec - startrec + 1
982            call ctrl_init_ctrlvar (
983         &       xx_apressure_file, 39, 139, diffrec, startrec, endrec,
984         &       snx, sny, 1, 'c', 'xy', mythid )
985    
986    #endif /* ALLOW_APRESSURE_CONTROL */
987    
988    c----------------------------------------------------------------------
989    c--
990    #ifdef ALLOW_RUNOFF_CONTROL
991    c--   Atmos. runoff
992            startrec = 1
993            endrec   = 1
994            diffrec  = endrec - startrec + 1
995            call ctrl_init_ctrlvar (
996         &       xx_runoff_file, 40, 140, diffrec, startrec, endrec,
997         &       snx, sny, 1, 'c', 'xy', mythid )
998    #endif /* ALLOW_RUNOFF_CONTROL */
999    
1000    c----------------------------------------------------------------------
1001    c--
1002    #ifdef ALLOW_SIAREA_CONTROL
1003            startrec = 1
1004            endrec   = 1
1005            diffrec  = endrec - startrec + 1
1006            call ctrl_init_ctrlvar (
1007         &       xx_siarea_file, 41, 141, diffrec, startrec, endrec,
1008         &       snx, sny, 1, 'c', 'xy', mythid )
1009    #endif /* ALLOW_siarea_CONTROL */
1010    
1011    c----------------------------------------------------------------------
1012    c--
1013    #ifdef ALLOW_SIHEFF_CONTROL
1014            startrec = 1
1015            endrec   = 1
1016            diffrec  = endrec - startrec + 1
1017            call ctrl_init_ctrlvar (
1018         &       xx_siheff_file, 42, 142, diffrec, startrec, endrec,
1019         &       snx, sny, 1, 'c', 'xy', mythid )
1020    #endif /* ALLOW_siheff_CONTROL */
1021    
1022    c----------------------------------------------------------------------
1023    c--
1024    #ifdef ALLOW_SIHSNOW_CONTROL
1025            startrec = 1
1026            endrec   = 1
1027            diffrec  = endrec - startrec + 1
1028            call ctrl_init_ctrlvar (
1029         &       xx_sihsnow_file, 43, 143, diffrec, startrec, endrec,
1030         &       snx, sny, 1, 'c', 'xy', mythid )
1031    #endif /* ALLOW_sihsnow_CONTROL */
1032    
1033    
1034    c----------------------------------------------------------------------
1035    c--
1036    #ifdef ALLOW_KAPREDI_CONTROL
1037            call ctrl_init_ctrlvar (
1038         &       xx_kapredi_file, 44, 144, 1, 1, 1,
1039         &       snx, sny, nr, 'c', '3d', mythid )
1040    #endif /* ALLOW_KAPREDI_CONTROL */
1041    
1042    c----------------------------------------------------------------------
1043    c----------------------------------------------------------------------
1044    
1045            call ctrl_init_wet( mythid )
1046    
1047    c----------------------------------------------------------------------
1048    c----------------------------------------------------------------------
1049    
1050          do bj = jtlo,jthi
1051            do bi = itlo,ithi
1052              do j = jmin,jmax
1053                do i = imin,imax
1054                  wareaunit (i,j,bi,bj) = 1.0
1055    #ifndef ALLOW_ECCO
1056                  whflux    (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1057                  wsflux    (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1058                  wtauu     (i,j,bi,bj) = maskW(i,j,1,bi,bj)
1059                  wtauv     (i,j,bi,bj) = maskS(i,j,1,bi,bj)
1060                  watemp    (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1061                  waqh      (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1062                  wprecip   (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1063                  wswflux   (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1064                  wswdown   (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1065                  wuwind    (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1066                  wvwind    (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1067                  wlwflux   (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1068                  wlwdown   (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1069                  wevap     (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1070                  wsnowprecip(i,j,bi,bj) = maskC(i,j,1,bi,bj)
1071                  wapressure(i,j,bi,bj) = maskC(i,j,1,bi,bj)
1072                  wrunoff   (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1073                  wsst      (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1074                  wsss      (i,j,bi,bj) = maskC(i,j,1,bi,bj)
1075    #endif
1076                enddo
1077              enddo
1078            enddo
1079          enddo
1080    
1081        return        return
1082        end        end
1083    

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.31

  ViewVC Help
Powered by ViewVC 1.1.22