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 
                0005 CBOP
                0006       SUBROUTINE STREAMICE_INIT_VARIA( myThid )
                0007 C     /============================================================\
                0008 C     | SUBROUTINE STREAMICE_INIT_VARIA                             |
                0009 C     | o Routine to initialize STREAMICE variables.                |
                0010 C     |============================================================|
                0011 C     | Initialize STREAMICE parameters and variables.              |
                0012 C     \============================================================/
                0013       IMPLICIT NONE
                0014 
                0015 C     === Global variables ===
                0016 #include "SIZE.h"
                0017 #include "GRID.h"
                0018 #include "SET_GRID.h"
                0019 #include "EEPARAMS.h"
                0020 #include "PARAMS.h"
                0021 #include "STREAMICE.h"
                0022 #include "STREAMICE_CG.h"
                0023 #include "STREAMICE_ADV.h"
                0024 
                0025 C     === Routine arguments ===
                0026 C     myThid -  Number of this instance of STREAMICE_INIT_VARIA
                0027       INTEGER myThid
                0028 CEndOfInterface
                0029 
                0030 #ifdef ALLOW_STREAMICE
                0031 C     === Local variables ===
                0032 C     I,J,bi,bj - Loop counters
07e785229e dngo*0033       INTEGER i, j, k, bi, bj, Gi, Gj
5ca83cd8f7 Dani*0034       INTEGER col_y, col_x
                0035       _RL slope_pos, c1, x, y, lenx, leny
                0036       CHARACTER*(MAX_LEN_MBUF) msgBuf
07e785229e dngo*0037 #ifdef STREAMICE_3D_GLEN_CONST
                0038       INTEGER r
                0039 #endif
                0040 #ifdef ALLOW_CTRL
5ca83cd8f7 Dani*0041       _RS     dummyRS
07e785229e dngo*0042 #endif
5ca83cd8f7 Dani*0043 
                0044 CEOP
                0045 
                0046 C     ZERO OUT FLOATING POINT ARRAYS
                0047 
                0048       DO bj = myByLo(myThid), myByHi(myThid)
                0049        DO bi = myBxLo(myThid), myBxHi(myThid)
217ff6d33b Jean*0050         DO j=1-OLy,sNy+OLy
                0051          DO i=1-OLx,sNx+OLx
5ca83cd8f7 Dani*0052           H_streamIce(i,j,bi,bj) = 0. _d 0
                0053           U_streamice(i,j,bi,bj) = 0. _d 0
                0054           V_streamice(i,j,bi,bj) = 0. _d 0
                0055           visc_streamice(i,j,bi,bj) = 0. _d 0
                0056           tau_beta_eff_streamice(i,j,bi,bj) = 0. _d 0
                0057           float_frac_streamice(i,j,bi,bj) = 0. _d 0
                0058           base_el_streamice(i,j,bi,bj) = 0. _d 0
                0059           surf_el_streamice(i,j,bi,bj) = 0. _d 0
                0060           area_shelf_streamice(i,j,bi,bj) = 0. _d 0
                0061           mass_ice_streamice(i,j,bi,bj) = 0. _d 0
                0062           BDOT_streamice(i,j,bi,bj) = 0. _d 0
0fbff46b46 dngo*0063           u_streamice_ext(i,j,bi,bj) = 0. _d 0
                0064           v_streamice_ext(i,j,bi,bj) = 0. _d 0
52d1822301 Dani*0065 #ifdef ALLOW_STREAMICE_TIMEDEP_FORCING
                0066           BDOT_streamice1(i,j,bi,bj) = 0. _d 0
96b006450c dngo*0067           streamice_bdot_maxmelt1(i,j,bi,bj) = 0. _d 0
                0068           streamice_bglen1(i,j,bi,bj) = 0. _d 0
                0069           streamice_beta1(i,j,bi,bj) = 0. _d 0
c266793079 Jean*0070 #endif
96b006450c dngo*0071           streamice_bdot_depth_maxmelt_v(i,j,bi,bj) = 0. _d 0
                0072           streamice_bdot_maxmelt_v(i,j,bi,bj) = 0. _d 0
5ca83cd8f7 Dani*0073           ADOT_streamice(i,j,bi,bj) = streamice_adot_uniform
                0074           C_basal_friction(i,j,bi,bj) = C_basal_fric_const
bdd8102d3e Dani*0075 #ifndef STREAMICE_3D_GLEN_CONST
5ca83cd8f7 Dani*0076           B_glen(i,j,bi,bj) = B_glen_isothermal
bdd8102d3e Dani*0077 #else
                0078           do k=1,Nr
                0079            B_glen(i,j,k,bi,bj) = B_glen_isothermal
                0080           enddo
                0081 #endif
5ca83cd8f7 Dani*0082           H_streamice_prev(i,j,bi,bj) = 0. _d 0
bdd8102d3e Dani*0083 #ifdef STREAMICE_STRESS_BOUNDARY_CONTROL
c266793079 Jean*0084           STREAMICE_u_normal_pert(i,j,bi,bj) = 0. _d 0
                0085           STREAMICE_v_normal_pert(i,j,bi,bj) = 0. _d 0
                0086           STREAMICE_u_shear_pert(i,j,bi,bj) = 0. _d 0
                0087           STREAMICE_v_shear_pert(i,j,bi,bj) = 0. _d 0
