Back to home page

MITgcm

 
 

    


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 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0004 CBOP 0
                0005 C !ROUTINE: STREAMICE_INIT_FIXED
                0006 
                0007 C !INTERFACE:
                0008       SUBROUTINE STREAMICE_INIT_FIXED( myThid )
                0009 
                0010 C     !DESCRIPTION:
                0011 C     Initialize STREAMICE variables that are kept fixed during the run.
                0012 
                0013 C     !USES:
                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 C     myThid ::  my Thread Id number
                0028       INTEGER myThid
                0029 CEOP
                0030 
6a6b1adb9c Jean*0031 #ifdef ALLOW_STREAMICE
5ca83cd8f7 Dani*0032 C     !LOCAL VARIABLES:
                0033 C     === Local variables ===
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 C        CALL STREAMICE_MNC_INIT( myThid )
                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 c     CALVING MASK - LIMIT OF ICE SHELF FRONT ADVANCE
5ca83cd8f7 Dani*0070 
                0071       IF ( STREAMICE_calve_to_mask ) THEN
                0072        IF ( STREAMICEcalveMaskFile .NE. ' ') THEN
                0073         _BARRIER
                0074 C       The 0 is the "iteration" argument. The ' ' is an empty suffix
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 c  INITIALIZE SIGMA COORD
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 C       The 0 is the "iteration" argument. The ' ' is an empty suffix
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 C       The 0 is the "iteration" argument. The ' ' is an empty suffix
                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 c    READ IN FILES FOR BOUNDARY MASKS AND DIRICH VALUES
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 c with this setup hmask is initialized here rather than in init_varia,
                0265 c because it is needed to set no-flow boundaries, even though the field
                0266 c could potentially change due to ice shelf front advance and calving
                0267 c (POTENTIAL PROBLEMS WITH TAF ? USE TEMP FIELD HERE AND SET HMASK IN INIT_VARIA ?)
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 c!!!!!!!!!!!!!!!!!!!!!!!!
5ca83cd8f7 Dani*0314 
                0315 C- fill in the overlap (+ BARRIER):
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 C         INIT VALUES FOR METRIC TERMS
                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 C         INIT BDRY CONDITIONS
                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 C         INITIALIZE BOUNDARY CONDS AT WEST
                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 C         INITIALIZE BOUNDARY CONDS AT EAST
                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 C         INITIALIZE BOUNDARY CONDS AT SOUTH
                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 C         INITIALIZE BOUNDARY CONDS AT NORTH
                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 c BOUNDARY MASK CONFIGURED FROM FILES
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 C          WEST FACE OF CELL
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 C          EAST FACE OF CELL
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 C          SOUTH FACE OF CELL
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 C          NORTH FACE OF CELL
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 ! hmask==1 or hmask==0
                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 c      _EXCH_XY_RL(STREAMICE_ctrl_mask, myThid )
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