Back to home page

MITgcm

 
 

    


File indexing completed on 2023-09-21 05:10:47 UTC

view on githubraw file Latest commit 96b00645 on 2023-09-20 15:15:14 UTC
5ca83cd8f7 Dani*0001 #include "STREAMICE_OPTIONS.h"
4f9d447bf7 Jean*0002 #ifdef ALLOW_AUTODIFF
                0003 # include "AUTODIFF_OPTIONS.h"
                0004 #endif
5ca83cd8f7 Dani*0005 
                0006 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0007 
                0008 CBOP
                0009       SUBROUTINE STREAMICE_ADVECT_THICKNESS ( myThid,myIter,time_step )
                0010 
73e21ff944 Jean*0011 C     *============================================================*
                0012 C     | SUBROUTINE                                                 |
5ca83cd8f7 Dani*0013 C     | o                                                          |
73e21ff944 Jean*0014 C     *============================================================*
5ca83cd8f7 Dani*0015 C     |                                                            |
73e21ff944 Jean*0016 C     *============================================================*
5ca83cd8f7 Dani*0017       IMPLICIT NONE
                0018 
                0019 C     === Global variables ===
                0020 #include "SIZE.h"
                0021 #include "GRID.h"
                0022 #include "EEPARAMS.h"
                0023 #include "PARAMS.h"
                0024 #include "STREAMICE.h"
                0025 #include "STREAMICE_ADV.h"
                0026 #ifdef ALLOW_AUTODIFF_TAMC
                0027 # include "tamc.h"
                0028 #endif
e005a328fc Dani*0029 #ifdef ALLOW_SHELFICE
                0030 # include "SHELFICE.h"
                0031 #endif
5ca83cd8f7 Dani*0032 
                0033       INTEGER myThid, myIter
                0034       _RL time_step
                0035 
                0036 #ifdef ALLOW_STREAMICE
                0037 
96b006450c dngo*0038       INTEGER i, j, bi, bj, Gi, Gj
                0039       _RL uflux, vflux, max_icfl, loc_icfl
