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

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

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


Revision 1.2 - (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.1: +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_adjust_uvice.F,v 1.1 2011/10/21 17:11:45 jmc Exp $
2 C $Name: $
3
4 #include "OBCS_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: OBCS_ADJUST_UVICE
8 C !INTERFACE:
9 SUBROUTINE OBCS_ADJUST_UVICE(
10 U uFld, vFld,
11 I myThid )
12
13 C !DESCRIPTION:
14 C *==========================================================*
15 C | S/R OBCS_ADJUST_UVICE
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_SEAICE.h"
28
29 C !INPUT/OUTPUT PARAMETERS:
30 C myThid :: my Thread Id number
31 _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
32 _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
33 INTEGER myThid
34
35 #if (defined (ALLOW_OBCS) && defined (ALLOW_SEAICE))
36 #ifdef OBCS_UVICE_OLD
37
38 C !LOCAL VARIABLES:
39 C I,J,K,bi,bj :: Loop counters
40 INTEGER I,J,K,bi,bj
41 CEOP
42
43 K = 1
44 DO bj=myByLo(myThid),myByHi(myThid)
45 DO bi=myBxLo(myThid),myBxHi(myThid)
46
47 C Set model variables to OB values on North/South Boundaries
48 # ifdef ALLOW_OBCS_NORTH
49 IF ( tileHasOBN(bi,bj) ) THEN
50 DO I=1-OLx,sNx+OLx
51 C Northern boundary
52 IF (OB_Jn(I,bi,bj).NE.OB_indexNone) THEN
53 # ifdef OBCS_SEAICE_COMPUTE_UVICE
54 uFld(I,OB_Jn(I,bi,bj) ,bi,bj) =
55 & _maskW(I,OB_Jn(I,bi,bj),K,bi,bj) *
56 & uFld(I,OB_Jn(I,bi,bj)-1,bi,bj)
57 vFld(I,OB_Jn(I,bi,bj) ,bi,bj) =
58 & _maskS(I,OB_Jn(I,bi,bj),K,bi,bj) *
59 & vFld(I,OB_Jn(I,bi,bj)-1,bi,bj)
60 # else /* OBCS_SEAICE_COMPUTE_UVICE */
61 # ifdef OBCS_SEAICE_AVOID_CONVERGENCE
62 vFld(I,OB_Jn(I,bi,bj),bi,bj) =
63 & max(OBNvice(I,bi,bj),vFld(I,OB_Jn(I,bi,bj),bi,bj)) *
64 & _maskS(I,OB_Jn(I,bi,bj),K,bi,bj)
65 # else /* OBCS_SEAICE_AVOID_CONVERGENCE */
66 vFld(I,OB_Jn(I,bi,bj),bi,bj) = OBNvice(I,bi,bj) *
67 & _maskS(I,OB_Jn(I,bi,bj),K,bi,bj)
68 # endif /* OBCS_SEAICE_AVOID_CONVERGENCE */
69 uFld(I,OB_Jn(I,bi,bj),bi,bj) = OBNuice(I,bi,bj) *
70 & _maskW(I,OB_Jn(I,bi,bj),K,bi,bj)
71 # ifdef OBCS_SEAICE_SMOOTH_UVICE_PERP
72 if ( _maskS(I,OB_Jn(I,bi,bj) ,K,bi,bj) .NE. 0. .AND.
73 & _maskS(I,OB_Jn(I,bi,bj)-2,K,bi,bj) .NE. 0. )
74 & vFld(I,OB_Jn(I,bi,bj)-1,bi,bj) = 0.5 _d 0 *
75 & ( vFld(I,OB_Jn(I,bi,bj) ,bi,bj) +
76 & vFld(I,OB_Jn(I,bi,bj)-2,bi,bj) ) *
77 & _maskS(I,OB_Jn(I,bi,bj)-1,K,bi,bj)
78 # endif /* OBCS_SEAICE_SMOOTH_UVICE_PERP */
79 # ifdef OBCS_SEAICE_SMOOTH_UVICE_PAR
80 if ( _maskW(I,OB_Jn(I,bi,bj) ,K,bi,bj) .NE. 0. .AND.
81 & _maskW(I,OB_Jn(I,bi,bj)-2,K,bi,bj) .NE. 0. )
82 & uFld(I,OB_Jn(I,bi,bj)-1,bi,bj) = 0.5 _d 0 *
83 & ( uFld(I,OB_Jn(I,bi,bj) ,bi,bj) +
84 & uFld(I,OB_Jn(I,bi,bj)-2,bi,bj) ) *
85 & _maskW(I,OB_Jn(I,bi,bj)-1,K,bi,bj)
86 # endif /* OBCS_SEAICE_SMOOTH_UVICE_PAR */
87 # endif /* OBCS_SEAICE_COMPUTE_UVICE */
88 ENDIF
89 ENDDO
90 ENDIF
91 # endif /* ALLOW_OBCS_NORTH */
92
93 # ifdef ALLOW_OBCS_SOUTH
94 IF ( tileHasOBS(bi,bj) ) THEN
95 DO I=1-OLx,sNx+OLx
96 C Southern boundary
97 IF (OB_Js(I,bi,bj).NE.OB_indexNone) THEN
98 # ifdef OBCS_SEAICE_COMPUTE_UVICE
99 C-jmc: this uFld looks like a bug; should be:
100 c uFld(I,OB_Js(I,bi,bj),bi,bj) =
101 c & _maskW(I,OB_Js(I,bi,bj),K,bi,bj) *
102 c & uFld(I,OB_Js(I,bi,bj)+1,bi,bj)
103 C- rather than:
104 uFld(I,OB_Js(I,bi,bj)+1,bi,bj) =
105 & _maskW(I,OB_Js(I,bi,bj)+1,K,bi,bj) *
106 & uFld(I,OB_Js(I,bi,bj)+2,bi,bj)
107 vFld(I,OB_Js(I,bi,bj)+1,bi,bj) =
108 & _maskS(I,OB_Js(I,bi,bj)+1,K,bi,bj) *
109 & vFld(I,OB_Js(I,bi,bj)+2,bi,bj)
110 # else /* OBCS_SEAICE_COMPUTE_UVICE */
111 # ifdef OBCS_SEAICE_AVOID_CONVERGENCE
112 vFld(I,OB_Js(I,bi,bj)+1,bi,bj)=
113 & min(OBSvice(I,bi,bj),vFld(I,OB_Js(I,bi,bj)+1,bi,bj))
114 & * _maskS(I,OB_Js(I,bi,bj)+1,K,bi,bj)
115 # else /* OBCS_SEAICE_AVOID_CONVERGENCE */
116 vFld(I,OB_Js(I,bi,bj)+1,bi,bj)=OBSvice(I,bi,bj)
117 & * _maskS(I,OB_Js(I,bi,bj)+1,K,bi,bj)
118 # endif /* OBCS_SEAICE_AVOID_CONVERGENCE */
119 uFld(I,OB_Js(I,bi,bj),bi,bj)=OBSuice(I,bi,bj)
120 & * _maskW(I,OB_Js(I,bi,bj),K,bi,bj)
121 # ifdef OBCS_SEAICE_SMOOTH_UVICE_PERP
122 if ( _maskS(I,OB_Js(I,bi,bj)+1,K,bi,bj) .NE. 0. .AND.
123 & _maskS(I,OB_Js(I,bi,bj)+3,K,bi,bj) .NE. 0. )
124 & vFld(I,OB_Js(I,bi,bj)+2,bi,bj) = 0.5 _d 0 *
125 & ( vFld(I,OB_Js(I,bi,bj)+1,bi,bj) +
126 & vFld(I,OB_Js(I,bi,bj)+3,bi,bj) ) *
127 & _maskS(I,OB_Js(I,bi,bj)+2,K,bi,bj)
128 # endif /* OBCS_SEAICE_SMOOTH_UVICE_PERP */
129 # ifdef OBCS_SEAICE_SMOOTH_UVICE_PAR
130 if ( _maskW(I,OB_Js(I,bi,bj) ,K,bi,bj) .NE. 0. .AND.
131 & _maskW(I,OB_Js(I,bi,bj)+2,K,bi,bj) .NE. 0. )
132 & uFld(I,OB_Js(I,bi,bj)+1,bi,bj) = 0.5 _d 0 *
133 & ( uFld(I,OB_Js(I,bi,bj) ,bi,bj) +
134 & uFld(I,OB_Js(I,bi,bj)+2,bi,bj) ) *
135 & _maskW(I,OB_Js(I,bi,bj)+1,K,bi,bj)
136 # endif /* OBCS_SEAICE_SMOOTH_UVICE_PAR */
137 # endif /* OBCS_SEAICE_COMPUTE_UVICE */
138 ENDIF
139 ENDDO
140 ENDIF
141 # endif /* ALLOW_OBCS_SOUTH */
142
143 C Set model variables to OB values on East/West Boundaries
144 # ifdef ALLOW_OBCS_EAST
145 IF ( tileHasOBE(bi,bj) ) THEN
146 DO J=1-OLy,sNy+OLy
147 C Eastern boundary
148 IF (OB_Ie(J,bi,bj).NE.OB_indexNone) THEN
149 # ifdef OBCS_SEAICE_COMPUTE_UVICE
150 uFld(OB_Ie(J,bi,bj),J,bi,bj) =
151 & _maskW(OB_Ie(J,bi,bj),J,K,bi,bj) *
152 & uFld(OB_Ie(J,bi,bj)-1,J,bi,bj)
153 vFld(OB_Ie(J,bi,bj),J,bi,bj) =
154 & _maskS(OB_Ie(J,bi,bj),J,K,bi,bj) *
155 & vFld(OB_Ie(J,bi,bj)-1,J,bi,bj)
156 # else /* OBCS_SEAICE_COMPUTE_UVICE */
157 # ifdef OBCS_SEAICE_AVOID_CONVERGENCE
158 uFld(OB_Ie(J,bi,bj),J,bi,bj)=
159 & max(OBEuice(J,bi,bj),uFld(OB_Ie(J,bi,bj),J,bi,bj))
160 & * _maskW(OB_Ie(J,bi,bj),J,K,bi,bj)
161 # else /* OBCS_SEAICE_AVOID_CONVERGENCE */
162 uFld(OB_Ie(J,bi,bj),J,bi,bj)=OBEuice(J,bi,bj)
163 & * _maskW(OB_Ie(J,bi,bj),J,K,bi,bj)
164 # endif /* OBCS_SEAICE_AVOID_CONVERGENCE */
165 vFld(OB_Ie(J,bi,bj),J,bi,bj)=OBEvice(J,bi,bj)
166 & * _maskS(OB_Ie(J,bi,bj),J,K,bi,bj)
167 # ifdef OBCS_SEAICE_SMOOTH_UVICE_PERP
168 if ( _maskW(OB_Ie(J,bi,bj) ,J,K,bi,bj) .NE. 0. .AND.
169 & _maskW(OB_Ie(J,bi,bj)-2,J,K,bi,bj) .NE. 0. )
170 & uFld(OB_Ie(J,bi,bj)-1,J,bi,bj) = 0.5 _d 0 *
171 & ( uFld(OB_Ie(J,bi,bj) ,J,bi,bj) +
172 & uFld(OB_Ie(J,bi,bj)-2,J,bi,bj) ) *
173 & _maskW(OB_Ie(J,bi,bj)-1,J,K,bi,bj)
174 # endif /* OBCS_SEAICE_SMOOTH_UVICE_PERP */
175 # ifdef OBCS_SEAICE_SMOOTH_UVICE_PAR
176 if ( _maskS(OB_Ie(J,bi,bj) ,J,K,bi,bj) .NE. 0. .AND.
177 & _maskS(OB_Ie(J,bi,bj)-2,J,K,bi,bj) .NE. 0. )
178 & vFld(OB_Ie(J,bi,bj)-1,J,bi,bj) = 0.5 _d 0 *
179 & ( vFld(OB_Ie(J,bi,bj) ,J,bi,bj) +
180 & vFld(OB_Ie(J,bi,bj)-2,J,bi,bj) ) *
181 & _maskS(OB_Ie(J,bi,bj)-1,J,K,bi,bj)
182 # endif /* OBCS_SEAICE_SMOOTH_UVICE_PAR */
183 # endif /* OBCS_SEAICE_COMPUTE_UVICE */
184 ENDIF
185 ENDDO
186 ENDIF
187 # endif /* ALLOW_OBCS_EAST */
188
189 # ifdef ALLOW_OBCS_WEST
190 IF ( tileHasOBW(bi,bj) ) THEN
191 DO J=1-OLy,sNy+OLy
192 C Western boundary
193 IF (OB_Iw(J,bi,bj).NE.OB_indexNone) THEN
194 # ifdef OBCS_SEAICE_COMPUTE_UVICE
195 uFld(OB_Iw(J,bi,bj)+1,J,bi,bj)=
196 & _maskW(OB_Iw(J,bi,bj)+1,J,K,bi,bj) *
197 & uFld(OB_Iw(J,bi,bj)+2,J,bi,bj)
198 C-jmc: this vFld looks like a bug; should be:
199 c vFld(OB_Iw(J,bi,bj),J,bi,bj)=
200 c & _maskS(OB_Iw(J,bi,bj),J,K,bi,bj) *
201 c & vFld(OB_Iw(J,bi,bj)+1,J,bi,bj)
202 C- rather than:
203 vFld(OB_Iw(J,bi,bj)+1,J,bi,bj)=
204 & _maskS(OB_Iw(J,bi,bj)+1,J,K,bi,bj) *
205 & vFld(OB_Iw(J,bi,bj)+2,J,bi,bj)
206 # else /* OBCS_SEAICE_COMPUTE_UVICE */
207 # ifdef OBCS_SEAICE_AVOID_CONVERGENCE
208 uFld(OB_Iw(J,bi,bj)+1,J,bi,bj)=
209 & min(OBWuice(J,bi,bj),uFld(OB_Iw(J,bi,bj)+1,J,bi,bj))
210 & * _maskW(OB_Iw(J,bi,bj)+1,J,K,bi,bj)
211 # else /* OBCS_SEAICE_AVOID_CONVERGENCE */
212 uFld(OB_Iw(J,bi,bj)+1,J,bi,bj)=OBWuice(J,bi,bj)
213 & * _maskW(OB_Iw(J,bi,bj)+1,J,K,bi,bj)
214 # endif /* OBCS_SEAICE_AVOID_CONVERGENCE */
215 vFld(OB_Iw(J,bi,bj),J,bi,bj)=OBWvice(J,bi,bj)
216 & * _maskS(OB_Iw(J,bi,bj),J,K,bi,bj)
217 # ifdef OBCS_SEAICE_SMOOTH_UVICE_PERP
218 if ( _maskW(OB_Iw(J,bi,bj)+1,J,K,bi,bj) .NE. 0. .AND.
219 & _maskW(OB_Iw(J,bi,bj)+3,J,K,bi,bj) .NE. 0. )
220 & uFld(OB_Iw(J,bi,bj)+2,J,bi,bj) = 0.5 _d 0 *
221 & ( uFld(OB_Iw(J,bi,bj)+1,J,bi,bj) +
222 & uFld(OB_Iw(J,bi,bj)+3,J,bi,bj) ) *
223 & _maskW(OB_Iw(J,bi,bj)+2,J,K,bi,bj)
224 # endif /* OBCS_SEAICE_SMOOTH_UVICE_PERP */
225 # ifdef OBCS_SEAICE_SMOOTH_UVICE_PAR
226 if ( _maskS(OB_Iw(J,bi,bj) ,J,K,bi,bj) .NE. 0. .AND.
227 & _maskS(OB_Iw(J,bi,bj)+2,J,K,bi,bj) .NE. 0. )
228 & vFld(OB_Iw(J,bi,bj)+1,J,bi,bj) = 0.5 _d 0 *
229 & ( vFld(OB_Iw(J,bi,bj) ,J,bi,bj) +
230 & vFld(OB_Iw(J,bi,bj)+2,J,bi,bj) ) *
231 & _maskS(OB_Iw(J,bi,bj)+1,J,K,bi,bj)
232 # endif /* OBCS_SEAICE_SMOOTH_UVICE_PAR */
233 # endif /* OBCS_SEAICE_COMPUTE_UVICE */
234 ENDIF
235 ENDDO
236 ENDIF
237 # endif /* ALLOW_OBCS_WEST */
238
239 ENDDO
240 ENDDO
241
242 CALL EXCH_UV_XY_RL( uFld, vFld, .TRUE., myThid )
243
244 #endif /* OBCS_UVICE_OLD */
245 #endif /* defined (ALLOW_OBCS) && defined (ALLOW_SEAICE) */
246
247 RETURN
248 END

  ViewVC Help
Powered by ViewVC 1.1.22