File indexing completed on 2025-11-22 06:08:49 UTC
view on githubraw file Latest commit feb7fa5d on 2025-11-21 15:45:20 UTC
5ca83cd8f7 Dani*0001 #include "STREAMICE_OPTIONS.h"
0002
0003
0004
0005
0006
0007
0008 SUBROUTINE STREAMICE_INIT_FIXED( myThid )
0009
0010
0011
0012
0013
0014 IMPLICIT NONE
0015 #include "EEPARAMS.h"
0016 #include "SIZE.h"
0017 #include "PARAMS.h"
0018 #include "STREAMICE.h"
feb7fa5d1e dngo*0019 #include "STREAMICE_FP.h"
5ca83cd8f7 Dani*0020 #include "STREAMICE_CG.h"
0021 #include "STREAMICE_BDRY.h"
0022 #include "GRID.h"
0023 #ifdef ALLOW_STREAMICE_FLUX_CONTROL
0024 #include "STREAMICE_CTRL_FLUX.h"
0025 #endif
0026
0027
0028 INTEGER myThid
0029
0030
6a6b1adb9c Jean*0031 #ifdef ALLOW_STREAMICE
5ca83cd8f7 Dani*0032
0033
0fbff46b46 dngo*0034 INTEGER bi, bj, i, j, Gi, Gj, m
5ca83cd8f7 Dani*0035 _RL x, y
0036 CHARACTER*(MAX_LEN_MBUF) msgBuf
0037
0038 #ifdef STREAMICE_GEOM_FILE_SETUP
0fbff46b46 dngo*0039 INTEGER maskFlag, hmaskFlag
5ca83cd8f7 Dani*0040 _RS temp_ufacemask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0041 _RS temp_vfacemask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0042 _RS temp_hmask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0043 #endif
0044
0fbff46b46 dngo*0045 #ifdef ALLOW_CTRL
0046 _RS dummyRS
0047 INTEGER k
0048 #endif
0049
6a6b1adb9c Jean*0050 #ifdef ALLOW_PETSC
18a089944d Dani*0051 if (streamice_use_petsc) then
6a6b1adb9c Jean*0052 CALL STREAMICE_INITIALIZE_PETSC
18a089944d Dani*0053 endif
6a6b1adb9c Jean*0054 #endif
5ca83cd8f7 Dani*0055
6a6b1adb9c Jean*0056 #ifdef ALLOW_MNC
5ca83cd8f7 Dani*0057 IF ( useMNC .AND. (streamice_tave_mnc.OR.streamice_dump_mnc)
0058 & ) THEN
0059
0060 ENDIF
0061 #endif /* ALLOW_MNC */
0062
0063 #ifdef ALLOW_DIAGNOSTICS
0064 IF ( useDiagnostics ) THEN
0065 CALL STREAMICE_INIT_DIAGNOSTICS( myThid )
0066 ENDIF
0067 #endif
0068
96b006450c dngo*0069
5ca83cd8f7 Dani*0070
0071 IF ( STREAMICE_calve_to_mask ) THEN
0072 IF ( STREAMICEcalveMaskFile .NE. ' ') THEN
0073 _BARRIER
0074
217ff6d33b Jean*0075 CALL READ_FLD_XY_RS( STREAMICEcalveMaskFile, ' ',
5ca83cd8f7 Dani*0076 & STREAMICE_calve_mask, 0, myThid )
0077 ELSE
bdd8102d3e Dani*0078 WRITE(msgBuf,'(A)') 'INIT CALVE MASK - NOT IMPLENTED'
0079 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0080 & SQUEEZE_RIGHT , 1)
ea0fe49ceb Dani*0081
0082 DO bj = myByLo(myThid), myByHi(myThid)
0083 DO bi = myBxLo(myThid), myBxHi(myThid)
0084 DO j=1,sNy
0085 DO i=1,sNx
0086 streamice_calve_mask(i,j,bi,bj) = 0. _d 0
0087 ENDDO
0088 ENDDO
0089 ENDDO
0090 ENDDO
0091
5ca83cd8f7 Dani*0092 ENDIF
0093 ENDIF
0094
96b006450c dngo*0095
5ca83cd8f7 Dani*0096 IF (STREAMICEsigcoordInit.eq.'FILE') THEN
0097 WRITE(msgBuf,'(A)') 'SIG FROM FILE - NOT IMPLENTED'
0098 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0099 & SQUEEZE_RIGHT , 1)
0100 ELSEIF (STREAMICEsigcoordInit.eq.'UNIFORM') THEN
0101 do m=1,Nr
0102 streamice_sigma_coord (m) = 1./Nr * (m-0.5)
0103 streamice_delsigma (m) = 1./Nr
0104 enddo
0105 ELSE
0106 WRITE(msgBuf,'(A)') 'SIG COORD INIT - NOT IMPLENTED'
0107 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0108 & SQUEEZE_RIGHT , 1)
0109 ENDIF
0110
0111 #ifdef ALLOW_COST
bdd8102d3e Dani*0112 IF ( STREAMICEcostMaskFile .NE. ' ') THEN
5ca83cd8f7 Dani*0113 _BARRIER
0114
578fad1ab3 Jean*0115 CALL READ_FLD_XY_RS( STREAMICEcostMaskFile, ' ',
5ca83cd8f7 Dani*0116 & STREAMICE_cost_mask, 0, myThid )
0117 ELSE
0118 WRITE(msgBuf,'(A)') 'COST MASK - NOT IMPLENTED'
0119 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0120 & SQUEEZE_RIGHT , 1)
0121
bdd8102d3e Dani*0122 DO bj = myByLo(myThid), myByHi(myThid)
0123 DO bi = myBxLo(myThid), myBxHi(myThid)
0124 DO j=1,sNy
0125 DO i=1,sNx
0126 STREAMICE_cost_mask (i,j,bi,bj) = 1.0
0127 ENDDO
5ca83cd8f7 Dani*0128 ENDDO
0129 ENDDO
0130 ENDDO
96b006450c dngo*0131 ENDIF
0132 #endif
0133 #ifdef ALLOW_STREAMICE_TC_COST
0134 IF ( STREAMICEBglenCostMaskFile .NE. ' ') THEN
0135 _BARRIER
0136
0137 CALL READ_FLD_XY_RS( STREAMICEBglenCostMaskFile, ' ',
0138 & B_glen0, 0, myThid )
0139 ELSE
0140 WRITE(msgBuf,'(A)') 'BGLEN COST MASK - NOT IMPLENTED'
0141 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0142 & SQUEEZE_RIGHT , 1)
5ca83cd8f7 Dani*0143
96b006450c dngo*0144 DO bj = myByLo(myThid), myByHi(myThid)
0145 DO bi = myBxLo(myThid), myBxHi(myThid)
0146 DO j=1,sNy
0147 DO i=1,sNx
0148 b_glen0 (i,j,bi,bj) = 0.0
0149 ENDDO
0150 ENDDO
0151 ENDDO
0152 ENDDO
bdd8102d3e Dani*0153 ENDIF
5ca83cd8f7 Dani*0154 #endif
217ff6d33b Jean*0155
96b006450c dngo*0156
5ca83cd8f7 Dani*0157 #ifdef STREAMICE_GEOM_FILE_SETUP
0158
0159 IF ( STREAMICEuFaceBdryFile .NE. ' ') THEN
0160 _BARRIER
217ff6d33b Jean*0161 CALL READ_FLD_XY_RS ( STREAMICEuFaceBdryFile, ' ',
5ca83cd8f7 Dani*0162 & temp_ufacemask, 0, myThid )
0163 ELSE
0164 WRITE(msgBuf,'(A)') 'U FACE MASK - NOT SET'
0165 CALL PRINT_ERROR( msgBuf, myThid)
0166 ENDIF
0167
0168 IF ( STREAMICEvFaceBdryFile .NE. ' ') THEN
0169 _BARRIER
217ff6d33b Jean*0170 CALL READ_FLD_XY_RS ( STREAMICEvFaceBdryFile, ' ',
5ca83cd8f7 Dani*0171 & temp_vfacemask, 0, myThid )
0172 ELSE
0173 WRITE(msgBuf,'(A)') 'V FACE MASK - NOT SET'
0174 CALL PRINT_ERROR( msgBuf, myThid)
0175 ENDIF
0176
0177 _EXCH_XY_RS(temp_ufacemask,myThid)
bdd8102d3e Dani*0178 _EXCH_XY_RS(temp_vfacemask,myThid)
5ca83cd8f7 Dani*0179
0180 IF ( STREAMICEuDirichValsFile .NE. ' ') THEN
0181 _BARRIER
217ff6d33b Jean*0182 CALL READ_FLD_XY_RL ( STREAMICEuDirichValsFile, ' ',
5ca83cd8f7 Dani*0183 #ifdef ALLOW_STREAMICE_FLUX_CONTROL
0184 & u_bdry_values_SI_base, 0, myThid )
0185 #else
0186 & u_bdry_values_SI, 0, myThid )
0187 #endif
0188 ELSE
0189 WRITE(msgBuf,'(A)') 'U DIRICH VALS - NOT SET'
0190 CALL PRINT_ERROR( msgBuf, myThid)
0191 ENDIF
0192
0193 IF ( STREAMICEvDirichValsFile .NE. ' ') THEN
0194 _BARRIER
217ff6d33b Jean*0195 CALL READ_FLD_XY_RL ( STREAMICEvDirichValsFile, ' ',
5ca83cd8f7 Dani*0196 #ifdef ALLOW_STREAMICE_FLUX_CONTROL
0197 & v_bdry_values_SI_base, 0, myThid )
0198 #else
0199 & v_bdry_values_SI, 0, myThid )
0200 #endif
0201 ELSE
0202 WRITE(msgBuf,'(A)') 'V DIRICH VALS - NOT SET'
0203 CALL PRINT_ERROR( msgBuf, myThid)
0204 ENDIF
0205
0206 IF ( STREAMICEHBCxFile .NE. ' ') THEN
0207 _BARRIER
0208 CALL READ_FLD_XY_RL ( STREAMICEHBCxFile, ' ',
0209 & h_ubdry_values_SI, 0, myThid )
0210 ELSE
0211 WRITE(msgBuf,'(A)') 'THICK BC AT U FACE - NOT SET'
0212 CALL PRINT_ERROR( msgBuf, myThid)
0213 ENDIF
0214
0215 IF ( STREAMICEHBCyFile .NE. ' ') THEN
0216 _BARRIER
0217 CALL READ_FLD_XY_RL ( STREAMICEHBCyFile, ' ',
0218 & h_vbdry_values_SI, 0, myThid )
0219 ELSE
0220 WRITE(msgBuf,'(A)') 'THICK BC AT V FACE - NOT SET'
0221 CALL PRINT_ERROR( msgBuf, myThid)
0222 ENDIF
0223
bdd8102d3e Dani*0224 IF ( streamiceumassfluxfile .NE. ' ') THEN
0225 _BARRIER
0226 CALL READ_FLD_XY_RL ( streamiceumassfluxfile , ' ',
0227 & u_flux_bdry_SI, 0, myThid )
0228 ELSE
0229 WRITE(msgBuf,'(A)') 'MASS FLUX AT U FACE - NOT SET'
0230 CALL PRINT_ERROR( msgBuf, myThid)
0231 ENDIF
0232
0233 IF ( streamicevmassfluxfile .NE. ' ') THEN
0234 _BARRIER
0235 CALL READ_FLD_XY_RL ( streamicevmassfluxfile , ' ',
0236 & v_flux_bdry_SI, 0, myThid )
0237 ELSE
0238 WRITE(msgBuf,'(A)') 'MASS FLUX AT V FACE - NOT SET'
0239 CALL PRINT_ERROR( msgBuf, myThid)
0240 ENDIF
0241
5ca83cd8f7 Dani*0242 #ifdef ALLOW_STREAMICE_2DTRACER
0243
0244 IF ( STREAMICETrac2dBCxFile .NE. ' ') THEN
0245 _BARRIER
0246 CALL READ_FLD_XY_RL ( STREAMICETrac2dBCxFile, ' ',
0247 & trac2d_ubdry_values_SI, 0, myThid )
0248 ELSE
0249 WRITE(msgBuf,'(A)') 'TRAC BC AT U FACE - NOT SET'
0250 CALL PRINT_ERROR( msgBuf, myThid)
0251 ENDIF
0252
0253 IF ( STREAMICETRAC2DBCyFile .NE. ' ') THEN
0254 _BARRIER
0255 CALL READ_FLD_XY_RL ( STREAMICETrac2dBCyFile, ' ',
0256 & trac2d_vbdry_values_SI, 0, myThid )
0257 ELSE
0258 WRITE(msgBuf,'(A)') 'TRAC BC AT V FACE - NOT SET'
0259 CALL PRINT_ERROR( msgBuf, myThid)
0260 ENDIF
0261
0262 #endif
0263
96b006450c dngo*0264
0265
0266
0267
5ca83cd8f7 Dani*0268
0269 IF ( STREAMICEhMaskFile .NE. ' ') THEN
0270 _BARRIER
217ff6d33b Jean*0271 CALL READ_FLD_XY_RS ( STREAMICEhMaskFile, ' ',
5ca83cd8f7 Dani*0272 & temp_hmask, 0, myThid )
0273 ELSE
0274 WRITE(msgBuf,'(A)') 'H MASK FILE - NOT SET'
0275 CALL PRINT_ERROR( msgBuf, myThid)
0276 ENDIF
217ff6d33b Jean*0277
5ca83cd8f7 Dani*0278 _EXCH_XY_RS(temp_hmask,myThid)
0279
0280 #ifdef ALLOW_CTRL
0281 DO bj = myByLo(myThid), myByHi(myThid)
0282 DO bi = myBxLo(myThid), myBxHi(myThid)
0283 DO j=1,sNy
0284 DO i=1,sNx
0285 IF (temp_hmask(i,j,bi,bj) .eq. 1.0) THEN
0286 DO k=1,Nr
0287 STREAMICE_ctrl_mask(i,j,k,bi,bj) = 1. _d 0
0288 ENDDO
0289 ENDIF
0290 ENDDO
0291 ENDDO
0292 ENDDO
0293 ENDDO
0294 #endif
0295
0296 #ifdef ALLOW_STREAMICE_FLUX_CONTROL
0297 DO bj = myByLo(myThid), myByHi(myThid)
0298 DO bi = myBxLo(myThid), myBxHi(myThid)
0299 DO j=1,sNy
0300 DO i=1,sNx
0301 u_bdry_values_SI (i,j,bi,bj) =
0302 & u_bdry_values_SI_base (i,j,bi,bj)
0303 v_bdry_values_SI (i,j,bi,bj) =
0304 & v_bdry_values_SI_base (i,j,bi,bj)
0305 ENDDO
0306 ENDDO
0307 ENDDO
0308 ENDDO
0309 #endif
0310
0311 #endif /* STREAMICE_GEOM_FILE_SETUP */
217ff6d33b Jean*0312
96b006450c dngo*0313
5ca83cd8f7 Dani*0314
0315
f1d1cc05cd Dani*0316 _EXCH_XY_RS(STREAMICE_calve_mask, myThid )
5ca83cd8f7 Dani*0317
0318 DO bj = myByLo(myThid), myByHi(myThid)
0319 DO bi = myBxLo(myThid), myBxHi(myThid)
0320 DO j=1,sNy
0321 DO i=1,sNx
0322
0323
0324
0fbff46b46 dngo*0325 IF (.not.usingCartesianGrid) THEN
0326
0327 k1AtC_str(i,j,bi,bj) = recip_rA(i,j,bi,bj) *
0328 & (dxG(i+1,j,bi,bj)-dxG(i,j,bi,bj))
0329 k2AtC_str(i,j,bi,bj) = recip_rA(i,j,bi,bj) *
0330 & (dyG(i,j+1,bi,bj)-dyG(i,j,bi,bj))
0331
0332 ELSE
0333
0334 k1AtC_str(i,j,bi,bj) = 0. _d 0
0335 k2AtC_str(i,j,bi,bj) = 0. _d 0
0336
0337 ENDIF
5ca83cd8f7 Dani*0338
0339 #ifdef STREAMICE_HYBRID_STRESS
0340 streamice_basal_geom (i,j,bi,bj) = 1.0
217ff6d33b Jean*0341 #endif
5ca83cd8f7 Dani*0342
0343
0344
0345 #ifndef STREAMICE_GEOM_FILE_SETUP
0346
0347 Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
0348 Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
0349 x = xC(i,j,bi,bj)
0350 y = yC(i,j,bi,bj)
0351
0352 STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0
0353 STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0
0354
0355 IF (Gi.EQ.1 .AND. .NOT. STREAMICE_EW_periodic) THEN
0356
0357 IF ((y .gt. min_y_noflow_WEST) .AND.
0358 & (y .le. max_y_noflow_WEST)) THEN
0359 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
0360 ENDIF
0361 IF ((y .gt. min_y_noStress_WEST) .AND.
0362 & (y .le. max_y_noStress_WEST)) THEN
0363 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0
0364 ENDIF
0365 IF ((y .gt. min_y_FluxBdry_WEST) .AND.
0366 & (y .le. max_y_FluxBdry_WEST)) THEN
0367 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 4.0
0368 u_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_WEST
0369 ENDIF
0370 IF ((y .gt. min_y_Dirich_WEST) .AND.
0371 & (y .le. max_y_Dirich_WEST)) THEN
0372 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0
0373 u_bdry_values_SI (i,j,bi,bj) = 0.0
0374 ENDIF
0375 IF ((y .gt. min_y_CFBC_WEST) .AND.
0376 & (y .le. max_y_CFBC_WEST)) THEN
0377 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0
0378 ENDIF
0379 ENDIF
0380
0381 IF (Gi.EQ.Nx .AND. .NOT. STREAMICE_EW_periodic) THEN
0382
0383 IF ((y .gt. min_y_noflow_EAST) .AND.
0384 & (y .le. max_y_noflow_EAST)) THEN
0385 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
0386 ENDIF
0387 IF ((y .gt. min_y_noStress_EAST) .AND.
0388 & (y .le. max_y_noStress_EAST)) THEN
0389 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0
0390 ENDIF
0391 IF ((y .gt. min_y_FluxBdry_EAST) .AND.
0392 & (y .le. max_y_FluxBdry_EAST)) THEN
217ff6d33b Jean*0393 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 4.0
5ca83cd8f7 Dani*0394 u_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_EAST
0395 ENDIF
0396 IF ((y .gt. min_y_Dirich_EAST) .AND.
0397 & (y .le. max_y_Dirich_EAST)) THEN
0398 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0
0399 u_bdry_values_SI (i,j,bi,bj) = 0. _d 0
0400 ENDIF
0401 IF ((y .gt. min_y_CFBC_EAST) .AND.
0402 & (y .le. max_y_CFBC_EAST)) THEN
0403 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0
0404 ENDIF
0405 ENDIF
0406
0407 IF (Gj.EQ.1 .AND. .NOT. STREAMICE_NS_periodic) THEN
0408
0409 IF ((x .gt. min_x_noflow_SOUTH) .AND.
0410 & (x .le. max_x_noflow_SOUTH)) THEN
0411 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0.0
0412 ENDIF
0413 IF ((x .gt. min_x_noStress_SOUTH) .AND.
0414 & (x .le. max_x_noStress_SOUTH)) THEN
0415 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0
0416 ENDIF
0417 IF ((x .gt. min_x_FluxBdry_SOUTH) .AND.
0418 & (x .le. max_x_FluxBdry_SOUTH)) THEN
0419 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 4.0
dd082c38bc Dani*0420 v_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_SOUTH
5ca83cd8f7 Dani*0421 ENDIF
0422 IF ((x .gt. min_x_Dirich_SOUTH) .AND.
0423 & (x .le. max_x_Dirich_SOUTH)) THEN
0424 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0
0425 u_bdry_values_SI (i,j,bi,bj) = 0. _d 0
0426 ENDIF
0427 IF ((x .gt. min_x_CFBC_SOUTH) .AND.
0428 & (x .le. max_x_CFBC_SOUTH)) THEN
0429 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
0430 ENDIF
0431 ENDIF
0432
0433 IF (Gj.EQ.Ny .AND. .NOT. STREAMICE_NS_periodic) THEN
0434
0435 IF ((x .gt. min_x_noflow_NORTH) .AND.
0436 & (x .le. max_x_noflow_NORTH)) THEN
0437 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0. _d 0
0438 ENDIF
0439 IF ((x .gt. min_x_noStress_NORTH) .AND.
0440 & (x .le. max_x_noStress_NORTH)) THEN
0441 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0
0442 ENDIF
0443 IF ((x .gt. min_x_FluxBdry_NORTH) .AND.
0444 & (x .le. max_x_FluxBdry_NORTH)) THEN
0445 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 4.0
0446 v_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_NORTH
0447 ENDIF
0448 IF ((x .gt. min_x_Dirich_NORTH) .AND.
0449 & (x .le. max_x_Dirich_NORTH)) THEN
0450 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0
0451 v_bdry_values_SI (i,j,bi,bj) = 0. _d 0
0452 ENDIF
0453 IF ((x .gt. min_x_CFBC_NORTH) .AND.
0454 & (x .le. max_x_CFBC_NORTH)) THEN
0455 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
0456 ENDIF
0457 ENDIF
0458
0459 #else /* ifndef STREAMICE_GEOM_FILE_SETUP */
96b006450c dngo*0460
5ca83cd8f7 Dani*0461
217ff6d33b Jean*0462 IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
0463 & temp_hmask(i,j,bi,bj).eq.0.0 .or.
5ca83cd8f7 Dani*0464 & temp_hmask(i-1,j,bi,bj).eq.1.0) THEN
0465
96b006450c dngo*0466
5ca83cd8f7 Dani*0467 maskFlag=INT(temp_ufacemask(i,j,bi,bj))
0468 IF (maskFlag.eq.2) THEN
0469 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0
bdd8102d3e Dani*0470 ELSEIF (maskflag.eq.4.0) THEN
0471 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 4.0
5ca83cd8f7 Dani*0472 ELSEIF (maskFlag.eq.3) THEN
0473 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0
0474 ELSEIF (maskFlag.eq.1) THEN
0475 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0
217ff6d33b Jean*0476 ELSEIF ((maskFlag.eq.0) .or.
5ca83cd8f7 Dani*0477 & ((maskFlag.eq.-1) .and.
0478 & (temp_hmask(i-1,j,bi,bj).eq.-1.0))) THEN
0479 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
6a651fd056 Dani*0480 ELSEIF (temp_hmask(i,j,bi,bj).eq.-1.0) THEN
d0bb3a34a9 Dani*0481 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
5ca83cd8f7 Dani*0482 ELSE
0483 STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0
0484 ENDIF
0485
0486 ENDIF
0487
0488 IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
0489 & temp_hmask(i,j,bi,bj).eq.0.0) THEN
0490
96b006450c dngo*0491
5ca83cd8f7 Dani*0492 maskFlag=INT(temp_ufacemask(i+1,j,bi,bj))
0493 IF (maskFlag.eq.2) THEN
0494 STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 2.0
bdd8102d3e Dani*0495 ELSEIF (maskFlag.eq.4.0) THEN
0496 STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 4.0
5ca83cd8f7 Dani*0497 ELSEIF (maskFlag.eq.3) THEN
0498 STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 3.0
0499 ELSEIF (maskFlag.eq.1) THEN
0500 STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 1.0
217ff6d33b Jean*0501 ELSEIF ((maskFlag.eq.0) .or.
5ca83cd8f7 Dani*0502 & ((maskFlag.eq.-1) .and.
0503 & (temp_hmask(i+1,j,bi,bj).eq.-1.0))) THEN
0504 STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 0.0
0505 ELSE
0506 STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = -1.0
0507 ENDIF
0508
0509 ENDIF
0510
0511 IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
0512 & temp_hmask(i,j,bi,bj).eq.0.0 .or.
0513 & temp_hmask(i,j-1,bi,bj).eq.1.0) THEN
0514
96b006450c dngo*0515
5ca83cd8f7 Dani*0516 maskFlag=INT(temp_vfacemask(i,j,bi,bj))
0517 IF (maskFlag.eq.2) THEN
0518 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
bdd8102d3e Dani*0519 ELSEIF (maskFlag.eq.4.0) THEN
0520 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 4.0
5ca83cd8f7 Dani*0521 ELSEIF (maskFlag.eq.3) THEN
0522 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0
0523 ELSEIF (maskFlag.eq.1) THEN
0524 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0
217ff6d33b Jean*0525 ELSEIF ((maskFlag.eq.0) .or.
5ca83cd8f7 Dani*0526 & ((maskFlag.eq.-1) .and.
0527 & (temp_hmask(i,j-1,bi,bj).eq.-1.0))) THEN
0528 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0.0
6a651fd056 Dani*0529 ELSEIF (temp_hmask(i,j,bi,bj).eq.-1.0) THEN
0530 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0.0
6f6dd0226a Jean*0531 ELSE
5ca83cd8f7 Dani*0532 STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0
0533 ENDIF
0534
0535 ENDIF
0536
0537 IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
0538 & temp_hmask(i,j,bi,bj).eq.0.0) THEN
217ff6d33b Jean*0539
96b006450c dngo*0540
5ca83cd8f7 Dani*0541 maskFlag=INT(temp_vfacemask(i,j+1,bi,bj))
0542 IF (maskFlag.eq.2) THEN
0543 STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 2.0
bdd8102d3e Dani*0544 ELSEIF (maskFlag.eq.4.0) THEN
0545 STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 4.0
5ca83cd8f7 Dani*0546 ELSEIF (maskFlag.eq.3) THEN
0547 STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 3.0
0548 ELSEIF (maskFlag.eq.1) THEN
0549 STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 1.0
217ff6d33b Jean*0550 ELSEIF ((maskFlag.eq.0) .or.
5ca83cd8f7 Dani*0551 & ((maskFlag.eq.-1) .and.
0552 & (temp_hmask(i,j+1,bi,bj).eq.-1.0))) THEN
0553 STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 0.0
0554 ELSE
0555 STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = -1.0
0556 ENDIF
0557
0558 ENDIF
0559
0fbff46b46 dngo*0560 #endif /* ifndef STREAMICE_GEOM_FILE_SETUP */
217ff6d33b Jean*0561
5ca83cd8f7 Dani*0562 ENDDO
0563 ENDDO
0564 ENDDO
0565 ENDDO
0566
0567 #ifdef ALLOW_CTRL
0568 CALL ACTIVE_WRITE_GEN_RS( 'maskCtrlL', STREAMICE_ctrl_mask,
217ff6d33b Jean*0569 & 'XY', Nr, 1, .FALSE., 0, myThid, dummyRS )
5ca83cd8f7 Dani*0570 #endif
0571
0572 #ifdef ALLOW_COST
96b006450c dngo*0573
217ff6d33b Jean*0574 CALL WRITE_FLD_XY_RS ( 'maskCost', '',
5ca83cd8f7 Dani*0575 & STREAMICE_cost_mask, 0, myThid )
0576 #endif
0577
0578 _EXCH_XY_RL(k1AtC_str, myThid )
0579 _EXCH_XY_RL(k2AtC_str, myThid )
f1d1cc05cd Dani*0580 _EXCH_XY_RS(STREAMICE_ufacemask_bdry, myThid )
0581 _EXCH_XY_RS(STREAMICE_vfacemask_bdry, myThid )
5ca83cd8f7 Dani*0582 _EXCH_XY_RL(u_bdry_values_SI, myThid )
0583 _EXCH_XY_RL(v_bdry_values_SI, myThid )
0584 _EXCH_XY_RL(u_flux_bdry_SI, myThid )
0585 _EXCH_XY_RL(v_flux_bdry_SI, myThid )
0586
0587 Xquad (1) = .5 * (1.-1./sqrt(3.))
0588 Xquad (2) = .5 * (1.+1./sqrt(3.))
0589
0590 CALL STREAMICE_INIT_PHI( myThid )
217ff6d33b Jean*0591
feb7fa5d1e dngo*0592 #ifdef ALLOW_STREAMICE_FP_ADJ
0432abea0f Dani*0593 #ifdef ALLOW_PETSC
0594 STREAMICE_need2createmat = .true.
0595 STREAMICE_need2destroymat = .true.
0596 #endif
feb7fa5d1e dngo*0597 #ifdef ALLOW_TAPENADE
0598 DO i=1,5
0599 refCumuls(i) = 0.0
0600 prevCumuls(i) = 0.0
0601 adjIters(i) = 0
0602 ENDDO
0603 fpDepth = 0
0604 #endif
0605
0432abea0f Dani*0606 #endif
0607
6a6b1adb9c Jean*0608 #endif /* ALLOW_STREAMICE */
5ca83cd8f7 Dani*0609
0610 RETURN
0611 END