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

Contents of /MITgcm/pkg/obcs/obcs_apply_uv.F

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


Revision 1.7 - (show annotations) (download)
Tue May 24 14:31:14 2011 UTC (13 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62z, checkpoint62y, checkpoint63g, checkpoint63, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63a, checkpoint63b, checkpoint63c
Changes since 1.6: +4 -2 lines
split header file "OBCS.h" into 4 separated files:
  OBCS_PARAMS.h, OBCS_GRID.h, OBCS_FIELDS.h & OBCS_SEAICE.h

1 C $Header: /u/gcmpack/MITgcm/pkg/obcs/obcs_apply_uv.F,v 1.6 2011/04/26 23:36:25 jmc Exp $
2 C $Name: $
3
4 #include "OBCS_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: OBCS_APPLY_UV
8 C !INTERFACE:
9 SUBROUTINE OBCS_APPLY_UV( bi, bj, kArg,
10 U uFld, vFld,
11 I myThid )
12
13 C !DESCRIPTION:
14 C *==========================================================*
15 C | S/R OBCS_APPLY_UV
16 C *==========================================================*
17
18 C !USES:
19 IMPLICIT NONE
20 C == Global variables ==
21 #include "SIZE.h"
22 #include "EEPARAMS.h"
23 #include "PARAMS.h"
24 #include "GRID.h"
25 #include "OBCS_PARAMS.h"
26 #include "OBCS_GRID.h"
27 #include "OBCS_FIELDS.h"
28
29 C !INPUT/OUTPUT PARAMETERS:
30 C == Routine Arguments ==
31 C bi, bj :: indices of current tile
32 C kArg :: index of current level which OBC applies to
33 C or, if zero, apply to all levels
34 C uFld :: horizontal velocity field, 1rst component (zonal)
35 C vFld :: horizontal velocity field, 2nd component (meridional)
36 C myThid :: my Thread Id number
37 c INTEGER biArg, bjArg
38 INTEGER bi, bj
39 INTEGER kArg
40 _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
41 _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
42 INTEGER myThid
43 CEOP
44
45 #ifdef ALLOW_OBCS
46
47 C !LOCAL VARIABLES:
48 C == Local variables ==
49 c INTEGER bi, bj, itLo, itHi, jtLo, jtHi
50 INTEGER k, kLo, kHi
51 INTEGER i, j
52 INTEGER Iobc, Jobc
53
54 C-- Set model variables to OB values on North/South Boundaries:
55 C 2 steps: 1) set tangential component ; 2) set normal component.
56 C This ensures that the normal component is set correctly even
57 C when it conficts with tangential setting from an other OB.
58
59 c IF ( biArg.EQ.0 .OR. bjArg.EQ.0 ) THEN
60 c itLo = myBxLo(myThid)
61 c itHi = myBxHi(myThid)
62 c jtLo = myByLo(myThid)
63 c jtHi = myByHi(myThid)
64 c ELSE
65 c itLo = biArg
66 c itHi = biArg
67 c jtLo = bjArg
68 c jtHi = bjArg
69 c ENDIF
70 IF ( kArg.EQ.0 ) THEN
71 kLo = 1
72 kHi = Nr
73 ELSE
74 kLo = kArg
75 kHi = kArg
76 ENDIF
77
78 c DO bj = jtLo,jtHi
79 c DO bi = itLo,itHi
80
81 C-- Set Tangential component first:
82
83 #ifdef ALLOW_OBCS_NORTH
84 IF ( tileHasOBN(bi,bj) ) THEN
85 C Northern boundary
86 DO i=1-Olx,sNx+Olx
87 Jobc = OB_Jn(i,bi,bj)
88 IF ( Jobc.NE.0 ) THEN
89 DO k = kLo,kHi
90 uFld(i,Jobc,k,bi,bj) = OBNu(i,k,bi,bj)
91 & *_maskW(i,Jobc,k,bi,bj)
92 ENDDO
93 ENDIF
94 ENDDO
95 ENDIF
96 #endif
97 #ifdef ALLOW_OBCS_SOUTH
98 IF ( tileHasOBS(bi,bj) ) THEN
99 C Southern boundary
100 DO i=1-Olx,sNx+Olx
101 Jobc = OB_Js(i,bi,bj)
102 IF ( Jobc.NE.0 ) THEN
103 DO k = kLo,kHi
104 uFld(i,Jobc,k,bi,bj) = OBSu(i,k,bi,bj)
105 & *_maskW(i,Jobc,k,bi,bj)
106 ENDDO
107 ENDIF
108 ENDDO
109 ENDIF
110 #endif
111
112 C Set model variables to OB values on East/West Boundaries
113 #ifdef ALLOW_OBCS_EAST
114 IF ( tileHasOBE(bi,bj) ) THEN
115 C Eastern boundary
116 DO j=1-Oly,sNy+Oly
117 Iobc = OB_Ie(j,bi,bj)
118 IF ( Iobc.NE.0 ) THEN
119 DO k = kLo,kHi
120 vFld(Iobc,j,k,bi,bj) = OBEv(j,k,bi,bj)
121 & *_maskS(Iobc,j,k,bi,bj)
122 ENDDO
123 ENDIF
124 ENDDO
125 ENDIF
126 #endif
127 #ifdef ALLOW_OBCS_WEST
128 IF ( tileHasOBW(bi,bj) ) THEN
129 C Western boundary
130 DO j=1-Oly,sNy+Oly
131 Iobc = OB_Iw(j,bi,bj)
132 IF ( Iobc.NE.0 ) THEN
133 DO k = kLo,kHi
134 vFld(Iobc,j,k,bi,bj) = OBWv(j,k,bi,bj)
135 & *_maskS(Iobc,j,k,bi,bj)
136 ENDDO
137 ENDIF
138 ENDDO
139 ENDIF
140 #endif
141
142 C-- Then set Normal component:
143
144 #ifdef ALLOW_OBCS_NORTH
145 IF ( tileHasOBN(bi,bj) ) THEN
146 C Northern boundary
147 DO i=1-Olx,sNx+Olx
148 Jobc = OB_Jn(i,bi,bj)
149 IF ( Jobc.NE.0 ) THEN
150 DO k = kLo,kHi
151 vFld(i,Jobc,k,bi,bj) = OBNv(i,k,bi,bj)
152 & *_maskS(i,Jobc,k,bi,bj)
153 vFld(i,Jobc+1,k,bi,bj) = OBNv(i,k,bi,bj)
154 & *_maskS(i,Jobc,k,bi,bj)
155 & *OBCS_uvApplyFac
156 ENDDO
157 ENDIF
158 ENDDO
159 ENDIF
160 #endif
161 #ifdef ALLOW_OBCS_SOUTH
162 IF ( tileHasOBS(bi,bj) ) THEN
163 C Southern boundary
164 DO i=1-Olx,sNx+Olx
165 Jobc = OB_Js(i,bi,bj)
166 IF ( Jobc.NE.0 ) THEN
167 DO k = kLo,kHi
168 vFld(i,Jobc+1,k,bi,bj) = OBSv(i,k,bi,bj)
169 & *_maskS(i,Jobc+1,k,bi,bj)
170 vFld(i,Jobc,k,bi,bj) = OBSv(i,k,bi,bj)
171 & *_maskS(i,Jobc+1,k,bi,bj)
172 & *OBCS_uvApplyFac
173 ENDDO
174 ENDIF
175 ENDDO
176 ENDIF
177 #endif
178
179 C Set model variables to OB values on East/West Boundaries
180 #ifdef ALLOW_OBCS_EAST
181 IF ( tileHasOBE(bi,bj) ) THEN
182 C Eastern boundary
183 DO j=1-Oly,sNy+Oly
184 Iobc = OB_Ie(j,bi,bj)
185 IF ( Iobc.NE.0 ) THEN
186 DO k = kLo,kHi
187 uFld(Iobc,j,k,bi,bj) = OBEu(j,k,bi,bj)
188 & *_maskW(Iobc,j,k,bi,bj)
189 uFld(Iobc+1,j,k,bi,bj) = OBEu(j,K,bi,bj)
190 & *_maskW(Iobc,j,k,bi,bj)
191 & *OBCS_uvApplyFac
192 ENDDO
193 ENDIF
194 ENDDO
195 ENDIF
196 #endif
197 #ifdef ALLOW_OBCS_WEST
198 IF ( tileHasOBW(bi,bj) ) THEN
199 C Western boundary
200 DO j=1-Oly,sNy+Oly
201 Iobc = OB_Iw(j,bi,bj)
202 IF ( Iobc.NE.0 ) THEN
203 DO k = kLo,kHi
204 uFld(Iobc+1,j,k,bi,bj) = OBWu(j,k,bi,bj)
205 & *_maskW(Iobc+1,j,k,bi,bj)
206 uFld(Iobc,j,k,bi,bj) = OBWu(j,k,bi,bj)
207 & *_maskW(Iobc+1,j,k,bi,bj)
208 & *OBCS_uvApplyFac
209 ENDDO
210 ENDIF
211 ENDDO
212 ENDIF
213 #endif
214
215 c ENDDO
216 c ENDDO
217
218 #endif /* ALLOW_OBCS */
219
220 RETURN
221 END

  ViewVC Help
Powered by ViewVC 1.1.22