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

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

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


Revision 1.12 - (show annotations) (download)
Thu Sep 20 19:04:46 2012 UTC (11 years, 8 months ago) by dimitri
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.11: +8 -1 lines
Added obcs_seaice_sponge.F for obcs relaxation of seaice variables;
see verification/seaice_obcs/input.seaiceSponge for example application.
Modified Files:
   doc/tag-index
   pkg/obcs/OBCS_OPTIONS.h OBCS_SEAICE.h
            obcs_apply_seaice.F obcs_check.F obcs_readparms.F
   verification/seaice_obcs/code/OBCS_OPTIONS.h
Added Files:
   pkg/obcs/obcs_seaice_sponge.F
   verification/seaice_obcs/input.seaiceSponge/data.obcs
   verification/seaice_obcs/results/output.seaiceSponge.txt

1 C $Header: /u/gcmpack/MITgcm/pkg/obcs/obcs_apply_seaice.F,v 1.11 2012/09/18 20:09:17 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_SEAICE
11 C !INTERFACE:
12
13 SUBROUTINE OBCS_APPLY_SEAICE( myThid )
14
15 C !DESCRIPTION:
16 C *==========================================================*
17 C | S/R OBCS_APPLY_SEAICE
18 C *==========================================================*
19
20 C !USES:
21 IMPLICIT NONE
22 C == Global variables ==
23 #include "SIZE.h"
24 #include "EEPARAMS.h"
25 #include "PARAMS.h"
26 #include "GRID.h"
27 c#include "OBCS_PARAMS.h"
28 #include "OBCS_GRID.h"
29 #include "OBCS_SEAICE.h"
30 #ifdef ALLOW_SEAICE
31 # include "SEAICE_SIZE.h"
32 # include "SEAICE_PARAMS.h"
33 # include "SEAICE.h"
34 #endif
35
36 C !INPUT/OUTPUT PARAMETERS:
37 C == Routine Arguments ==
38 C myThid :: my Thread Id number
39 INTEGER myThid
40 CEOP
41
42 #if (defined (ALLOW_OBCS) && defined (ALLOW_SEAICE))
43
44 C !LOCAL VARIABLES:
45 C == Local variables ==
46 INTEGER bi, bj
47 INTEGER i, j
48 INTEGER Iobc, Jobc
49 #ifdef OBCS_SEAICE_SMOOTH_EDGE
50 INTEGER k
51 _RL edge_val
52 #endif
53
54 DO bj=myByLo(myThid),myByHi(myThid)
55 DO bi=myBxLo(myThid),myBxHi(myThid)
56
57 #ifdef ALLOW_OBCS_NORTH
58 IF ( tileHasOBN(bi,bj) ) THEN
59 C Set model variables to OB values on Northern Boundary
60 DO i=1-OLx,sNx+OLx
61 Jobc = OB_Jn(I,bi,bj)
62 IF ( Jobc.NE.OB_indexNone ) THEN
63 HEFF (i,Jobc,bi,bj) = OBNh (i,bi,bj)
64 AREA (i,Jobc,bi,bj) = OBNa (i,bi,bj)
65 HSNOW(i,Jobc,bi,bj) = OBNsn(i,bi,bj)
66 # ifdef SEAICE_VARIABLE_SALINITY
67 HSALT(i,Jobc,bi,bj) = OBNsl(i,bi,bj)
68 # endif
69 ENDIF
70 ENDDO
71 ENDIF
72 #endif /* ALLOW_OBCS_NORTH */
73
74 #ifdef ALLOW_OBCS_SOUTH
75 IF ( tileHasOBS(bi,bj) ) THEN
76 C Set model variables to OB values on Southern Boundary
77 DO i=1-OLx,sNx+OLx
78 Jobc = OB_Js(I,bi,bj)
79 IF ( Jobc.NE.OB_indexNone ) THEN
80 HEFF (i,Jobc,bi,bj) = OBSh (i,bi,bj)
81 AREA (i,Jobc,bi,bj) = OBSa (i,bi,bj)
82 HSNOW(i,Jobc,bi,bj) = OBSsn(i,bi,bj)
83 # ifdef SEAICE_VARIABLE_SALINITY
84 HSALT(i,Jobc,bi,bj) = OBSsl(i,bi,bj)
85 # endif
86 ENDIF
87 ENDDO
88 ENDIF
89 #endif /* ALLOW_OBCS_SOUTH */
90
91 #ifdef ALLOW_OBCS_EAST
92 IF ( tileHasOBE(bi,bj) ) THEN
93 C Set model variables to OB values on Eastern Boundary
94 DO j=1-OLy,sNy+OLy
95 Iobc = OB_Ie(J,bi,bj)
96 IF ( Iobc.NE.OB_indexNone ) THEN
97 HEFF (Iobc,j,bi,bj) = OBEh (j,bi,bj)
98 AREA (Iobc,j,bi,bj) = OBEa (j,bi,bj)
99 HSNOW(Iobc,j,bi,bj) = OBEsn(j,bi,bj)
100 # ifdef SEAICE_VARIABLE_SALINITY
101 HSALT(Iobc,j,bi,bj) = OBEsl(j,bi,bj)
102 # endif
103 ENDIF
104 ENDDO
105 ENDIF
106 #endif /* ALLOW_OBCS_EAST */
107
108 #ifdef ALLOW_OBCS_WEST
109 IF ( tileHasOBW(bi,bj) ) THEN
110 C Set model variables to OB values on Western Boundary
111 DO j=1-OLy,sNy+OLy
112 Iobc = OB_Iw(j,bi,bj)
113 IF ( Iobc.NE.OB_indexNone ) THEN
114 HEFF (Iobc,j,bi,bj) = OBWh (j,bi,bj)
115 AREA (Iobc,j,bi,bj) = OBWa (j,bi,bj)
116 HSNOW(Iobc,j,bi,bj) = OBWsn(j,bi,bj)
117 # ifdef SEAICE_VARIABLE_SALINITY
118 HSALT(Iobc,j,bi,bj) = OBWsl(j,bi,bj)
119 # endif
120 ENDIF
121 ENDDO
122 ENDIF
123 #endif /* ALLOW_OBCS_WEST */
124
125 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
126
127 #ifdef OBCS_SEAICE_SMOOTH_EDGE
128 k = 1
129
130 #ifdef ALLOW_OBCS_NORTH
131 IF ( tileHasOBN(bi,bj) ) THEN
132 C Northern Boundary
133 DO i=1-OLx,sNx+OLx
134 Jobc = OB_Jn(I,bi,bj)
135 IF ( Jobc.NE.OB_indexNone ) THEN
136 IF ( _maskS(i,Jobc-1,k,bi,bj) .NE. 0. ) THEN
137 IF ( SEAICEadvHeff .AND. OBNhfile .NE. ' ' ) THEN
138 edge_val = 0.5 _d 0 *
139 & (HEFF(i,Jobc-1,bi,bj)+HEFF(i,Jobc-2,bi,bj))
140 HEFF(i,Jobc-1,bi,bj) = edge_val
141 HEFF(i,Jobc-2,bi,bj) = edge_val
142 ENDIF
143 IF ( SEAICEadvArea .AND. OBNafile .NE. ' ' ) THEN
144 edge_val = 0.5 _d 0 *
145 & (AREA(i,Jobc-1,bi,bj)+AREA(i,Jobc-2,bi,bj))
146 AREA(i,Jobc-1,bi,bj) = edge_val
147 AREA(i,Jobc-2,bi,bj) = edge_val
148 ENDIF
149 IF ( SEAICEadvSNOW .AND. OBNsnfile .NE. ' ' ) THEN
150 edge_val = 0.5 _d 0 *
151 & (HSNOW(i,Jobc-1,bi,bj)+HSNOW(i,Jobc-2,bi,bj))
152 HSNOW(i,Jobc-1,bi,bj) = edge_val
153 HSNOW(i,Jobc-2,bi,bj) = edge_val
154 ENDIF
155 # ifdef SEAICE_VARIABLE_SALINITY
156 IF ( SEAICEadvSALT .AND. OBNslfile .NE. ' ' ) THEN
157 edge_val = 0.5 _d 0 *
158 & (HSALT(i,Jobc-1,bi,bj)+HSALT(i,Jobc-2,bi,bj))
159 HSALT(i,Jobc-1,bi,bj) = edge_val
160 HSALT(i,Jobc-2,bi,bj) = edge_val
161 ENDIF
162 # endif
163 ENDIF
164 ENDIF
165 ENDDO
166 ENDIF
167 #endif /* ALLOW_OBCS_NORTH */
168
169 #ifdef ALLOW_OBCS_SOUTH
170 IF ( tileHasOBS(bi,bj) ) THEN
171 C Southern Boundary
172 DO i=1-OLx,sNx+OLx
173 Jobc = OB_Js(I,bi,bj)
174 IF ( Jobc.NE.OB_indexNone ) THEN
175 IF ( _maskS(i,Jobc+2,k,bi,bj) .NE. 0. ) THEN
176 IF ( SEAICEadvHeff .AND. OBNhfile .NE. ' ' ) THEN
177 edge_val = 0.5 _d 0 *
178 & (HEFF(i,Jobc+1,bi,bj)+HEFF(i,Jobc+2,bi,bj))
179 HEFF(i,Jobc+1,bi,bj) = edge_val
180 HEFF(i,Jobc+2,bi,bj) = edge_val
181 ENDIF
182 IF ( SEAICEadvArea .AND. OBNafile .NE. ' ' ) THEN
183 edge_val = 0.5 _d 0 *
184 & (AREA(i,Jobc+1,bi,bj)+AREA(i,Jobc+2,bi,bj))
185 AREA(i,Jobc+1,bi,bj) = edge_val
186 AREA(i,Jobc+2,bi,bj) = edge_val
187 ENDIF
188 IF ( SEAICEadvSNOW .AND. OBNsnfile .NE. ' ' ) THEN
189 edge_val = 0.5 _d 0 *
190 & (HSNOW(i,Jobc+1,bi,bj)+HSNOW(i,Jobc+2,bi,bj))
191 HSNOW(i,Jobc+1,bi,bj) = edge_val
192 HSNOW(i,Jobc+2,bi,bj) = edge_val
193 ENDIF
194 # ifdef SEAICE_VARIABLE_SALINITY
195 IF ( SEAICEadvSALT .AND. OBNslfile .NE. ' ' ) THEN
196 edge_val = 0.5 _d 0 *
197 & (HSALT(i,Jobc+1,bi,bj)+HSALT(i,Jobc+2,bi,bj))
198 HSALT(i,Jobc+1,bi,bj) = edge_val
199 HSALT(i,Jobc+2,bi,bj) = edge_val
200 ENDIF
201 # endif
202 ENDIF
203 ENDIF
204 ENDDO
205 ENDIF
206 #endif /* ALLOW_OBCS_SOUTH */
207
208 #ifdef ALLOW_OBCS_EAST
209 IF ( tileHasOBE(bi,bj) ) THEN
210 C Eastern Boundary
211 DO j=1-OLy,sNy+OLy
212 Iobc = OB_Ie(J,bi,bj)
213 IF ( Iobc.NE.OB_indexNone ) THEN
214 IF ( _maskW(Iobc-1,j,k,bi,bj) .NE. 0. ) THEN
215 IF ( SEAICEadvHeff .AND. OBNhfile .NE. ' ' ) THEN
216 edge_val = 0.5 _d 0 *
217 & (HEFF(Iobc-1,j,bi,bj)+HEFF(Iobc-2,j,bi,bj))
218 HEFF(Iobc-1,j,bi,bj) = edge_val
219 HEFF(Iobc-2,j,bi,bj) = edge_val
220 ENDIF
221 IF ( SEAICEadvArea .AND. OBNafile .NE. ' ' ) THEN
222 edge_val = 0.5 _d 0 *
223 & (AREA(Iobc-1,j,bi,bj)+AREA(Iobc-2,j,bi,bj))
224 AREA(Iobc-1,j,bi,bj) = edge_val
225 AREA(Iobc-2,j,bi,bj) = edge_val
226 ENDIF
227 IF ( SEAICEadvSNOW .AND. OBNsnfile .NE. ' ' ) THEN
228 edge_val = 0.5 _d 0 *
229 & (HSNOW(Iobc-1,j,bi,bj)+HSNOW(Iobc-2,j,bi,bj))
230 HSNOW(Iobc-1,j,bi,bj) = edge_val
231 HSNOW(Iobc-2,j,bi,bj) = edge_val
232 ENDIF
233 # ifdef SEAICE_VARIABLE_SALINITY
234 IF ( SEAICEadvSALT .AND. OBNslfile .NE. ' ' ) THEN
235 edge_val = 0.5 _d 0 *
236 & (HSALT(Iobc-1,j,bi,bj)+HSALT(Iobc-2,j,bi,bj))
237 HSALT(Iobc-1,j,bi,bj) = edge_val
238 HSALT(Iobc-2,j,bi,bj) = edge_val
239 ENDIF
240 # endif
241 ENDIF
242 ENDIF
243 ENDDO
244 ENDIF
245 #endif /* ALLOW_OBCS_EAST */
246
247 #ifdef ALLOW_OBCS_WEST
248 IF ( tileHasOBW(bi,bj) ) THEN
249 C Western Boundary
250 DO j=1-OLy,sNy+OLy
251 Iobc = OB_Iw(j,bi,bj)
252 IF ( Iobc.NE.OB_indexNone ) THEN
253 IF ( _maskW(Iobc+2,j,k,bi,bj) .NE. 0. ) THEN
254 IF ( SEAICEadvHeff .AND. OBNhfile .NE. ' ' ) THEN
255 edge_val = 0.5 _d 0 *
256 & (HEFF(Iobc+1,j,bi,bj)+HEFF(Iobc+2,j,bi,bj))
257 HEFF(Iobc+1,j,bi,bj) = edge_val
258 HEFF(Iobc+2,j,bi,bj) = edge_val
259 ENDIF
260 IF ( SEAICEadvArea .AND. OBNafile .NE. ' ' ) THEN
261 edge_val = 0.5 _d 0 *
262 & (AREA(Iobc+1,j,bi,bj)+AREA(Iobc+2,j,bi,bj))
263 AREA(Iobc+1,j,bi,bj) = edge_val
264 AREA(Iobc+2,j,bi,bj) = edge_val
265 ENDIF
266 IF ( SEAICEadvSNOW .AND. OBNsnfile .NE. ' ' ) THEN
267 edge_val = 0.5 _d 0 *
268 & (HSNOW(Iobc+1,j,bi,bj)+HSNOW(Iobc+2,j,bi,bj))
269 HSNOW(Iobc+1,j,bi,bj) = edge_val
270 HSNOW(Iobc+2,j,bi,bj) = edge_val
271 ENDIF
272 # ifdef SEAICE_VARIABLE_SALINITY
273 IF ( SEAICEadvSALT .AND. OBNslfile .NE. ' ' ) THEN
274 edge_val = 0.5 _d 0 *
275 & (HSALT(Iobc+1,j,bi,bj)+HSALT(Iobc+2,j,bi,bj))
276 HSALT(Iobc+1,j,bi,bj) = edge_val
277 HSALT(Iobc+2,j,bi,bj) = edge_val
278 ENDIF
279 # endif
280 ENDIF
281 ENDIF
282 ENDDO
283 ENDIF
284 #endif /* ALLOW_OBCS_WEST */
285
286 #endif /* OBCS_SEAICE_SMOOTH_EDGE */
287
288 ENDDO
289 ENDDO
290
291 #ifdef ALLOW_OBCS_SEAICE_SPONGE
292 IF ( useSeaiceSponge ) THEN
293 CALL OBCS_SEAICE_SPONGE_A( myThid )
294 CALL OBCS_SEAICE_SPONGE_H( myThid )
295 ENDIF
296 #endif /* ALLOW_OBCS_SEAICE_SPONGE */
297
298 #endif /* defined (ALLOW_OBCS) && defined (ALLOW_SEAICE) */
299
300 RETURN
301 END

  ViewVC Help
Powered by ViewVC 1.1.22