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

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

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

revision 1.1 by heimbach, Thu Jun 19 15:18:48 2003 UTC revision 1.2 by heimbach, Tue Jun 24 16:07:06 2003 UTC
# Line 0  Line 1 
1    
2    #include "CTRL_CPPOPTIONS.h"
3    #ifdef ALLOW_OBCS
4    # include "OBCS_OPTIONS.h"
5    #endif
6    
7          subroutine ctrl_obcsbal(
8         I                       mytime,
9         I                       myiter,
10         I                       mythid
11         &                     )
12    
13    c     ==================================================================
14    c     SUBROUTINE ctrl_obcsbal
15    c     ==================================================================
16    c
17    c     o volumetrically balance the control vector contribution.
18    c     o Assume the calendar is identical
19    c       for all open boundaries. Need to save the barotropic adjustment
20    c       velocity so it can be used in all ctrl_getobcs files.
21    c     o WARNING: eastern boundary (not defined) filenames have been a
22    c                problem in the past.
23    c
24    c     - started G. Gebbie, MIT-WHOI, 15-June-2002
25    c     ==================================================================
26    c     SUBROUTINE ctrl_obcsvol
27    c     ==================================================================
28    
29          implicit none
30    
31    c     == global variables ==
32    
33    #include "EEPARAMS.h"
34    #include "SIZE.h"
35    #include "PARAMS.h"
36    #include "GRID.h"
37    #include "DYNVARS.h"
38    #ifdef ALLOW_OBCS
39    # include "OBCS.h"
40    #endif
41    
42    #ifdef ALLOW_CALENDAR
43    # include "cal.h"
44    #endif
45    #include "cost.h"
46    #include "ctrl.h"
47    #include "ctrl_dummy.h"
48    #include "optim.h"
49    
50    c     == routine arguments ==
51    
52          integer myiter
53          _RL     mytime
54          integer mythid
55    
56    c     == local variables ==
57    
58          integer bi,bj
59          integer i,j,k
60          integer itlo,ithi
61          integer jtlo,jthi
62          integer jmin,jmax
63          integer imin,imax
64          integer irec
65          integer il
66          integer iobcs
67          integer ip1
68          integer jp1
69          integer nrec
70          integer ilfld
71          integer igg
72    
73          _RL volflux
74          _RL area
75          _RL tmpflux
76          _RL tmparea
77          _RL dummy
78          _RL gg
79          _RL tmpx
80          _RL tmpy
81          _RL obcsnfac
82          character*(80) fnamefldn
83          character*(80) fnameflds
84          character*(80) fnamefldw
85          character*(80) fnameflde
86    
87          logical doglobalread
88          logical ladinit
89          logical obcsnfirst, obcsnchanged
90          integer obcsncount0, obcsncount1
91    
92    #ifdef ECCO_VERBOSE
93          character*(MAX_LEN_MBUF) msgbuf
94    #endif
95    
96    c     == external functions ==
97    
98          integer  ilnblnk
99          external ilnblnk
100    
101    c     == end of interface ==
102    
103          jtlo = mybylo(mythid)
104          jthi = mybyhi(mythid)
105          itlo = mybxlo(mythid)
106          ithi = mybxhi(mythid)
107          jmin = 1
108          jmax = sny
109          imin = 1
110          imax = snx
111    
112    c--   Read tiled data.
113          doglobalread = .false.
114          ladinit      = .false.
115    
116    cgg   Assume the number of records is the same for
117    cgg   all boundaries. Needs to be improved someday.
118    
119    #if   (defined (ALLOW_OBCS_CONTROL) || \
120           defined (ALLOW_OBCS_COST_CONTRIBUTION))
121    
122          tmpflux= 0. d 0
123          tmparea= 0. d 0
124          area= 0. d 0
125          volflux = 0. d 0
126    
127    #ifdef ECCO_VERBOSE
128          _BEGIN_MASTER( mythid )
129          write(msgbuf,'(a)') ' '
130          call print_message( msgbuf, standardmessageunit,
131         &                    SQUEEZE_RIGHT , mythid)
132          write(msgbuf,'(a)') ' '
133          call print_message( msgbuf, standardmessageunit,
134         &                    SQUEEZE_RIGHT , mythid)
135          write(msgbuf,'(a,i9.8)')
136         &  ' ctrl_obcsvol: number of records to process: ',nrec
137          call print_message( msgbuf, standardmessageunit,
138         &                    SQUEEZE_RIGHT , mythid)
139          write(msgbuf,'(a)') ' '
140          call print_message( msgbuf, standardmessageunit,
141         &                    SQUEEZE_RIGHT , mythid)
142          _END_MASTER( mythid )
143    #endif
144    
145    c--   Get the counters, flags, and the interpolation factor.
146          call ctrl_GetRec( 'xx_obcsn',
147         O                   obcsnfac, obcsnfirst, obcsnchanged,
148         O                   obcsncount0,obcsncount1,
149         I                   mytime, myiter, mythid )
150    
151    c--   Loop over records. For north boundary, we only need V velocity.
152    
153          if ( obcsnfirst ) then
154    
155            shiftvel(1) = 0. d0
156            shiftvel(2) = 0. d0
157    
158            call ctrl_volflux( obcsncount0, area, volflux, mythid)
159    
160    c--   Do the global summation.
161            _GLOBAL_SUM_R8( volflux, mythid )
162            _GLOBAL_SUM_R8( area,mythid )
163    
164            shiftvel(2) = volflux / area
165            print*,'volflux,area',volflux,area
166          endif  
167    cgg    End of the obcsnfirst loop.
168    
169          if ( ( obcsnfirst) .or. (obcsnchanged)) then
170    
171    cgg     Swap the value.
172            shiftvel(1) = shiftvel(2)
173    
174            volflux = 0. d0
175            area= 0. d0
176    
177            call ctrl_volflux( obcsncount1, area, volflux, mythid)
178    
179    c--   Do the global summation.
180            _GLOBAL_SUM_R8( volflux, mythid )
181            _GLOBAL_SUM_R8( area,mythid )
182    
183            shiftvel(2) = volflux /area
184            print*,'volflux,area',volflux,area
185    
186          endif  
187    cgg    End of the obcsnfirst, obcsnchanged loop.
188    
189    #endif
190    
191          return
192          end
193    
194    
195    
196    
197    
198    
199    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

  ViewVC Help
Powered by ViewVC 1.1.22