5ca83cd8f7 Dani*0040       _RL time_step_full, time_step_rem
e005a328fc Dani*0041       _RL sec_per_year, time_step_loc, MR, SMB, TMB, irho
96b006450c dngo*0042       _RL bdot_depth, bdot_max
5ca83cd8f7 Dani*0043       _RL BCVALX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0044       _RL BCVALY(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0045       _RS BCMASKX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0046       _RS BCMASKY(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0047       _RL utrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0048       _RL vtrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0049       _RL h_after_uflux_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0050       _RL h_after_vflux_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0051       _RL hflux_x_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0052       _RL hflux_y_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
73e21ff944 Jean*0053 
5ca83cd8f7 Dani*0054       CHARACTER*(MAX_LEN_MBUF) msgBuf
                0055 
615a93f300 Dani*0056       CALL TIMER_START ('STREAMICE_ADVECT_THICKNESS',myThid)
                0057 
5ca83cd8f7 Dani*0058       sec_per_year = 365.*86400.
                0059 
                0060       time_step_loc = time_step / sec_per_year
                0061       time_step_full = time_step_loc
                0062       time_step_rem = time_step_loc
                0063       PRINT *, "time_step_loc ", time_step_loc
                0064 
                0065 #ifdef ALLOW_AUTODIFF_TAMC
96b006450c dngo*0066 CADJ INIT loctape_stream_adv = COMMON, 1
                0067 CADJ STORE area_shelf_streamice = loctape_stream_adv, key = 1
                0068 CADJ STORE bdot_streamice       = loctape_stream_adv, key = 1
5ca83cd8f7 Dani*0069 #endif
                0070 
d82c08285f Dani*0071 #ifdef ALLOW_OPENAD
                0072       DO k=1,streamice_smooth_thick_adjoint
                0073       CALL STREAMICE_SMOOTH_ADJOINT_FIELD (
                0074      O            H_streamice,
                0075      I            myThid)
                0076       ENDDO
                0077 #endif
                0078 
96b006450c dngo*0079 #ifdef ALLOW_AUTODIFF_TAMC
                0080 CADJ STORE streamice_hmask  = comlev1, key=ikey_dynamics
                0081 #endif
5ca83cd8f7 Dani*0082       DO bj=myByLo(myThid),myByHi(myThid)
                0083        DO bi=myBxLo(myThid),myBxHi(myThid)
                0084         DO j=1,sNy+1
                0085          DO i=1,sNx+1
                0086 
73e21ff944 Jean*0087           H_streamice_prev(i,j,bi,bj) =
5ca83cd8f7 Dani*0088      &     H_streamice(i,j,bi,bj)
                0089 
                0090           hflux_x_SI (i,j,bi,bj) = 0. _d 0
                0091           hflux_y_SI (i,j,bi,bj) = 0. _d 0
0fbff46b46 dngo*0092 
c2f4034916 Dani*0093           IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
                0094            h_after_uflux_SI(i,j,bi,bj) = 0. _d 0
                0095            h_after_vflux_SI(i,j,bi,bj) = 0. _d 0
                0096           ELSE
                0097            h_after_uflux_SI(i,j,bi,bj) = H_streamice(i,j,bi,bj)
                0098            h_after_vflux_SI(i,j,bi,bj) = H_streamice(i,j,bi,bj)
                0099           ENDIF
5ca83cd8f7 Dani*0100 
                0101           IF (STREAMICE_ufacemask(i,j,bi,bj).eq.3.0) THEN
                0102            BCMASKX(i,j,bi,bj) = 3.0
                0103            BCVALX(i,j,bi,bj) = h_ubdry_values_SI(i,j,bi,bj)
0fbff46b46 dngo*0104            IF (STREAMICE_vel_ext_cgrid) THEN
                0105             utrans(i,j,bi,bj) = u_streamice_ext(i,j,bi,bj)
                0106            ELSEIF (STREAMICE_vel_ext) THEN
                0107             utrans(i,j,bi,bj) = .5 * (
                0108      &       u_streamice_ext(i,j,bi,bj)+u_streamice_ext(i,j+1,bi,bj))
                0109            ELSE
                0110             utrans(i,j,bi,bj) = .5 * (
                0111      &       u_streamice(i,j,bi,bj)+u_streamice(i,j+1,bi,bj))
                0112            ENDIF
5ca83cd8f7 Dani*0113           ELSEIF (STREAMICE_ufacemask(i,j,bi,bj).eq.4.0) THEN
d0c49e8a51 Dani*0114            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
                0115             uflux = u_flux_bdry_SI(i,j,bi,bj)
                0116             BCMASKX(i,j,bi,bj) = 3.0
                0117             BCVALX(i,j,bi,bj) = uflux
                0118             utrans(i,j,bi,bj) = 1.0
8c63934cfa Dani*0119            ELSEIF (STREAMICE_hmask(i-1,j,bi,bj).eq.1.0) THEN
d0c49e8a51 Dani*0120             uflux = u_flux_bdry_SI(i,j,bi,bj)
                0121             BCMASKX(i,j,bi,bj) = 3.0
                0122             BCVALX(i,j,bi,bj) = uflux
                0123             utrans(i,j,bi,bj) = -1.0
                0124            ENDIF
5ca83cd8f7 Dani*0125           ELSEIF (.not.(
                0126      &     STREAMICE_hmask(i,j,bi,bj).eq.1.0.OR.
                0127      &     STREAMICE_hmask(i-1,j,bi,bj).eq.1.0)) THEN
                0128            BCMASKX(i,j,bi,bj) = 0.0
                0129            BCVALX(i,j,bi,bj) = 0. _d 0
                0130            utrans(i,j,bi,bj) = 0. _d 0
                0131           ELSE
                0132            BCMASKX(i,j,bi,bj) = 0.0
                0133            BCVALX(i,j,bi,bj) = 0. _d 0
0fbff46b46 dngo*0134            IF (STREAMICE_vel_ext_cgrid) THEN
                0135             utrans(i,j,bi,bj) = u_streamice_ext(i,j,bi,bj)
                0136            ELSEIF (STREAMICE_vel_ext) THEN
                0137             utrans(i,j,bi,bj) = .5 * (
                0138      &       u_streamice_ext(i,j,bi,bj)+u_streamice_ext(i,j+1,bi,bj))
                0139            ELSE
                0140             utrans(i,j,bi,bj) = .5 * (
                0141      &       u_streamice(i,j,bi,bj)+u_streamice(i,j+1,bi,bj))
                0142            ENDIF
5ca83cd8f7 Dani*0143           ENDIF
                0144 
                0145           IF (STREAMICE_vfacemask(i,j,bi,bj).eq.3.0) THEN
                0146            BCMASKy(i,j,bi,bj) = 3.0
                0147            BCVALy(i,j,bi,bj) = h_vbdry_values_SI(i,j,bi,bj)
0fbff46b46 dngo*0148            IF (STREAMICE_vel_ext_cgrid) THEN
                0149             vtrans(i,j,bi,bj) = v_streamice_ext(i,j,bi,bj)
                0150            ELSEIF (STREAMICE_vel_ext) THEN
                0151             vtrans(i,j,bi,bj) = .5 * (
                0152      &       v_streamice_ext(i,j,bi,bj)+v_streamice_ext(i+1,j,bi,bj))
                0153            ELSE
                0154             vtrans(i,j,bi,bj) = .5 * (
                0155      &       v_streamice(i,j,bi,bj)+v_streamice(i+1,j,bi,bj))
                0156            ENDIF
5ca83cd8f7 Dani*0157           ELSEIF (STREAMICE_vfacemask(i,j,bi,bj).eq.4.0) THEN
d0c49e8a51 Dani*0158            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
                0159             vflux = v_flux_bdry_SI(i,j,bi,bj)
                0160             BCMASKY(i,j,bi,bj) = 3.0
                0161             BCVALY(i,j,bi,bj) = vflux
                0162             vtrans(i,j,bi,bj) = 1.0
8c63934cfa Dani*0163            ELSEIF (STREAMICE_hmask(i,j-1,bi,bj).eq.1.0) THEN
d0c49e8a51 Dani*0164             vflux = v_flux_bdry_SI(i,j,bi,bj)
                0165             BCMASKY(i,j,bi,bj) = 3.0
                0166             BCVALY(i,j,bi,bj) = vflux
                0167             vtrans(i,j,bi,bj) = -1.0
                0168            ENDIF
5ca83cd8f7 Dani*0169           ELSEIF (.not.(
                0170      &     STREAMICE_hmask(i,j,bi,bj).eq.1.0.OR.
                0171      &     STREAMICE_hmask(i,j-1,bi,bj).eq.1.0)) THEN
                0172            BCMASKY(i,j,bi,bj) = 0.0
                0173            BCVALY(i,j,bi,bj) = 0. _d 0
                0174            vtrans(i,j,bi,bj) = 0. _d 0
                0175           ELSE
                0176            BCMASKy(i,j,bi,bj) = 0.0
                0177            BCVALy(i,j,bi,bj) = 0. _d 0
0fbff46b46 dngo*0178            IF (STREAMICE_vel_ext_cgrid) THEN
                0179             vtrans(i,j,bi,bj) = v_streamice_ext(i,j,bi,bj)
                0180            ELSEIF (STREAMICE_vel_ext) THEN
                0181             vtrans(i,j,bi,bj) = .5 * (
                0182      &       v_streamice_ext(i,j,bi,bj)+v_streamice_ext(i+1,j,bi,bj))
                0183            ELSE
                0184             vtrans(i,j,bi,bj) = .5 * (
                0185      &       v_streamice(i,j,bi,bj)+v_streamice(i+1,j,bi,bj))
                0186            ENDIF
5ca83cd8f7 Dani*0187           ENDIF
                0188 
                0189          ENDDO
                0190         ENDDO
                0191        ENDDO
                0192       ENDDO
                0193 
                0194       _EXCH_XY_RL(utrans,myThid)
                0195       _EXCH_XY_RL(vtrans,myThid)
                0196       _EXCH_XY_RS(BCMASKx,myThid)
                0197       _EXCH_XY_RS(BCMASKy,myThid)
                0198       _EXCH_XY_RL(BCVALX,myThid)
                0199       _EXCH_XY_RL(BCVALY,myThid)
bdd8102d3e Dani*0200       _EXCH_XY_RL(h_after_uflux_SI,myThid)
                0201       _EXCH_XY_RL(h_after_vflux_SI,myThid)
85b328ee93 dngo*0202       _EXCH_XY_RL(hflux_x_SI,myThid)
                0203       _EXCH_XY_RL(hflux_y_SI,myThid)
5ca83cd8f7 Dani*0204 
96b006450c dngo*0205 #ifdef ALLOW_AUTODIFF_TAMC
                0206 CADJ STORE BCMASKx, BCMASKy= comlev1, key=ikey_dynamics
                0207 CADJ STORE BCVALX, BCVALY  = comlev1, key=ikey_dynamics
                0208 CADJ STORE utrans, vtrans  = comlev1, key=ikey_dynamics
                0209 CADJ STORE streamice_hmask = comlev1, key=ikey_dynamics
                0210 CADJ STORE H_streamice     = comlev1, key=ikey_dynamics
                0211 #endif
                0212 
4f9d447bf7 Jean*0213 #ifndef ALLOW_AUTODIFF
5ca83cd8f7 Dani*0214 
                0215       max_icfl = 1.e-20
                0216 
                0217       DO bj=myByLo(myThid),myByHi(myThid)
                0218        DO bi=myBxLo(myThid),myBxHi(myThid)
                0219         DO j=1,sNy
                0220          DO i=1,sNx
                0221           IF (streamice_hmask(i,j,bi,bj).eq.1.0) THEN
                0222            loc_icfl=max(abs(utrans(i,j,bi,bj)),
                0223      &                  abs(utrans(i+1,j,bi,bj))) / dxF(i,j,bi,bj)
                0224            loc_icfl=max(loc_icfl,max(abs(vtrans(i,j,bi,bj)),
                0225      &                  abs(vtrans(i,j+1,bi,bj))) / dyF(i,j,bi,bj))
                0226            if (loc_icfl.gt.max_icfl) then
                0227             max_icfl = loc_icfl
                0228            ENDIF
                0229           ENDIF
                0230          ENDDO
                0231         ENDDO
                0232        ENDDO
                0233       ENDDO
                0234 
                0235       CALL GLOBAL_MAX_R8 (max_icfl, myThid)
                0236 
4f9d447bf7 Jean*0237 #endif /* ALLOW_AUTODIFF */
5ca83cd8f7 Dani*0238 
                0239 #ifdef ALLOW_AUTODIFF_TAMC
                0240 CADJ STORE streamice_hmask  = comlev1, key=ikey_dynamics
                0241 CADJ STORE H_streamice  = comlev1, key=ikey_dynamics
                0242 #endif
                0243 
4f9d447bf7 Jean*0244 #ifndef ALLOW_AUTODIFF
73e21ff944 Jean*0245       do while (time_step_rem .gt. 1.e-15)
5ca83cd8f7 Dani*0246        time_step_loc = min (
                0247      &  streamice_cfl_factor / max_icfl,
                0248      &  time_step_rem )
                0249        if (time_step_loc .lt. time_step_full) then
                0250         PRINT *, "TAKING PARTIAL TIME STEP", time_step_loc
                0251        endif
4f9d447bf7 Jean*0252 #endif /* ALLOW_AUTODIFF */
5ca83cd8f7 Dani*0253 
                0254       CALL STREAMICE_ADV_FLUX_FL_X ( myThid ,
                0255      I   utrans ,
                0256      I   H_streamice ,
                0257      I   BCMASKX,
                0258      I   BCVALX,
                0259      O   hflux_x_SI,
                0260      I   time_step_loc )
                0261 
                0262       DO bj=myByLo(myThid),myByHi(myThid)
                0263        DO bi=myBxLo(myThid),myBxHi(myThid)
                0264         DO j=1-3,sNy+3
                0265          DO i=1,sNx
                0266           Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
                0267           Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
                0268           IF (((Gj .ge. 1) .and. (Gj .le. Ny))
                0269      &       .or.STREAMICE_NS_PERIODIC) THEN
                0270 
                0271           IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
                0272            h_after_uflux_SI (i,j,bi,bj) = H_streamice(i,j,bi,bj) -
                0273      &      (hflux_x_SI(i+1,j,bi,bj)*dyG(i+1,j,bi,bj) -
73e21ff944 Jean*0274      &        hflux_x_SI(i,j,bi,bj)*dyG(i,j,bi,bj))
5ca83cd8f7 Dani*0275      &        * recip_rA (i,j,bi,bj) * time_step_loc
                0276            IF ( h_after_uflux_SI (i,j,bi,bj).le.0.0) THEN
                0277             PRINT *, "h neg after x", i,j,hflux_x_SI(i+1,j,bi,bj),
                0278      &        hflux_x_SI(i,j,bi,bj)
                0279            ENDIF
                0280           ENDIF
                0281 
                0282           ENDIF
                0283          ENDDO
                0284         ENDDO
                0285        ENDDO
                0286       ENDDO
                0287 
                0288 #ifdef ALLOW_AUTODIFF_TAMC
96b006450c dngo*0289 CADJ STORE h_after_uflux_SI = comlev1, key = ikey_dynamics
5ca83cd8f7 Dani*0290 #endif
                0291 
96b006450c dngo*0292 c      CALL STREAMICE_ADVECT_THICKNESS_Y ( myThid,
                0293 c     O   hflux_y_SI,
                0294 c     O   h_after_vflux_SI,
                0295 c     I   time_step_loc )
5ca83cd8f7 Dani*0296 
                0297       CALL STREAMICE_ADV_FLUX_FL_Y ( myThid ,
                0298      I   vtrans ,
                0299      I   h_after_uflux_si ,
                0300      I   BCMASKY,
                0301      I   BCVALY,
                0302      O   hflux_y_SI,
                0303      I   time_step_loc )
                0304 
                0305       DO bj=myByLo(myThid),myByHi(myThid)
                0306        DO bi=myBxLo(myThid),myBxHi(myThid)
                0307         DO j=1,sNy
                0308          DO i=1,sNx
                0309           Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
                0310           Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
                0311           IF (((Gj .ge. 1) .and. (Gj .le. Ny))
                0312      &       .or.STREAMICE_EW_PERIODIC) THEN
                0313 
                0314           IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
                0315            h_after_vflux_SI (i,j,bi,bj) = h_after_uflux_SI(i,j,bi,bj) -
                0316      &      (hflux_y_SI(i,j+1,bi,bj)*dxG(i,j+1,bi,bj) -
                0317      &        hflux_y_SI(i,j,bi,bj)*dxG(i,j,bi,bj)) *
                0318      &        recip_rA (i,j,bi,bj) * time_step_loc
                0319            IF ( h_after_vflux_SI (i,j,bi,bj).le.0.0) THEN
                0320             PRINT *, "h neg after y", i,j,hflux_y_SI(i,j+1,bi,bj),
                0321      &        hflux_y_SI(i,j,bi,bj)
                0322            ENDIF
                0323 
                0324           ENDIF
                0325          ENDIF
                0326 
                0327          ENDDO
                0328         ENDDO
                0329        ENDDO
                0330       ENDDO
                0331 
                0332       DO bj=myByLo(myThid),myByHi(myThid)
                0333        DO bi=myBxLo(myThid),myBxHi(myThid)
                0334         DO j=1,sNy
                0335          DO i=1,sNx
                0336           IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
73e21ff944 Jean*0337            H_streamice (i,j,bi,bj) =
5ca83cd8f7 Dani*0338      &      h_after_vflux_SI (i,j,bi,bj)
                0339           ENDIF
                0340          ENDDO
                0341         ENDDO
                0342        ENDDO
                0343       ENDDO
                0344 
96b006450c dngo*0345 c NOTE: AT THIS POINT H IS NOT VALID ON OVERLAP!!!
5ca83cd8f7 Dani*0346 
51683b705c Dani*0347       if (streamice_move_front) then
f4c870d169 Dani*0348       CALL STREAMICE_ADV_FRONT (
                0349      &  myThid, time_step_loc,
                0350      &  hflux_x_SI, hflux_y_SI )
51683b705c Dani*0351       endif
96b006450c dngo*0352 #ifdef ALLOW_AUTODIFF_TAMC
                0353 C     These make calling S/R STREAMICE_ADV_FRONT in
                0354 C     S/R STREAMICE_ADVECTION_THICKNESS_AD go away.
                0355 CADJ STORE H_streamice            = comlev1, key=ikey_dynamics
                0356 CADJ STORE streamice_hmask        = comlev1, key=ikey_dynamics
                0357 #endif
73e21ff944 Jean*0358 
5ca83cd8f7 Dani*0359 #ifdef ALLOW_STREAMICE_2DTRACER
                0360       CALL STREAMICE_ADVECT_2DTRACER(
                0361      &  myThid,
                0362      &  myIter,
                0363      &  time_step,
                0364      &  uTrans,
                0365      &  vTrans,
73e21ff944 Jean*0366      &  BCMASKx,
                0367      &  BCMASKy )
5ca83cd8f7 Dani*0368 #endif
                0369 
4f9d447bf7 Jean*0370 #ifndef ALLOW_AUTODIFF
73e21ff944 Jean*0371       time_step_rem = time_step_rem - time_step_loc
5ca83cd8f7 Dani*0372       enddo
4f9d447bf7 Jean*0373 #endif /* ALLOW_AUTODIFF */
5ca83cd8f7 Dani*0374 
96b006450c dngo*0375 c NOW WE APPLY MELT RATES !!
                0376 c THIS MAY BE MOVED TO A SEPARATE SUBROUTINE
e005a328fc Dani*0377       irho = 1./streamice_density
5ca83cd8f7 Dani*0378       DO bj=myByLo(myThid),myByHi(myThid)
                0379        DO bi=myBxLo(myThid),myBxHi(myThid)
                0380         DO j=1,sNy
                0381          DO i=1,sNx
bdd8102d3e Dani*0382           Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
                0383           Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
96b006450c dngo*0384 #ifdef ALLOW_AUTODIFF
                0385 C     Interestingly, this helps avoiding 10 recomputation warnings;
                0386 C     hopefully it does not change results.
                0387           MR = 0. _d 0
                0388 #endif
bdd8102d3e Dani*0389           IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0 .or.
5ca83cd8f7 Dani*0390      &       STREAMICE_hmask(i,j,bi,bj).eq.2.0) THEN
e005a328fc Dani*0391 
                0392            IF (STREAMICE_allow_cpl) THEN
                0393 #ifdef ALLOW_SHELFICE
                0394             MR = -1. * (1.-float_frac_streamice(i,j,bi,bj)) *
0fbff46b46 dngo*0395      &        shelfIceFreshWaterFlux(i,j,bi,bj) * irho *
e005a328fc Dani*0396      &        sec_per_year
                0397 
                0398 #else
                0399             STOP 'SHELFICE IS NOT ENABLED'
4f9d447bf7 Jean*0400 #endif
e005a328fc Dani*0401            ELSE
96b006450c dngo*0402 
                0403               IF (STREAMICEBdotConfig.EQ.'FILE' ) THEN
                0404 
                0405                MR = (1.-float_frac_streamice(i,j,bi,bj)) *
bdd8102d3e Dani*0406      &             (BDOT_STREAMICE(i,j,bi,bj) +
                0407      &              BDOT_pert(i,j,bi,bj))
96b006450c dngo*0408 
                0409               ELSEIF (STREAMICEBdotConfig.EQ.'PARAM') THEN
                0410 
                0411                bdot_depth =
                0412      &            streamice_bdot_depth_maxmelt_v(i,j,bi,bj) +
                0413      &            streamice_bdot_depth_maxmelt
                0414 
                0415                bdot_max =
                0416      &           streamice_bdot_maxmelt_v(i,j,bi,bj) +
                0417      &           streamice_bdot_maxmelt
                0418 
                0419                IF (base_el_streamice(i,j,bi,bj) .lt.
                0420      &             streamice_bdot_depth_nomelt) THEN
                0421                 IF (base_el_streamice(i,j,bi,bj) .lt.
                0422      &             bdot_depth) THEN
                0423                  MR = ABS(bdot_max)**streamice_bdot_exp
                0424                 ELSE
                0425                  MR = (ABS((streamice_bdot_depth_nomelt-
                0426      &                 base_el_streamice(i,j,bi,bj)) /
                0427      &                (streamice_bdot_depth_nomelt-
                0428      &                 bdot_depth) *
                0429      &                 bdot_max))**streamice_bdot_exp
                0430                 ENDIF
                0431                ELSE
                0432                  MR = 0.0
                0433                ENDIF
                0434                MR = (1.-float_frac_streamice(i,j,bi,bj)) *
                0435      &             (MR + BDOT_pert(i,j,bi,bj))
                0436                BDOT_STREAMICE(i,j,bi,bj) = MR
                0437               ELSE
                0438                MR = 0.
                0439                BDOT_STREAMICE(i,j,bi,bj) = MR
                0440               ENDIF
                0441 
e005a328fc Dani*0442            ENDIF
bdd8102d3e Dani*0443 
e005a328fc Dani*0444            SMB = ADOT_STREAMICE(i,j,bi,bj)
                0445            TMB = SMB - MR
                0446            IF ((TMB.lt.0.0) .and.
5ca83cd8f7 Dani*0447      &         (MR * time_step_loc .gt.
                0448      &          H_streamice (i,j,bi,bj))) THEN
                0449                 H_streamice (i,j,bi,bj) = 0. _d 0
bdd8102d3e Dani*0450                 STREAMICE_hmask(i,j,bi,bj) = 0.0
                0451                PRINT *, "GOT HERE melted away! ", i,j
e005a328fc Dani*0452            ELSE
73e21ff944 Jean*0453                H_streamice (i,j,bi,bj) =
5ca83cd8f7 Dani*0454      &          H_streamice (i,j,bi,bj) + TMB * time_step_loc
e005a328fc Dani*0455            ENDIF
bdd8102d3e Dani*0456 
                0457           ENDIF
5ca83cd8f7 Dani*0458          ENDDO
                0459         ENDDO
                0460        ENDDO
73e21ff944 Jean*0461       ENDDO
                0462 
7b7bae94ed Mart*0463       _EXCH_XY_RL(H_streamice,myThid)
5ca83cd8f7 Dani*0464 
                0465       WRITE(msgBuf,'(A)') 'END STREAMICE_ADVECT_THICKNESS'
                0466        CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0467      &                     SQUEEZE_RIGHT , 1)
615a93f300 Dani*0468       CALL TIMER_STOP ('STREAMICE_ADVECT_THICKNESS',myThid)
73e21ff944 Jean*0469 
5ca83cd8f7 Dani*0470 #endif
4f9d447bf7 Jean*0471       RETURN
5ca83cd8f7 Dani*0472       END