bdd8102d3e Dani*0088           STREAMICE_u_normal_stress(i,j,bi,bj) = 0. _d 0
                0089           STREAMICE_v_normal_stress(i,j,bi,bj) = 0. _d 0
                0090           STREAMICE_u_shear_stress(i,j,bi,bj) = 0. _d 0
                0091           STREAMICE_v_shear_stress(i,j,bi,bj) = 0. _d 0
52d1822301 Dani*0092 #ifdef ALLOW_STREAMICE_TIMEDEP_FORCING
                0093           STREAMICE_u_normal_stress1(i,j,bi,bj) = 0. _d 0
                0094           STREAMICE_v_normal_stress1(i,j,bi,bj) = 0. _d 0
                0095           STREAMICE_u_shear_stress1(i,j,bi,bj) = 0. _d 0
                0096           STREAMICE_v_shear_stress1(i,j,bi,bj) = 0. _d 0
                0097 #endif
bdd8102d3e Dani*0098 #endif
5ca83cd8f7 Dani*0099 #ifdef ALLOW_STREAMICE_2DTRACER
                0100 #ifdef STREAMICE_TRACER_AB
                0101          GAD_trac_2d (i,j,bi,bj) = 0. _d 0
07e785229e dngo*0102 c         GAD_trac_2dNm1 (i,j,bi,bj) = 0. _d 0
5ca83cd8f7 Dani*0103 #endif
                0104 #endif
c266793079 Jean*0105 #ifdef ALLOW_AUTODIFF
5ca83cd8f7 Dani*0106           ru_old_si(i,j,bi,bj) = 0. _d 0
                0107           rv_old_si(i,j,bi,bj) = 0. _d 0
                0108           zu_old_si(i,j,bi,bj) = 0. _d 0
                0109           zv_old_si(i,j,bi,bj) = 0. _d 0
07e785229e dngo*0110 c          h_after_uflux_SI(i,j,bi,bj) = 0. _d 0
5ca83cd8f7 Dani*0111 #endif
                0112 #ifdef USE_ALT_RLOW
                0113           R_low_si(i,j,bi,bj) = 0. _d 0
                0114 #endif
                0115 
                0116 #ifdef STREAMICE_HYBRID_STRESS
                0117           do k=1,Nr
                0118            visc_streamice_full(i,j,k,bi,bj) =
                0119      &     eps_glen_min**((1-n_glen)/n_glen)
217ff6d33b Jean*0120           enddo
5ca83cd8f7 Dani*0121           streamice_taubx (i,j,bi,bj) = 0. _d 0
                0122           streamice_tauby (i,j,bi,bj) = 0. _d 0
                0123 #endif
                0124          ENDDO
                0125         ENDDO
                0126 
                0127 #ifdef ALLOW_COST_TEST
                0128         cost_func1_streamice (bi,bj) = 0.0
bdd8102d3e Dani*0129         cost_vel_streamice (bi,bj) = 0.0
                0130         cost_surf_streamice (bi,bj) = 0.0
96b006450c dngo*0131         cost_smooth_fric_streamice (bi,bj) = 0.0
                0132         cost_smooth_glen_streamice (bi,bj) = 0.0
                0133         cost_prior_streamice (bi,bj) = 0.0
feb7fa5d1e dngo*0134         cost_smooth_bdotmelt_streamice(bi,bj) = 0.0
5ca83cd8f7 Dani*0135 #endif
                0136 
                0137        ENDDO
                0138       ENDDO
                0139 
07e785229e dngo*0140       DO j = 1-OLy, sNy+OLy
                0141        DO i = 1-OLx, sNx+OLx
5ca83cd8f7 Dani*0142         DO bj = myByLo(myThid), myByHi(myThid)
                0143          DO bi = myBxLo(myThid), myBxHi(myThid)
                0144 cc          DO k=1,4
                0145            DO col_x=-1,1
                0146             DO col_y=-1,1
                0147              streamice_cg_A1(i,j,bi,bj,col_x,col_y)=0.0
                0148              streamice_cg_A2(i,j,bi,bj,col_x,col_y)=0.0
                0149              streamice_cg_A3(i,j,bi,bj,col_x,col_y)=0.0
                0150              streamice_cg_A4(i,j,bi,bj,col_x,col_y)=0.0
                0151             ENDDO
                0152            ENDDO
                0153 cc          ENDDO
                0154          ENDDO
                0155         ENDDO
                0156        ENDDO
                0157       ENDDO
                0158 
                0159 C     INIT. INTEGER ARRAYS
                0160 
                0161       DO bj = myByLo(myThid), myByHi(myThid)
                0162        DO bi = myBxLo(myThid), myBxHi(myThid)
217ff6d33b Jean*0163         DO j=1-OLy,sNy+OLy
                0164          DO i=1-OLx,sNx+OLx
