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

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

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


Revision 1.4 - (hide annotations) (download)
Mon Oct 25 22:55:16 2010 UTC (13 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62o, checkpoint62n
Changes since 1.3: +115 -49 lines
add option to process all levels (if argument k = 0);
use flag tileHasOB[N,S,E,W].

1 jmc 1.4 C $Header: /u/gcmpack/MITgcm/pkg/obcs/obcs_apply_uv.F,v 1.3 2004/09/20 23:22:57 heimbach Exp $
2 heimbach 1.3 C $Name: $
3 adcroft 1.2
4     #include "OBCS_OPTIONS.h"
5    
6 jmc 1.4 CBOP
7     C !ROUTINE: OBCS_APPLY_UV
8     C !INTERFACE:
9     SUBROUTINE OBCS_APPLY_UV( bi, bj, kArg,
10 adcroft 1.2 U uFld, vFld,
11     I myThid )
12 jmc 1.4
13     C !DESCRIPTION:
14     C *==========================================================*
15     C | S/R OBCS_APPLY_UV
16     C *==========================================================*
17    
18     C !USES:
19 adcroft 1.2 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 jmc 1.4 C !INPUT/OUTPUT PARAMETERS:
28 adcroft 1.2 C == Routine Arguments ==
29 jmc 1.4 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 adcroft 1.2 _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 jmc 1.4 CEOP
42 adcroft 1.2
43     #ifdef ALLOW_OBCS
44    
45 jmc 1.4 C !LOCAL VARIABLES:
46 adcroft 1.2 C == Local variables ==
47 jmc 1.4 c INTEGER bi, bj, itLo, itHi, jtLo, jtHi
48     INTEGER k, kLo, kHi
49     INTEGER i, j
50     INTEGER Iobc, Jobc
51    
52     c IF ( biArg.EQ.0 .OR. bjArg.EQ.0 ) THEN
53     c itLo = myBxLo(myThid)
54     c itHi = myBxHi(myThid)
55     c jtLo = myByLo(myThid)
56     c jtHi = myByHi(myThid)
57     c ELSE
58     c itLo = biArg
59     c itHi = biArg
60     c jtLo = bjArg
61     c jtHi = bjArg
62     c ENDIF
63     IF ( kArg.EQ.0 ) THEN
64     kLo = 1
65     kHi = Nr
66     ELSE
67     kLo = kArg
68     kHi = kArg
69     ENDIF
70    
71     c DO bj = jtLo,jtHi
72     c DO bi = itLo,itHi
73 adcroft 1.2
74     C Set model variables to OB values on North/South Boundaries
75 heimbach 1.3 #ifdef ALLOW_OBCS_NORTH
76 jmc 1.4 IF ( tileHasOBN(bi,bj) ) THEN
77 adcroft 1.2 C Northern boundary
78 jmc 1.4 DO i=1-Olx,sNx+Olx
79     Jobc = OB_Jn(i,bi,bj)
80     IF ( Jobc.NE.0 ) THEN
81     DO k = kLo,kHi
82     vFld(i,Jobc,k,bi,bj) = OBNv(i,k,bi,bj)
83     & *_maskS(i,Jobc,k,bi,bj)
84     uFld(i,Jobc,k,bi,bj) = OBNu(i,k,bi,bj)
85     & *_maskW(i,Jobc,k,bi,bj)
86     vFld(i,Jobc+1,k,bi,bj) = OBNv(i,k,bi,bj)
87     & *_maskS(i,Jobc,k,bi,bj)
88     ENDDO
89     ENDIF
90     ENDDO
91     ENDIF
92 heimbach 1.3 #endif
93     #ifdef ALLOW_OBCS_SOUTH
94 jmc 1.4 IF ( tileHasOBS(bi,bj) ) THEN
95 adcroft 1.2 C Southern boundary
96 jmc 1.4 DO i=1-Olx,sNx+Olx
97     Jobc = OB_Js(i,bi,bj)
98     IF ( Jobc.NE.0 ) THEN
99     DO k = kLo,kHi
100     vFld(i,Jobc+1,k,bi,bj) = OBSv(i,k,bi,bj)
101     & *_maskS(i,Jobc+1,k,bi,bj)
102     uFld(i,Jobc,k,bi,bj) = OBSu(i,k,bi,bj)
103     & *_maskW(i,Jobc,k,bi,bj)
104     vFld(i,Jobc,k,bi,bj) = OBSv(i,k,bi,bj)
105     & *_maskS(i,Jobc+1,k,bi,bj)
106     ENDDO
107     ENDIF
108     ENDDO
109     ENDIF
110 heimbach 1.3 #endif
111 adcroft 1.2
112     C Set model variables to OB values on East/West Boundaries
113 heimbach 1.3 #ifdef ALLOW_OBCS_EAST
114 jmc 1.4 IF ( tileHasOBE(bi,bj) ) THEN
115 adcroft 1.2 C Eastern boundary
116 jmc 1.4 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     uFld(Iobc,j,k,bi,bj) = OBEu(j,k,bi,bj)
121     & *_maskW(Iobc,j,k,bi,bj)
122     vFld(Iobc,j,k,bi,bj) = OBEv(j,k,bi,bj)
123     & *_maskS(Iobc,j,k,bi,bj)
124     uFld(Iobc+1,j,k,bi,bj) = OBEu(j,K,bi,bj)
125     & *_maskW(Iobc,j,k,bi,bj)
126     ENDDO
127     ENDIF
128     ENDDO
129     ENDIF
130 heimbach 1.3 #endif
131     #ifdef ALLOW_OBCS_WEST
132 jmc 1.4 IF ( tileHasOBW(bi,bj) ) THEN
133 adcroft 1.2 C Western boundary
134 jmc 1.4 DO j=1-Oly,sNy+Oly
135     Iobc = OB_Iw(j,bi,bj)
136     IF ( Iobc.NE.0 ) THEN
137     DO k = kLo,kHi
138     uFld(Iobc+1,j,k,bi,bj) = OBWu(j,k,bi,bj)
139     & *_maskW(Iobc+1,j,k,bi,bj)
140     vFld(Iobc,j,k,bi,bj) = OBWv(j,k,bi,bj)
141     & *_maskS(Iobc,j,k,bi,bj)
142     uFld(Iobc,j,k,bi,bj) = OBWu(j,k,bi,bj)
143     & *_maskW(Iobc+1,j,k,bi,bj)
144     ENDDO
145     ENDIF
146     ENDDO
147     ENDIF
148 heimbach 1.3 #endif
149 adcroft 1.2
150 jmc 1.4 c ENDDO
151     c ENDDO
152    
153     #endif /* ALLOW_OBCS */
154    
155 adcroft 1.2 RETURN
156     END

  ViewVC Help
Powered by ViewVC 1.1.22