/[MITgcm]/MITgcm/pkg/obcs/obcs_prescribe_read.F
ViewVC logotype

Diff of /MITgcm/pkg/obcs/obcs_prescribe_read.F

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

revision 1.4 by heimbach, Thu Oct 14 11:53:20 2004 UTC revision 1.23 by dimitri, Fri May 9 09:20:30 2008 UTC
# Line 3  C $Name$ Line 3  C $Name$
3    
4  # include "OBCS_OPTIONS.h"  # include "OBCS_OPTIONS.h"
5    
6        subroutine obcs_prescribe_read (        subroutine obcs_prescribe_read (
7       I                      mycurrenttime       I                      mycurrenttime
8       I                    , mycurrentiter       I                    , mycurrentiter
9       I                    , mythid       I                    , mythid
# Line 20  c     |================================= Line 20  c     |=================================
20    
21  c     == global variables ==  c     == global variables ==
22    
 #include "EEPARAMS.h"  
23  #include "SIZE.h"  #include "SIZE.h"
24  #include "GRID.h"  #include "EEPARAMS.h"
25    #include "PARAMS.h"
26  #include "OBCS.h"  #include "OBCS.h"
27  #ifdef ALLOW_EXF  #ifdef ALLOW_EXF
28  # include "exf_param.h"  # include "EXF_PARAM.h"
29  #endif  #endif
30    #ifdef ALLOW_PTRACERS
31    # include "PTRACERS_SIZE.h"
32    # include "OBCS_PTRACERS.h"
33    #endif /* ALLOW_PTRACERS */
34    
35  c     == routine arguments ==  c     == routine arguments ==
36    
# Line 38  c     == routine arguments == Line 42  c     == routine arguments ==
42    
43  c     == local variables ==  c     == local variables ==
44    
       logical first, changed  
       integer count0, count1  
       _RL     fac  
   
45  c     == end of interface ==  c     == end of interface ==
46    
47  #ifdef ALLOW_EXF  # ifdef ALLOW_EXF
48  #ifdef ALLOW_OBCS_NORTH        IF ( useEXF ) THEN
49        call exf_getffieldrec(  #  ifdef ALLOW_OBCS_NORTH
50       I                       obcsNstartdate, obcsNperiod        call obcs_prescribe_exf_xz (
51       I                     , obcsNstartdate1, obcsNstartdate2       I     obcsNstartdate, obcsNperiod,
52       I                     , .false.       I     useOBCSYearlyFields,
53       O                     , fac, first, changed,       U     OBNu,   OBNu0,   OBNu1,   OBNufile,
54       O                     , count0, count1, year0, year1       U     OBNv,   OBNv0,   OBNv1,   OBNvfile,
55       I                     , mycurrenttime, mycurrentiter, mythid       U     OBNt,   OBNt0,   OBNt1,   OBNtfile,
56       &                     )       U     OBNs,   OBNs0,   OBNs1,   OBNsfile,
57    #   ifdef ALLOW_SEAICE
58         I     siobNstartdate, siobNperiod,
59         U     OBNa,   OBNa0,   OBNa1,   OBNafile,
60         U     OBNh,   OBNh0,   OBNh1,   OBNhfile,
61         U     OBNsl,  OBNsl0,  OBNsl1,  OBNslfile,
62         U     OBNsn,  OBNsn0,  OBNsn1,  OBNsnfile,
63         U     OBNuice,OBNuice0,OBNuice1,OBNuicefile,
64         U     OBNvice,OBNvice0,OBNvice1,OBNvicefile,
65    #   endif
66    #   ifdef ALLOW_PTRACERS
67         U     OBNptr ,OBNptr0, OBNptr1, OBNptrFile,
68    #   endif
69         I     mycurrenttime, mycurrentiter, mythid
70         &     )
71    #  endif /* ALLOW_OBCS_NORTH */
72    
73    #  ifdef ALLOW_OBCS_SOUTH
74          call obcs_prescribe_exf_xz (
75         I     obcsSstartdate, obcsSperiod,
76         I     useOBCSYearlyFields,
77         U     OBSu,   OBSu0,   OBSu1,   OBSufile,
78         U     OBSv,   OBSv0,   OBSv1,   OBSvfile,
79         U     OBSt,   OBSt0,   OBSt1,   OBStfile,
80         U     OBSs,   OBSs0,   OBSs1,   OBSsfile,
81    #   ifdef ALLOW_SEAICE
82         I     siobSstartdate, siobSperiod,
83         U     OBSa,   OBSa0,   OBSa1,   OBSafile,
84         U     OBSh,   OBSh0,   OBSh1,   OBShfile,
85         U     OBSsl,  OBSsl0,  OBSsl1,  OBSslfile,
86         U     OBSsn,  OBSsn0,  OBSsn1,  OBSsnfile,
87         U     OBSuice,OBSuice0,OBSuice1,OBSuicefile,
88         U     OBSvice,OBSvice0,OBSvice1,OBSvicefile,
89    #   endif
90    #   ifdef ALLOW_PTRACERS
91         U     OBSptr ,OBSptr0, OBSptr1, OBSptrFile,
92    #   endif
93         I     mycurrenttime, mycurrentiter, mythid
94         &     )
95    #  endif /* ALLOW_OBCS_SOUTH */
96    
97    #  ifdef ALLOW_OBCS_EAST
98          call obcs_prescribe_exf_yz (
99         I     obcsEstartdate, obcsEperiod,
100         I     useOBCSYearlyFields,
101         U     OBEu,   OBEu0,   OBEu1,   OBEufile,
102         U     OBEv,   OBEv0,   OBEv1,   OBEvfile,
103         U     OBEt,   OBEt0,   OBEt1,   OBEtfile,
104         U     OBEs,   OBEs0,   OBEs1,   OBEsfile,
105    #   ifdef ALLOW_SEAICE
106         I     siobEstartdate, siobEperiod,
107         U     OBEa,   OBEa0,   OBEa1,   OBEafile,
108         U     OBEh,   OBEh0,   OBEh1,   OBEhfile,
109         U     OBEsl,  OBEsl0,  OBEsl1,  OBEslfile,
110         U     OBEsn,  OBEsn0,  OBEsn1,  OBEsnfile,
111         U     OBEuice,OBEuice0,OBEuice1,OBEuicefile,
112         U     OBEvice,OBEvice0,OBEvice1,OBEvicefile,
113    #   endif
114    #   ifdef ALLOW_PTRACERS
115         U     OBEptr ,OBEptr0, OBEptr1, OBEptrFile,
116    #   endif
117         I     mycurrenttime, mycurrentiter, mythid
118         &     )
119    #  endif /* ALLOW_OBCS_EAST */
120    
121    #  ifdef ALLOW_OBCS_WEST
122          call obcs_prescribe_exf_yz (
123         I     obcsWstartdate, obcsWperiod,
124         I     useOBCSYearlyFields,
125         U     OBWu,   OBWu0,   OBWu1,   OBWufile,
126         U     OBWv,   OBWv0,   OBWv1,   OBWvfile,
127         U     OBWt,   OBWt0,   OBWt1,   OBWtfile,
128         U     OBWs,   OBWs0,   OBWs1,   OBWsfile,
129    #   ifdef ALLOW_SEAICE
130         I     siobWstartdate, siobWperiod,
131         U     OBWa,   OBWa0,   OBWa1,   OBWafile,
132         U     OBWh,   OBWh0,   OBWh1,   OBWhfile,
133         U     OBWsl,  OBWsl0,  OBWsl1,  OBWslfile,
134         U     OBWsn,  OBWsn0,  OBWsn1,  OBWsnfile,
135         U     OBWuice,OBWuice0,OBWuice1,OBWuicefile,
136         U     OBWvice,OBWvice0,OBWvice1,OBWvicefile,
137    #   endif
138    #   ifdef ALLOW_PTRACERS
139         U     OBWptr ,OBWptr0, OBWptr1, OBWptrFile,
140    #   endif
141         I     mycurrenttime, mycurrentiter, mythid
142         &     )
143    #  endif /* ALLOW_OBCS_WEST */
144    C     ENDIF useEXF
145          ENDIF
146    # endif /* ALLOW_EXF */
147    
148        call exf_set_obcs_xz(  OBNu, OBNu0, OBNu1, OBNufile, 'u'  # ifdef ALLOW_OBCS_CONTROL
149       I                     , fac, first, changed, count0, count1  cgg   WARNING: Assuming North Open Boundary exists and has same
150       I                     , mycurrenttime, mycurrentiter, mythid )  cgg    calendar information as other boundaries.
151        call exf_set_obcs_xz(  OBNv, OBNv0, OBNv1, OBNvfile, 'v'        call ctrl_obcsbal ( mycurrenttime,mycurrentiter,mythid )
152       I                     , fac, first, changed, count0, count1  # endif
      I                     , mycurrenttime, mycurrentiter, mythid )  
       call exf_set_obcs_xz(  OBNt, OBNt0, OBNt1, OBNtfile, 's'  
      I                     , fac, first, changed, count0, count1  
      I                     , mycurrenttime, mycurrentiter, mythid )  
       call exf_set_obcs_xz(  OBNs, OBNs0, OBNs1, OBNsfile, 's'  
      I                     , fac, first, changed, count0, count1  
      I                     , mycurrenttime, mycurrentiter, mythid )  
 #endif  
153    
154  #ifdef ALLOW_OBCS_SOUTH  # ifdef ALLOW_OBCSN_CONTROL
155        call exf_getffieldrec(        call ctrl_getobcsn ( mycurrenttime, mycurrentiter, mythid )
156       I                       obcsSstartdate, obcsSperiod  # endif
      I                     , obcsSstartdate1, obcsSstartdate2  
      I                     , .false.  
      O                     , fac, first, changed  
      O                     , count0, count1, year0, year1  
      I                     , mycurrenttime, mycurrentiter, mythid  
      &                     )  
157    
158        call exf_set_obcs_xz(  OBSu, OBSu0, OBSu1, OBSufile, 'u'  # ifdef ALLOW_OBCSS_CONTROL
159       I                     , fac, first, changed, count0, count1        call ctrl_getobcss ( mycurrenttime, mycurrentiter, mythid )
160       I                     , mycurrenttime, mycurrentiter, mythid )  # endif
161        call exf_set_obcs_xz(  OBSv, OBSv0, OBSv1, OBSvfile, 'v'  
162       I                     , fac, first, changed, count0, count1  # ifdef ALLOW_OBCSW_CONTROL
163       I                     , mycurrenttime, mycurrentiter, mythid )        call ctrl_getobcsw ( mycurrenttime, mycurrentiter, mythid )
164        call exf_set_obcs_xz(  OBSt, OBSt0, OBSt1, OBStfile, 's'  # endif
165       I                     , fac, first, changed, count0, count1  
166       I                     , mycurrenttime, mycurrentiter, mythid )  # ifdef ALLOW_OBCSE_CONTROL
167        call exf_set_obcs_xz(  OBSs, OBSs0, OBSs1, OBSsfile, 's'        call ctrl_getobcse ( mycurrenttime, mycurrentiter, mythid )
168       I                     , fac, first, changed, count0, count1  # endif
      I                     , mycurrenttime, mycurrentiter, mythid )  
169    
170          IF ( .NOT. useEXF ) THEN
171    #ifndef ALLOW_AUTODIFF_TAMC
172           CALL OBCS_EXTERNAL_FIELDS_LOAD(
173         &     myCurrentTime, myCurrentIter, myThid )
174    #else
175           STOP 'PH HAS DISABLED THIS RUNTIME OPTION FOR ALLOW_EXF'
176  #endif  #endif
177          ENDIF
178    
179  #ifdef ALLOW_OBCS_EAST  #endif /* ALLOW_OBCS and ALLOW_OBCS_PRESCRIBE */
       call exf_getffieldrec(  
      I                       obcsEstartdate, obcsEperiod  
      I                     , obcsEstartdate1, obcsEstartdate2  
      I                     , .false.  
      O                     , fac, first, changed  
      O                     , count0, count1, year0, year1  
      I                     , mycurrenttime, mycurrentiter, mythid  
      &                     )  
180    
181        call exf_set_obcs_yz(  OBEu, OBEu0, OBEu1, OBEufile, 'u'        RETURN
182       I                     , fac, first, changed, count0, count1        END
      I                     , mycurrenttime, mycurrentiter, mythid )  
       call exf_set_obcs_yz(  OBEv, OBEv0, OBEv1, OBEvfile, 'v'  
      I                     , fac, first, changed, count0, count1  
      I                     , mycurrenttime, mycurrentiter, mythid )  
       call exf_set_obcs_yz(  OBEt, OBEt0, OBEt1, OBEtfile, 's'  
      I                     , fac, first, changed, count0, count1  
      I                     , mycurrenttime, mycurrentiter, mythid )  
       call exf_set_obcs_yz(  OBEs, OBEs0, OBEs1, OBEsfile, 's'  
      I                     , fac, first, changed, count0, count1  
      I                     , mycurrenttime, mycurrentiter, mythid )  
183    
184    
185    C=========================================================================
186    C=========================================================================
187    
188          subroutine obcs_prescribe_exf_xz (
189         I     obcsstartdate, obcsperiod,
190         I     useYearlyFields,
191         U     OBu,   OBu0,   OBu1,   OBufile,
192         U     OBv,   OBv0,   OBv1,   OBvfile,
193         U     OBt,   OBt0,   OBt1,   OBtfile,
194         U     OBs,   OBs0,   OBs1,   OBsfile,
195    #ifdef ALLOW_SEAICE
196         I     siobstartdate, siobperiod,
197         U     OBa,   OBa0,   OBa1,   OBafile,
198         U     OBh,   OBh0,   OBh1,   OBhfile,
199         U     OBsl,  OBsl0,  OBsl1,  OBslfile,
200         U     OBsn,  OBsn0,  OBsn1,  OBsnfile,
201         U     OBuice,OBuice0,OBuice1,OBuicefile,
202         U     OBvice,OBvice0,OBvice1,OBvicefile,
203    #endif
204    #ifdef ALLOW_PTRACERS
205         U     OBptr ,OBptr0, OBptr1, OBptrFile,
206  #endif  #endif
207         I     mycurrenttime, mycurrentiter, mythid
208         &     )
209    c     |==================================================================|
210    c     | SUBROUTINE obcs_prescribe_exf_xz                                 |
211    c     |==================================================================|
212    c     | read open boundary conditions from file                          |
213    c     | N.B.: * uses exf and cal routines for file/record handling       |
214    c     |       * uses ctrl routines for control variable handling         |
215    c     |==================================================================|
216    
217  #ifdef ALLOW_OBCS_WEST        implicit none
       call exf_getffieldrec(  
      I                       obcsWstartdate, obcsWperiod  
      I                     , obcsWstartdate1, obcsWstartdate2  
      I                     , .false.  
      O                     , fac, first, changed  
      O                     , count0, count1, year0, year1  
      I                     , mycurrenttime, mycurrentiter, mythid  
      &                     )  
218    
219        call exf_set_obcs_yz(  OBWu, OBWu0, OBWu1, OBWufile, 'u'  c     == global variables ==
      I                     , fac, first, changed, count0, count1  
      I                     , mycurrenttime, mycurrentiter, mythid )  
       call exf_set_obcs_yz(  OBWv, OBWv0, OBWv1, OBWvfile, 'v'  
      I                     , fac, first, changed, count0, count1  
      I                     , mycurrenttime, mycurrentiter, mythid )  
       call exf_set_obcs_yz(  OBWt, OBWt0, OBWt1, OBWtfile, 's'  
      I                     , fac, first, changed, count0, count1  
      I                     , mycurrenttime, mycurrentiter, mythid )  
       call exf_set_obcs_yz(  OBWs, OBWs0, OBWs1, OBWsfile, 's'  
      I                     , fac, first, changed, count0, count1  
      I                     , mycurrenttime, mycurrentiter, mythid )  
220    
221    #include "SIZE.h"
222    #include "EEPARAMS.h"
223    #include "PARAMS.h"
224    #ifdef ALLOW_EXF
225    # include "EXF_PARAM.h"
226  #endif  #endif
227    #ifdef ALLOW_PTRACERS
228    # include "PTRACERS_SIZE.h"
229    # include "PTRACERS_PARAMS.h"
230    #endif /* ALLOW_PTRACERS */
231    
232  #ifdef ALLOW_OBCS_CONTROL  c     == routine arguments ==
 cgg   WARNING: Assuming North Open Boundary exists and has same  
 cgg    calendar information as other boundaries.  
       call ctrl_obcsbal ( mycurrenttime,mycurrentiter,mythid )  
 #endif  
233    
234  #ifdef ALLOW_OBCSN_CONTROL        _RL     obcsstartdate
235        call ctrl_getobcsn ( mycurrenttime, mycurrentiter, mythid )        _RL     obcsperiod
236  #endif        LOGICAL useYearlyFields
237          _RL OBu     (1-Olx:sNx+Olx,Nr,nSx,nSy)
238          _RL OBv     (1-Olx:sNx+Olx,Nr,nSx,nSy)
239          _RL OBt     (1-Olx:sNx+Olx,Nr,nSx,nSy)
240          _RL OBs     (1-Olx:sNx+Olx,Nr,nSx,nSy)
241          _RL OBu0    (1-Olx:sNx+Olx,Nr,nSx,nSy)
242          _RL OBv0    (1-Olx:sNx+Olx,Nr,nSx,nSy)
243          _RL OBt0    (1-Olx:sNx+Olx,Nr,nSx,nSy)
244          _RL OBs0    (1-Olx:sNx+Olx,Nr,nSx,nSy)
245          _RL OBu1    (1-Olx:sNx+Olx,Nr,nSx,nSy)
246          _RL OBv1    (1-Olx:sNx+Olx,Nr,nSx,nSy)
247          _RL OBt1    (1-Olx:sNx+Olx,Nr,nSx,nSy)
248          _RL OBs1    (1-Olx:sNx+Olx,Nr,nSx,nSy)
249          CHARACTER*(MAX_LEN_FNAM) OBuFile,OBvFile,OBtFile,OBsFile
250    #ifdef ALLOW_SEAICE
251          _RL     siobstartdate
252          _RL     siobperiod
253          _RL OBa     (1-Olx:sNx+Olx,nSx,nSy)
254          _RL OBh     (1-Olx:sNx+Olx,nSx,nSy)
255          _RL OBa0    (1-Olx:sNx+Olx,nSx,nSy)
256          _RL OBh0    (1-Olx:sNx+Olx,nSx,nSy)
257          _RL OBa1    (1-Olx:sNx+Olx,nSx,nSy)
258          _RL OBh1    (1-Olx:sNx+Olx,nSx,nSy)
259          _RL OBsl    (1-Olx:sNx+Olx,nSx,nSy)
260          _RL OBsn    (1-Olx:sNx+Olx,nSx,nSy)
261          _RL OBsl0   (1-Olx:sNx+Olx,nSx,nSy)
262          _RL OBsn0   (1-Olx:sNx+Olx,nSx,nSy)
263          _RL OBsl1   (1-Olx:sNx+Olx,nSx,nSy)
264          _RL OBsn1   (1-Olx:sNx+Olx,nSx,nSy)
265          _RL OBuice  (1-Olx:sNx+Olx,nSx,nSy)
266          _RL OBvice  (1-Olx:sNx+Olx,nSx,nSy)
267          _RL OBuice0 (1-Olx:sNx+Olx,nSx,nSy)
268          _RL OBvice0 (1-Olx:sNx+Olx,nSx,nSy)
269          _RL OBuice1 (1-Olx:sNx+Olx,nSx,nSy)
270          _RL OBvice1 (1-Olx:sNx+Olx,nSx,nSy)
271          CHARACTER*(MAX_LEN_FNAM)
272         &     OBaFile,OBhFile,OBslFile,OBsnFile,OBuiceFile,OBviceFile
273    #endif /* ALLOW_SEAICE */
274    #ifdef ALLOW_PTRACERS
275          _RL OBptr (1-Olx:sNx+Olx,Nr,nSx,nSy,PTRACERS_num)
276          _RL OBptr0(1-Olx:sNx+Olx,Nr,nSx,nSy,PTRACERS_num)
277          _RL OBptr1(1-Olx:sNx+Olx,Nr,nSx,nSy,PTRACERS_num)
278          CHARACTER*(MAX_LEN_FNAM) OBptrFile(PTRACERS_num)
279    #endif /* ALLOW_PTRACERS */
280          _RL     mycurrenttime
281          integer mycurrentiter
282          integer mythid
283    
284  #ifdef ALLOW_OBCSS_CONTROL  #if defined ALLOW_OBCS && defined ALLOW_OBCS_PRESCRIBE \
285        call ctrl_getobcss ( mycurrenttime, mycurrentiter, mythid )      && defined ALLOW_EXF
 #endif  
286    
287  #ifdef ALLOW_OBCSW_CONTROL  c     == local variables ==
288        call ctrl_getobcsw ( mycurrenttime, mycurrentiter, mythid )        logical first, changed
289          integer count0, count1
290          integer year0, year1
291          _RL     fac
292    # ifdef ALLOW_PTRACERS
293          integer iTracer
294    # endif /* ALLOW_PTRACERS */
295    c     == end of interface ==
296    
297          if ( obcsperiod .eq. -12 ) then
298    c     obcsperiod=-12 means input file contains 12 monthly means
299    c     record numbers are assumed 1 to 12 corresponding to
300    c     Jan. through Dec.
301           call cal_GetMonthsRec(
302         O                        fac, first, changed,
303         O                        count0, count1,
304         I                        mycurrenttime, mycurrentiter, mythid
305         &           )
306    
307          elseif ( obcsperiod .lt. 0 ) then
308           print *, 'obcsperiod is out of range'
309           STOP 'ABNORMAL END: S/R OBCS_PRESCIBE_EXF_XZ'
310          else
311    c     get record numbers and interpolation factor
312           call exf_GetFFieldRec(
313         I                       obcsstartdate, obcsperiod,
314         I                       useYearlyFields,
315         O                       fac, first, changed,
316         O                       count0, count1, year0, year1,
317         I                       mycurrenttime, mycurrentiter, mythid
318         &                      )
319          endif
320          call exf_set_obcs_xz(  OBu, OBu0, OBu1, OBufile, 'u'
321         I                     , fac, first, changed, useYearlyFields
322         I                     , obcsperiod, count0, count1, year0, year1
323         I                     , mycurrenttime, mycurrentiter, mythid )
324          call exf_set_obcs_xz(  OBv, OBv0, OBv1, OBvfile, 'v'
325         I                     , fac, first, changed, useYearlyFields
326         I                     , obcsperiod, count0, count1, year0, year1
327         I                     , mycurrenttime, mycurrentiter, mythid )
328          call exf_set_obcs_xz(  OBt, OBt0, OBt1, OBtfile, 's'
329         I                     , fac, first, changed, useYearlyFields
330         I                     , obcsperiod, count0, count1, year0, year1
331         I                     , mycurrenttime, mycurrentiter, mythid )
332          call exf_set_obcs_xz(  OBs, OBs0, OBs1, OBsfile, 's'
333         I                     , fac, first, changed, useYearlyFields
334         I                     , obcsperiod, count0, count1, year0, year1
335         I                     , mycurrenttime, mycurrentiter, mythid )
336    # ifdef ALLOW_PTRACERS
337          if ( usePTRACERS ) then
338           do iTracer = 1, PTRACERS_numInUse
339            call exf_set_obcs_xz(  OBptr (1-Olx,1,1,1,iTracer)
340         I                       , OBptr0(1-Olx,1,1,1,iTracer)
341         I                       , OBptr1(1-Olx,1,1,1,iTracer)
342         I                       , OBptrFile(iTracer), 's'
343         I                       , fac, first, changed, useYearlyFields
344         I                       , obcsperiod, count0, count1, year0, year1
345         I                       , mycurrenttime, mycurrentiter, mythid )
346           enddo
347          endif
348    # endif /* ALLOW_PTRACERS */
349    # ifdef ALLOW_SEAICE
350          IF (useSEAICE) THEN
351           if ( siobperiod .eq. -12 ) then
352    c     siobperiod=-12 means input file contains 12 monthly means
353    c     record numbers are assumed 1 to 12 corresponding to
354    c     Jan. through Dec.
355            call cal_GetMonthsRec(
356         O                        fac, first, changed,
357         O                        count0, count1,
358         I                        mycurrenttime, mycurrentiter, mythid
359         &           )
360    
361           elseif ( siobperiod .lt. 0 ) then
362            print *, 'siobperiod is out of range'
363            STOP 'ABNORMAL END: S/R OBCS_PRESCIBE_EXF_XZ'
364           else
365    c     get record numbers and interpolation factor
366            call exf_GetFFieldRec(
367         I                       siobstartdate, siobperiod,
368         I                       useYearlyFields,
369         O                       fac, first, changed,
370         O                       count0, count1, year0, year1,
371         I                       mycurrenttime, mycurrentiter, mythid
372         &                      )
373           endif
374           call exf_set_obcs_x (  OBa, OBa0, OBa1, OBafile, 's'
375         I                     , fac, first, changed, useYearlyFields
376         I                     , siobperiod, count0, count1, year0, year1
377         I                     , mycurrenttime, mycurrentiter, mythid )
378           call exf_set_obcs_x (  OBh, OBh0, OBh1, OBhfile, 's'
379         I                     , fac, first, changed, useYearlyFields
380         I                     , siobperiod, count0, count1, year0, year1
381         I                     , mycurrenttime, mycurrentiter, mythid )
382           call exf_set_obcs_x (  OBsl, OBsl0, OBsl1, OBslfile, 's'
383         I                     , fac, first, changed, useYearlyFields
384         I                     , siobperiod, count0, count1, year0, year1
385         I                     , mycurrenttime, mycurrentiter, mythid )
386           call exf_set_obcs_x (  OBsn, OBsn0, OBsn1, OBsnfile, 's'
387         I                     , fac, first, changed, useYearlyFields
388         I                     , siobperiod, count0, count1, year0, year1
389         I                     , mycurrenttime, mycurrentiter, mythid )
390           call exf_set_obcs_x ( OBuice,OBuice0,OBuice1,OBuicefile,'u'
391         I                     , fac, first, changed, useYearlyFields
392         I                     , siobperiod, count0, count1, year0, year1
393         I                     , mycurrenttime, mycurrentiter, mythid )
394           call exf_set_obcs_x ( OBvice,OBvice0,OBvice1,OBvicefile,'v'
395         I                     , fac, first, changed, useYearlyFields
396         I                     , siobperiod, count0, count1, year0, year1
397         I                     , mycurrenttime, mycurrentiter, mythid )
398          ENDIF
399    # endif /* ALLOW_SEAICE */
400    
401    #endif /* ALLOW_OBCS and ALLOW_OBCS_PRESCRIBE and ALLOW_EXF */
402          RETURN
403          END
404    C=========================================================================
405    C=========================================================================
406    
407          subroutine obcs_prescribe_exf_yz (
408         I     obcsstartdate, obcsperiod,
409         I     useYearlyFields,
410         U     OBu,   OBu0,   OBu1,   OBufile,
411         U     OBv,   OBv0,   OBv1,   OBvfile,
412         U     OBt,   OBt0,   OBt1,   OBtfile,
413         U     OBs,   OBs0,   OBs1,   OBsfile,
414    #ifdef ALLOW_SEAICE
415         I     siobstartdate, siobperiod,
416         U     OBa,   OBa0,   OBa1,   OBafile,
417         U     OBh,   OBh0,   OBh1,   OBhfile,
418         U     OBsl,  OBsl0,  OBsl1,  OBslfile,
419         U     OBsn,  OBsn0,  OBsn1,  OBsnfile,
420         U     OBuice,OBuice0,OBuice1,OBuicefile,
421         U     OBvice,OBvice0,OBvice1,OBvicefile,
422    #endif
423    #ifdef ALLOW_PTRACERS
424         U     OBptr ,OBptr0, OBptr1, OBptrFile,
425  #endif  #endif
426         I     mycurrenttime, mycurrentiter, mythid
427         &     )
428    c     |==================================================================|
429    c     | SUBROUTINE obcs_prescribe_exf_yz                                 |
430    c     |==================================================================|
431    c     | read open boundary conditions from file                          |
432    c     | N.B.: * uses exf and cal routines for file/record handling       |
433    c     |       * uses ctrl routines for control variable handling         |
434    c     |==================================================================|
435    
436  #ifdef ALLOW_OBCSE_CONTROL        implicit none
437        call ctrl_getobcse ( mycurrenttime, mycurrentiter, mythid )  
438    c     == global variables ==
439    
440    #include "SIZE.h"
441    #include "EEPARAMS.h"
442    #include "PARAMS.h"
443    #ifdef ALLOW_EXF
444    # include "EXF_PARAM.h"
445  #endif  #endif
446    #ifdef ALLOW_PTRACERS
447    # include "PTRACERS_SIZE.h"
448    # include "PTRACERS_PARAMS.h"
449    #endif /* ALLOW_PTRACERS */
450    
451  #else /* not ALLOW_EXF */  c     == routine arguments ==
452        CALL OBCS_EXTERNAL_FIELDS_LOAD(  
453       &     myCurrentTime, myCurrentIter, myThid )        _RL     obcsstartdate
454  #endif /*  ALLOw_EXF */        _RL     obcsperiod
455          LOGICAL useYearlyFields
456          _RL OBu     (1-Oly:sNy+Oly,Nr,nSx,nSy)
457          _RL OBv     (1-Oly:sNy+Oly,Nr,nSx,nSy)
458          _RL OBt     (1-Oly:sNy+Oly,Nr,nSx,nSy)
459          _RL OBs     (1-Oly:sNy+Oly,Nr,nSx,nSy)
460          _RL OBu0    (1-Oly:sNy+Oly,Nr,nSx,nSy)
461          _RL OBv0    (1-Oly:sNy+Oly,Nr,nSx,nSy)
462          _RL OBt0    (1-Oly:sNy+Oly,Nr,nSx,nSy)
463          _RL OBs0    (1-Oly:sNy+Oly,Nr,nSx,nSy)
464          _RL OBu1    (1-Oly:sNy+Oly,Nr,nSx,nSy)
465          _RL OBv1    (1-Oly:sNy+Oly,Nr,nSx,nSy)
466          _RL OBt1    (1-Oly:sNy+Oly,Nr,nSx,nSy)
467          _RL OBs1    (1-Oly:sNy+Oly,Nr,nSx,nSy)
468          CHARACTER*(MAX_LEN_FNAM) OBuFile,OBvFile,OBtFile,OBsFile
469    #ifdef ALLOW_SEAICE
470          _RL     siobstartdate
471          _RL     siobperiod
472          _RL OBa     (1-Oly:sNy+Oly,nSx,nSy)
473          _RL OBh     (1-Oly:sNy+Oly,nSx,nSy)
474          _RL OBa0    (1-Oly:sNy+Oly,nSx,nSy)
475          _RL OBh0    (1-Oly:sNy+Oly,nSx,nSy)
476          _RL OBa1    (1-Oly:sNy+Oly,nSx,nSy)
477          _RL OBh1    (1-Oly:sNy+Oly,nSx,nSy)
478          _RL OBsl    (1-Oly:sNy+Oly,nSx,nSy)
479          _RL OBsn    (1-Oly:sNy+Oly,nSx,nSy)
480          _RL OBsl0   (1-Oly:sNy+Oly,nSx,nSy)
481          _RL OBsn0   (1-Oly:sNy+Oly,nSx,nSy)
482          _RL OBsl1   (1-Oly:sNy+Oly,nSx,nSy)
483          _RL OBsn1   (1-Oly:sNy+Oly,nSx,nSy)
484          _RL OBuice  (1-Oly:sNy+Oly,nSx,nSy)
485          _RL OBvice  (1-Oly:sNy+Oly,nSx,nSy)
486          _RL OBuice0 (1-Oly:sNy+Oly,nSx,nSy)
487          _RL OBvice0 (1-Oly:sNy+Oly,nSx,nSy)
488          _RL OBuice1 (1-Oly:sNy+Oly,nSx,nSy)
489          _RL OBvice1 (1-Oly:sNy+Oly,nSx,nSy)
490          CHARACTER*(MAX_LEN_FNAM)
491         &     OBaFile,OBhFile,OBslFile,OBsnFile,OBuiceFile,OBviceFile
492    #endif /* ALLOW_SEAICE */
493    #ifdef ALLOW_PTRACERS
494          _RL OBptr (1-Oly:sNy+Oly,Nr,nSx,nSy,PTRACERS_num)
495          _RL OBptr0(1-Oly:sNy+Oly,Nr,nSx,nSy,PTRACERS_num)
496          _RL OBptr1(1-Oly:sNy+Oly,Nr,nSx,nSy,PTRACERS_num)
497          CHARACTER*(MAX_LEN_FNAM) OBptrFile(PTRACERS_num)
498    #endif /* ALLOW_PTRACERS */
499          _RL     mycurrenttime
500          integer mycurrentiter
501          integer mythid
502    
503  #endif /* ALLOW_OBCS */  #if defined ALLOW_OBCS && defined ALLOW_OBCS_PRESCRIBE \
504        && defined ALLOW_EXF
505    
506        end  c     == local variables ==
507          logical first, changed
508          integer count0, count1
509          integer year0, year1
510          _RL     fac
511    # ifdef ALLOW_PTRACERS
512          integer iTracer
513    # endif /* ALLOW_PTRACERS */
514    
515    c     == end of interface ==
516          if ( obcsperiod .eq. -12 ) then
517    c     obcsperiod=-12 means input file contains 12 monthly means
518    c     record numbers are assumed 1 to 12 corresponding to
519    c     Jan. through Dec.
520           call cal_GetMonthsRec(
521         O                        fac, first, changed,
522         O                        count0, count1,
523         I                        mycurrenttime, mycurrentiter, mythid
524         &           )
525    
526          elseif ( obcsperiod .lt. 0 ) then
527           print *, 'obcsperiod is out of range'
528           STOP 'ABNORMAL END: S/R OBCS_PRESCIBE_EXF_YZ'
529          else
530    c     get record numbers and interpolation factor
531           call exf_GetFFieldRec(
532         I                       obcsstartdate, obcsperiod,
533         I                       useYearlyFields,
534         O                       fac, first, changed,
535         O                       count0, count1, year0, year1,
536         I                       mycurrenttime, mycurrentiter, mythid
537         &                      )
538          endif
539          call exf_set_obcs_yz(  OBu, OBu0, OBu1, OBufile, 'u'
540         I                     , fac, first, changed, useYearlyFields
541         I                     , obcsperiod, count0, count1, year0, year1
542         I                     , mycurrenttime, mycurrentiter, mythid )
543          call exf_set_obcs_yz(  OBv, OBv0, OBv1, OBvfile, 'v'
544         I                     , fac, first, changed, useYearlyFields
545         I                     , obcsperiod, count0, count1, year0, year1
546         I                     , mycurrenttime, mycurrentiter, mythid )
547          call exf_set_obcs_yz(  OBt, OBt0, OBt1, OBtfile, 's'
548         I                     , fac, first, changed, useYearlyFields
549         I                     , obcsperiod, count0, count1, year0, year1
550         I                     , mycurrenttime, mycurrentiter, mythid )
551          call exf_set_obcs_yz(  OBs, OBs0, OBs1, OBsfile, 's'
552         I                     , fac, first, changed, useYearlyFields
553         I                     , obcsperiod, count0, count1, year0, year1
554         I                     , mycurrenttime, mycurrentiter, mythid )
555    # ifdef ALLOW_PTRACERS
556          if ( usePTRACERS ) then
557           do iTracer = 1, PTRACERS_numInUse
558            call exf_set_obcs_yz(  OBptr (1-Olx,1,1,1,iTracer)
559         I                       , OBptr0(1-Olx,1,1,1,iTracer)
560         I                       , OBptr1(1-Olx,1,1,1,iTracer)
561         I                       , OBptrFile(iTracer), 's'
562         I                       , fac, first, changed, useYearlyFields
563         I                       , obcsperiod, count0, count1, year0, year1
564         I                       , mycurrenttime, mycurrentiter, mythid )
565           enddo
566          endif
567    # endif /* ALLOW_PTRACERS */
568    # ifdef ALLOW_SEAICE
569          IF (useSEAICE) THEN
570           if ( siobperiod .eq. -12 ) then
571    c     siobperiod=-12 means input file contains 12 monthly means
572    c     record numbers are assumed 1 to 12 corresponding to
573    c     Jan. through Dec.
574            call cal_GetMonthsRec(
575         O                        fac, first, changed,
576         O                        count0, count1,
577         I                        mycurrenttime, mycurrentiter, mythid
578         &           )
579    
580           elseif ( siobperiod .lt. 0 ) then
581            print *, 'siobperiod is out of range'
582            STOP 'ABNORMAL END: S/R OBCS_PRESCIBE_EXF_XZ'
583           else
584    c     get record numbers and interpolation factor
585            call exf_GetFFieldRec(
586         I                       siobstartdate, siobperiod,
587         I                       useYearlyFields,
588         O                       fac, first, changed,
589         O                       count0, count1, year0, year1,
590         I                       mycurrenttime, mycurrentiter, mythid
591         &                      )
592           endif
593           call exf_set_obcs_y (  OBa, OBa0, OBa1, OBafile, 's'
594         I                     , fac, first, changed, useYearlyFields
595         I                     , siobperiod, count0, count1, year0, year1
596         I                     , mycurrenttime, mycurrentiter, mythid )
597           call exf_set_obcs_y (  OBh, OBh0, OBh1, OBhfile, 's'
598         I                     , fac, first, changed, useYearlyFields
599         I                     , siobperiod, count0, count1, year0, year1
600         I                     , mycurrenttime, mycurrentiter, mythid )
601           call exf_set_obcs_y (  OBsl, OBsl0, OBsl1, OBslfile, 's'
602         I                     , fac, first, changed, useYearlyFields
603         I                     , siobperiod, count0, count1, year0, year1
604         I                     , mycurrenttime, mycurrentiter, mythid )
605           call exf_set_obcs_y (  OBsn, OBsn0, OBsn1, OBsnfile, 's'
606         I                     , fac, first, changed, useYearlyFields
607         I                     , siobperiod, count0, count1, year0, year1
608         I                     , mycurrenttime, mycurrentiter, mythid )
609           call exf_set_obcs_y ( OBuice,OBuice0,OBuice1,OBuicefile,'u'
610         I                     , fac, first, changed, useYearlyFields
611         I                     , siobperiod, count0, count1, year0, year1
612         I                     , mycurrenttime, mycurrentiter, mythid )
613           call exf_set_obcs_y ( OBvice,OBvice0,OBvice1,OBvicefile,'v'
614         I                     , fac, first, changed, useYearlyFields
615         I                     , siobperiod, count0, count1, year0, year1
616         I                     , mycurrenttime, mycurrentiter, mythid )
617          ENDIF
618    # endif /* ALLOW_SEAICE */
619    
620    #endif /* ALLOW_OBCS and ALLOW_OBCS_PRESCRIBE and ALLOW_EXF */
621          RETURN
622          END

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.23

  ViewVC Help
Powered by ViewVC 1.1.22