5ca83cd8f7 Dani*0165           STREAMICE_hmask(i,j,bi,bj) = -1.0
                0166           STREAMICE_umask(i,j,bi,bj) = 0.0
                0167           STREAMICE_vmask(i,j,bi,bj) = 0.0
                0168           STREAMICE_ufacemask(i,j,bi,bj) = 0.0
                0169           STREAMICE_vfacemask(i,j,bi,bj) = 0.0
                0170           STREAMICE_float_cond(i,j,bi,bj) = 0.0
                0171          ENDDO
                0172         ENDDO
                0173        ENDDO
                0174       ENDDO
                0175 
                0176 #ifdef USE_ALT_RLOW
07e785229e dngo*0177 c init alternate array for topog
5ca83cd8f7 Dani*0178       IF ( STREAMICEtopogFile .NE. ' ' ) THEN
                0179         _BARRIER
                0180 C The 0 is the "iteration" argument. The ' ' is an empty suffix
217ff6d33b Jean*0181        CALL READ_FLD_XY_RL( STREAMICEtopogFile, '',
5ca83cd8f7 Dani*0182      &      R_low_si, 0, myThid )
217ff6d33b Jean*0183 
5ca83cd8f7 Dani*0184       ELSE
                0185         WRITE(msgBuf,'(A)') 'STREAMICE TOPOG - FILENAME MISSING'
                0186         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0187      &                    SQUEEZE_RIGHT , 1)
                0188       ENDIF
                0189 #endif
                0190 
07e785229e dngo*0191 c initialize thickness
5ca83cd8f7 Dani*0192 
                0193 #ifndef STREAMICE_GEOM_FILE_SETUP
217ff6d33b Jean*0194 
5ca83cd8f7 Dani*0195       IF ( STREAMICEthickInit.EQ.'PARAM' ) THEN
                0196 
                0197       WRITE(msgBuf,'(A)') 'initializing analytic thickness'
                0198       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0199      &                    SQUEEZE_RIGHT , 1)
                0200 
                0201        slope_pos = shelf_edge_pos - shelf_flat_width
217ff6d33b Jean*0202        c1 = 0.0
5ca83cd8f7 Dani*0203        IF (shelf_slope_scale .GT. 0.0) THEN
                0204         c1 = 1.0 / shelf_slope_scale
                0205        ENDIF
                0206 
                0207        DO bj = myByLo(myThid), myByHi(myThid)
                0208         DO bi = myBxLo(myThid), myBxHi(myThid)
                0209          DO j=1,sNy
                0210           DO i=1,sNx
                0211            Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
                0212            Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
217ff6d33b Jean*0213 
5ca83cd8f7 Dani*0214            IF ((Gi.lt.Nx).and.(Gj.lt.Ny)) THEN
217ff6d33b Jean*0215 
5ca83cd8f7 Dani*0216 C             IF (flow_dir .EQ. 2.0) THEN
                0217             IF (.TRUE.) THEN
                0218              IF (xC(i-1,j,bi,bj).GE.shelf_edge_pos) THEN
                0219               area_shelf_streamice(i,j,bi,bj) = 0. _d 0
                0220               STREAMICE_hmask(i,j,bi,bj) = 0. _d 0
                0221              ELSE
                0222 
                0223               IF (xC(i,j,bi,bj).GT.slope_pos) THEN
                0224                H_streamice (i,j,bi,bj) = shelf_min_draft
                0225               ELSE
217ff6d33b Jean*0226                H_streamice (i,j,bi,bj) = (shelf_min_draft +
                0227      &          (shelf_max_draft - shelf_min_draft) *
e321477f28 Dani*0228      &          min (oneRL, (c1*(slope_pos-xC(i,j,bi,bj)))**2))
5ca83cd8f7 Dani*0229               ENDIF
                0230 
                0231               IF (xC(i,j,bi,bj).GT.shelf_edge_pos) THEN
                0232                area_shelf_streamice(i,j,bi,bj) = rA(i,j,bi,bj) *
                0233      &          (shelf_edge_pos-xG(i,j,bi,bj)) /
                0234      &          (xG(i+1,j,bi,bj)-xG(i,j,bi,bj))
                0235                IF (area_shelf_streamice(i,j,bi,bj).gt. 0. _d 0) THEN
                0236                 STREAMICE_hmask(i,j,bi,bj) = 2.0
                0237                ELSE
                0238                 STREAMICE_hmask(i,j,bi,bj) = 0.0
                0239                 H_streamice(i,j,bi,bj) = 0.0
                0240                ENDIF
                0241               ELSE
217ff6d33b Jean*0242                area_shelf_streamice(i,j,bi,bj) = rA(i,j,bi,bj)
5ca83cd8f7 Dani*0243                STREAMICE_hmask(i,j,bi,bj) = 1.0
                0244               ENDIF
                0245 
                0246              ENDIF
                0247             ENDIF
