/[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.31 by heimbach, Fri May 29 06:12:05 2009 UTC revision 1.38 by mmazloff, Wed Apr 20 19:13:40 2011 UTC
# Line 75  c     == global variables == Line 75  c     == global variables ==
75  #ifdef ALLOW_OBCS_CONTROL  #ifdef ALLOW_OBCS_CONTROL
76  # include "OBCS.h"  # include "OBCS.h"
77  #endif  #endif
78    #ifdef ALLOW_DIC_CONTROL
79    # include "DIC_CTRL.h"
80    #endif
81    
82  c     == routine arguments ==  c     == routine arguments ==
83    
# Line 83  c     == routine arguments == Line 86  c     == routine arguments ==
86  c     == local variables ==  c     == local variables ==
87    
88        integer bi,bj        integer bi,bj
89        integer i,j,k        integer i,j
90        integer itlo,ithi        integer itlo,ithi
91        integer jtlo,jthi        integer jtlo,jthi
92        integer jmin,jmax        integer jmin,jmax
93        integer imin,imax        integer imin,imax
94    
       integer ntmp  
95        integer ivar        integer ivar
       integer iobcs  
       integer il  
       integer errio  
96        integer startrec        integer startrec
97        integer endrec        integer endrec
98        integer diffrec        integer diffrec
       integer difftime(4)  
       _RL     diffsecs  
99    
100        character*(max_len_prec) record  #ifdef ALLOW_OBCS_CONTROL_MODES
101        character*(max_len_mbuf) msgbuf        INTEGER  k,length_of_rec,dUnit
102        character*2 whichxyz        INTEGER  MDS_RECLEN
103          EXTERNAL MDS_RECLEN
104    #endif
105    
106  c     == external ==  c     == external ==
107    
# Line 122  c     == end of interface == Line 121  c     == end of interface ==
121    
122  c--     Set default values.  c--     Set default values.
123        do ivar = 1,maxcvars        do ivar = 1,maxcvars
124           ncvarindex(ivar) = -1         ncvarindex(ivar) = -1
125           ncvarrecs(ivar)  =  0         ncvarrecs(ivar)  =  0
126           ncvarxmax(ivar)  =  0         ncvarxmax(ivar)  =  0
127           ncvarymax(ivar)  =  0         ncvarymax(ivar)  =  0
128           ncvarnrmax(ivar) =  0         ncvarnrmax(ivar) =  0
129           ncvargrd(ivar)   = '?'         ncvargrd(ivar)   = '?'
130        enddo        enddo
131    
132        _BARRIER        _BARRIER
# Line 148  cph    index 23             for bottom d Line 147  cph    index 23             for bottom d
147  cph    index 24  cph    index 24
148  cph    index 25-26          for edtaux, edtauy  cph    index 25-26          for edtaux, edtauy
149  cph    index 27-29          for uvel0, vvel0, etan0  cph    index 27-29          for uvel0, vvel0, etan0
150  cph    index 30-31          for relax. SST, SSS  cph    index 30-31          for generic 2d, 3d field
151  cph    index 32    reserved for precip (atmos. state)  cph    index 32    reserved for precip (atmos. state)
152  cph    index 33    reserved for swflux (atmos. state)  cph    index 33    reserved for swflux (atmos. state)
153  cph    index 34    reserved for swdown (atmos. state)  cph    index 34    reserved for swdown (atmos. state)
# Line 189  c--------------------------------------- Line 188  c---------------------------------------
188  c--  c--
189  #if (defined (ALLOW_HFLUX_CONTROL))  #if (defined (ALLOW_HFLUX_CONTROL))
190  c--   Heat flux.  c--   Heat flux.
191          call ctrl_init_rec (
192  # ifdef ALLOW_CAL       I     xx_hfluxstartdate1, xx_hfluxstartdate2, xx_hfluxperiod, 1,
193          call cal_FullDate( xx_hfluxstartdate1, xx_hfluxstartdate2,       O     xx_hfluxstartdate, diffrec, startrec, endrec,
194       &                     xx_hfluxstartdate , mythid )       I     mythid )
195          call cal_TimePassed( xx_hfluxstartdate, modelstartdate,        call ctrl_init_ctrlvar (
196       &                       difftime, mythid )       &     xx_hflux_file, 3, 103, diffrec, startrec, endrec,
197          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
         if ( xx_hfluxperiod .EQ. 0 ) then  
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_hfluxperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_hfluxperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_hflux_file, 3, 103, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
198    
199  #elif (defined (ALLOW_ATEMP_CONTROL))  #elif (defined (ALLOW_ATEMP_CONTROL))
200  c--   Atmos. temperature  c--   Atmos. temperature
201          call ctrl_init_rec (
202  # ifdef ALLOW_CAL       I     xx_atempstartdate1, xx_atempstartdate2, xx_atempperiod, 1,
203          call cal_FullDate( xx_atempstartdate1, xx_atempstartdate2,       O     xx_atempstartdate, diffrec, startrec, endrec,
204       &                     xx_atempstartdate , mythid )       I     mythid )
205          call cal_TimePassed( xx_atempstartdate, modelstartdate,        call ctrl_init_ctrlvar (
206       &                       difftime, mythid )       &     xx_atemp_file, 7, 107, diffrec, startrec, endrec,
207          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
208          if ( xx_atempperiod .EQ. 0 ) then        
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_atempperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_atempperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_atemp_file, 7, 107, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
   
209  #elif (defined (ALLOW_HFLUX0_CONTROL))  #elif (defined (ALLOW_HFLUX0_CONTROL))
210  c--   initial forcing only  c--   initial forcing only
211          call ctrl_init_ctrlvar (        call ctrl_init_ctrlvar (
212       &       xx_hflux_file, 3, 103, 1, 1, 1,       &     xx_hflux_file, 3, 103, 1, 1, 1,
213       &       snx, sny, 1, 'c', 'xy', mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
214    
215  #endif /* ALLOW_HFLUX_CONTROL */  #endif /* ALLOW_HFLUX_CONTROL */
216    
# Line 253  c--------------------------------------- Line 218  c---------------------------------------
218  c--  c--
219  #if (defined (ALLOW_SFLUX_CONTROL))  #if (defined (ALLOW_SFLUX_CONTROL))
220  c--   Salt flux.  c--   Salt flux.
221          call ctrl_init_rec (
222  # ifdef ALLOW_CAL       I     xx_sfluxstartdate1, xx_sfluxstartdate2, xx_sfluxperiod, 1,
223          call cal_FullDate( xx_sfluxstartdate1, xx_sfluxstartdate2,       O     xx_sfluxstartdate, diffrec, startrec, endrec,
224       &                     xx_sfluxstartdate , mythid )       I     mythid )
225          call cal_TimePassed( xx_sfluxstartdate, modelstartdate,        call ctrl_init_ctrlvar (
226       &                       difftime, mythid )       &     xx_sflux_file, 4, 104, diffrec, startrec, endrec,
227          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
         if ( xx_sfluxperiod .EQ. 0 ) then  
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_sfluxperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_sfluxperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_sflux_file, 4, 104, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
228    
229  #elif (defined (ALLOW_AQH_CONTROL))  #elif (defined (ALLOW_AQH_CONTROL))
230  c--   Atmos. humidity  c--   Atmos. humidity
231          call ctrl_init_rec (
232  # ifdef ALLOW_CAL       I     xx_aqhstartdate1, xx_aqhstartdate2, xx_aqhperiod, 1,
233          call cal_FullDate( xx_aqhstartdate1, xx_aqhstartdate2,       O     xx_aqhstartdate, diffrec, startrec, endrec,
234       &                     xx_aqhstartdate , mythid )       I     mythid )
235          call cal_TimePassed( xx_aqhstartdate, modelstartdate,        call ctrl_init_ctrlvar (
236       &                       difftime, mythid )       &     xx_aqh_file, 8, 108, diffrec, startrec, endrec,
237          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
         if ( xx_aqhperiod .EQ. 0 ) then  
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_aqhperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_aqhperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_aqh_file, 8, 108, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
238    
239  #elif (defined (ALLOW_SFLUX0_CONTROL))  #elif (defined (ALLOW_SFLUX0_CONTROL))
240  c--   initial forcing only  c--   initial forcing only
241          call ctrl_init_ctrlvar (        call ctrl_init_ctrlvar (
242       &       xx_sflux_file, 4, 104, 1, 1, 1,       &     xx_sflux_file, 4, 104, 1, 1, 1,
243       &       snx, sny, 1, 'c', 'xy', mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
244    
245  #endif /* ALLOW_SFLUX_CONTROL */  #endif /* ALLOW_SFLUX_CONTROL */
246    
# Line 317  c--------------------------------------- Line 248  c---------------------------------------
248  c--  c--
249  #if (defined (ALLOW_USTRESS_CONTROL))  #if (defined (ALLOW_USTRESS_CONTROL))
250  c--   Zonal wind stress.  c--   Zonal wind stress.
251          call ctrl_init_rec (
252  # ifdef ALLOW_CAL       I     xx_tauustartdate1, xx_tauustartdate2, xx_tauuperiod, 1,
253          call cal_FullDate( xx_tauustartdate1,  xx_tauustartdate2,       O     xx_tauustartdate, diffrec, startrec, endrec,
254       &                     xx_tauustartdate,   mythid )       I     mythid )
255          call cal_TimePassed( xx_tauustartdate, modelstartdate,        call ctrl_init_ctrlvar (
256       &                       difftime, mythid )       &     xx_tauu_file, 5, 105, diffrec, startrec, endrec,
257          call cal_ToSeconds ( difftime, diffsecs, mythid )  #ifndef ALLOW_ROTATE_UV_CONTROLS
258          if ( xx_tauuperiod .EQ. 0 ) then       &     snx, sny, 1, 'w', 'xy', mythid )
259          startrec=1  #else
260          endrec=12       &     snx, sny, 1, 'c', 'xy', mythid )
261          else  #endif
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_tauuperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_tauuperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_tauu_file, 5, 105, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'w', 'xy', mythid )  
262    
263  #elif (defined (ALLOW_UWIND_CONTROL))  #elif (defined (ALLOW_UWIND_CONTROL))
264  c--   Zonal wind speed.  c--   Zonal wind speed.
265          call ctrl_init_rec (
266  # ifdef ALLOW_CAL       I     xx_uwindstartdate1, xx_uwindstartdate2, xx_uwindperiod, 1,
267          call cal_FullDate( xx_uwindstartdate1, xx_uwindstartdate2,       O     xx_uwindstartdate, diffrec, startrec, endrec,
268       &                     xx_uwindstartdate , mythid )       I     mythid )
269          call cal_TimePassed( xx_uwindstartdate, modelstartdate,        call ctrl_init_ctrlvar (
270       &                       difftime, mythid )       &     xx_uwind_file, 9, 109, diffrec, startrec, endrec,
271          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
         if ( xx_uwindperiod .EQ. 0 ) then  
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_uwindperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_uwindperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_uwind_file, 9, 109, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
272    
273  #elif (defined (ALLOW_TAUU0_CONTROL))  #elif (defined (ALLOW_TAUU0_CONTROL))
274  c--   initial forcing only  c--   initial forcing only
275          call ctrl_init_ctrlvar (        call ctrl_init_ctrlvar (
276       &       xx_tauu_file, 5, 105, 1, 1, 1,       &     xx_tauu_file, 5, 105, 1, 1, 1,
277       &       snx, sny, 1, 'w', 'xy', mythid )       &     snx, sny, 1, 'w', 'xy', mythid )
278    
279  #endif /* ALLOW_USTRESS_CONTROL */  #endif /* ALLOW_USTRESS_CONTROL */
280    
# Line 381  c--------------------------------------- Line 282  c---------------------------------------
282  c--  c--
283  #if (defined (ALLOW_VSTRESS_CONTROL))  #if (defined (ALLOW_VSTRESS_CONTROL))
284  c--   Meridional wind stress.  c--   Meridional wind stress.
285          call ctrl_init_rec (
286  # ifdef ALLOW_CAL       I     xx_tauvstartdate1, xx_tauvstartdate2, xx_tauvperiod, 1,
287          call cal_FullDate( xx_tauvstartdate1,  xx_tauvstartdate2,       O     xx_tauvstartdate, diffrec, startrec, endrec,
288       &                     xx_tauvstartdate,   mythid )       I     mythid )
289          call cal_TimePassed( xx_tauvstartdate, modelstartdate,        call ctrl_init_ctrlvar (
290       &                       difftime, mythid )       &     xx_tauv_file, 6, 106, diffrec, startrec, endrec,
291          call cal_ToSeconds ( difftime, diffsecs, mythid )  #ifndef ALLOW_ROTATE_UV_CONTROLS
292          if ( xx_tauvperiod .EQ. 0 ) then       &     snx, sny, 1, 's', 'xy', mythid )
293          startrec=1  #else    
294          endrec=12       &     snx, sny, 1, 'c', 'xy', mythid )
295          else  #endif
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_tauvperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_tauvperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_tauv_file, 6, 106, diffrec, startrec, endrec,  
      &       snx, sny, 1, 's', 'xy', mythid )  
296    
297  #elif (defined (ALLOW_VWIND_CONTROL))  #elif (defined (ALLOW_VWIND_CONTROL))
298  c--   Meridional wind speed.  c--   Meridional wind speed.
299          call ctrl_init_rec (
300  # ifdef ALLOW_CAL       I     xx_vwindstartdate1, xx_vwindstartdate2, xx_vwindperiod, 1,
301          call cal_FullDate( xx_vwindstartdate1, xx_vwindstartdate2,       O     xx_vwindstartdate, diffrec, startrec, endrec,
302       &                     xx_vwindstartdate , mythid )       I     mythid )
303          call cal_TimePassed( xx_vwindstartdate, modelstartdate,        call ctrl_init_ctrlvar (
304       &                       difftime, mythid )       &     xx_vwind_file, 10, 110, diffrec, startrec, endrec,
305          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
         if ( xx_vwindperiod .EQ. 0 ) then  
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_vwindperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_vwindperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_vwind_file, 10, 110, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
306    
307  #elif (defined (ALLOW_TAUV0_CONTROL))  #elif (defined (ALLOW_TAUV0_CONTROL))
308  c--   initial forcing only  c--   initial forcing only
309          call ctrl_init_ctrlvar (        call ctrl_init_ctrlvar (
310       &       xx_tauv_file, 6, 106, 1, 1, 1,       &     xx_tauv_file, 6, 106, 1, 1, 1,
311       &       snx, sny, 1, 's', 'xy', mythid )       &     snx, sny, 1, 's', 'xy', mythid )
312    
313  #endif /* ALLOW_VSTRESS_CONTROL */  #endif /* ALLOW_VSTRESS_CONTROL */
314    
# Line 449  c--------------------------------------- Line 320  c---------------------------------------
320  c--  c--
321  #ifdef ALLOW_OBCSN_CONTROL  #ifdef ALLOW_OBCSN_CONTROL
322  c--   Northern obc.  c--   Northern obc.
323          call ctrl_init_rec (
324  # ifdef ALLOW_CAL       I     xx_obcsnstartdate1, xx_obcsnstartdate2, xx_obcsnperiod, 4,
325          call cal_FullDate( xx_obcsnstartdate1,  xx_obcsnstartdate2,       O     xx_obcsnstartdate, diffrec, startrec, endrec,
326       &                     xx_obcsnstartdate,   mythid )       I     mythid )
327          call cal_TimePassed( xx_obcsnstartdate, modelstartdate,        call ctrl_init_ctrlvar (
328       &                       difftime, mythid )       &     xx_obcsn_file, 11, 111, diffrec, startrec, endrec,
329          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, 1, nr, 'm', 'xz', mythid )
         startrec = int((modelstart - diffsecs)/xx_obcsnperiod) + 1  
         startrec = (startrec - 1)*nobcs + 1  
         endrec   = int((modelend   - diffsecs)/xx_obcsnperiod) + 2  
         endrec   = (endrec - startrec + 1)*nobcs  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec  
         call ctrl_init_ctrlvar (  
      &       xx_obcsn_file, 11, 111, diffrec, startrec, endrec,  
      &       snx, 1, nr, 'm', 'xz', mythid )  
   
330  #endif /* ALLOW_OBCSN_CONTROL */  #endif /* ALLOW_OBCSN_CONTROL */
331    
332  c----------------------------------------------------------------------  c----------------------------------------------------------------------
333  c--  c--
334  #ifdef ALLOW_OBCSS_CONTROL  #ifdef ALLOW_OBCSS_CONTROL
335  c--   Southern obc.  c--   Southern obc.
336          call ctrl_init_rec (
337  # ifdef ALLOW_CAL       I     xx_obcssstartdate1, xx_obcssstartdate2, xx_obcssperiod, 4,
338          call cal_FullDate( xx_obcssstartdate1,  xx_obcssstartdate2,       O     xx_obcssstartdate, diffrec, startrec, endrec,
339       &                     xx_obcssstartdate,   mythid )       I     mythid )
340          call cal_TimePassed( xx_obcssstartdate, modelstartdate,        call ctrl_init_ctrlvar (
341       &                       difftime, mythid )       &     xx_obcss_file, 12, 112, diffrec, startrec, endrec,
342          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, 1, nr, 'm', 'xz', mythid )
         startrec = int((modelstart - diffsecs)/xx_obcssperiod) + 1  
         startrec = (startrec - 1)*nobcs + 1  
         endrec   = int((modelend   - diffsecs)/xx_obcssperiod) + 2  
         endrec   = (endrec - startrec + 1)*nobcs  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec  
         call ctrl_init_ctrlvar (  
      &       xx_obcss_file, 12, 112, diffrec, startrec, endrec,  
      &       snx, 1, nr, 'm', 'xz', mythid )  
   
343  #endif /* ALLOW_OBCSS_CONTROL */  #endif /* ALLOW_OBCSS_CONTROL */
344    
345  c----------------------------------------------------------------------  c----------------------------------------------------------------------
346  c--  c--
347  #ifdef ALLOW_OBCSW_CONTROL  #ifdef ALLOW_OBCSW_CONTROL
348  c--   Western obc.  c--   Western obc.
349          call ctrl_init_rec (
350  # ifdef ALLOW_CAL       I     xx_obcswstartdate1, xx_obcswstartdate2, xx_obcswperiod, 4,
351          call cal_FullDate( xx_obcswstartdate1,  xx_obcswstartdate2,       O     xx_obcswstartdate, diffrec, startrec, endrec,
352       &                     xx_obcswstartdate,   mythid )       I     mythid )
353          call cal_TimePassed( xx_obcswstartdate, modelstartdate,        call ctrl_init_ctrlvar (
354       &                       difftime, mythid )       &     xx_obcsw_file, 13, 113, diffrec, startrec, endrec,
355          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     1, sny, nr, 'm', 'yz', mythid )
         startrec = int((modelstart - diffsecs)/xx_obcswperiod) + 1  
         startrec = (startrec - 1)*nobcs + 1  
         endrec   = int((modelend   - diffsecs)/xx_obcswperiod) + 2  
         endrec   = (endrec - startrec + 1)*nobcs  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec  
         call ctrl_init_ctrlvar (  
      &       xx_obcsw_file, 13, 113, diffrec, startrec, endrec,  
      &       1, sny, nr, 'm', 'yz', mythid )  
   
356  #endif  /* ALLOW_OBCSW_CONTROL */  #endif  /* ALLOW_OBCSW_CONTROL */
357    
358  c----------------------------------------------------------------------  c----------------------------------------------------------------------
359  c--  c--
360  #ifdef ALLOW_OBCSE_CONTROL  #ifdef ALLOW_OBCSE_CONTROL
361  c--   Eastern obc.  c--   Eastern obc.
362          call ctrl_init_rec (
363  # ifdef ALLOW_CAL       I     xx_obcsestartdate1, xx_obcsestartdate2, xx_obcseperiod, 4,
364          call cal_FullDate( xx_obcsestartdate1,  xx_obcsestartdate2,       O     xx_obcsestartdate, diffrec, startrec, endrec,
365       &                     xx_obcsestartdate,   mythid )       I     mythid )
366          call cal_TimePassed( xx_obcsestartdate, modelstartdate,        call ctrl_init_ctrlvar (
367       &                       difftime, mythid )       &     xx_obcse_file, 14, 114, diffrec, startrec, endrec,
368          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     1, sny, nr, 'm', 'yz', mythid )
         startrec = int((modelstart - diffsecs)/xx_obcseperiod) + 1  
         startrec = (startrec - 1)*nobcs + 1  
         endrec   = int((modelend   - diffsecs)/xx_obcseperiod) + 2  
         endrec   = (endrec - startrec + 1)*nobcs  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec  
         call ctrl_init_ctrlvar (  
      &       xx_obcse_file, 14, 114, diffrec, startrec, endrec,  
      &       1, sny, nr, 'm', 'yz', mythid )  
   
369  #endif /* ALLOW_OBCSE_CONTROL */  #endif /* ALLOW_OBCSE_CONTROL */
370    
371  c----------------------------------------------------------------------  c----------------------------------------------------------------------
372  c--  c--
373    #ifdef ALLOW_OBCS_CONTROL_MODES
374    cih  Get matrices for reconstruction from barotropic-barclinic modes
375    CMM  To use modes now hardcoded with ECCO_CPPOPTION.  Would be good to have
376    c     run-time option and also define filename=baro_invmodes.bin
377            CALL MDSFINDUNIT( dUnit, myThid )
378            length_of_rec = MDS_RECLEN( 64, NR*NR, myThid )
379            open(dUnit, file='baro_invmodes.bin', status='old',
380         &         access='direct', recl=length_of_rec )
381            do j = 1,Nr
382               read(dUnit,rec=j) ((modesv(k,i,j), k=1,Nr), i=1,Nr)
383            end do
384            CLOSE( dUnit )
385    CMM  double precision modesv is size [NR,NR,NR]
386    c     dim one is z-space    
387    c     dim two is mode space
388    c     dim three is the total depth for which this set of modes applies
389    c     so for example modesv(:,2,nr) will be the second mode
390    c     in z-space for the full model depth
391    c    The modes are to be orthogonal when weighted by dz.  
392    c     i.e. if f_i(z) = mode i, sum_j(f_i(z_j)*f_j(z_j)*dz_j = delta_ij
393    c    first mode should also be constant in depth...barotropic
394    c    For a matlab code example how to construct the orthonormal modes,
395    c     which are ideally the solution of planetary vertical mode equation
396    c     using model mean dRho/dz, see
397    c     MITgcm/verification/obcs_ctrl/input/gendata.m
398    c    This code is compatible with partial cells
399    #endif
400    
401    c----------------------------------------------------------------------
402    c--
403  #ifdef ALLOW_DIFFKR_CONTROL  #ifdef ALLOW_DIFFKR_CONTROL
404          call ctrl_init_ctrlvar (        call ctrl_init_ctrlvar (
405       &       xx_diffkr_file, 15, 115, 1, 1, 1,       &     xx_diffkr_file, 15, 115, 1, 1, 1,
406       &       snx, sny, nr, 'c', '3d', mythid )       &     snx, sny, nr, 'c', '3d', mythid )
407  #endif /* ALLOW_DIFFKR_CONTROL */  #endif /* ALLOW_DIFFKR_CONTROL */
408    
409  c----------------------------------------------------------------------  c----------------------------------------------------------------------
410  c--  c--
411  #ifdef ALLOW_KAPGM_CONTROL  #ifdef ALLOW_KAPGM_CONTROL
412          call ctrl_init_ctrlvar (        call ctrl_init_ctrlvar (
413       &       xx_kapgm_file, 16, 116, 1, 1, 1,       &     xx_kapgm_file, 16, 116, 1, 1, 1,
414       &       snx, sny, nr, 'c', '3d', mythid )       &     snx, sny, nr, 'c', '3d', mythid )
415  #endif /* ALLOW_KAPGM_CONTROL */  #endif /* ALLOW_KAPGM_CONTROL */
416    
417  c----------------------------------------------------------------------  c----------------------------------------------------------------------
418  c--  c--
419  #ifdef ALLOW_TR10_CONTROL  #ifdef ALLOW_TR10_CONTROL
420          call ctrl_init_ctrlvar (        call ctrl_init_ctrlvar (
421       &       xx_tr1_file, 17, 117, 1, 1, 1,       &     xx_tr1_file, 17, 117, 1, 1, 1,
422       &       snx, sny, nr, 'c', '3d', mythid )       &     snx, sny, nr, 'c', '3d', mythid )
423  #endif /* ALLOW_TR10_CONTROL */  #endif /* ALLOW_TR10_CONTROL */
424    
425  c----------------------------------------------------------------------  c----------------------------------------------------------------------
426  c--  c--
427  #if (defined (ALLOW_SST_CONTROL))  #if (defined (ALLOW_SST_CONTROL))
428          call ctrl_init_rec (
429  # ifdef ALLOW_CAL       I     xx_sststartdate1, xx_sststartdate2, xx_sstperiod, 1,
430          call cal_FullDate( xx_sststartdate1, xx_sststartdate2,       O     xx_sststartdate, diffrec, startrec, endrec,
431       &                     xx_sststartdate , mythid )       I     mythid )
432          call cal_TimePassed( xx_sststartdate, modelstartdate,        call ctrl_init_ctrlvar (
433       &                       difftime, mythid )       &     xx_sst_file, 18, 118, diffrec, startrec, endrec,
434          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
         if ( xx_sstperiod .EQ. 0 ) then  
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_sstperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_sstperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_sst_file, 18, 118, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
435    
436  #elif (defined (ALLOW_SST0_CONTROL))  #elif (defined (ALLOW_SST0_CONTROL))
437          call ctrl_init_ctrlvar (
438          call ctrl_init_ctrlvar (       &     xx_sst_file, 18, 118, 1, 1, 1,
439       &       xx_sst_file, 18, 118, 1, 1, 1,       &     snx, sny, 1, 'c', 'xy', mythid )
      &       snx, sny, 1, 'c', 'xy', mythid )  
440    
441  #endif /* ALLOW_SST_CONTROL */  #endif /* ALLOW_SST_CONTROL */
442    
443  c----------------------------------------------------------------------  c----------------------------------------------------------------------
444  c--  c--
445  #if (defined (ALLOW_SSS_CONTROL))  #if (defined (ALLOW_SSS_CONTROL))
446          call ctrl_init_rec (
447  # ifdef ALLOW_CAL       I     xx_sssstartdate1, xx_sssstartdate2, xx_sssperiod, 1,
448          call cal_FullDate( xx_sssstartdate1, xx_sssstartdate2,       O     xx_sssstartdate, diffrec, startrec, endrec,
449       &                     xx_sssstartdate , mythid )       I     mythid )
450          call cal_TimePassed( xx_sssstartdate, modelstartdate,        call ctrl_init_ctrlvar (
451       &                       difftime, mythid )       &     xx_sss_file, 19, 119, diffrec, startrec, endrec,
452          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
         if ( xx_sssperiod .EQ. 0 ) then  
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_sssperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_sssperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_sss_file, 19, 119, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
453    
454  #elif (defined (ALLOW_SSS0_CONTROL))  #elif (defined (ALLOW_SSS0_CONTROL))
455          call ctrl_init_ctrlvar (
456          call ctrl_init_ctrlvar (       &     xx_sss_file, 19, 119, 1, 1, 1,
457       &       xx_sss_file, 19, 119, 1, 1, 1,       &     snx, sny, 1, 'c', 'xy', mythid )
458       &       snx, sny, 1, 'c', 'xy', mythid )        
   
459  #endif /* ALLOW_SSS0_CONTROL */  #endif /* ALLOW_SSS0_CONTROL */
460    
461  c----------------------------------------------------------------------  c----------------------------------------------------------------------
# Line 723  c-- Line 536  c--
536    
537  c----------------------------------------------------------------------  c----------------------------------------------------------------------
538  c--  c--
539  #ifdef ALLOW_RELAXSST_CONTROL  #ifdef ALLOW_GEN2D_CONTROL
540          call ctrl_init_ctrlvar (          call ctrl_init_ctrlvar (
541       &       xx_relaxsst_file, 30, 130, 1, 1, 1,       &       xx_gen2d_file, 30, 130, 1, 1, 1,
542       &       snx, sny, 1, 'c', 'xy', mythid )       &       snx, sny, 1, 'c', 'xy', mythid )
543  #endif /* ALLOW_RELAXSST_CONTROL */  #endif /* ALLOW_GEN2D_CONTROL */
544    
545  c----------------------------------------------------------------------  c----------------------------------------------------------------------
546  c--  c--
547  #ifdef ALLOW_RELAXSSS_CONTROL  #ifdef ALLOW_GEN3D_CONTROL
548          call ctrl_init_ctrlvar (          call ctrl_init_ctrlvar (
549       &       xx_relaxsss_file, 31, 131, 1, 1, 1,       &       xx_gen3d_file, 31, 131, 1, 1, 1,
550       &       snx, sny, 1, 'c', 'xy', mythid )       &       snx, sny, nr, 'c', '3d', mythid )
551  #endif /* ALLOW_RELAXSSS_CONTROL */  #endif /* ALLOW_GEN3D_CONTROL */
552    
553  c----------------------------------------------------------------------  c----------------------------------------------------------------------
554  c--  c--
555  #ifdef ALLOW_PRECIP_CONTROL  #ifdef ALLOW_PRECIP_CONTROL
556  c--   Atmos. precipitation  c--   Atmos. precipitation
557          call ctrl_init_rec (
558  # ifdef ALLOW_CAL       I     xx_precipstartdate1, xx_precipstartdate2, xx_precipperiod,1,
559          call cal_FullDate( xx_precipstartdate1, xx_precipstartdate2,       O     xx_precipstartdate, diffrec, startrec, endrec,
560       &                     xx_precipstartdate , mythid )       I     mythid )
561          call cal_TimePassed( xx_precipstartdate, modelstartdate,        call ctrl_init_ctrlvar (
562       &                       difftime, mythid )       &     xx_precip_file, 32, 132, diffrec, startrec, endrec,
563          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
         if ( xx_precipperiod .EQ. 0 ) then  
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_precipperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_precipperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_precip_file, 32, 132, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
564    
565  #endif /* ALLOW_PRECIP_CONTROL */  #endif /* ALLOW_PRECIP_CONTROL */
566    
# Line 772  c--------------------------------------- Line 568  c---------------------------------------
568  c--  c--
569  #ifdef ALLOW_SWFLUX_CONTROL  #ifdef ALLOW_SWFLUX_CONTROL
570  c--   Atmos. swflux  c--   Atmos. swflux
571          call ctrl_init_rec (
572  # ifdef ALLOW_CAL       I     xx_swfluxstartdate1, xx_swfluxstartdate2, xx_swfluxperiod, 1,
573          call cal_FullDate( xx_swfluxstartdate1, xx_swfluxstartdate2,       O     xx_swfluxstartdate, diffrec, startrec, endrec,
574       &                     xx_swfluxstartdate , mythid )       I     mythid )
575          call cal_TimePassed( xx_swfluxstartdate, modelstartdate,        call ctrl_init_ctrlvar (
576       &                       difftime, mythid )       &     xx_swflux_file, 33, 133, diffrec, startrec, endrec,
577          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
         if ( xx_swfluxperiod .EQ. 0 ) then  
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_swfluxperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_swfluxperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_swflux_file, 33, 133, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
578    
579  #endif /* ALLOW_SWFLUX_CONTROL */  #endif /* ALLOW_SWFLUX_CONTROL */
580    
# Line 803  c--------------------------------------- Line 582  c---------------------------------------
582  c--  c--
583  #ifdef ALLOW_SWDOWN_CONTROL  #ifdef ALLOW_SWDOWN_CONTROL
584  c--   Atmos. swdown  c--   Atmos. swdown
585          call ctrl_init_rec (
586  # ifdef ALLOW_CAL       I     xx_swdownstartdate1, xx_swdownstartdate2, xx_swdownperiod, 1,
587          call cal_FullDate( xx_swdownstartdate1, xx_swdownstartdate2,       O     xx_swdownstartdate, diffrec, startrec, endrec,
588       &                     xx_swdownstartdate , mythid )       I     mythid )
589          call cal_TimePassed( xx_swdownstartdate, modelstartdate,        call ctrl_init_ctrlvar (
590       &                       difftime, mythid )       &     xx_swdown_file, 34, 134, diffrec, startrec, endrec,
591          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
         if ( xx_swdownperiod .EQ. 0 ) then  
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_swdownperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_swdownperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_swdown_file, 34, 134, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
592    
593  #endif /* ALLOW_SWDOWN_CONTROL */  #endif /* ALLOW_SWDOWN_CONTROL */
594    
# Line 834  c--------------------------------------- Line 596  c---------------------------------------
596  c--  c--
597  #ifdef ALLOW_LWFLUX_CONTROL  #ifdef ALLOW_LWFLUX_CONTROL
598  c--   Atmos. lwflux  c--   Atmos. lwflux
599          call ctrl_init_rec (
600  # ifdef ALLOW_CAL       I     xx_lwfluxstartdate1, xx_lwfluxstartdate2, xx_lwfluxperiod, 1,
601          call cal_FullDate( xx_lwfluxstartdate1, xx_lwfluxstartdate2,       O     xx_lwfluxstartdate, diffrec, startrec, endrec,
602       &                     xx_lwfluxstartdate , mythid )       I     mythid )
603          call cal_TimePassed( xx_lwfluxstartdate, modelstartdate,        call ctrl_init_ctrlvar (
604       &                       difftime, mythid )       &     xx_lwflux_file, 35, 135, diffrec, startrec, endrec,
605          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
         if ( xx_lwfluxperiod .EQ. 0 ) then  
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_lwfluxperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_lwfluxperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_lwflux_file, 35, 135, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
606    
607  #endif /* ALLOW_LWFLUX_CONTROL */  #endif /* ALLOW_LWFLUX_CONTROL */
608    
# Line 865  c--------------------------------------- Line 610  c---------------------------------------
610  c--  c--
611  #ifdef ALLOW_LWDOWN_CONTROL  #ifdef ALLOW_LWDOWN_CONTROL
612  c--   Atmos. lwdown  c--   Atmos. lwdown
613          call ctrl_init_rec (
614  # ifdef ALLOW_CAL       I     xx_lwdownstartdate1, xx_lwdownstartdate2, xx_lwdownperiod, 1,
615          call cal_FullDate( xx_lwdownstartdate1, xx_lwdownstartdate2,       O     xx_lwdownstartdate, diffrec, startrec, endrec,
616       &                     xx_lwdownstartdate , mythid )       I     mythid )
617          call cal_TimePassed( xx_lwdownstartdate, modelstartdate,        call ctrl_init_ctrlvar (
618       &                       difftime, mythid )       &     xx_lwdown_file, 36, 136, diffrec, startrec, endrec,
619          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
         if ( xx_lwdownperiod .EQ. 0 ) then  
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_lwdownperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_lwdownperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_lwdown_file, 36, 136, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
620    
621  #endif /* ALLOW_LWDOWN_CONTROL */  #endif /* ALLOW_LWDOWN_CONTROL */
622    
# Line 896  c--------------------------------------- Line 624  c---------------------------------------
624  c--  c--
625  #ifdef ALLOW_EVAP_CONTROL  #ifdef ALLOW_EVAP_CONTROL
626  c--   Atmos. evap  c--   Atmos. evap
627          call ctrl_init_rec (
628  # ifdef ALLOW_CAL       I     xx_evapstartdate1, xx_evapstartdate2, xx_evapperiod, 1,
629          call cal_FullDate( xx_evapstartdate1, xx_evapstartdate2,       O     xx_evapstartdate, diffrec, startrec, endrec,
630       &                     xx_evapstartdate , mythid )       I     mythid )
631          call cal_TimePassed( xx_evapstartdate, modelstartdate,        call ctrl_init_ctrlvar (
632       &                       difftime, mythid )       &     xx_evap_file, 37, 137, diffrec, startrec, endrec,
633          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     snx, sny, 1, 'c', 'xy', mythid )
         if ( xx_evapperiod .EQ. 0 ) then  
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_evapperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_evapperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_evap_file, 37, 137, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
634    
635  #endif /* ALLOW_EVAP_CONTROL */  #endif /* ALLOW_EVAP_CONTROL */
636    
# Line 927  c--------------------------------------- Line 638  c---------------------------------------
638  c--  c--
639  #ifdef ALLOW_SNOWPRECIP_CONTROL  #ifdef ALLOW_SNOWPRECIP_CONTROL
640  c--   Atmos. snowprecip  c--   Atmos. snowprecip
641          call ctrl_init_rec (
642  # ifdef ALLOW_CAL       I     xx_snowprecipstartdate1, xx_snowprecipstartdate2,
643          call cal_FullDate( xx_snowprecipstartdate1,       I     xx_snowprecipperiod, 1,
644       &      xx_snowprecipstartdate2, xx_snowprecipstartdate , mythid )       O     xx_snowprecipstartdate, diffrec, startrec, endrec,
645          call cal_TimePassed( xx_snowprecipstartdate, modelstartdate,       I     mythid )
646       &                       difftime, mythid )        call ctrl_init_ctrlvar (
647          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     xx_snowprecip_file, 38, 138, diffrec, startrec, endrec,
648          if ( xx_snowprecipperiod .EQ. 0 ) then       &     snx, sny, 1, 'c', 'xy', mythid )
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_snowprecipperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_snowprecipperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_snowprecip_file, 38, 138, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
649    
650  #endif /* ALLOW_SNOWPRECIP_CONTROL */  #endif /* ALLOW_SNOWPRECIP_CONTROL */
651    
# Line 958  c--------------------------------------- Line 653  c---------------------------------------
653  c--  c--
654  #ifdef ALLOW_APRESSURE_CONTROL  #ifdef ALLOW_APRESSURE_CONTROL
655  c--   Atmos. apressure  c--   Atmos. apressure
656          call ctrl_init_rec (
657  # ifdef ALLOW_CAL       I     xx_apressurestartdate1, xx_apressurestartdate2,
658          call cal_FullDate( xx_apressurestartdate1,       I     xx_apressureperiod, 1,
659       &      xx_apressurestartdate2, xx_apressurestartdate , mythid )       O     xx_apressurestartdate, diffrec, startrec, endrec,
660          call cal_TimePassed( xx_apressurestartdate, modelstartdate,       I     mythid )
661       &                       difftime, mythid )        call ctrl_init_ctrlvar (
662          call cal_ToSeconds ( difftime, diffsecs, mythid )       &     xx_apressure_file, 39, 139, diffrec, startrec, endrec,
663          if ( xx_apressureperiod .EQ. 0 ) then       &     snx, sny, 1, 'c', 'xy', mythid )
         startrec=1  
         endrec=12  
         else  
         startrec = int((modelstart + startTime - diffsecs)/  
      &                 xx_apressureperiod) + 1  
         endrec   = int((modelend + startTime - diffsecs + modelstep/2)/  
      &                 xx_apressureperiod) + 2  
         endif  
 # else  
         startrec = 1  
         endrec   = 1  
 # endif  
         diffrec  = endrec - startrec + 1  
         call ctrl_init_ctrlvar (  
      &       xx_apressure_file, 39, 139, diffrec, startrec, endrec,  
      &       snx, sny, 1, 'c', 'xy', mythid )  
664    
665  #endif /* ALLOW_APRESSURE_CONTROL */  #endif /* ALLOW_APRESSURE_CONTROL */
666    
# Line 989  c--------------------------------------- Line 668  c---------------------------------------
668  c--  c--
669  #ifdef ALLOW_RUNOFF_CONTROL  #ifdef ALLOW_RUNOFF_CONTROL
670  c--   Atmos. runoff  c--   Atmos. runoff
671          startrec = 1        call ctrl_init_rec (
672          endrec   = 1       I     xx_runoffstartdate1, xx_runoffstartdate2, xx_runoffperiod, 1,
673          diffrec  = endrec - startrec + 1       O     xx_runoffstartdate, diffrec, startrec, endrec,
674          call ctrl_init_ctrlvar (       I     mythid )
675       &       xx_runoff_file, 40, 140, diffrec, startrec, endrec,        call ctrl_init_ctrlvar (
676       &       snx, sny, 1, 'c', 'xy', mythid )       &     xx_runoff_file, 40, 140, diffrec, startrec, endrec,
677         &     snx, sny, 1, 'c', 'xy', mythid )
678  #endif /* ALLOW_RUNOFF_CONTROL */  #endif /* ALLOW_RUNOFF_CONTROL */
679    
680  c----------------------------------------------------------------------  c----------------------------------------------------------------------
681  c--  c--
682  #ifdef ALLOW_SIAREA_CONTROL  #ifdef ALLOW_SIAREA_CONTROL
683          startrec = 1  C--   so far there are no xx_siareastartdate1, etc., so we need to fudge it.
684          endrec   = 1  CML      call ctrl_init_rec (
685          diffrec  = endrec - startrec + 1  CML     I     xx_siareastartdate1, xx_siareastartdate2, xx_siareaperiod, 1,
686          call ctrl_init_ctrlvar (  CML     O     xx_siareastartdate, diffrec, startrec, endrec,
687       &       xx_siarea_file, 41, 141, diffrec, startrec, endrec,  CML     I     mythid )
688       &       snx, sny, 1, 'c', 'xy', mythid )        startrec = 1
689          endrec   = 1
690          diffrec  = endrec - startrec + 1
691          call ctrl_init_ctrlvar (
692         &     xx_siarea_file, 41, 141, diffrec, startrec, endrec,
693         &     snx, sny, 1, 'c', 'xy', mythid )
694  #endif /* ALLOW_siarea_CONTROL */  #endif /* ALLOW_siarea_CONTROL */
695    
696  c----------------------------------------------------------------------  c----------------------------------------------------------------------
697  c--  c--
698  #ifdef ALLOW_SIHEFF_CONTROL  #ifdef ALLOW_SIHEFF_CONTROL
699          startrec = 1  C--   so far there are no xx_siheffstartdate1, etc., so we need to fudge it.
700          endrec   = 1  CML      call ctrl_init_rec (
701          diffrec  = endrec - startrec + 1  CML     I     xx_siheffstartdate1, xx_siheffstartdate2, xx_siheffperiod, 1,
702          call ctrl_init_ctrlvar (  CML     O     xx_siheffstartdate, diffrec, startrec, endrec,
703       &       xx_siheff_file, 42, 142, diffrec, startrec, endrec,  CML     I     mythid )
704       &       snx, sny, 1, 'c', 'xy', mythid )        startrec = 1
705          endrec   = 1
706          diffrec  = endrec - startrec + 1
707          call ctrl_init_ctrlvar (
708         &     xx_siheff_file, 42, 142, diffrec, startrec, endrec,
709         &     snx, sny, 1, 'c', 'xy', mythid )
710  #endif /* ALLOW_siheff_CONTROL */  #endif /* ALLOW_siheff_CONTROL */
711    
712  c----------------------------------------------------------------------  c----------------------------------------------------------------------
713  c--  c--
714  #ifdef ALLOW_SIHSNOW_CONTROL  #ifdef ALLOW_SIHSNOW_CONTROL
715          startrec = 1  C--   so far there are no xx_sihsnowstartdate1, etc., so we need to fudge it.
716          endrec   = 1  CML      call ctrl_init_rec (
717          diffrec  = endrec - startrec + 1  CML     I     xx_sihsnowstartdate1, xx_sihsnowstartdate2, xx_sihsnowperiod, 1,
718          call ctrl_init_ctrlvar (  CML     O     xx_sihsnowstartdate, diffrec, startrec, endrec,
719       &       xx_sihsnow_file, 43, 143, diffrec, startrec, endrec,  CML     I     mythid )
720       &       snx, sny, 1, 'c', 'xy', mythid )        startrec = 1
721          endrec   = 1
722          diffrec  = endrec - startrec + 1
723          call ctrl_init_ctrlvar (
724         &     xx_sihsnow_file, 43, 143, diffrec, startrec, endrec,
725         &     snx, sny, 1, 'c', 'xy', mythid )
726  #endif /* ALLOW_sihsnow_CONTROL */  #endif /* ALLOW_sihsnow_CONTROL */
727    
728    
729  c----------------------------------------------------------------------  c----------------------------------------------------------------------
730  c--  c--
731  #ifdef ALLOW_KAPREDI_CONTROL  #ifdef ALLOW_KAPREDI_CONTROL
732          call ctrl_init_ctrlvar (        call ctrl_init_ctrlvar (
733       &       xx_kapredi_file, 44, 144, 1, 1, 1,       &     xx_kapredi_file, 44, 144, 1, 1, 1,
734       &       snx, sny, nr, 'c', '3d', mythid )       &     snx, sny, nr, 'c', '3d', mythid )
735  #endif /* ALLOW_KAPREDI_CONTROL */  #endif /* ALLOW_KAPREDI_CONTROL */
736    
737  c----------------------------------------------------------------------  c----------------------------------------------------------------------
738  c----------------------------------------------------------------------  c----------------------------------------------------------------------
739    
740          call ctrl_init_wet( mythid )        call ctrl_init_wet( mythid )
741          
742    c----------------------------------------------------------------------
743    c----------------------------------------------------------------------
744    
745    #ifdef ALLOW_DIC_CONTROL
746          do i = 1, dic_n_control
747           xx_dic(i) = 0. _d 0
748          enddo
749    #endif
750    
751  c----------------------------------------------------------------------  c----------------------------------------------------------------------
752  c----------------------------------------------------------------------  c----------------------------------------------------------------------
753    
754        do bj = jtlo,jthi        do bj = jtlo,jthi
755          do bi = itlo,ithi         do bi = itlo,ithi
756            do j = jmin,jmax          do j = jmin,jmax
757              do i = imin,imax           do i = imin,imax
758                wareaunit (i,j,bi,bj) = 1.0            wareaunit (i,j,bi,bj) = 1.0
759  #ifndef ALLOW_ECCO  #ifndef ALLOW_ECCO
760                whflux    (i,j,bi,bj) = maskC(i,j,1,bi,bj)            whflux    (i,j,bi,bj) = maskC(i,j,1,bi,bj)
761                wsflux    (i,j,bi,bj) = maskC(i,j,1,bi,bj)            wsflux    (i,j,bi,bj) = maskC(i,j,1,bi,bj)
762                wtauu     (i,j,bi,bj) = maskW(i,j,1,bi,bj)            wtauu     (i,j,bi,bj) = maskW(i,j,1,bi,bj)
763                wtauv     (i,j,bi,bj) = maskS(i,j,1,bi,bj)            wtauv     (i,j,bi,bj) = maskS(i,j,1,bi,bj)
764                watemp    (i,j,bi,bj) = maskC(i,j,1,bi,bj)            watemp    (i,j,bi,bj) = maskC(i,j,1,bi,bj)
765                waqh      (i,j,bi,bj) = maskC(i,j,1,bi,bj)            waqh      (i,j,bi,bj) = maskC(i,j,1,bi,bj)
766                wprecip   (i,j,bi,bj) = maskC(i,j,1,bi,bj)            wprecip   (i,j,bi,bj) = maskC(i,j,1,bi,bj)
767                wswflux   (i,j,bi,bj) = maskC(i,j,1,bi,bj)            wswflux   (i,j,bi,bj) = maskC(i,j,1,bi,bj)
768                wswdown   (i,j,bi,bj) = maskC(i,j,1,bi,bj)            wswdown   (i,j,bi,bj) = maskC(i,j,1,bi,bj)
769                wuwind    (i,j,bi,bj) = maskC(i,j,1,bi,bj)            wuwind    (i,j,bi,bj) = maskC(i,j,1,bi,bj)
770                wvwind    (i,j,bi,bj) = maskC(i,j,1,bi,bj)            wvwind    (i,j,bi,bj) = maskC(i,j,1,bi,bj)
771                wlwflux   (i,j,bi,bj) = maskC(i,j,1,bi,bj)            wlwflux   (i,j,bi,bj) = maskC(i,j,1,bi,bj)
772                wlwdown   (i,j,bi,bj) = maskC(i,j,1,bi,bj)            wlwdown   (i,j,bi,bj) = maskC(i,j,1,bi,bj)
773                wevap     (i,j,bi,bj) = maskC(i,j,1,bi,bj)            wevap     (i,j,bi,bj) = maskC(i,j,1,bi,bj)
774                wsnowprecip(i,j,bi,bj) = maskC(i,j,1,bi,bj)            wsnowprecip(i,j,bi,bj) = maskC(i,j,1,bi,bj)
775                wapressure(i,j,bi,bj) = maskC(i,j,1,bi,bj)            wapressure(i,j,bi,bj) = maskC(i,j,1,bi,bj)
776                wrunoff   (i,j,bi,bj) = maskC(i,j,1,bi,bj)            wrunoff   (i,j,bi,bj) = maskC(i,j,1,bi,bj)
777                wsst      (i,j,bi,bj) = maskC(i,j,1,bi,bj)            wsst      (i,j,bi,bj) = maskC(i,j,1,bi,bj)
778                wsss      (i,j,bi,bj) = maskC(i,j,1,bi,bj)            wsss      (i,j,bi,bj) = maskC(i,j,1,bi,bj)
779  #endif  #endif
780              enddo           enddo
           enddo  
781          enddo          enddo
782           enddo
783        enddo        enddo
784    
785        return        return
786        end        end
787    
788          subroutine ctrl_init_rec(
789         I     fldstartdate1, fldstartdate2, fldperiod, nfac,
790         O     fldstartdate, diffrec, startrec, endrec,
791         I     mythid )
792    
793    c     ==================================================================
794    c     SUBROUTINE ctrl_init_rec
795    c     ==================================================================
796    c
797    c     helper routine to compute the first and last record of a
798    c     time dependent control variable
799    c
800    c     Martin.Losch@awi.de, 2011-Mar-15
801    c
802    c     ==================================================================
803    c     SUBROUTINE ctrl_init_rec
804    c     ==================================================================
805    
806          implicit none
807    
808    c     == global variables ==
809    #include "SIZE.h"
810    #include "EEPARAMS.h"
811    #include "PARAMS.h"
812    #ifdef ALLOW_CAL
813    # include "cal.h"
814    #endif
815          
816    c     == input variables ==
817    c     fldstartdate1/2 : start time (date/time) of fld
818    c     fldperod        : sampling interval of fld
819    c     nfac            : factor for the case that fld is an obcs variable
820    c                       in this case nfac = 4, otherwise nfac = 1
821    c     mythid          : thread ID of this instance
822          integer fldstartdate1
823          integer fldstartdate2
824          _RL     fldperiod
825          integer nfac
826          integer mythid
827          
828    c     == output variables ==
829    c     fldstartdate : full date from fldstartdate1 and 2
830    c     startrec     : first record of ctrl variable
831    c     startrec     : last record of ctrl variable
832    c     diffrec      : difference between first and last record of ctrl variable
833          integer fldstartdate(4)
834          integer startrec
835          integer endrec
836          integer diffrec
837    
838    c     == local variables ==
839          integer i
840    #ifdef ALLOW_CAL
841          integer difftime(4)
842          _RL     diffsecs
843    #endif /* ALLOW_CAL */
844    
845    c     initialise some output
846          do i = 1,4
847           fldstartdate(i) = 0
848          end do
849          startrec = 0
850          endrec   = 0
851          diffrec  = 0
852    # ifdef ALLOW_CAL
853          call cal_FullDate( fldstartdate1, fldstartdate2,
854         &                   fldstartdate , mythid )
855          call cal_TimePassed( fldstartdate, modelstartdate,
856         &                     difftime, mythid )
857          call cal_ToSeconds ( difftime, diffsecs, mythid )
858          if ( fldperiod .EQ. -12. ) then
859           startrec = 1
860           endrec   = 12*nfac
861          elseif ( fldperiod .EQ. 0. ) then
862           startrec = 1
863           endrec   = 1*nfac
864          else
865           startrec = int((modelstart + startTime - diffsecs)/
866         &                fldperiod) + 1
867           endrec   = int((modelend + startTime - diffsecs + modelstep/2)/
868         &                fldperiod) + 2
869           if ( nfac .ne. 1 ) then
870    c     This is the case of obcs. I am not sure that this is correct, but
871    c     it seems to work in most configurations.
872            endrec   = (endrec - startrec + 1)*nfac
873            startrec = (startrec - 1)*nfac + 1
874           endif
875          endif
876    # else /* ndef ALLOW_CAL */
877          if ( fldperiod .EQ. 0. ) then
878           startrec = 1
879           endrec   = 1*nfac
880          else
881           startrec = 1
882           endrec   = (int((endTime - startTime)/fldperiod) + 1)*nfac
883          endif
884    #endif /* ALLOW_CAL */
885          diffrec  = endrec - startrec + 1
886    
887          return
888          end

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

  ViewVC Help
Powered by ViewVC 1.1.22