/[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.7 - (show annotations) (download)
Thu Jan 17 20:48:07 2008 UTC (16 years, 5 months ago) by dimitri
Branch: MAIN
Changes since 1.6: +85 -10 lines
o verification/seaice_obcs: updated for restart test and latest options

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

  ViewVC Help
Powered by ViewVC 1.1.22