217ff6d33b Jean*0248            ENDIF
5ca83cd8f7 Dani*0249           ENDDO
                0250          ENDDO
                0251         ENDDO
                0252        ENDDO
                0253 
                0254       ELSE IF ( STREAMICEthickInit.EQ.'FILE' ) THEN
                0255 
                0256        IF ( STREAMICEthickFile .NE. ' ' ) THEN
                0257         _BARRIER
                0258 C The 0 is the "iteration" argument. The ' ' is an empty suffix
                0259         CALL READ_FLD_XY_RL( STREAMICEthickFile, ' ', H_streamice,
                0260      &      0, myThid )
                0261         DO bj = myByLo(myThid), myByHi(myThid)
                0262          DO bi = myBxLo(myThid), myBxHi(myThid)
                0263           DO j=1,sNy
                0264            DO i=1,sNx
                0265             Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
                0266             Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
                0267             IF ((Gi.lt.Nx.OR.STREAMICE_EW_periodic).and.
                0268      &          (Gj.lt.Ny.OR.STREAMICE_NS_periodic)) THEN
                0269              IF (H_streamice(i,j,bi,bj).GT.0. _d 0) THEN
                0270               area_shelf_streamice(i,j,bi,bj) = rA(i,j,bi,bj)
                0271               STREAMICE_hmask(i,j,bi,bj) = 1.0
                0272              ELSE
                0273               area_shelf_streamice(i,j,bi,bj) = 0. _d 0
                0274               STREAMICE_hmask(i,j,bi,bj) = 0. _d 0
                0275              ENDIF
                0276              Do k=1,Nr
                0277              STREAMICE_ctrl_mask(i,j,k,bi,bj) = 1. _d 0
                0278              enddo
                0279             ENDIF
                0280            ENDDO
                0281           ENDDO
                0282          ENDDO
                0283         ENDDO
                0284        ELSE
                0285         WRITE(msgBuf,'(A)') 'INIT THICKNESS - FILENAME MISSING'
                0286         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0287      &                    SQUEEZE_RIGHT , 1)
                0288        ENDIF
217ff6d33b Jean*0289 
5ca83cd8f7 Dani*0290       ELSE
                0291 
                0292        WRITE(msgBuf,'(A)') 'INIT THICKNESS - NOT IMPLENTED'
                0293        CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0294      &                    SQUEEZE_RIGHT , 1)
                0295       ENDIF
                0296 
                0297 #else
07e785229e dngo*0298 c STREAMICE_GEOM_FILE_SETUP - init thickness and hmask MUST come from file
5ca83cd8f7 Dani*0299 
                0300       IF ( STREAMICEthickFile .NE. ' ' ) THEN
                0301         _BARRIER
                0302 C The 0 is the "iteration" argument. The ' ' is an empty suffix
                0303       CALL READ_FLD_XY_RL( STREAMICEthickFile, ' ', H_streamice,
                0304      &      0, myThid )
                0305       ELSE
                0306        WRITE(msgBuf,'(A)') 'INIT THICKNESS - FILENAME MISSING'
                0307        CALL PRINT_ERROR( msgBuf, myThid)
                0308       ENDIF
                0309 
                0310       IF ( STREAMICEhMaskFile .NE. ' ' ) THEN
                0311         _BARRIER
                0312 C The 0 is the "iteration" argument. The ' ' is an empty suffix
                0313       CALL READ_FLD_XY_RS( STREAMICEhMaskFile, ' ', STREAMICE_hmask,
                0314      &      0, myThid )
                0315       ELSE
                0316        WRITE(msgBuf,'(A)') 'INIT HMASK - FILENAME MISSING'
                0317        CALL PRINT_ERROR( msgBuf, myThid)
                0318       ENDIF
                0319 
85b328ee93 dngo*0320       DO bj = myByLo(myThid), myByHi(myThid)
                0321        DO bi = myBxLo(myThid), myBxHi(myThid)
07e785229e dngo*0322         DO j=1-OLy,sNy+OLy
                0323          DO i=1-OLx,sNx+OLx
4bb1a1fbf9 Jean*0324           IF ( H_streamice(i,j,bi,bj) .GT. zeroRL .AND.
                0325      &         STREAMICE_hmask(i,j,bi,bj) .EQ. oneRS ) THEN
85b328ee93 dngo*0326            area_shelf_streamice(i,j,bi,bj) = rA(i,j,bi,bj)
                0327           ENDIF
                0328          ENDDO
                0329         ENDDO
                0330        ENDDO
                0331       ENDDO
                0332 
217ff6d33b Jean*0333 #endif
07e785229e dngo*0334 c STREAMICE_GEOM_FILE_SETUP
5ca83cd8f7 Dani*0335 
548d867d60 Dani*0336       IF ( .NOT. ( startTime .EQ. baseTime .AND.  nIter0 .EQ. 0
                0337      &     .AND. pickupSuff .EQ. ' ') ) THEN
c266793079 Jean*0338 
548d867d60 Dani*0339                           CALL STREAMICE_READ_PICKUP ( myThid )
c266793079 Jean*0340 
548d867d60 Dani*0341       ENDIF
                0342 
07e785229e dngo*0343 c finish initialize thickness
5ca83cd8f7 Dani*0344 
07e785229e dngo*0345 c initialize glen constant
5ca83cd8f7 Dani*0346 
                0347       IF ( STREAMICEGlenConstConfig.EQ.'FILE' ) THEN
                0348 
                0349        IF ( STREAMICEGlenConstFile .NE. ' ' ) THEN
                0350         _BARRIER
                0351 
bdd8102d3e Dani*0352 #ifdef STREAMICE_3D_GLEN_CONST
                0353 
                0354         CALL READ_FLD_XYZ_RL( STREAMICEGlenConstFile, ' ',
                0355      &      B_glen, 0, myThid )
                0356 
                0357 #else
                0358 
