C $Header: /home/ubuntu/mnt/e9_copy/MITgcm_contrib/dgoldberg/streamice/streamice_advect_thickness.F,v 1.6 2013/01/09 21:56:18 dgoldberg Exp $ C $Name: $ #include "STREAMICE_OPTIONS.h" C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP SUBROUTINE STREAMICE_ADVECT_THICKNESS ( myThid, time_step ) C /============================================================\ C | SUBROUTINE | C | o | C |============================================================| C | | C \============================================================/ IMPLICIT NONE C === Global variables === #include "SIZE.h" #include "GRID.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "STREAMICE.h" #include "STREAMICE_ADV.h" #ifdef ALLOW_AUTODIFF_TAMC # include "tamc.h" #endif INTEGER myThid _RL time_step #ifdef ALLOW_STREAMICE INTEGER i, j, bi, bj _RL thick_bd _RL SLOPE_LIMITER _RL sec_per_year, time_step_loc, MR, SMB, TMB CHARACTER*(MAX_LEN_MBUF) msgBuf external SLOPE_LIMITER sec_per_year = 365.*86400. time_step_loc = time_step / sec_per_year #ifdef ALLOW_AUTODIFF_TAMC CADJ STORE streamice_hmask = comlev1, key=ikey_dynamics #endif DO bj=myByLo(myThid),myByHi(myThid) DO bi=myBxLo(myThid),myBxHi(myThid) DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx H_streamice_prev(i,j,bi,bj) = & H_streamice(i,j,bi,bj) hflux_x_SI (i,j,bi,bj) = 0. _d 0 hflux_y_SI (i,j,bi,bj) = 0. _d 0 hflux_x_SI2 (i,j,bi,bj) = 0. _d 0 hflux_y_SI2 (i,j,bi,bj) = 0. _d 0 IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN h_after_uflux_SI (i,j,bi,bj) = & H_streamice (i,j,bi,bj) ENDIF thick_bd = h_bdry_values_SI (i,j,bi,bj) IF (thick_bd .ne. 0. _d 0) THEN h_after_uflux_SI (i,j,bi,bj) = thick_bd ENDIF ENDDO ENDDO ENDDO ENDDO #ifdef ALLOW_AUTODIFF_TAMC CADJ STORE h_after_uflux_si = comlev1, key=ikey_dynamics CADJ STORE streamice_hmask = comlev1, key=ikey_dynamics #endif CALL STREAMICE_ADVECT_THICKNESS_X ( myThid, O hflux_x_SI, O h_after_uflux_SI, I time_step_loc ) DO bj=myByLo(myThid),myByHi(myThid) DO bi=myBxLo(myThid),myBxHi(myThid) DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx h_after_vflux_SI (i,j,bi,bj) = & h_after_uflux_SI (i,j,bi,bj) ENDDO ENDDO ENDDO ENDDO #ifdef ALLOW_AUTODIFF_TAMC CADJ STORE h_after_vflux_si = comlev1, key=ikey_dynamics CADJ STORE streamice_hmask = comlev1, key=ikey_dynamics #endif CALL STREAMICE_ADVECT_THICKNESS_Y ( myThid, O hflux_y_SI, O h_after_vflux_SI, I time_step_loc ) DO bj=myByLo(myThid),myByHi(myThid) DO bi=myBxLo(myThid),myBxHi(myThid) DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN H_streamice (i,j,bi,bj) = & h_after_vflux_SI (i,j,bi,bj) ENDIF ENDDO ENDDO ENDDO ENDDO CALL STREAMICE_ADV_FRONT ( myThid, time_step_loc ) ! NOW WE APPLY MELT RATES !! ! THIS MAY BE MOVED TO A SEPARATE SUBROUTINE DO bj=myByLo(myThid),myByHi(myThid) DO bi=myBxLo(myThid),myBxHi(myThid) DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0 .or. & STREAMICE_hmask(i,j,bi,bj).eq.2.0) THEN MR = (1.-float_frac_streamice(i,j,bi,bj)) * & BDOT_STREAMICE(i,j,bi,bj) SMB = ADOT_STREAMICE(i,j,bi,bj) TMB = SMB - MR IF ((TMB.lt.0.0) .and. & (MR * time_step_loc .gt. & H_streamice (i,j,bi,bj))) THEN H_streamice (i,j,bi,bj) = 0. _d 0 STREAMICE_hmask(i,j,bi,bj) = 0. ELSE H_streamice (i,j,bi,bj) = & H_streamice (i,j,bi,bj) + TMB ENDIF ENDIF ENDDO ENDDO ENDDO ENDDO WRITE(msgBuf,'(A)') 'END STREAMICE_ADVECT_THICKNESS' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) #endif END