/[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.6 - (show annotations) (download)
Tue Apr 26 23:36:25 2011 UTC (13 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62x
Changes since 1.5: +5 -1 lines
use parameter OBCS_uvApplyFac to test momentum implementation of OBCS

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

  ViewVC Help
Powered by ViewVC 1.1.22