217ff6d33b Jean*0359         CALL READ_FLD_XY_RL( STREAMICEGlenConstFile, ' ',
5ca83cd8f7 Dani*0360      &      B_glen, 0, myThid )
96b006450c dngo*0361         CALL READ_FLD_XY_RL( STREAMICEGlenConstFile, ' ',
                0362      &      B_glen_init, 0, myThid )
5ca83cd8f7 Dani*0363 
bdd8102d3e Dani*0364 #endif
5ca83cd8f7 Dani*0365        ELSE
                0366         WRITE(msgBuf,'(A)') 'INIT GLEN - FILENAME MISSING'
                0367         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0368      &                    SQUEEZE_RIGHT , 1)
                0369        ENDIF
217ff6d33b Jean*0370 
5ca83cd8f7 Dani*0371       ELSE IF (STREAMICEGlenConstConfig.EQ.'UNIFORM' ) THEN
                0372 
                0373         DO bj = myByLo(myThid), myByHi(myThid)
                0374          DO bi = myBxLo(myThid), myBxHi(myThid)
                0375           DO j=1,sNy
                0376            DO i=1,sNx
bdd8102d3e Dani*0377 #ifdef STREAMICE_3D_GLEN_CONST
                0378             DO r=1,Nr
                0379              B_glen(i,j,r,bi,bj) = B_glen_isothermal
                0380             ENDDO
                0381 #else
                0382              B_glen(i,j,bi,bj) = B_glen_isothermal
                0383 #endif
5ca83cd8f7 Dani*0384            ENDDO
                0385           ENDDO
                0386          ENDDO
                0387         ENDDO
                0388 
                0389       ELSE
                0390 
                0391        WRITE(msgBuf,'(A)') 'INIT GLEN CONSTANT - NOT IMPLENTED'
                0392        CALL PRINT_ERROR( msgBuf, myThid)
                0393        STOP 'ABNORMAL END: S/R STREAMICE_INIT_VAR'
                0394       ENDIF
                0395 
07e785229e dngo*0396 c finish initialize glen constant
5ca83cd8f7 Dani*0397 
07e785229e dngo*0398 c initialize melt rates
0a8c8b23d7 Dani*0399 
                0400       IF ( STREAMICEBdotConfig.EQ.'FILE' ) THEN
                0401 
                0402        IF ( STREAMICEBdotFile .NE. ' ' ) THEN
                0403         _BARRIER
                0404 
                0405         CALL READ_FLD_XY_RL( STREAMICEBdotFile, ' ',
                0406      &      BDOT_streamice, 0, myThid )
                0407 
                0408        ELSE
                0409         WRITE(msgBuf,'(A)') 'INIT BDOT - FILENAME MISSING'
                0410         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0411      &                    SQUEEZE_RIGHT , 1)
                0412        ENDIF
                0413 
96b006450c dngo*0414       ELSEIF ( STREAMICEBdotConfig.EQ.'PARAM' ) THEN
                0415 
                0416        IF ( STREAMICEBdotDepthFile .NE. ' ' ) THEN
                0417         _BARRIER
                0418 
                0419         CALL READ_FLD_XY_RL( STREAMICEBdotDepthFile, ' ',
                0420      &      streamice_bdot_depth_maxmelt_v, 0, myThid )
                0421 
                0422        ENDIF
                0423 
                0424        IF ( STREAMICEBdotMaxMeltFile .NE. ' ' ) THEN
                0425         _BARRIER
                0426 
                0427         CALL READ_FLD_XY_RL( STREAMICEBdotMaxMeltFile, ' ',
                0428      &     streamice_bdot_maxmelt_v , 0, myThid )
                0429 
                0430        ENDIF
                0431 
0a8c8b23d7 Dani*0432       ENDIF
                0433 
07e785229e dngo*0434 c finish initialize melt rates
                0435 
                0436 c initialize SMB rates
                0437 
                0438       IF ( STREAMICEAdotConfig.EQ.'FILE' ) THEN
                0439 
                0440        IF ( STREAMICEAdotFile .NE. ' ' ) THEN
                0441         _BARRIER
                0442 
                0443         CALL READ_FLD_XY_RL( STREAMICEAdotFile, ' ',
                0444      &      ADOT_streamice, 0, myThid )
                0445 
                0446        ELSE
                0447         WRITE(msgBuf,'(A)') 'INIT ADOT - FILENAME MISSING'
                0448         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0449      &                    SQUEEZE_RIGHT , 1)
                0450        ENDIF
                0451 
                0452       ENDIF
                0453 
                0454 c finish initialize SMB rates
