/[MITgcm]/MITgcm_contrib/dgoldberg/streamice/streamice_init_fixed.F
ViewVC logotype

Annotation of /MITgcm_contrib/dgoldberg/streamice/streamice_init_fixed.F

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


Revision 1.3 - (hide annotations) (download)
Wed Jan 9 21:56:18 2013 UTC (12 years, 6 months ago) by dgoldberg
Branch: MAIN
Changes since 1.2: +143 -1 lines
changes to accept real datasets

1 dgoldberg 1.3 C $Header: /u/gcmpack/MITgcm_contrib/dgoldberg/streamice/streamice_init_fixed.F,v 1.2 2012/09/18 17:06:48 dgoldberg Exp $
2 heimbach 1.1 C $Name: $
3    
4     #include "STREAMICE_OPTIONS.h"
5    
6     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7     CBOP 0
8     C !ROUTINE: STREAMICE_INIT_FIXED
9    
10     C !INTERFACE:
11     SUBROUTINE STREAMICE_INIT_FIXED( myThid )
12    
13     C !DESCRIPTION:
14     C Initialize STREAMICE variables that are kept fixed during the run.
15    
16     C !USES:
17     IMPLICIT NONE
18     #include "EEPARAMS.h"
19     #include "SIZE.h"
20     #include "PARAMS.h"
21     #include "STREAMICE.h"
22     #include "STREAMICE_CG.h"
23     #include "STREAMICE_BDRY.h"
24     #include "GRID.h"
25    
26     C myThid :: my Thread Id number
27     INTEGER myThid
28     CEOP
29    
30     C !LOCAL VARIABLES:
31     C === Local variables ===
32 dgoldberg 1.2 INTEGER bi, bj, i, j, Gi, Gj, m
33 dgoldberg 1.3 INTEGER maskFlag, hmaskFlag
34 heimbach 1.1 _RL x, y
35     CHARACTER*(MAX_LEN_MBUF) msgBuf
36    
37     #ifdef ALLOW_STREAMICE
38    
39 dgoldberg 1.3 #ifdef STREAMICE_GEOM_FILE_SETUP
40     _RS temp_ufacemask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
41     _RS temp_vfacemask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
42     _RS temp_hmask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
43     #endif
44    
45 heimbach 1.1 #ifdef ALLOW_MNC
46    
47     IF ( useMNC .AND. (streamice_tave_mnc.OR.streamice_dump_mnc)
48     & ) THEN
49     C CALL STREAMICE_MNC_INIT( myThid )
50     ENDIF
51     #endif /* ALLOW_MNC */
52    
53     #ifdef ALLOW_DIAGNOSTICS
54     IF ( useDiagnostics ) THEN
55     CALL STREAMICE_INIT_DIAGNOSTICS( myThid )
56     ENDIF
57     #endif
58    
59 dgoldberg 1.3 ! CALVING MASK - LIMIT OF ICE SHELF FRONT ADVANCE
60    
61 heimbach 1.1 IF ( STREAMICE_calve_to_mask ) THEN
62     IF ( STREAMICEcalveMaskFile .NE. ' ') THEN
63     _BARRIER
64     C The 0 is the "iteration" argument. The ' ' is an empty suffix
65     CALL READ_FLD_XY_RL( STREAMICEcalveMaskFile, ' ',
66     & STREAMICE_calve_mask, 0, myThid )
67     ELSE
68     WRITE(msgBuf,'(A)') 'INIT CALVE MASK - NOT IMPLENTED'
69     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
70     & SQUEEZE_RIGHT , 1)
71     ENDIF
72     ENDIF
73    
74 dgoldberg 1.2
75     ! INITIALIZE SIGMA COORD
76     IF (STREAMICEsigcoordInit.eq.'FILE') THEN
77     WRITE(msgBuf,'(A)') 'SIG FROM FILE - NOT IMPLENTED'
78     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
79     & SQUEEZE_RIGHT , 1)
80     ELSEIF (STREAMICEsigcoordInit.eq.'UNIFORM') THEN
81     do m=1,Nr
82     streamice_sigma_coord (m) = 1./Nr * (m-0.5)
83     streamice_delsigma (m) = 1./Nr
84     enddo
85     ELSE
86     WRITE(msgBuf,'(A)') 'SIG COORD INIT - NOT IMPLENTED'
87     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
88     & SQUEEZE_RIGHT , 1)
89     ENDIF
90 dgoldberg 1.3
91     ! READ IN FILES FOR BOUNDARY MASKS AND DIRICH VALUES
92     #ifdef STREAMICE_GEOM_FILE_SETUP
93    
94     IF ( STREAMICEuFaceBdryFile .NE. ' ') THEN
95     _BARRIER
96     CALL READ_FLD_XY_RS ( STREAMICEuFaceBdryFile, ' ',
97     & temp_ufacemask, 0, myThid )
98     ELSE
99     WRITE(msgBuf,'(A)') 'U FACE MASK - NOT SET'
100     CALL PRINT_ERROR( msgBuf, myThid)
101     ENDIF
102    
103     IF ( STREAMICEvFaceBdryFile .NE. ' ') THEN
104     _BARRIER
105     CALL READ_FLD_XY_RS ( STREAMICEvFaceBdryFile, ' ',
106     & temp_vfacemask, 0, myThid )
107     ELSE
108     WRITE(msgBuf,'(A)') 'V FACE MASK - NOT SET'
109     CALL PRINT_ERROR( msgBuf, myThid)
110     ENDIF
111    
112     IF ( STREAMICEuDirichValsFile .NE. ' ') THEN
113     _BARRIER
114     CALL READ_FLD_XY_RL ( STREAMICEuDirichValsFile, ' ',
115     & u_bdry_values_SI, 0, myThid )
116     ELSE
117     WRITE(msgBuf,'(A)') 'U DIRICH VALS - NOT SET'
118     CALL PRINT_ERROR( msgBuf, myThid)
119     ENDIF
120    
121     IF ( STREAMICEvDirichValsFile .NE. ' ') THEN
122     _BARRIER
123     CALL READ_FLD_XY_RL ( STREAMICEvDirichValsFile, ' ',
124     & v_bdry_values_SI, 0, myThid )
125     ELSE
126     WRITE(msgBuf,'(A)') 'V DIRICH VALS - NOT SET'
127     CALL PRINT_ERROR( msgBuf, myThid)
128     ENDIF
129    
130     ! with this setup hmask is initialized here rather than in init_varia,
131     ! because it is needed to set no-flow boundaries, even though the field
132     ! could potentially change due to ice shelf front advance and calving
133     ! (POTENTIAL PROBLEMS WITH TAF?????? USE TEMP FIELD HERE AND SET HMASK IN INIT_VARIA??)
134    
135     IF ( STREAMICEhMaskFile .NE. ' ') THEN
136     _BARRIER
137     CALL READ_FLD_XY_RS ( STREAMICEhMaskFile, ' ',
138     & temp_hmask, 0, myThid )
139     ELSE
140     WRITE(msgBuf,'(A)') 'H MASK FILE - NOT SET'
141     CALL PRINT_ERROR( msgBuf, myThid)
142     ENDIF
143    
144     #endif
145    
146    
147 dgoldberg 1.2 !!!!!!!!!!!!!!!!!!!!!!!!!
148    
149 heimbach 1.1 C- fill in the overlap (+ BARRIER):
150     _EXCH_XY_RL(STREAMICE_calve_mask, myThid )
151    
152     DO bj = myByLo(myThid), myByHi(myThid)
153     DO bi = myBxLo(myThid), myBxHi(myThid)
154     DO j=1,sNy
155     DO i=1,sNx
156    
157     C INIT VALUES FOR METRIC TERMS
158    
159     k1AtC_str(i,j,bi,bj) = recip_rA(i,j,bi,bj) *
160     & (dxG(i+1,j,bi,bj)-dxG(i,j,bi,bj))
161     k2AtC_str(i,j,bi,bj) = recip_rA(i,j,bi,bj) *
162     & (dyG(i,j+1,bi,bj)-dyG(i,j,bi,bj))
163    
164 dgoldberg 1.2 #ifdef STREAMICE_HYBRID_STRESS
165     streamice_basal_geom (i,j,bi,bj) = 1.0
166     #endif
167    
168 heimbach 1.1 C INIT BDRY CONDITIONS
169    
170 dgoldberg 1.3 #ifndef STREAMICE_GEOM_FILE_SETUP
171    
172 heimbach 1.1 Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
173     Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
174     x = xC(i,j,bi,bj)
175     y = yC(i,j,bi,bj)
176    
177     STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0
178     STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0
179    
180 dgoldberg 1.2 IF (Gi.EQ.1 .AND. .NOT. STREAMICE_EW_periodic) THEN
181 heimbach 1.1 C INITIALIZE BOUNDARY CONDS AT WEST
182     IF ((y .gt. min_y_noflow_WEST) .AND.
183     & (y .le. max_y_noflow_WEST)) THEN
184     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
185     ENDIF
186     IF ((y .gt. min_y_noStress_WEST) .AND.
187     & (y .le. max_y_noStress_WEST)) THEN
188     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0
189     ENDIF
190     IF ((y .gt. min_y_FluxBdry_WEST) .AND.
191     & (y .le. max_y_FluxBdry_WEST)) THEN
192     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 4.0
193     u_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_WEST
194     ENDIF
195     IF ((y .gt. min_y_Dirich_WEST) .AND.
196     & (y .le. max_y_Dirich_WEST)) THEN
197     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0
198     u_bdry_values_SI (i,j,bi,bj) = 0.0
199     ENDIF
200     IF ((y .gt. min_y_CFBC_WEST) .AND.
201     & (y .le. max_y_CFBC_WEST)) THEN
202     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0
203     ENDIF
204     ENDIF
205    
206 dgoldberg 1.2 IF (Gi.EQ.Nx .AND. .NOT. STREAMICE_EW_periodic) THEN
207 heimbach 1.1 C INITIALIZE BOUNDARY CONDS AT EAST
208     IF ((y .gt. min_y_noflow_EAST) .AND.
209     & (y .le. max_y_noflow_EAST)) THEN
210     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
211     ENDIF
212     IF ((y .gt. min_y_noStress_EAST) .AND.
213     & (y .le. max_y_noStress_EAST)) THEN
214     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0
215     ENDIF
216     IF ((y .gt. min_y_FluxBdry_EAST) .AND.
217     & (y .le. max_y_FluxBdry_EAST)) THEN
218     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 4.0
219     u_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_EAST
220     ENDIF
221     IF ((y .gt. min_y_Dirich_EAST) .AND.
222     & (y .le. max_y_Dirich_EAST)) THEN
223     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0
224     u_bdry_values_SI (i,j,bi,bj) = 0. _d 0
225     ENDIF
226     IF ((y .gt. min_y_CFBC_EAST) .AND.
227     & (y .le. max_y_CFBC_EAST)) THEN
228     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0
229     ENDIF
230     ENDIF
231    
232 dgoldberg 1.2 IF (Gj.EQ.1 .AND. .NOT. STREAMICE_NS_periodic) THEN
233 heimbach 1.1 C INITIALIZE BOUNDARY CONDS AT SOUTH
234     IF ((x .gt. min_x_noflow_SOUTH) .AND.
235     & (x .le. max_x_noflow_SOUTH)) THEN
236     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0.0
237     ENDIF
238     IF ((x .gt. min_x_noStress_SOUTH) .AND.
239     & (x .le. max_x_noStress_SOUTH)) THEN
240     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0
241     ENDIF
242     IF ((x .gt. min_x_FluxBdry_SOUTH) .AND.
243     & (x .le. max_x_FluxBdry_SOUTH)) THEN
244     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 4.0
245     u_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_SOUTH
246     ENDIF
247     IF ((x .gt. min_x_Dirich_SOUTH) .AND.
248     & (x .le. max_x_Dirich_SOUTH)) THEN
249     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0
250     u_bdry_values_SI (i,j,bi,bj) = 0. _d 0
251     ENDIF
252     IF ((x .gt. min_x_CFBC_SOUTH) .AND.
253     & (x .le. max_x_CFBC_SOUTH)) THEN
254     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
255     ENDIF
256     ENDIF
257    
258 dgoldberg 1.2 IF (Gj.EQ.Ny .AND. .NOT. STREAMICE_NS_periodic) THEN
259 heimbach 1.1 C INITIALIZE BOUNDARY CONDS AT NORTH
260     IF ((x .gt. min_x_noflow_NORTH) .AND.
261     & (x .le. max_x_noflow_NORTH)) THEN
262     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0. _d 0
263     ENDIF
264     IF ((x .gt. min_x_noStress_NORTH) .AND.
265     & (x .le. max_x_noStress_NORTH)) THEN
266     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0
267     ENDIF
268     IF ((x .gt. min_x_FluxBdry_NORTH) .AND.
269     & (x .le. max_x_FluxBdry_NORTH)) THEN
270     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 4.0
271     v_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_NORTH
272     ENDIF
273     IF ((x .gt. min_x_Dirich_NORTH) .AND.
274     & (x .le. max_x_Dirich_NORTH)) THEN
275     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0
276     v_bdry_values_SI (i,j,bi,bj) = 0. _d 0
277     ENDIF
278     IF ((x .gt. min_x_CFBC_NORTH) .AND.
279     & (x .le. max_x_CFBC_NORTH)) THEN
280     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
281     ENDIF
282     ENDIF
283 dgoldberg 1.3
284     #else
285     ! BOUNDARIES CONFIGURED FROM FILES
286    
287     IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
288     & temp_hmask(i,j,bi,bj).eq.0.0) THEN
289    
290     ! WEST FACE OF CELL
291     maskFlag=INT(temp_ufacemask(i,j,bi,bj))
292     IF (maskFlag.eq.2) THEN
293     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0
294     ELSEIF (maskFlag.eq.3) THEN
295     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0
296     ELSEIF (maskFlag.eq.1) THEN
297     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0
298     ELSEIF ((maskFlag.eq.0) .or.
299     & ((maskFlag.eq.-1) .and.
300     & (temp_hmask(i-1,j,bi,bj).eq.-1.0))) THEN
301     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
302     ELSE
303     STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0
304     ENDIF
305    
306     ! EAST FACE OF CELL
307     maskFlag=INT(temp_ufacemask(i+1,j,bi,bj))
308     IF (maskFlag.eq.2) THEN
309     STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 2.0
310     ELSEIF (maskFlag.eq.3) THEN
311     STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 3.0
312     ELSEIF (maskFlag.eq.1) THEN
313     STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 1.0
314     ELSEIF ((maskFlag.eq.0) .or.
315     & ((maskFlag.eq.-1) .and.
316     & (temp_hmask(i+1,j,bi,bj).eq.-1.0))) THEN
317     STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 0.0
318     ELSE
319     STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = -1.0
320     ENDIF
321    
322     ! SOUTH FACE OF CELL
323     maskFlag=INT(temp_vfacemask(i,j,bi,bj))
324     IF (maskFlag.eq.2) THEN
325     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
326     ELSEIF (maskFlag.eq.3) THEN
327     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0
328     ELSEIF (maskFlag.eq.1) THEN
329     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0
330     ELSEIF ((maskFlag.eq.0) .or.
331     & ((maskFlag.eq.-1) .and.
332     & (temp_hmask(i,j-1,bi,bj).eq.-1.0))) THEN
333     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0.0
334     ELSE
335     STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0
336     ENDIF
337    
338     ! NORTH FACE OF CELL
339     maskFlag=INT(temp_vfacemask(i,j+1,bi,bj))
340     IF (maskFlag.eq.2) THEN
341     STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 2.0
342     ELSEIF (maskFlag.eq.3) THEN
343     STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 3.0
344     ELSEIF (maskFlag.eq.1) THEN
345     STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 1.0
346     ELSEIF ((maskFlag.eq.0) .or.
347     & ((maskFlag.eq.-1) .and.
348     & (temp_hmask(i,j+1,bi,bj).eq.-1.0))) THEN
349     STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 0.0
350     ELSE
351     STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = -1.0
352     ENDIF
353    
354     ENDIF ! hmask==1 or hmask==0
355    
356     #endif
357 heimbach 1.1
358     ENDDO
359     ENDDO
360     ENDDO
361     ENDDO
362    
363     _EXCH_XY_RL(k1AtC_str, myThid )
364     _EXCH_XY_RL(k2AtC_str, myThid )
365     _EXCH_XY_RL(STREAMICE_ufacemask_bdry, myThid )
366     _EXCH_XY_RL(STREAMICE_vfacemask_bdry, myThid )
367     _EXCH_XY_RL(u_bdry_values_SI, myThid )
368     _EXCH_XY_RL(v_bdry_values_SI, myThid )
369     _EXCH_XY_RL(u_flux_bdry_SI, myThid )
370     _EXCH_XY_RL(v_flux_bdry_SI, myThid )
371    
372     Xquad (1) = .5 * (1.-1./sqrt(3.))
373     Xquad (2) = .5 * (1.+1./sqrt(3.))
374    
375     CALL STREAMICE_INIT_PHI( myThid )
376    
377    
378    
379     #endif
380    
381     RETURN
382     END
383    

  ViewVC Help
Powered by ViewVC 1.1.22