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

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

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


Revision 1.17 - (show annotations) (download)
Tue Sep 18 20:09:17 2012 UTC (11 years, 7 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint64, checkpoint65, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.16: +9 -9 lines
use new parameter OB_indexNone for null index value (instead of hard-coded 0)

1 C $Header: /u/gcmpack/MITgcm/pkg/obcs/obcs_apply_uvice.F,v 1.16 2012/03/06 15:37:24 jmc Exp $
2 C $Name: $
3
4 #include "OBCS_OPTIONS.h"
5 #ifdef ALLOW_SEAICE
6 #include "SEAICE_OPTIONS.h"
7 #endif
8
9 CBOP
10 C !ROUTINE: OBCS_APPLY_UVICE
11 C !INTERFACE:
12 SUBROUTINE OBCS_APPLY_UVICE(
13 U uFld, vFld,
14 I myThid )
15
16 C !DESCRIPTION:
17 C *==========================================================*
18 C | S/R OBCS_APPLY_UVICE
19 C | Apply OB values to corresponding field array
20 C *==========================================================*
21
22 C !USES:
23 IMPLICIT NONE
24 C == Global variables ==
25 #include "SIZE.h"
26 #include "EEPARAMS.h"
27 #include "PARAMS.h"
28 c#include "GRID.h"
29 #include "OBCS_PARAMS.h"
30 #include "OBCS_GRID.h"
31 #include "OBCS_SEAICE.h"
32 #ifdef ALLOW_SEAICE
33 # include "SEAICE_SIZE.h"
34 # include "SEAICE.h"
35 #endif
36
37 C !INPUT/OUTPUT PARAMETERS:
38 C == Routine Arguments ==
39 C uFld :: horizontal velocity field, 1rst component (zonal)
40 C vFld :: horizontal velocity field, 2nd component (meridional)
41 C myThid :: my Thread Id number
42 _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
43 _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
44 INTEGER myThid
45
46 #ifdef ALLOW_SEAICE
47 #ifdef SEAICE_CGRID
48 #ifndef OBCS_UVICE_OLD
49
50 C !LOCAL VARIABLES:
51 C bi, bj :: indices of current tile
52 C i, j :: Loop counters
53 INTEGER bi, bj
54 INTEGER i, j
55 INTEGER Iobc, Jobc
56 _RL uvIceApplyFac
57 CEOP
58
59 C-- Set model variables to OB values on North/South Boundaries:
60 C 2 steps: 1) set tangential component ; 2) set normal component.
61 C This ensures that the normal component is set correctly even
62 C when it conficts with tangential setting from an other OB.
63
64 uvIceApplyFac = OBCS_uvApplyFac
65 c IF ( OBCS_monitorFreq.EQ.1. ) uvIceApplyFac = -1.
66 c IF ( OBCS_monitorFreq.EQ.deltaTmom*0.5 ) uvIceApplyFac = 0.
67 c IF ( OBCS_monitorFreq.EQ.deltaTmom ) uvIceApplyFac = 1.
68 c WRITE(standardMessageUnit,*)
69 c 'OBCS_APPLY_UVICE: uvIceApplyFac=', uvIceApplyFac
70
71 DO bj=myByLo(myThid),myByHi(myThid)
72 DO bi=myBxLo(myThid),myBxHi(myThid)
73
74 C-- Set Tangential component first:
75
76 C Set model variables to OB values on North/South Boundaries
77 # ifdef ALLOW_OBCS_NORTH
78 IF ( tileHasOBN(bi,bj) ) THEN
79 C Northern boundary
80 DO i=1-OLx,sNx+OLx
81 Jobc = OB_Jn(i,bi,bj)
82 IF ( Jobc.NE.OB_indexNone ) THEN
83 uFld(i,Jobc,bi,bj) = OBNuice(i,bi,bj)
84 & *seaiceMaskU(i,Jobc,bi,bj)
85 ENDIF
86 ENDDO
87 ENDIF
88 # endif /* ALLOW_OBCS_NORTH */
89
90 # ifdef ALLOW_OBCS_SOUTH
91 IF ( tileHasOBS(bi,bj) ) THEN
92 C Southern boundary
93 DO i=1-OLx,sNx+OLx
94 Jobc = OB_Js(i,bi,bj)
95 IF ( Jobc.NE.OB_indexNone ) THEN
96 uFld(i,Jobc,bi,bj) = OBSuice(i,bi,bj)
97 & *seaiceMaskU(i,Jobc,bi,bj)
98 ENDIF
99 ENDDO
100 ENDIF
101 # endif /* ALLOW_OBCS_SOUTH */
102
103 C Set model variables to OB values on East/West Boundaries
104 # ifdef ALLOW_OBCS_EAST
105 IF ( tileHasOBE(bi,bj) ) THEN
106 C Eastern boundary
107 DO j=1-OLy,sNy+OLy
108 Iobc = OB_Ie(j,bi,bj)
109 IF ( Iobc.NE.OB_indexNone ) THEN
110 vFld(Iobc,j,bi,bj) = OBEvice(j,bi,bj)
111 & *seaiceMaskV(Iobc,j,bi,bj)
112 ENDIF
113 ENDDO
114 ENDIF
115 # endif /* ALLOW_OBCS_EAST */
116
117 # ifdef ALLOW_OBCS_WEST
118 IF ( tileHasOBW(bi,bj) ) THEN
119 C Western boundary
120 DO j=1-OLy,sNy+OLy
121 Iobc = OB_Iw(j,bi,bj)
122 IF ( Iobc.NE.OB_indexNone ) THEN
123 vFld(Iobc,j,bi,bj) = OBWvice(j,bi,bj)
124 & *seaiceMaskV(Iobc,j,bi,bj)
125 ENDIF
126 ENDDO
127 ENDIF
128 # endif /* ALLOW_OBCS_WEST */
129
130 C-- Then set Normal component:
131
132 C Set model variables to OB values on North/South Boundaries
133 # ifdef ALLOW_OBCS_NORTH
134 IF ( tileHasOBN(bi,bj) ) THEN
135 C Northern boundary
136 DO i=1-OLx,sNx+OLx
137 Jobc = OB_Jn(i,bi,bj)
138 IF ( Jobc.NE.OB_indexNone ) THEN
139 vFld(i,Jobc,bi,bj) = OBNvice(i,bi,bj)
140 & *seaiceMaskV(i,Jobc,bi,bj)
141 IF ( uvIceApplyFac.GE.0. )
142 & vFld(i,Jobc+1,bi,bj) = OBNvice(i,bi,bj)
143 & *seaiceMaskV(i,Jobc,bi,bj)
144 & *uvIceApplyFac
145 ENDIF
146 ENDDO
147 ENDIF
148 # endif /* ALLOW_OBCS_NORTH */
149
150 # ifdef ALLOW_OBCS_SOUTH
151 IF ( tileHasOBS(bi,bj) ) THEN
152 C Southern boundary
153 DO i=1-OLx,sNx+OLx
154 Jobc = OB_Js(i,bi,bj)
155 IF ( Jobc.NE.OB_indexNone ) THEN
156 vFld(i,Jobc+1,bi,bj) = OBSvice(i,bi,bj)
157 & *seaiceMaskV(i,Jobc+1,bi,bj)
158 IF ( uvIceApplyFac.GE.0. )
159 & vFld(i,Jobc,bi,bj) = OBSvice(i,bi,bj)
160 & *seaiceMaskV(i,Jobc+1,bi,bj)
161 & *uvIceApplyFac
162 ENDIF
163 ENDDO
164 ENDIF
165 # endif /* ALLOW_OBCS_SOUTH */
166
167 C Set model variables to OB values on East/West Boundaries
168 # ifdef ALLOW_OBCS_EAST
169 IF ( tileHasOBE(bi,bj) ) THEN
170 C Eastern boundary
171 DO j=1-OLy,sNy+OLy
172 Iobc = OB_Ie(j,bi,bj)
173 IF ( Iobc.NE.OB_indexNone ) THEN
174 uFld(Iobc,j,bi,bj) = OBEuice(j,bi,bj)
175 & *seaiceMaskU(Iobc,j,bi,bj)
176 IF ( uvIceApplyFac.GE.0. )
177 & uFld(Iobc+1,j,bi,bj) = OBEuice(j,bi,bj)
178 & *seaiceMaskU(Iobc,j,bi,bj)
179 & *uvIceApplyFac
180 ENDIF
181 ENDDO
182 ENDIF
183 # endif /* ALLOW_OBCS_EAST */
184
185 # ifdef ALLOW_OBCS_WEST
186 IF ( tileHasOBW(bi,bj) ) THEN
187 C Western boundary
188 DO j=1-OLy,sNy+OLy
189 Iobc = OB_Iw(j,bi,bj)
190 IF ( Iobc.NE.OB_indexNone ) THEN
191 uFld(Iobc+1,j,bi,bj) = OBWuice(j,bi,bj)
192 & *seaiceMaskU(Iobc+1,j,bi,bj)
193 IF ( uvIceApplyFac.GE.0. )
194 & uFld(Iobc,j,bi,bj) = OBWuice(j,bi,bj)
195 & *seaiceMaskU(Iobc+1,j,bi,bj)
196 & *uvIceApplyFac
197 ENDIF
198 ENDDO
199 ENDIF
200 # endif /* ALLOW_OBCS_WEST */
201
202 ENDDO
203 ENDDO
204
205 CALL EXCH_UV_XY_RL( uFld, vFld,.TRUE.,myThid)
206
207 #endif /* ndef OBCS_UVICE_OLD */
208 #endif /* SEAICE_CGRID */
209 #endif /* ALLOW_SEAICE */
210
211 RETURN
212 END

  ViewVC Help
Powered by ViewVC 1.1.22