0a8c8b23d7 Dani*0455 
0fbff46b46 dngo*0456       IF ( STREAMICE_vel_ext.OR.STREAMICE_vel_ext_cgrid ) THEN
                0457 
                0458        IF ( STREAMICE_uvel_ext_file .NE. ' ' ) THEN
                0459         _BARRIER
                0460 
                0461         CALL READ_FLD_XY_RL( STREAMICE_uvel_ext_file, ' ',
                0462      &      u_streamice_ext, 0, myThid )
                0463 
                0464         DO bj = myByLo(myThid), myByHi(myThid)
                0465          DO bi = myBxLo(myThid), myBxHi(myThid)
                0466           DO j=1-OLy,sNy+OLy
                0467            DO i=1-OLx,sNx+OLx
                0468             U_streamice(i,j,bi,bj) = U_streamice_ext(i,j,bi,bj)
                0469            ENDDO
                0470           ENDDO
                0471          ENDDO
                0472         ENDDO
                0473 
                0474        ELSE
                0475         WRITE(msgBuf,'(A)') 'INIT UVEL - FILENAME MISSING'
                0476         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0477      &                    SQUEEZE_RIGHT , 1)
                0478        ENDIF
                0479 
                0480        IF ( STREAMICE_vvel_ext_file .NE. ' ' ) THEN
                0481         _BARRIER
                0482 
                0483         CALL READ_FLD_XY_RL( STREAMICE_vvel_ext_file, ' ',
                0484      &      v_streamice_ext, 0, myThid )
                0485 
                0486         DO bj = myByLo(myThid), myByHi(myThid)
                0487          DO bi = myBxLo(myThid), myBxHi(myThid)
                0488           DO j=1-OLy,sNy+OLy
                0489            DO i=1-OLx,sNx+OLx
                0490             V_streamice(i,j,bi,bj) = V_streamice_ext(i,j,bi,bj)
                0491            ENDDO
                0492           ENDDO
                0493          ENDDO
                0494         ENDDO
                0495 
                0496        ELSE
                0497         WRITE(msgBuf,'(A)') 'INIT VVEL - FILENAME MISSING'
                0498         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0499      &                    SQUEEZE_RIGHT , 1)
                0500        ENDIF
                0501 
                0502       ENDIF
                0503 
07e785229e dngo*0504 c initialize basal traction
5ca83cd8f7 Dani*0505 
                0506       IF ( STREAMICEbasalTracConfig.EQ.'FILE' ) THEN
                0507 
                0508        IF ( STREAMICEbasalTracFile .NE. ' ' ) THEN
                0509         _BARRIER
                0510 
217ff6d33b Jean*0511         CALL READ_FLD_XY_RL( STREAMICEbasalTracFile, ' ',
5ca83cd8f7 Dani*0512      &      C_basal_friction, 0, myThid )
96b006450c dngo*0513         CALL READ_FLD_XY_RL( STREAMICEbasalTracFile, ' ',
                0514      &      C_basal_fric_init, 0, myThid )
5ca83cd8f7 Dani*0515 
                0516        ELSE
                0517         WRITE(msgBuf,'(A)') 'INIT C_BASAL - FILENAME MISSING'
                0518         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0519      &                    SQUEEZE_RIGHT , 1)
                0520        ENDIF
217ff6d33b Jean*0521 
5ca83cd8f7 Dani*0522       ELSE IF (STREAMICEbasalTracConfig.EQ.'UNIFORM' ) THEN
                0523 
                0524         DO bj = myByLo(myThid), myByHi(myThid)
                0525          DO bi = myBxLo(myThid), myBxHi(myThid)
                0526           DO j=1,sNy
                0527            DO i=1,sNx
                0528             C_basal_friction(i,j,bi,bj) = C_basal_fric_const
                0529            ENDDO
                0530           ENDDO
                0531          ENDDO
                0532         ENDDO
                0533 
                0534       ELSE IF (STREAMICEbasalTracConfig.EQ.'2DPERIODIC' ) THEN
217ff6d33b Jean*0535 
5ca83cd8f7 Dani*0536        lenx = sNx*nSx*nPx*delX(1)
                0537        leny = sNy*nSy*nPy*delY(1)
                0538        DO bj = myByLo(myThid), myByHi(myThid)
                0539         DO bi = myBxLo(myThid), myBxHi(myThid)
                0540          DO j=1,sNy
                0541           DO i=1,sNx
                0542            x = xC(i,j,bi,bj)
                0543            y = yC(i,j,bi,bj)
217ff6d33b Jean*0544            C_basal_friction(i,j,bi,bj) =
5ca83cd8f7 Dani*0545      &      sqrt(C_basal_fric_const**2*
                0546      &        (1+sin(2*streamice_kx_b_init*PI*x/lenx)*
                0547      &           sin(2*streamice_ky_b_init*PI*y/leny)))
                0548           ENDDO
                0549          ENDDO
                0550         ENDDO
                0551        ENDDO
                0552 
                0553       ELSE IF (STREAMICEbasalTracConfig.EQ.'1DPERIODIC' ) THEN
217ff6d33b Jean*0554 
5ca83cd8f7 Dani*0555        lenx = sNx*nSx*nPx*delX(1)
                0556        DO bj = myByLo(myThid), myByHi(myThid)
                0557         DO bi = myBxLo(myThid), myBxHi(myThid)
                0558          DO j=1,sNy
                0559           DO i=1,sNx
                0560            x = xC(i,j,bi,bj)
                0561            y = yC(i,j,bi,bj)
