22 |
#include "STREAMICE_CG.h" |
#include "STREAMICE_CG.h" |
23 |
#include "STREAMICE_BDRY.h" |
#include "STREAMICE_BDRY.h" |
24 |
#include "GRID.h" |
#include "GRID.h" |
25 |
|
#ifdef ALLOW_STREAMICE_FLUX_CONTROL |
26 |
|
#include "STREAMICE_CTRL_FLUX.h" |
27 |
|
#endif |
28 |
|
|
29 |
C myThid :: my Thread Id number |
C myThid :: my Thread Id number |
30 |
INTEGER myThid |
INTEGER myThid |
32 |
|
|
33 |
C !LOCAL VARIABLES: |
C !LOCAL VARIABLES: |
34 |
C === Local variables === |
C === Local variables === |
35 |
INTEGER bi, bj, i, j, Gi, Gj, m |
INTEGER bi, bj, i, j, Gi, Gj, m, k |
36 |
INTEGER maskFlag, hmaskFlag |
INTEGER maskFlag, hmaskFlag |
37 |
_RL x, y |
_RL x, y |
38 |
|
_RS dummyRS |
39 |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
40 |
|
|
41 |
#ifdef ALLOW_STREAMICE |
#ifdef ALLOW_STREAMICE |
92 |
& SQUEEZE_RIGHT , 1) |
& SQUEEZE_RIGHT , 1) |
93 |
ENDIF |
ENDIF |
94 |
|
|
95 |
|
|
96 |
|
#ifdef ALLOW_COST |
97 |
|
IF ( STREAMICEcostMaskFile .NE. ' ') THEN |
98 |
|
_BARRIER |
99 |
|
C The 0 is the "iteration" argument. The ' ' is an empty suffix |
100 |
|
CALL READ_FLD_XY_RL( STREAMICEcostMaskFile, ' ', |
101 |
|
& STREAMICE_cost_mask, 0, myThid ) |
102 |
|
ELSE |
103 |
|
WRITE(msgBuf,'(A)') 'COST MASK - NOT IMPLENTED' |
104 |
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
105 |
|
& SQUEEZE_RIGHT , 1) |
106 |
|
|
107 |
|
DO bj = myByLo(myThid), myByHi(myThid) |
108 |
|
DO bi = myBxLo(myThid), myBxHi(myThid) |
109 |
|
DO j=1,sNy |
110 |
|
DO i=1,sNx |
111 |
|
STREAMICE_cost_mask (i,j,bi,bj) = 1.0 |
112 |
|
ENDDO |
113 |
|
ENDDO |
114 |
|
ENDDO |
115 |
|
ENDDO |
116 |
|
|
117 |
|
ENDIF |
118 |
|
#endif |
119 |
|
|
120 |
|
|
121 |
! READ IN FILES FOR BOUNDARY MASKS AND DIRICH VALUES |
! READ IN FILES FOR BOUNDARY MASKS AND DIRICH VALUES |
122 |
#ifdef STREAMICE_GEOM_FILE_SETUP |
#ifdef STREAMICE_GEOM_FILE_SETUP |
123 |
|
|
139 |
CALL PRINT_ERROR( msgBuf, myThid) |
CALL PRINT_ERROR( msgBuf, myThid) |
140 |
ENDIF |
ENDIF |
141 |
|
|
142 |
|
_EXCH_XY_RS(temp_ufacemask,myThid) |
143 |
|
_EXCH_XY_RS(temp_ufacemask,myThid) |
144 |
|
|
145 |
IF ( STREAMICEuDirichValsFile .NE. ' ') THEN |
IF ( STREAMICEuDirichValsFile .NE. ' ') THEN |
146 |
_BARRIER |
_BARRIER |
147 |
CALL READ_FLD_XY_RL ( STREAMICEuDirichValsFile, ' ', |
CALL READ_FLD_XY_RL ( STREAMICEuDirichValsFile, ' ', |
148 |
|
#ifdef ALLOW_STREAMICE_FLUX_CONTROL |
149 |
|
& u_bdry_values_SI_base, 0, myThid ) |
150 |
|
#else |
151 |
& u_bdry_values_SI, 0, myThid ) |
& u_bdry_values_SI, 0, myThid ) |
152 |
|
#endif |
153 |
ELSE |
ELSE |
154 |
WRITE(msgBuf,'(A)') 'U DIRICH VALS - NOT SET' |
WRITE(msgBuf,'(A)') 'U DIRICH VALS - NOT SET' |
155 |
CALL PRINT_ERROR( msgBuf, myThid) |
CALL PRINT_ERROR( msgBuf, myThid) |
158 |
IF ( STREAMICEvDirichValsFile .NE. ' ') THEN |
IF ( STREAMICEvDirichValsFile .NE. ' ') THEN |
159 |
_BARRIER |
_BARRIER |
160 |
CALL READ_FLD_XY_RL ( STREAMICEvDirichValsFile, ' ', |
CALL READ_FLD_XY_RL ( STREAMICEvDirichValsFile, ' ', |
161 |
|
#ifdef ALLOW_STREAMICE_FLUX_CONTROL |
162 |
|
& v_bdry_values_SI_base, 0, myThid ) |
163 |
|
#else |
164 |
& v_bdry_values_SI, 0, myThid ) |
& v_bdry_values_SI, 0, myThid ) |
165 |
|
#endif |
166 |
ELSE |
ELSE |
167 |
WRITE(msgBuf,'(A)') 'V DIRICH VALS - NOT SET' |
WRITE(msgBuf,'(A)') 'V DIRICH VALS - NOT SET' |
168 |
CALL PRINT_ERROR( msgBuf, myThid) |
CALL PRINT_ERROR( msgBuf, myThid) |
169 |
ENDIF |
ENDIF |
170 |
|
|
171 |
|
IF ( STREAMICEHBCxFile .NE. ' ') THEN |
172 |
|
_BARRIER |
173 |
|
CALL READ_FLD_XY_RL ( STREAMICEHBCxFile, ' ', |
174 |
|
& h_ubdry_values_SI, 0, myThid ) |
175 |
|
ELSE |
176 |
|
WRITE(msgBuf,'(A)') 'THICK BC AT U FACE - NOT SET' |
177 |
|
CALL PRINT_ERROR( msgBuf, myThid) |
178 |
|
ENDIF |
179 |
|
|
180 |
|
IF ( STREAMICEHBCyFile .NE. ' ') THEN |
181 |
|
_BARRIER |
182 |
|
CALL READ_FLD_XY_RL ( STREAMICEHBCyFile, ' ', |
183 |
|
& h_vbdry_values_SI, 0, myThid ) |
184 |
|
ELSE |
185 |
|
WRITE(msgBuf,'(A)') 'THICK BC AT V FACE - NOT SET' |
186 |
|
CALL PRINT_ERROR( msgBuf, myThid) |
187 |
|
ENDIF |
188 |
|
|
189 |
|
#ifdef ALLOW_STREAMICE_2DTRACER |
190 |
|
|
191 |
|
IF ( STREAMICETrac2dBCxFile .NE. ' ') THEN |
192 |
|
_BARRIER |
193 |
|
CALL READ_FLD_XY_RL ( STREAMICETrac2dBCxFile, ' ', |
194 |
|
& trac2d_ubdry_values_SI, 0, myThid ) |
195 |
|
ELSE |
196 |
|
WRITE(msgBuf,'(A)') 'TRAC BC AT U FACE - NOT SET' |
197 |
|
CALL PRINT_ERROR( msgBuf, myThid) |
198 |
|
ENDIF |
199 |
|
|
200 |
|
IF ( STREAMICETRAC2DBCyFile .NE. ' ') THEN |
201 |
|
_BARRIER |
202 |
|
CALL READ_FLD_XY_RL ( STREAMICETrac2dBCyFile, ' ', |
203 |
|
& trac2d_vbdry_values_SI, 0, myThid ) |
204 |
|
ELSE |
205 |
|
WRITE(msgBuf,'(A)') 'TRAC BC AT V FACE - NOT SET' |
206 |
|
CALL PRINT_ERROR( msgBuf, myThid) |
207 |
|
ENDIF |
208 |
|
|
209 |
|
#endif |
210 |
|
|
211 |
|
|
212 |
! with this setup hmask is initialized here rather than in init_varia, |
! with this setup hmask is initialized here rather than in init_varia, |
213 |
! because it is needed to set no-flow boundaries, even though the field |
! because it is needed to set no-flow boundaries, even though the field |
214 |
! could potentially change due to ice shelf front advance and calving |
! could potentially change due to ice shelf front advance and calving |
222 |
WRITE(msgBuf,'(A)') 'H MASK FILE - NOT SET' |
WRITE(msgBuf,'(A)') 'H MASK FILE - NOT SET' |
223 |
CALL PRINT_ERROR( msgBuf, myThid) |
CALL PRINT_ERROR( msgBuf, myThid) |
224 |
ENDIF |
ENDIF |
225 |
|
|
226 |
|
_EXCH_XY_RS(temp_hmask,myThid) |
227 |
|
|
228 |
|
|
229 |
|
#ifdef ALLOW_CTRL |
230 |
|
DO bj = myByLo(myThid), myByHi(myThid) |
231 |
|
DO bi = myBxLo(myThid), myBxHi(myThid) |
232 |
|
DO j=1,sNy |
233 |
|
DO i=1,sNx |
234 |
|
IF (temp_hmask(i,j,bi,bj) .eq. 1.0) THEN |
235 |
|
DO k=1,Nr |
236 |
|
STREAMICE_ctrl_mask(i,j,k,bi,bj) = 1. _d 0 |
237 |
|
ENDDO |
238 |
|
ENDIF |
239 |
|
ENDDO |
240 |
|
ENDDO |
241 |
|
ENDDO |
242 |
|
ENDDO |
243 |
|
#endif |
244 |
|
|
245 |
|
#ifdef ALLOW_STREAMICE_FLUX_CONTROL |
246 |
|
DO bj = myByLo(myThid), myByHi(myThid) |
247 |
|
DO bi = myBxLo(myThid), myBxHi(myThid) |
248 |
|
DO j=1,sNy |
249 |
|
DO i=1,sNx |
250 |
|
u_bdry_values_SI (i,j,bi,bj) = |
251 |
|
& u_bdry_values_SI_base (i,j,bi,bj) |
252 |
|
v_bdry_values_SI (i,j,bi,bj) = |
253 |
|
& v_bdry_values_SI_base (i,j,bi,bj) |
254 |
|
ENDDO |
255 |
|
ENDDO |
256 |
|
ENDDO |
257 |
|
ENDDO |
258 |
|
#endif |
259 |
|
|
260 |
#endif |
#endif /* STREAMICE_GEOM_FILE_SETUP */ |
261 |
|
|
262 |
|
|
263 |
!!!!!!!!!!!!!!!!!!!!!!!!! |
!!!!!!!!!!!!!!!!!!!!!!!!! |
397 |
ENDIF |
ENDIF |
398 |
ENDIF |
ENDIF |
399 |
|
|
400 |
#else |
#else /* ifndef STREAMICE_GEOM_FILE_SETUP */ |
401 |
! BOUNDARIES CONFIGURED FROM FILES |
! BOUNDARY MASK CONFIGURED FROM FILES |
402 |
|
|
403 |
|
|
404 |
IF (temp_hmask(i,j,bi,bj).eq.1.0 .or. |
IF (temp_hmask(i,j,bi,bj).eq.1.0 .or. |
405 |
& temp_hmask(i,j,bi,bj).eq.0.0) THEN |
& temp_hmask(i,j,bi,bj).eq.0.0 .or. |
406 |
|
& temp_hmask(i-1,j,bi,bj).eq.1.0) THEN |
407 |
|
|
408 |
! WEST FACE OF CELL |
! WEST FACE OF CELL |
409 |
maskFlag=INT(temp_ufacemask(i,j,bi,bj)) |
maskFlag=INT(temp_ufacemask(i,j,bi,bj)) |
421 |
STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0 |
STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0 |
422 |
ENDIF |
ENDIF |
423 |
|
|
424 |
|
ENDIF |
425 |
|
|
426 |
|
IF (temp_hmask(i,j,bi,bj).eq.1.0 .or. |
427 |
|
& temp_hmask(i,j,bi,bj).eq.0.0) THEN |
428 |
|
|
429 |
! EAST FACE OF CELL |
! EAST FACE OF CELL |
430 |
maskFlag=INT(temp_ufacemask(i+1,j,bi,bj)) |
maskFlag=INT(temp_ufacemask(i+1,j,bi,bj)) |
431 |
IF (maskFlag.eq.2) THEN |
IF (maskFlag.eq.2) THEN |
442 |
STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = -1.0 |
STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = -1.0 |
443 |
ENDIF |
ENDIF |
444 |
|
|
445 |
|
ENDIF |
446 |
|
|
447 |
|
IF (temp_hmask(i,j,bi,bj).eq.1.0 .or. |
448 |
|
& temp_hmask(i,j,bi,bj).eq.0.0 .or. |
449 |
|
& temp_hmask(i,j-1,bi,bj).eq.1.0) THEN |
450 |
|
|
451 |
! SOUTH FACE OF CELL |
! SOUTH FACE OF CELL |
452 |
maskFlag=INT(temp_vfacemask(i,j,bi,bj)) |
maskFlag=INT(temp_vfacemask(i,j,bi,bj)) |
453 |
IF (maskFlag.eq.2) THEN |
IF (maskFlag.eq.2) THEN |
464 |
STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0 |
STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0 |
465 |
ENDIF |
ENDIF |
466 |
|
|
467 |
|
ENDIF |
468 |
|
|
469 |
|
IF (temp_hmask(i,j,bi,bj).eq.1.0 .or. |
470 |
|
& temp_hmask(i,j,bi,bj).eq.0.0) THEN |
471 |
|
|
472 |
|
|
473 |
! NORTH FACE OF CELL |
! NORTH FACE OF CELL |
474 |
maskFlag=INT(temp_vfacemask(i,j+1,bi,bj)) |
maskFlag=INT(temp_vfacemask(i,j+1,bi,bj)) |
475 |
IF (maskFlag.eq.2) THEN |
IF (maskFlag.eq.2) THEN |
495 |
ENDDO |
ENDDO |
496 |
ENDDO |
ENDDO |
497 |
|
|
498 |
|
#ifdef ALLOW_CTRL |
499 |
|
! _EXCH_XY_RL(STREAMICE_ctrl_mask, myThid ) |
500 |
|
CALL ACTIVE_WRITE_GEN_RS( 'maskCtrlL', STREAMICE_ctrl_mask, |
501 |
|
& 'XY', Nr, 1, .FALSE., 0, mythid, dummyRS ) |
502 |
|
#endif |
503 |
|
|
504 |
|
#ifdef ALLOW_COST |
505 |
|
! _EXCH_XY_RL(STREAMICE_ctrl_mask, myThid ) |
506 |
|
CALL WRITE_FLD_XY_RS ( 'maskCost', '', |
507 |
|
& STREAMICE_cost_mask, 0, myThid ) |
508 |
|
#endif |
509 |
|
|
510 |
|
|
511 |
_EXCH_XY_RL(k1AtC_str, myThid ) |
_EXCH_XY_RL(k1AtC_str, myThid ) |
512 |
_EXCH_XY_RL(k2AtC_str, myThid ) |
_EXCH_XY_RL(k2AtC_str, myThid ) |
513 |
_EXCH_XY_RL(STREAMICE_ufacemask_bdry, myThid ) |
_EXCH_XY_RL(STREAMICE_ufacemask_bdry, myThid ) |
521 |
Xquad (2) = .5 * (1.+1./sqrt(3.)) |
Xquad (2) = .5 * (1.+1./sqrt(3.)) |
522 |
|
|
523 |
CALL STREAMICE_INIT_PHI( myThid ) |
CALL STREAMICE_INIT_PHI( myThid ) |
|
|
|
524 |
|
|
|
|
|
525 |
#endif |
#endif |
526 |
|
|
527 |
RETURN |
RETURN |