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

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

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


Revision 1.1 - (hide annotations) (download)
Fri Oct 21 17:11:45 2011 UTC (12 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g
- rename former OBCS_APPLY_UVICE to OBCS_ADJUST_UVICE
- add simple code to apply OB values to seaice velocity field.

1 jmc 1.1 C $Header: /u/gcmpack/MITgcm/pkg/obcs/obcs_apply_uvice.F,v 1.14 2011/09/02 14:19:16 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.0) 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.0) 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.0) 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.0) 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