217ff6d33b Jean*0562            C_basal_friction(i,j,bi,bj) =
5ca83cd8f7 Dani*0563      &      sqrt(C_basal_fric_const**2*(1+
                0564      &        sin(2*streamice_kx_b_init*PI*x/lenx)))
                0565           ENDDO
                0566          ENDDO
                0567         ENDDO
                0568        ENDDO
                0569 
                0570       ELSE
                0571 
                0572        WRITE(msgBuf,'(A)') 'INIT TRAC - NOT IMPLENTED'
                0573        CALL PRINT_ERROR( msgBuf, myThid)
                0574        STOP 'ABNORMAL END: S/R STREAMICE_INIT_VAR'
                0575       ENDIF
                0576 
07e785229e dngo*0577 c finish initialize basal trac
5ca83cd8f7 Dani*0578 
                0579 #ifdef ALLOW_STREAMICE_2DTRACER
                0580 
                0581       IF ( STREAMICETRAC2DINITFILE .NE. ' ' ) THEN
                0582          _BARRIER
                0583 
                0584         CALL READ_FLD_XY_RL( STREAMICETRAC2dInitFile, ' ',
                0585      &      trac2d, 0, myThid )
                0586 
                0587        ELSE
                0588         WRITE(msgBuf,'(A)') 'TRAC2dInit - NO FILE SPECIFIED'
                0589         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0590      &                    SQUEEZE_RIGHT , 1)
                0591         DO bj = myByLo(myThid), myByHi(myThid)
                0592          DO bi = myBxLo(myThid), myBxHi(myThid)
                0593           DO j=1,sNy
                0594            DO i=1,sNx
                0595             trac2d(i,j,bi,bj) = 0.0
                0596            ENDDO
                0597           ENDDO
                0598          ENDDO
                0599         ENDDO
                0600 
                0601        ENDIF
                0602 
                0603       _EXCH_XY_RL (trac2d, myThid)
                0604 
                0605 #endif /*STREAMICE_ALLOW_2DTRACER*/
                0606 
bdd8102d3e Dani*0607 #ifdef STREAMICE_STRESS_BOUNDARY_CONTROL
                0608       IF ( STREAMICEuNormalStressFile .NE. ' ') THEN
                0609         _BARRIER
                0610        CALL READ_FLD_XY_RL ( STREAMICEuNormalStressFile, ' ',
                0611      &  streamice_u_normal_stress, 0, myThid )
                0612       ELSE
                0613        WRITE(msgBuf,'(A)') 'IMPOSED NORMAL U STRESS NOT SET'
                0614        CALL PRINT_ERROR( msgBuf, myThid)
                0615       ENDIF
                0616 
                0617       IF ( STREAMICEvNormalStressFile .NE. ' ') THEN
                0618         _BARRIER
                0619        CALL READ_FLD_XY_RL ( STREAMICEvNormalStressFile, ' ',
                0620      &  streamice_v_normal_stress, 0, myThid )
                0621       ELSE
                0622        WRITE(msgBuf,'(A)') 'IMPOSED NORMAL V STRESS NOT SET'
                0623        CALL PRINT_ERROR( msgBuf, myThid)
                0624       ENDIF
                0625 
                0626       IF ( STREAMICEuShearStressFile .NE. ' ') THEN
                0627         _BARRIER
                0628        CALL READ_FLD_XY_RL ( STREAMICEuShearStressFile, ' ',
                0629      &  streamice_u_shear_stress, 0, myThid )
                0630       ELSE
                0631        WRITE(msgBuf,'(A)') 'IMPOSED SHEAR U STRESS NOT SET'
                0632        CALL PRINT_ERROR( msgBuf, myThid)
                0633       ENDIF
                0634 
                0635       IF ( STREAMICEvShearStressFile .NE. ' ') THEN
                0636         _BARRIER
                0637        CALL READ_FLD_XY_RL ( STREAMICEvShearStressFile, ' ',
                0638      &  streamice_v_shear_stress, 0, myThid )
                0639       ELSE
                0640        WRITE(msgBuf,'(A)') 'IMPOSED SHEAR V STRESS NOT SET'
                0641        CALL PRINT_ERROR( msgBuf, myThid)
                0642       ENDIF
                0643 
c266793079 Jean*0644       CALL EXCH_XY_RL
bdd8102d3e Dani*0645      & (streamice_v_shear_stress, myThid)
c266793079 Jean*0646       CALL EXCH_XY_RL
bdd8102d3e Dani*0647      & (streamice_u_shear_stress, myThid)
c266793079 Jean*0648       CALL EXCH_XY_RL
bdd8102d3e Dani*0649      & (streamice_v_normal_stress, myThid)
c266793079 Jean*0650       CALL EXCH_XY_RL
bdd8102d3e Dani*0651      & (streamice_u_normal_stress, myThid)
                0652 
                0653 #endif /*STREAMICE_STRESS_BOUNDARY_CONTROL*/
                0654 
5ca83cd8f7 Dani*0655       CALL STREAMICE_UPD_FFRAC_UNCOUPLED ( myThid )
                0656 
                0657       _EXCH_XY_RL(H_streamice, myThid )
f1d1cc05cd Dani*0658       _EXCH_XY_RS(STREAMICE_hmask, myThid )
5ca83cd8f7 Dani*0659       _EXCH_XY_RL(area_shelf_streamice, myThid )
                0660       _EXCH_XY_RL(C_basal_friction, myThid )
0fbff46b46 dngo*0661       _EXCH_XY_RL(u_streamice_ext, myThid )
                0662       _EXCH_XY_RL(v_streamice_ext, myThid )
