1 |
C $Header: /u/gcmpack/MITgcm/pkg/obcs/obcs_apply_uvice.F,v 1.6 2007/12/21 00:39:44 dimitri Exp $ |
2 |
C $Name: $ |
3 |
|
4 |
#undef OBCS_SEAICE_SMOOTH_UVICE |
5 |
#undef OBCS_SEAICE_COMPUTE_UVICE |
6 |
|
7 |
#include "OBCS_OPTIONS.h" |
8 |
|
9 |
SUBROUTINE OBCS_APPLY_UVICE( |
10 |
U uFld, vFld, |
11 |
I myThid ) |
12 |
C /==========================================================\ |
13 |
C | S/R OBCS_APPLY_UVICE | |
14 |
C \==========================================================/ |
15 |
IMPLICIT NONE |
16 |
C == Global variables == |
17 |
#include "SIZE.h" |
18 |
#include "EEPARAMS.h" |
19 |
#include "PARAMS.h" |
20 |
#include "GRID.h" |
21 |
#include "OBCS.h" |
22 |
|
23 |
C == Routine Arguments == |
24 |
_RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,3,nSx,nSy) |
25 |
_RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,3,nSx,nSy) |
26 |
INTEGER myThid |
27 |
|
28 |
#if (defined (ALLOW_OBCS) && defined (ALLOW_SEAICE)) |
29 |
|
30 |
C == Local variables == |
31 |
C I,J,K,bi,bj - Loop counters |
32 |
INTEGER I,J,K,bi,bj |
33 |
K = 1 |
34 |
|
35 |
DO bj=myByLo(myThid),myByHi(myThid) |
36 |
DO bi=myBxLo(myThid),myBxHi(myThid) |
37 |
|
38 |
C Set model variables to OB values on North/South Boundaries |
39 |
#ifdef ALLOW_OBCS_NORTH |
40 |
if ( OBNvicefile .NE. ' ' ) then |
41 |
DO I=1-Olx,sNx+Olx |
42 |
C Northern boundary |
43 |
IF (OB_Jn(I,bi,bj).NE.0) THEN |
44 |
#ifdef OBCS_SEAICE_COMPUTE_UVICE |
45 |
vFld(I,OB_Jn(I,bi,bj) ,1,bi,bj) = |
46 |
& _maskS(I,OB_Jn(I,bi,bj),K,bi,bj) * |
47 |
& vFld(I,OB_Jn(I,bi,bj)-1,1,bi,bj) |
48 |
#else |
49 |
#ifdef OBCS_SEAICE_AVOID_CONVERGENCE |
50 |
vFld(I,OB_Jn(I,bi,bj),1,bi,bj)= |
51 |
& max(OBNvice(I,bi,bj),vFld(I,OB_Jn(I,bi,bj),1,bi,bj)) |
52 |
& * _maskS(I,OB_Jn(I,bi,bj),K,bi,bj) |
53 |
#else |
54 |
vFld(I,OB_Jn(I,bi,bj),1,bi,bj)=OBNvice(I,bi,bj) |
55 |
& *_maskS(I,OB_Jn(I,bi,bj),K,bi,bj) |
56 |
#endif /* OBCS_SEAICE_AVOID_CONVERGENCE */ |
57 |
uFld(I,OB_Jn(I,bi,bj),1,bi,bj)=OBNuice(I,bi,bj) |
58 |
& *_maskW(I,OB_Jn(I,bi,bj),K,bi,bj) |
59 |
#ifdef OBCS_SEAICE_SMOOTH_UVICE |
60 |
if ( _maskS(I,OB_Jn(I,bi,bj) ,K,bi,bj) .NE. 0. .AND. |
61 |
& _maskS(I,OB_Jn(I,bi,bj)-2,K,bi,bj) .NE. 0. ) |
62 |
& vFld(I,OB_Jn(I,bi,bj)-1,1,bi,bj) = 0.5 _d 0 * |
63 |
& ( vFld(I,OB_Jn(I,bi,bj) ,1,bi,bj) + |
64 |
& vFld(I,OB_Jn(I,bi,bj)-2,1,bi,bj) ) * |
65 |
& _maskS(I,OB_Jn(I,bi,bj)-1,K,bi,bj) |
66 |
c uFld(I,OB_Jn(I,bi,bj)-1,1,bi,bj) = 0.5 _d 0 * |
67 |
c & ( uFld(I,OB_Jn(I,bi,bj) ,1,bi,bj) + |
68 |
c & uFld(I,OB_Jn(I,bi,bj)-2,1,bi,bj) ) * |
69 |
c & _maskW(I,OB_Jn(I,bi,bj)-1,K,bi,bj) |
70 |
#endif /* OBCS_SEAICE_SMOOTH_UVICE */ |
71 |
#endif /* OBCS_SEAICE_COMPUTE_UVICE */ |
72 |
ENDIF |
73 |
ENDDO |
74 |
endif |
75 |
#endif /* ALLOW_OBCS_NORTH */ |
76 |
#ifdef ALLOW_OBCS_SOUTH |
77 |
if ( OBSvicefile .NE. ' ' ) then |
78 |
DO I=1-Olx,sNx+Olx |
79 |
C Southern boundary |
80 |
IF (OB_Js(I,bi,bj).NE.0) THEN |
81 |
#ifdef OBCS_SEAICE_COMPUTE_UVICE |
82 |
vFld(I,OB_Js(I,bi,bj)+1,1,bi,bj) = |
83 |
& _maskS(I,OB_Js(I,bi,bj)+1,K,bi,bj) * |
84 |
& vFld(I,OB_Js(I,bi,bj)+2,1,bi,bj) |
85 |
#else |
86 |
#ifdef OBCS_SEAICE_AVOID_CONVERGENCE |
87 |
vFld(I,OB_Js(I,bi,bj)+1,1,bi,bj)= |
88 |
& min(OBSvice(I,bi,bj),vFld(I,OB_Js(I,bi,bj)+1,1,bi,bj)) |
89 |
& * _maskS(I,OB_Js(I,bi,bj)+1,K,bi,bj) |
90 |
#else |
91 |
vFld(I,OB_Js(I,bi,bj)+1,1,bi,bj)=OBSvice(I,bi,bj) |
92 |
& *_maskS(I,OB_Js(I,bi,bj)+1,K,bi,bj) |
93 |
#endif /* OBCS_SEAICE_AVOID_CONVERGENCE */ |
94 |
uFld(I,OB_Js(I,bi,bj),1,bi,bj)=OBSuice(I,bi,bj) |
95 |
& *_maskW(I,OB_Js(I,bi,bj),K,bi,bj) |
96 |
#ifdef OBCS_SEAICE_SMOOTH_UVICE |
97 |
if ( _maskS(I,OB_Js(I,bi,bj)+1,K,bi,bj) .NE. 0. .AND. |
98 |
& _maskS(I,OB_Js(I,bi,bj)+3,K,bi,bj) .NE. 0. ) |
99 |
& vFld(I,OB_Js(I,bi,bj)+2,1,bi,bj) = 0.5 _d 0 * |
100 |
& ( vFld(I,OB_Js(I,bi,bj)+1,1,bi,bj) + |
101 |
& vFld(I,OB_Js(I,bi,bj)+3,1,bi,bj) ) * |
102 |
& _maskS(I,OB_Js(I,bi,bj)+2,K,bi,bj) |
103 |
c uFld(I,OB_Js(I,bi,bj)+1,1,bi,bj) = 0.5 _d 0 * |
104 |
c & ( uFld(I,OB_Js(I,bi,bj) ,1,bi,bj) + |
105 |
c & uFld(I,OB_Js(I,bi,bj)+2,1,bi,bj) ) * |
106 |
c & _maskW(I,OB_Js(I,bi,bj)+1,K,bi,bj) |
107 |
#endif /* OBCS_SEAICE_SMOOTH_UVICE */ |
108 |
#endif /* OBCS_SEAICE_COMPUTE_UVICE */ |
109 |
ENDIF |
110 |
ENDDO |
111 |
endif |
112 |
#endif /* ALLOW_OBCS_SOUTH */ |
113 |
|
114 |
C Set model variables to OB values on East/West Boundaries |
115 |
#ifdef ALLOW_OBCS_EAST |
116 |
if ( OBEuicefile .NE. ' ' ) then |
117 |
DO J=1-Oly,sNy+Oly |
118 |
C Eastern boundary |
119 |
IF (OB_Ie(J,bi,bj).NE.0) THEN |
120 |
#ifdef OBCS_SEAICE_COMPUTE_UVICE |
121 |
uFld(OB_Ie(J,bi,bj),J,1,bi,bj) = |
122 |
& _maskW(OB_Ie(J,bi,bj),J,K,bi,bj) * |
123 |
& uFld(OB_Ie(J,bi,bj)-1,J,1,bi,bj) |
124 |
#else |
125 |
#ifdef OBCS_SEAICE_AVOID_CONVERGENCE |
126 |
uFld(OB_Ie(J,bi,bj),J,1,bi,bj)= |
127 |
& max(OBEuice(J,bi,bj),uFld(OB_Ie(J,bi,bj),J,1,bi,bj)) |
128 |
& * _maskW(OB_Ie(J,bi,bj),J,K,bi,bj) |
129 |
#else |
130 |
uFld(OB_Ie(J,bi,bj),J,1,bi,bj)=OBEuice(J,bi,bj) |
131 |
& *_maskW(OB_Ie(J,bi,bj),J,K,bi,bj) |
132 |
#endif /* OBCS_SEAICE_AVOID_CONVERGENCE */ |
133 |
vFld(OB_Ie(J,bi,bj),J,1,bi,bj)=OBEvice(J,bi,bj) |
134 |
& *_maskS(OB_Ie(J,bi,bj),J,K,bi,bj) |
135 |
#ifdef OBCS_SEAICE_SMOOTH_UVICE |
136 |
if ( _maskW(OB_Ie(J,bi,bj) ,J,K,bi,bj) .NE. 0. .AND. |
137 |
& _maskW(OB_Ie(J,bi,bj)-2,J,K,bi,bj) .NE. 0. ) |
138 |
& uFld(OB_Ie(J,bi,bj)-1,J,1,bi,bj) = 0.5 _d 0 * |
139 |
& ( uFld(OB_Ie(J,bi,bj) ,J,1,bi,bj) + |
140 |
& uFld(OB_Ie(J,bi,bj)-2,J,1,bi,bj) ) * |
141 |
& _maskW(OB_Ie(J,bi,bj)-1,J,K,bi,bj) |
142 |
c vFld(OB_Ie(J,bi,bj)-1,J,1,bi,bj) = 0.5 _d 0 * |
143 |
c & ( vFld(OB_Ie(J,bi,bj) ,J,1,bi,bj) + |
144 |
c & vFld(OB_Ie(J,bi,bj)-2,J,1,bi,bj) ) * |
145 |
c & _maskS(OB_Ie(J,bi,bj)-1,J,K,bi,bj) |
146 |
#endif /* OBCS_SEAICE_SMOOTH_UVICE */ |
147 |
#endif /* OBCS_SEAICE_COMPUTE_UVICE */ |
148 |
ENDIF |
149 |
ENDDO |
150 |
endif |
151 |
#endif /* ALLOW_OBCS_EAST */ |
152 |
#ifdef ALLOW_OBCS_WEST |
153 |
if ( OBWuicefile .NE. ' ' ) then |
154 |
DO J=1-Oly,sNy+Oly |
155 |
C Western boundary |
156 |
IF (OB_Iw(J,bi,bj).NE.0) THEN |
157 |
#ifdef OBCS_SEAICE_COMPUTE_UVICE |
158 |
uFld(OB_Iw(J,bi,bj)+1,J,1,bi,bj)= |
159 |
& _maskW(OB_Iw(J,bi,bj)+1,J,K,bi,bj) * |
160 |
& uFld(OB_Ie(J,bi,bj)+2,J,1,bi,bj) |
161 |
#else |
162 |
#ifdef OBCS_SEAICE_AVOID_CONVERGENCE |
163 |
uFld(OB_Iw(J,bi,bj)+1,J,1,bi,bj)= |
164 |
& min(OBWuice(J,bi,bj),uFld(OB_Iw(J,bi,bj)+1,J,1,bi,bj)) |
165 |
& * _maskW(OB_Iw(J,bi,bj)+1,J,K,bi,bj) |
166 |
#else |
167 |
uFld(OB_Iw(J,bi,bj)+1,J,1,bi,bj)=OBWuice(J,bi,bj) |
168 |
& *_maskW(OB_Iw(J,bi,bj)+1,J,K,bi,bj) |
169 |
#endif /* OBCS_SEAICE_AVOID_CONVERGENCE */ |
170 |
if ( _maskW(OB_Iw(J,bi,bj)+1,J,K,bi,bj) .NE. 0. .AND. |
171 |
& _maskW(OB_Iw(J,bi,bj)+3,J,K,bi,bj) .NE. 0. ) |
172 |
& vFld(OB_Iw(J,bi,bj),J,1,bi,bj)=OBWvice(J,bi,bj) |
173 |
& *_maskS(OB_Iw(J,bi,bj),J,K,bi,bj) |
174 |
#ifdef OBCS_SEAICE_SMOOTH_UVICE |
175 |
uFld(OB_Ie(J,bi,bj)+2,J,1,bi,bj) = 0.5 _d 0 * |
176 |
& ( uFld(OB_Ie(J,bi,bj)+1,J,1,bi,bj) + |
177 |
& uFld(OB_Ie(J,bi,bj)+3,J,1,bi,bj) ) * |
178 |
& _maskW(OB_Ie(J,bi,bj)+2,J,K,bi,bj) |
179 |
c vFld(OB_Ie(J,bi,bj)+1,J,1,bi,bj) = 0.5 _d 0 * |
180 |
c & ( vFld(OB_Ie(J,bi,bj) ,J,1,bi,bj) + |
181 |
c & vFld(OB_Ie(J,bi,bj)+2,J,1,bi,bj) ) * |
182 |
c & _maskS(OB_Ie(J,bi,bj)+1,J,K,bi,bj) |
183 |
#endif /* OBCS_SEAICE_SMOOTH_UVICE */ |
184 |
#endif /* OBCS_SEAICE_COMPUTE_UVICE */ |
185 |
ENDIF |
186 |
ENDDO |
187 |
endif |
188 |
#endif /* ALLOW_OBCS_WEST */ |
189 |
|
190 |
ENDDO |
191 |
ENDDO |
192 |
|
193 |
#endif /* defined (ALLOW_OBCS) && defined (ALLOW_SEAICE) */ |
194 |
|
195 |
RETURN |
196 |
END |