bdd8102d3e Dani*0663 #ifndef STREAMICE_3D_GLEN_CONST
5ca83cd8f7 Dani*0664       _EXCH_XY_RL(B_glen, myThid )
bdd8102d3e Dani*0665 #else
                0666       CALL EXCH_3D_RL(B_glen, Nr,myThid )
                0667 #endif
                0668 
5ca83cd8f7 Dani*0669 #ifdef USE_ALT_RLOW
                0670       _EXCH_XY_RL(R_low_si, myThid )
                0671 #endif
                0672 
07e785229e dngo*0673 c#ifdef STREAMICE_HYBRID_STRESS
5ca83cd8f7 Dani*0674 
07e785229e dngo*0675 c      CALL STREAMICE_VISC_BETA (myThid)
5ca83cd8f7 Dani*0676 
07e785229e dngo*0677 c DNG THIS CALL IS TO INITIALISE VISCOSITY
                0678 c     TO AVOID POSSIBLE ADJOINT INSTABILITIES
                0679 c     IT IS WRITTEN OVER IN FIRST TIMESTEP
5ca83cd8f7 Dani*0680 
351fd6b6a4 Dani*0681 #if (defined (ALLOW_AUTODIFF))
feb7fa5d1e dngo*0682 #ifndef ALLOW_STREAMICE_FP_ADJ
5ca83cd8f7 Dani*0683 
                0684        CALL STREAMICE_UPD_FFRAC_UNCOUPLED ( myThid )
                0685        CALL STREAMICE_VELMASK_UPD (myThid)
95afe7199b Dani*0686 
351fd6b6a4 Dani*0687        CALL STREAMICE_VEL_SOLVE ( myThid,
95afe7199b Dani*0688      &                           streamice_max_nl_iter,
                0689      &                           streamice_max_cg_iter,
                0690      &                           0 )
                0691 
5ca83cd8f7 Dani*0692 #endif
95afe7199b Dani*0693 #endif
                0694 
217ff6d33b Jean*0695       CALL WRITE_FLD_XY_RL ( "C_basal_fric", "",
5ca83cd8f7 Dani*0696      & C_basal_friction, 0, myThid )
                0697       CALL WRITE_FLD_XY_RL ( "B_glen_sqrt", "",
                0698      & B_glen, 0, myThid )
217ff6d33b Jean*0699       CALL WRITE_FLD_XY_RL ( "H_streamice", "init",
5ca83cd8f7 Dani*0700      & H_streamIce, 0, myThid )
                0701 #ifdef ALLOW_STREAMICE_2DTRACER
                0702       CALL WRITE_FLD_XY_RL ( "2DTracer", "init",
                0703      & trac2d, 0, myThid )
                0704 #endif
217ff6d33b Jean*0705       CALL WRITE_FLD_XY_RL ( "area_shelf_streamice", "init",
5ca83cd8f7 Dani*0706      & area_shelf_streamice, 0, myThid )
217ff6d33b Jean*0707       CALL WRITE_FLD_XY_RS ( "STREAMICE_hmask", "init",
5ca83cd8f7 Dani*0708      & STREAMICE_hmask, 0, myThid )
                0709 #ifdef ALLOW_CTRL
                0710       CALL ACTIVE_WRITE_GEN_RS( 'maskCtrlst', STREAMICE_ctrl_mask,
217ff6d33b Jean*0711      &  'XY', Nr, 1, .FALSE., 0, myThid, dummyRS )
5ca83cd8f7 Dani*0712 #endif
07e785229e dngo*0713 c      call active_write_xyz( 'maskCtrlS', STREAMICE_ctrl_mask, 1, 0,
                0714 c     & myThid, dummy)
                0715 c       CALL STREAMICE_VELMASK_UPD (myThid)
                0716 c       CALL STREAMICE_UPD_FFRAC_UNCOUPLED ( myThid )
                0717 c       CALL STREAMICE_VEL_SOLVE( myThid )
5ca83cd8f7 Dani*0718 
217ff6d33b Jean*0719       CALL WRITE_FLD_XY_RL ( "U_init", "",
5ca83cd8f7 Dani*0720      &   C_basal_friction, 0, myThid )
217ff6d33b Jean*0721       CALL WRITE_FLD_XY_RL ( "V_init", "",
5ca83cd8f7 Dani*0722      &   V_streamice, 0, myThid )
                0723 #ifdef USE_ALT_RLOW
217ff6d33b Jean*0724       CALL WRITE_FLD_XY_RL ( "R_low_si", "init",
5ca83cd8f7 Dani*0725      & R_low_si, 0, myThid )
                0726 #endif
                0727 
07e785229e dngo*0728 c       CALL WRITE_FULLARRAY_RL ("H",H_streamice,1,0,0,1,0,myThid)
                0729 c       CALL WRITE_FULLARRAY_RS ("hmask",STREAMICE_hmask,1,0,0,1,0,myThid)
                0730 c       CALL WRITE_FULLARRAY_RL ("umask",STREAMICE_umask,1,0,0,1,0,myThid)
5ca83cd8f7 Dani*0731 
                0732 #endif /* ALLOW_STREAMICE */
                0733 
                0734       RETURN
                0735       END