New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 5208 for branches/2014/dev_r4650_UKMO11_restart_functionality/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90 – NEMO

Ignore:
Timestamp:
2015-04-13T15:08:59+02:00 (9 years ago)
Author:
davestorkey
Message:

Merge in changes from trunk up to 5021.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO11_restart_functionality/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90

    r4688 r5208  
    2525   USE wrk_nemo       ! work arrays 
    2626   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
    27    USE cpl_oasis3, ONLY : lk_cpl 
     27   USE sbc_oce, ONLY : lk_cpl 
    2828 
    2929   IMPLICIT NONE 
     
    3232   PUBLIC   lim_thd_dif   ! called by lim_thd 
    3333 
    34    REAL(wp) ::   epsi10 = 1.e-10_wp    ! 
    3534   !!---------------------------------------------------------------------- 
    3635   !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011) 
     
    7574      !! 
    7675      !! ** Inputs / Ouputs : (global commons) 
    77       !!           surface temperature : t_su_b 
    78       !!           ice/snow temperatures   : t_i_b, t_s_b 
    79       !!           ice salinities          : s_i_b 
     76      !!           surface temperature : t_su_1d 
     77      !!           ice/snow temperatures   : t_i_1d, t_s_1d 
     78      !!           ice salinities          : s_i_1d 
    8079      !!           number of layers in the ice/snow: nlay_i, nlay_s 
    8180      !!           profile of the ice/snow layers : z_i, z_s 
    82       !!           total ice/snow thickness : ht_i_b, ht_s_b 
     81      !!           total ice/snow thickness : ht_i_1d, ht_s_1d 
    8382      !! 
    8483      !! ** External :  
     
    9897      INTEGER ::   ii, ij      ! temporary dummy loop index 
    9998      INTEGER ::   numeq       ! current reference number of equation 
    100       INTEGER ::   layer       ! vertical dummy loop index  
     99      INTEGER ::   jk       ! vertical dummy loop index  
    101100      INTEGER ::   nconv       ! number of iterations in iterative procedure 
    102101      INTEGER ::   minnumeqmin, maxnumeqmax 
     
    108107      REAL(wp) ::   zgamma    =  18009._wp    ! for specific heat 
    109108      REAL(wp) ::   zbeta     =  0.117_wp     ! for thermal conductivity (could be 0.13) 
    110       REAL(wp) ::   zraext_s  =  1.e+8_wp     ! extinction coefficient of radiation in the snow 
     109      REAL(wp) ::   zraext_s  =  10._wp       ! extinction coefficient of radiation in the snow 
    111110      REAL(wp) ::   zkimin    =  0.10_wp      ! minimum ice thermal conductivity 
    112111      REAL(wp) ::   ztsu_err  =  1.e-5_wp     ! range around which t_su is considered as 0°C  
     
    114113      REAL(wp) ::   zerritmax   ! current maximal error on temperature  
    115114      REAL(wp), POINTER, DIMENSION(:) ::   ztfs        ! ice melting point 
    116       REAL(wp), POINTER, DIMENSION(:) ::   ztsuold     ! old surface temperature (before the iterative procedure ) 
    117       REAL(wp), POINTER, DIMENSION(:) ::   ztsuoldit   ! surface temperature at previous iteration 
     115      REAL(wp), POINTER, DIMENSION(:) ::   ztsu     ! old surface temperature (before the iterative procedure ) 
     116      REAL(wp), POINTER, DIMENSION(:) ::   ztsubit     ! surface temperature at previous iteration 
    118117      REAL(wp), POINTER, DIMENSION(:) ::   zh_i        ! ice layer thickness 
    119118      REAL(wp), POINTER, DIMENSION(:) ::   zh_s        ! snow layer thickness 
     
    129128      REAL(wp), POINTER, DIMENSION(:,:) ::   zradab_i    ! Radiation absorbed in the ice 
    130129      REAL(wp), POINTER, DIMENSION(:,:) ::   zkappa_i    ! Kappa factor in the ice 
    131       REAL(wp), POINTER, DIMENSION(:,:) ::   ztiold      ! Old temperature in the ice 
     130      REAL(wp), POINTER, DIMENSION(:,:) ::   zti      ! Old temperature in the ice 
    132131      REAL(wp), POINTER, DIMENSION(:,:) ::   zeta_i      ! Eta factor in the ice 
    133132      REAL(wp), POINTER, DIMENSION(:,:) ::   ztitemp     ! Temporary temperature in the ice to check the convergence 
     
    137136      REAL(wp), POINTER, DIMENSION(:,:) ::   zradab_s    ! Radiation absorbed in the snow 
    138137      REAL(wp), POINTER, DIMENSION(:,:) ::   zkappa_s    ! Kappa factor in the snow 
    139       REAL(wp), POINTER, DIMENSION(:,:) ::   zeta_s       ! Eta factor in the snow 
    140       REAL(wp), POINTER, DIMENSION(:,:) ::   ztstemp      ! Temporary temperature in the snow to check the convergence 
    141       REAL(wp), POINTER, DIMENSION(:,:) ::   ztsold       ! Temporary temperature in the snow 
    142       REAL(wp), POINTER, DIMENSION(:,:) ::   z_s          ! Vertical cotes of the layers in the snow 
    143       REAL(wp), POINTER, DIMENSION(:,:) ::   zindterm   ! Independent term 
    144       REAL(wp), POINTER, DIMENSION(:,:) ::   zindtbis   ! temporary independent term 
     138      REAL(wp), POINTER, DIMENSION(:,:) ::   zeta_s      ! Eta factor in the snow 
     139      REAL(wp), POINTER, DIMENSION(:,:) ::   ztstemp     ! Temporary temperature in the snow to check the convergence 
     140      REAL(wp), POINTER, DIMENSION(:,:) ::   ztsb        ! Temporary temperature in the snow 
     141      REAL(wp), POINTER, DIMENSION(:,:) ::   z_s         ! Vertical cotes of the layers in the snow 
     142      REAL(wp), POINTER, DIMENSION(:,:) ::   zswiterm    ! Independent term 
     143      REAL(wp), POINTER, DIMENSION(:,:) ::   zswitbis    ! temporary independent term 
    145144      REAL(wp), POINTER, DIMENSION(:,:) ::   zdiagbis 
    146       REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrid   ! tridiagonal system terms 
     145      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrid     ! tridiagonal system terms 
    147146      ! diag errors on heat 
    148       REAL(wp), POINTER, DIMENSION(:) :: zdq, zq_ini 
    149       REAL(wp)                        :: zhfx_err 
     147      REAL(wp), POINTER, DIMENSION(:) :: zdq, zq_ini, zhfx_err 
    150148      !!------------------------------------------------------------------      
    151149      !  
    152150      CALL wrk_alloc( jpij, numeqmin, numeqmax, isnow ) 
    153       CALL wrk_alloc( jpij, ztfs, ztsuold, ztsuoldit, zh_i, zh_s, zfsw ) 
     151      CALL wrk_alloc( jpij, ztfs, ztsub, ztsubit, zh_i, zh_s, zfsw ) 
    154152      CALL wrk_alloc( jpij, zf, dzf, zerrit, zdifcase, zftrice, zihic, zhsu ) 
    155       CALL wrk_alloc( jpij, nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, ztiold, zeta_i, ztitemp, z_i, zspeche_i, kjstart=0) 
    156       CALL wrk_alloc( jpij, nlay_s+1,           zradtr_s, zradab_s, zkappa_s, ztsold, zeta_s, ztstemp, z_s, kjstart=0) 
    157       CALL wrk_alloc( jpij, jkmax+2, zindterm, zindtbis, zdiagbis  ) 
    158       CALL wrk_alloc( jpij, jkmax+2, 3, ztrid ) 
    159  
    160       CALL wrk_alloc( jpij, zdq, zq_ini ) 
     153      CALL wrk_alloc( jpij, nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, ztib, zeta_i, ztitemp, z_i, zspeche_i, kjstart=0) 
     154      CALL wrk_alloc( jpij, nlay_s+1,           zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart=0) 
     155      CALL wrk_alloc( jpij, nlay_i+3, zswiterm, zswitbis, zdiagbis  ) 
     156      CALL wrk_alloc( jpij, nlay_i+3, 3, ztrid ) 
     157 
     158      CALL wrk_alloc( jpij, zdq, zq_ini, zhfx_err ) 
    161159 
    162160      ! --- diag error on heat diffusion - PART 1 --- ! 
    163161      zdq(:) = 0._wp ; zq_ini(:) = 0._wp       
    164162      DO ji = kideb, kiut 
    165          zq_ini(ji) = ( SUM( q_i_b(ji,1:nlay_i) ) * ht_i_b(ji) / REAL( nlay_i ) +  & 
    166             &           SUM( q_s_b(ji,1:nlay_s) ) * ht_s_b(ji) / REAL( nlay_s ) )  
     163         zq_ini(ji) = ( SUM( q_i_1d(ji,1:nlay_i) ) * ht_i_1d(ji) / REAL( nlay_i ) +  & 
     164            &           SUM( q_s_1d(ji,1:nlay_s) ) * ht_s_1d(ji) / REAL( nlay_s ) )  
    167165      END DO 
    168166 
     
    173171      DO ji = kideb , kiut 
    174172         ! is there snow or not 
    175          isnow(ji)= NINT(  1._wp - MAX( 0._wp , SIGN(1._wp, - ht_s_b(ji) ) )  ) 
     173         isnow(ji)= NINT(  1._wp - MAX( 0._wp , SIGN(1._wp, - ht_s_1d(ji) ) )  ) 
    176174         ! surface temperature of fusion 
    177175         ztfs(ji) = REAL( isnow(ji) ) * rtt + REAL( 1 - isnow(ji) ) * rtt 
    178176         ! layer thickness 
    179          zh_i(ji) = ht_i_b(ji) / REAL( nlay_i ) 
    180          zh_s(ji) = ht_s_b(ji) / REAL( nlay_s ) 
     177         zh_i(ji) = ht_i_1d(ji) / REAL( nlay_i ) 
     178         zh_s(ji) = ht_s_1d(ji) / REAL( nlay_s ) 
    181179      END DO 
    182180 
     
    188186      z_i(:,0) = 0._wp   ! vert. coord. of the up. lim. of the 1st ice layer 
    189187 
    190       DO layer = 1, nlay_s            ! vert. coord of the up. lim. of the layer-th snow layer 
    191          DO ji = kideb , kiut 
    192             z_s(ji,layer) = z_s(ji,layer-1) + ht_s_b(ji) / REAL( nlay_s ) 
    193          END DO 
    194       END DO 
    195  
    196       DO layer = 1, nlay_i            ! vert. coord of the up. lim. of the layer-th ice layer 
    197          DO ji = kideb , kiut 
    198             z_i(ji,layer) = z_i(ji,layer-1) + ht_i_b(ji) / REAL( nlay_i ) 
     188      DO jk = 1, nlay_s            ! vert. coord of the up. lim. of the layer-th snow layer 
     189         DO ji = kideb , kiut 
     190            z_s(ji,jk) = z_s(ji,jk-1) + ht_s_1d(ji) / REAL( nlay_s ) 
     191         END DO 
     192      END DO 
     193 
     194      DO jk = 1, nlay_i            ! vert. coord of the up. lim. of the layer-th ice layer 
     195         DO ji = kideb , kiut 
     196            z_i(ji,jk) = z_i(ji,jk-1) + ht_i_1d(ji) / REAL( nlay_i ) 
    199197         END DO 
    200198      END DO 
     
    217215      DO ji = kideb , kiut 
    218216         ! switches 
    219          isnow(ji) = NINT(  1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_b(ji) ) )  )  
     217         isnow(ji) = NINT(  1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_1d(ji) ) )  )  
    220218         ! hs > 0, isnow = 1 
    221219         zhsu (ji) = hnzst  ! threshold for the computation of i0 
    222          zihic(ji) = MAX( 0._wp , 1._wp - ( ht_i_b(ji) / zhsu(ji) ) )      
     220         zihic(ji) = MAX( 0._wp , 1._wp - ( ht_i_1d(ji) / zhsu(ji) ) )      
    223221 
    224222         i0(ji)    = REAL( 1 - isnow(ji) ) * ( fr1_i0_1d(ji) + zihic(ji) * fr2_i0_1d(ji) ) 
     
    227225         !            a function of the cloud cover 
    228226         ! 
    229          !i0(ji)     =  (1.0-FLOAT(isnow(ji)))*3.0/(100*ht_s_b(ji)+10.0) 
     227         !i0(ji)     =  (1.0-FLOAT(isnow(ji)))*3.0/(100*ht_s_1d(ji)+10.0) 
    230228         !formula used in Cice 
    231229      END DO 
     
    249247      END DO 
    250248 
    251       DO layer = 1, nlay_s          ! Radiation through snow 
     249      DO jk = 1, nlay_s          ! Radiation through snow 
    252250         DO ji = kideb, kiut 
    253251            !                             ! radiation transmitted below the layer-th snow layer 
    254             zradtr_s(ji,layer) = zradtr_s(ji,0) * EXP( - zraext_s * ( MAX ( 0._wp , z_s(ji,layer) ) ) ) 
     252            zradtr_s(ji,jk) = zradtr_s(ji,0) * EXP( - zraext_s * ( MAX ( 0._wp , z_s(ji,jk) ) ) ) 
    255253            !                             ! radiation absorbed by the layer-th snow layer 
    256             zradab_s(ji,layer) = zradtr_s(ji,layer-1) - zradtr_s(ji,layer) 
     254            zradab_s(ji,jk) = zradtr_s(ji,jk-1) - zradtr_s(ji,jk) 
    257255         END DO 
    258256      END DO 
     
    262260      END DO 
    263261 
    264       DO layer = 1, nlay_i          ! Radiation through ice 
     262      DO jk = 1, nlay_i          ! Radiation through ice 
    265263         DO ji = kideb, kiut 
    266264            !                             ! radiation transmitted below the layer-th ice layer 
    267             zradtr_i(ji,layer) = zradtr_i(ji,0) * EXP( - kappa_i * ( MAX ( 0._wp , z_i(ji,layer) ) ) ) 
     265            zradtr_i(ji,jk) = zradtr_i(ji,0) * EXP( - kappa_i * ( MAX ( 0._wp , z_i(ji,jk) ) ) ) 
    268266            !                             ! radiation absorbed by the layer-th ice layer 
    269             zradab_i(ji,layer) = zradtr_i(ji,layer-1) - zradtr_i(ji,layer) 
     267            zradab_i(ji,jk) = zradtr_i(ji,jk-1) - zradtr_i(ji,jk) 
    270268         END DO 
    271269      END DO 
    272270 
    273271      DO ji = kideb, kiut           ! Radiation transmitted below the ice 
    274          !!!ftr_ice_1d(ji) = ftr_ice_1d(ji) + iatte_1d(ji) * zradtr_i(ji,nlay_i) * a_i_b(ji) / at_i_b(ji) ! clem modif 
    275272         ftr_ice_1d(ji) = zradtr_i(ji,nlay_i)  
    276273      END DO 
     
    282279      ! 
    283280      DO ji = kideb, kiut        ! Old surface temperature 
    284          ztsuold  (ji) =  t_su_b(ji)                              ! temperature at the beg of iter pr. 
    285          ztsuoldit(ji) =  t_su_b(ji)                              ! temperature at the previous iter 
    286          t_su_b   (ji) =  MIN( t_su_b(ji), ztfs(ji) - ztsu_err )  ! necessary 
     281         ztsub  (ji) =  t_su_1d(ji)                              ! temperature at the beg of iter pr. 
     282         ztsubit(ji) =  t_su_1d(ji)                              ! temperature at the previous iter 
     283         t_su_1d   (ji) =  MIN( t_su_1d(ji), ztfs(ji) - ztsu_err )  ! necessary 
    287284         zerrit   (ji) =  1000._wp                                ! initial value of error 
    288285      END DO 
    289286 
    290       DO layer = 1, nlay_s       ! Old snow temperature 
    291          DO ji = kideb , kiut 
    292             ztsold(ji,layer) =  t_s_b(ji,layer) 
    293          END DO 
    294       END DO 
    295  
    296       DO layer = 1, nlay_i       ! Old ice temperature 
    297          DO ji = kideb , kiut 
    298             ztiold(ji,layer) =  t_i_b(ji,layer) 
     287      DO jk = 1, nlay_s       ! Old snow temperature 
     288         DO ji = kideb , kiut 
     289            ztsb(ji,jk) =  t_s_1d(ji,jk) 
     290         END DO 
     291      END DO 
     292 
     293      DO jk = 1, nlay_i       ! Old ice temperature 
     294         DO ji = kideb , kiut 
     295            ztib(ji,jk) =  t_i_1d(ji,jk) 
    299296         END DO 
    300297      END DO 
     
    313310         IF( thcon_i_swi == 0 ) THEN      ! Untersteiner (1964) formula 
    314311            DO ji = kideb , kiut 
    315                ztcond_i(ji,0)        = rcdic + zbeta*s_i_b(ji,1) / MIN(-epsi10,t_i_b(ji,1)-rtt) 
     312               ztcond_i(ji,0)        = rcdic + zbeta*s_i_1d(ji,1) / MIN(-epsi10,t_i_1d(ji,1)-rtt) 
    316313               ztcond_i(ji,0)        = MAX(ztcond_i(ji,0),zkimin) 
    317314            END DO 
    318             DO layer = 1, nlay_i-1 
     315            DO jk = 1, nlay_i-1 
    319316               DO ji = kideb , kiut 
    320                   ztcond_i(ji,layer) = rcdic + zbeta*( s_i_b(ji,layer) + s_i_b(ji,layer+1) ) /  & 
    321                      MIN(-2.0_wp * epsi10, t_i_b(ji,layer)+t_i_b(ji,layer+1) - 2.0_wp * rtt) 
    322                   ztcond_i(ji,layer) = MAX(ztcond_i(ji,layer),zkimin) 
     317                  ztcond_i(ji,jk) = rcdic + zbeta*( s_i_1d(ji,jk) + s_i_1d(ji,jk+1) ) /  & 
     318                     MIN(-2.0_wp * epsi10, t_i_1d(ji,jk)+t_i_1d(ji,jk+1) - 2.0_wp * rtt) 
     319                  ztcond_i(ji,jk) = MAX(ztcond_i(ji,jk),zkimin) 
    323320               END DO 
    324321            END DO 
     
    327324         IF( thcon_i_swi == 1 ) THEN      ! Pringle et al formula included: 2.11 + 0.09 S/T - 0.011.T 
    328325            DO ji = kideb , kiut 
    329                ztcond_i(ji,0) = rcdic + 0.090_wp * s_i_b(ji,1) / MIN( -epsi10, t_i_b(ji,1)-rtt )   & 
    330                   &                   - 0.011_wp * ( t_i_b(ji,1) - rtt )   
     326               ztcond_i(ji,0) = rcdic + 0.090_wp * s_i_1d(ji,1) / MIN( -epsi10, t_i_1d(ji,1)-rtt )   & 
     327                  &                   - 0.011_wp * ( t_i_1d(ji,1) - rtt )   
    331328               ztcond_i(ji,0) = MAX( ztcond_i(ji,0), zkimin ) 
    332329            END DO 
    333             DO layer = 1, nlay_i-1 
     330            DO jk = 1, nlay_i-1 
    334331               DO ji = kideb , kiut 
    335                   ztcond_i(ji,layer) = rcdic + 0.090_wp * ( s_i_b(ji,layer) + s_i_b(ji,layer+1) )   & 
    336                      &                                  / MIN(-2.0_wp * epsi10, t_i_b(ji,layer)+t_i_b(ji,layer+1) - 2.0_wp * rtt)   & 
    337                      &                       - 0.0055_wp* ( t_i_b(ji,layer) + t_i_b(ji,layer+1) - 2.0*rtt )   
    338                   ztcond_i(ji,layer) = MAX( ztcond_i(ji,layer), zkimin ) 
     332                  ztcond_i(ji,jk) = rcdic +                                                                     &  
     333                     &                 0.090_wp * ( s_i_1d(ji,jk) + s_i_1d(ji,jk+1) )                          & 
     334                     &                 / MIN(-2.0_wp * epsi10, t_i_1d(ji,jk)+t_i_1d(ji,jk+1) - 2.0_wp * rtt)   & 
     335                     &               - 0.0055_wp* ( t_i_1d(ji,jk) + t_i_1d(ji,jk+1) - 2.0*rtt )   
     336                  ztcond_i(ji,jk) = MAX( ztcond_i(ji,jk), zkimin ) 
    339337               END DO 
    340338            END DO 
    341339            DO ji = kideb , kiut 
    342                ztcond_i(ji,nlay_i) = rcdic + 0.090_wp * s_i_b(ji,nlay_i) / MIN(-epsi10,t_bo_b(ji)-rtt)   & 
    343                   &                        - 0.011_wp * ( t_bo_b(ji) - rtt )   
     340               ztcond_i(ji,nlay_i) = rcdic + 0.090_wp * s_i_1d(ji,nlay_i) / MIN(-epsi10,t_bo_1d(ji)-rtt)   & 
     341                  &                        - 0.011_wp * ( t_bo_1d(ji) - rtt )   
    344342               ztcond_i(ji,nlay_i) = MAX( ztcond_i(ji,nlay_i), zkimin ) 
    345343            END DO 
     
    357355         END DO 
    358356 
    359          DO layer = 1, nlay_s-1 
    360             DO ji = kideb , kiut 
    361                zkappa_s(ji,layer)  = 2.0 * rcdsn / & 
     357         DO jk = 1, nlay_s-1 
     358            DO ji = kideb , kiut 
     359               zkappa_s(ji,jk)  = 2.0 * rcdsn / & 
    362360                  MAX(epsi10,2.0*zh_s(ji)) 
    363361            END DO 
    364362         END DO 
    365363 
    366          DO layer = 1, nlay_i-1 
     364         DO jk = 1, nlay_i-1 
    367365            DO ji = kideb , kiut 
    368366               !-- Ice kappa factors 
    369                zkappa_i(ji,layer)  = 2.0*ztcond_i(ji,layer)/ & 
     367               zkappa_i(ji,jk)  = 2.0*ztcond_i(ji,jk)/ & 
    370368                  MAX(epsi10,2.0*zh_i(ji))  
    371369            END DO 
     
    386384         !------------------------------------------------------------------------------| 
    387385         ! 
    388          DO layer = 1, nlay_i 
    389             DO ji = kideb , kiut 
    390                ztitemp(ji,layer)   = t_i_b(ji,layer) 
    391                zspeche_i(ji,layer) = cpic + zgamma*s_i_b(ji,layer)/ & 
    392                   MAX((t_i_b(ji,layer)-rtt)*(ztiold(ji,layer)-rtt),epsi10) 
    393                zeta_i(ji,layer)    = rdt_ice / MAX(rhoic*zspeche_i(ji,layer)*zh_i(ji), & 
     386         DO jk = 1, nlay_i 
     387            DO ji = kideb , kiut 
     388               ztitemp(ji,jk)   = t_i_1d(ji,jk) 
     389               zspeche_i(ji,jk) = cpic + zgamma*s_i_1d(ji,jk)/ & 
     390                  MAX((t_i_1d(ji,jk)-rtt)*(ztib(ji,jk)-rtt),epsi10) 
     391               zeta_i(ji,jk)    = rdt_ice / MAX(rhoic*zspeche_i(ji,jk)*zh_i(ji), & 
    394392                  epsi10) 
    395393            END DO 
    396394         END DO 
    397395 
    398          DO layer = 1, nlay_s 
    399             DO ji = kideb , kiut 
    400                ztstemp(ji,layer) = t_s_b(ji,layer) 
    401                zeta_s(ji,layer)  = rdt_ice / MAX(rhosn*cpic*zh_s(ji),epsi10) 
     396         DO jk = 1, nlay_s 
     397            DO ji = kideb , kiut 
     398               ztstemp(ji,jk) = t_s_1d(ji,jk) 
     399               zeta_s(ji,jk)  = rdt_ice / MAX(rhosn*cpic*zh_s(ji),epsi10) 
    402400            END DO 
    403401         END DO 
     
    407405         !------------------------------------------------------------------------------| 
    408406         ! 
    409          DO ji = kideb , kiut 
    410             ! update of the non solar flux according to the update in T_su 
    411             qns_ice_1d(ji) = qns_ice_1d(ji) + dqns_ice_1d(ji) * ( t_su_b(ji) - ztsuoldit(ji) ) 
    412  
     407         IF( .NOT. lk_cpl ) THEN   !--- forced atmosphere case 
     408            DO ji = kideb , kiut 
     409               ! update of the non solar flux according to the update in T_su 
     410               qns_ice_1d(ji) = qns_ice_1d(ji) + dqns_ice_1d(ji) * ( t_su_1d(ji) - ztsubit(ji) ) 
     411            END DO 
     412         ENDIF 
     413 
     414         ! Update incoming flux 
     415         DO ji = kideb , kiut 
    413416            ! update incoming flux 
    414417            zf(ji)    =   zfsw(ji)              & ! net absorbed solar radiation 
    415                + qns_ice_1d(ji)                  ! non solar total flux  
     418               + qns_ice_1d(ji)                   ! non solar total flux  
    416419            ! (LWup, LWdw, SH, LH) 
    417420         END DO 
     
    429432         !!ice interior terms (top equation has the same form as the others) 
    430433 
    431          DO numeq=1,jkmax+2 
     434         DO numeq=1,nlay_i+3 
    432435            DO ji = kideb , kiut 
    433436               ztrid(ji,numeq,1) = 0. 
    434437               ztrid(ji,numeq,2) = 0. 
    435438               ztrid(ji,numeq,3) = 0. 
    436                zindterm(ji,numeq)= 0. 
    437                zindtbis(ji,numeq)= 0. 
     439               zswiterm(ji,numeq)= 0. 
     440               zswitbis(ji,numeq)= 0. 
    438441               zdiagbis(ji,numeq)= 0. 
    439442            ENDDO 
     
    442445         DO numeq = nlay_s + 2, nlay_s + nlay_i  
    443446            DO ji = kideb , kiut 
    444                layer              = numeq - nlay_s - 1 
    445                ztrid(ji,numeq,1)  =  - zeta_i(ji,layer)*zkappa_i(ji,layer-1) 
    446                ztrid(ji,numeq,2)  =  1.0 + zeta_i(ji,layer)*(zkappa_i(ji,layer-1) + & 
    447                   zkappa_i(ji,layer)) 
    448                ztrid(ji,numeq,3)  =  - zeta_i(ji,layer)*zkappa_i(ji,layer) 
    449                zindterm(ji,numeq) =  ztiold(ji,layer) + zeta_i(ji,layer)* & 
    450                   zradab_i(ji,layer) 
     447               jk              = numeq - nlay_s - 1 
     448               ztrid(ji,numeq,1)  =  - zeta_i(ji,jk)*zkappa_i(ji,jk-1) 
     449               ztrid(ji,numeq,2)  =  1.0 + zeta_i(ji,jk)*(zkappa_i(ji,jk-1) + & 
     450                  zkappa_i(ji,jk)) 
     451               ztrid(ji,numeq,3)  =  - zeta_i(ji,jk)*zkappa_i(ji,jk) 
     452               zswiterm(ji,numeq) =  ztib(ji,jk) + zeta_i(ji,jk)* & 
     453                  zradab_i(ji,jk) 
    451454            END DO 
    452455         ENDDO 
     
    459462               +  zkappa_i(ji,nlay_i-1) ) 
    460463            ztrid(ji,numeq,3)  =  0.0 
    461             zindterm(ji,numeq) =  ztiold(ji,nlay_i) + zeta_i(ji,nlay_i)* & 
     464            zswiterm(ji,numeq) =  ztib(ji,nlay_i) + zeta_i(ji,nlay_i)* & 
    462465               ( zradab_i(ji,nlay_i) + zkappa_i(ji,nlay_i)*zg1 & 
    463                *  t_bo_b(ji) )  
     466               *  t_bo_1d(ji) )  
    464467         ENDDO 
    465468 
    466469 
    467470         DO ji = kideb , kiut 
    468             IF ( ht_s_b(ji).gt.0.0 ) THEN 
     471            IF ( ht_s_1d(ji).gt.0.0 ) THEN 
    469472               ! 
    470473               !------------------------------------------------------------------------------| 
     
    474477               !!snow interior terms (bottom equation has the same form as the others) 
    475478               DO numeq = 3, nlay_s + 1 
    476                   layer =  numeq - 1 
    477                   ztrid(ji,numeq,1)   =  - zeta_s(ji,layer)*zkappa_s(ji,layer-1) 
    478                   ztrid(ji,numeq,2)   =  1.0 + zeta_s(ji,layer)*( zkappa_s(ji,layer-1) + & 
    479                      zkappa_s(ji,layer) ) 
    480                   ztrid(ji,numeq,3)   =  - zeta_s(ji,layer)*zkappa_s(ji,layer) 
    481                   zindterm(ji,numeq)  =  ztsold(ji,layer) + zeta_s(ji,layer)* & 
    482                      zradab_s(ji,layer) 
     479                  jk =  numeq - 1 
     480                  ztrid(ji,numeq,1)   =  - zeta_s(ji,jk)*zkappa_s(ji,jk-1) 
     481                  ztrid(ji,numeq,2)   =  1.0 + zeta_s(ji,jk)*( zkappa_s(ji,jk-1) + & 
     482                     zkappa_s(ji,jk) ) 
     483                  ztrid(ji,numeq,3)   =  - zeta_s(ji,jk)*zkappa_s(ji,jk) 
     484                  zswiterm(ji,numeq)  =  ztsb(ji,jk) + zeta_s(ji,jk)* & 
     485                     zradab_s(ji,jk) 
    483486               END DO 
    484487 
     
    486489               IF ( nlay_i.eq.1 ) THEN 
    487490                  ztrid(ji,nlay_s+2,3)    =  0.0 
    488                   zindterm(ji,nlay_s+2)   =  zindterm(ji,nlay_s+2) + zkappa_i(ji,1)* & 
    489                      t_bo_b(ji)  
     491                  zswiterm(ji,nlay_s+2)   =  zswiterm(ji,nlay_s+2) + zkappa_i(ji,1)* & 
     492                     t_bo_1d(ji)  
    490493               ENDIF 
    491494 
    492                IF ( t_su_b(ji) .LT. rtt ) THEN 
     495               IF ( t_su_1d(ji) .LT. rtt ) THEN 
    493496 
    494497                  !------------------------------------------------------------------------------| 
     
    503506                  ztrid(ji,1,2) = dzf(ji) - zg1s*zkappa_s(ji,0) 
    504507                  ztrid(ji,1,3) = zg1s*zkappa_s(ji,0) 
    505                   zindterm(ji,1) = dzf(ji)*t_su_b(ji)   - zf(ji) 
     508                  zswiterm(ji,1) = dzf(ji)*t_su_1d(ji)   - zf(ji) 
    506509 
    507510                  !!first layer of snow equation 
     
    509512                  ztrid(ji,2,2)  =  1.0 + zeta_s(ji,1)*(zkappa_s(ji,1) + zkappa_s(ji,0)*zg1s) 
    510513                  ztrid(ji,2,3)  =  - zeta_s(ji,1)* zkappa_s(ji,1) 
    511                   zindterm(ji,2) =  ztsold(ji,1) + zeta_s(ji,1)*zradab_s(ji,1) 
     514                  zswiterm(ji,2) =  ztsb(ji,1) + zeta_s(ji,1)*zradab_s(ji,1) 
    512515 
    513516               ELSE  
     
    526529                     zkappa_s(ji,0) * zg1s ) 
    527530                  ztrid(ji,2,3)  =  - zeta_s(ji,1)*zkappa_s(ji,1)  
    528                   zindterm(ji,2) = ztsold(ji,1) + zeta_s(ji,1) *            & 
     531                  zswiterm(ji,2) = ztsb(ji,1) + zeta_s(ji,1) *            & 
    529532                     ( zradab_s(ji,1) +                         & 
    530                      zkappa_s(ji,0) * zg1s * t_su_b(ji) )  
     533                     zkappa_s(ji,0) * zg1s * t_su_1d(ji) )  
    531534               ENDIF 
    532535            ELSE 
     
    536539               !------------------------------------------------------------------------------| 
    537540               ! 
    538                IF (t_su_b(ji) .LT. rtt) THEN 
     541               IF (t_su_1d(ji) .LT. rtt) THEN 
    539542                  ! 
    540543                  !------------------------------------------------------------------------------| 
     
    550553                  ztrid(ji,numeqmin(ji),2)   =  dzf(ji) - zkappa_i(ji,0)*zg1     
    551554                  ztrid(ji,numeqmin(ji),3)   =  zkappa_i(ji,0)*zg1 
    552                   zindterm(ji,numeqmin(ji))  =  dzf(ji)*t_su_b(ji) - zf(ji) 
     555                  zswiterm(ji,numeqmin(ji))  =  dzf(ji)*t_su_1d(ji) - zf(ji) 
    553556 
    554557                  !!first layer of ice equation 
     
    557560                     + zkappa_i(ji,0) * zg1 ) 
    558561                  ztrid(ji,numeqmin(ji)+1,3) =  - zeta_i(ji,1)*zkappa_i(ji,1)   
    559                   zindterm(ji,numeqmin(ji)+1)=  ztiold(ji,1) + zeta_i(ji,1)*zradab_i(ji,1)   
     562                  zswiterm(ji,numeqmin(ji)+1)=  ztib(ji,1) + zeta_i(ji,1)*zradab_i(ji,1)   
    560563 
    561564                  !!case of only one layer in the ice (surface & ice equations are altered) 
     
    570573                     ztrid(ji,numeqmin(ji)+1,3)  =  0.0 
    571574 
    572                      zindterm(ji,numeqmin(ji)+1) =  ztiold(ji,1) + zeta_i(ji,1)* & 
    573                         ( zradab_i(ji,1) + zkappa_i(ji,1)*t_bo_b(ji) ) 
     575                     zswiterm(ji,numeqmin(ji)+1) =  ztib(ji,1) + zeta_i(ji,1)* & 
     576                        ( zradab_i(ji,1) + zkappa_i(ji,1)*t_bo_1d(ji) ) 
    574577                  ENDIF 
    575578 
     
    590593                     zg1)   
    591594                  ztrid(ji,numeqmin(ji),3)      =  - zeta_i(ji,1) * zkappa_i(ji,1) 
    592                   zindterm(ji,numeqmin(ji))     =  ztiold(ji,1) + zeta_i(ji,1)*( zradab_i(ji,1) + & 
    593                      zkappa_i(ji,0) * zg1 * t_su_b(ji) )  
     595                  zswiterm(ji,numeqmin(ji))     =  ztib(ji,1) + zeta_i(ji,1)*( zradab_i(ji,1) + & 
     596                     zkappa_i(ji,0) * zg1 * t_su_1d(ji) )  
    594597 
    595598                  !!case of only one layer in the ice (surface & ice equations are altered) 
     
    599602                        zkappa_i(ji,1)) 
    600603                     ztrid(ji,numeqmin(ji),3)  =  0.0 
    601                      zindterm(ji,numeqmin(ji)) =  ztiold(ji,1) + zeta_i(ji,1)* & 
    602                         (zradab_i(ji,1) + zkappa_i(ji,1)*t_bo_b(ji)) & 
    603                         + t_su_b(ji)*zeta_i(ji,1)*zkappa_i(ji,0)*2.0 
     604                     zswiterm(ji,numeqmin(ji)) =  ztib(ji,1) + zeta_i(ji,1)* & 
     605                        (zradab_i(ji,1) + zkappa_i(ji,1)*t_bo_1d(ji)) & 
     606                        + t_su_1d(ji)*zeta_i(ji,1)*zkappa_i(ji,0)*2.0 
    604607                  ENDIF 
    605608 
     
    620623 
    621624         maxnumeqmax = 0 
    622          minnumeqmin = jkmax+4 
    623  
    624          DO ji = kideb , kiut 
    625             zindtbis(ji,numeqmin(ji)) =  zindterm(ji,numeqmin(ji)) 
     625         minnumeqmin = nlay_i+5 
     626 
     627         DO ji = kideb , kiut 
     628            zswitbis(ji,numeqmin(ji)) =  zswiterm(ji,numeqmin(ji)) 
    626629            zdiagbis(ji,numeqmin(ji)) =  ztrid(ji,numeqmin(ji),2) 
    627630            minnumeqmin               =  MIN(numeqmin(ji),minnumeqmin) 
     
    629632         END DO 
    630633 
    631          DO layer = minnumeqmin+1, maxnumeqmax 
    632             DO ji = kideb , kiut 
    633                numeq               =  min(max(numeqmin(ji)+1,layer),numeqmax(ji)) 
     634         DO jk = minnumeqmin+1, maxnumeqmax 
     635            DO ji = kideb , kiut 
     636               numeq               =  min(max(numeqmin(ji)+1,jk),numeqmax(ji)) 
    634637               zdiagbis(ji,numeq)  =  ztrid(ji,numeq,2) - ztrid(ji,numeq,1)* & 
    635638                  ztrid(ji,numeq-1,3)/zdiagbis(ji,numeq-1) 
    636                zindtbis(ji,numeq)  =  zindterm(ji,numeq) - ztrid(ji,numeq,1)* & 
    637                   zindtbis(ji,numeq-1)/zdiagbis(ji,numeq-1) 
     639               zswitbis(ji,numeq)  =  zswiterm(ji,numeq) - ztrid(ji,numeq,1)* & 
     640                  zswitbis(ji,numeq-1)/zdiagbis(ji,numeq-1) 
    638641            END DO 
    639642         END DO 
     
    641644         DO ji = kideb , kiut 
    642645            ! ice temperatures 
    643             t_i_b(ji,nlay_i)    =  zindtbis(ji,numeqmax(ji))/zdiagbis(ji,numeqmax(ji)) 
     646            t_i_1d(ji,nlay_i)    =  zswitbis(ji,numeqmax(ji))/zdiagbis(ji,numeqmax(ji)) 
    644647         END DO 
    645648 
    646649         DO numeq = nlay_i + nlay_s + 1, nlay_s + 2, -1 
    647650            DO ji = kideb , kiut 
    648                layer    =  numeq - nlay_s - 1 
    649                t_i_b(ji,layer)  =  (zindtbis(ji,numeq) - ztrid(ji,numeq,3)* & 
    650                   t_i_b(ji,layer+1))/zdiagbis(ji,numeq) 
     651               jk    =  numeq - nlay_s - 1 
     652               t_i_1d(ji,jk)  =  (zswitbis(ji,numeq) - ztrid(ji,numeq,3)* & 
     653                  t_i_1d(ji,jk+1))/zdiagbis(ji,numeq) 
    651654            END DO 
    652655         END DO 
     
    654657         DO ji = kideb , kiut 
    655658            ! snow temperatures       
    656             IF (ht_s_b(ji).GT.0._wp) & 
    657                t_s_b(ji,nlay_s)     =  (zindtbis(ji,nlay_s+1) - ztrid(ji,nlay_s+1,3) & 
    658                *  t_i_b(ji,1))/zdiagbis(ji,nlay_s+1) & 
    659                *        MAX(0.0,SIGN(1.0,ht_s_b(ji)))  
     659            IF (ht_s_1d(ji).GT.0._wp) & 
     660               t_s_1d(ji,nlay_s)     =  (zswitbis(ji,nlay_s+1) - ztrid(ji,nlay_s+1,3) & 
     661               *  t_i_1d(ji,1))/zdiagbis(ji,nlay_s+1) & 
     662               *        MAX(0.0,SIGN(1.0,ht_s_1d(ji)))  
    660663 
    661664            ! surface temperature 
    662             isnow(ji)     = NINT(  1.0 - MAX( 0.0 , SIGN( 1.0 , -ht_s_b(ji) )  )  ) 
    663             ztsuoldit(ji) = t_su_b(ji) 
    664             IF( t_su_b(ji) < ztfs(ji) ) & 
    665                t_su_b(ji) = ( zindtbis(ji,numeqmin(ji)) - ztrid(ji,numeqmin(ji),3)* ( REAL( isnow(ji) )*t_s_b(ji,1)   & 
    666                &          + REAL( 1 - isnow(ji) )*t_i_b(ji,1) ) ) / zdiagbis(ji,numeqmin(ji))   
     665            isnow(ji)     = NINT(  1.0 - MAX( 0.0 , SIGN( 1.0 , -ht_s_1d(ji) )  )  ) 
     666            ztsubit(ji) = t_su_1d(ji) 
     667            IF( t_su_1d(ji) < ztfs(ji) ) & 
     668               t_su_1d(ji) = ( zswitbis(ji,numeqmin(ji)) - ztrid(ji,numeqmin(ji),3)* ( REAL( isnow(ji) )*t_s_1d(ji,1)   & 
     669               &          + REAL( 1 - isnow(ji) )*t_i_1d(ji,1) ) ) / zdiagbis(ji,numeqmin(ji))   
    667670         END DO 
    668671         ! 
     
    674677         ! zerrit(ji) is a measure of error, it has to be under maxer_i_thd 
    675678         DO ji = kideb , kiut 
    676             t_su_b(ji) =  MAX(  MIN( t_su_b(ji) , ztfs(ji) ) , 190._wp  ) 
    677             zerrit(ji) =  ABS( t_su_b(ji) - ztsuoldit(ji) )      
    678          END DO 
    679  
    680          DO layer  =  1, nlay_s 
    681             DO ji = kideb , kiut 
    682                t_s_b(ji,layer) = MAX(  MIN( t_s_b(ji,layer), rtt ), 190._wp  ) 
    683                zerrit(ji)      = MAX(zerrit(ji),ABS(t_s_b(ji,layer) - ztstemp(ji,layer))) 
    684             END DO 
    685          END DO 
    686  
    687          DO layer  =  1, nlay_i 
    688             DO ji = kideb , kiut 
    689                ztmelt_i        = -tmut * s_i_b(ji,layer) + rtt  
    690                t_i_b(ji,layer) =  MAX(MIN(t_i_b(ji,layer),ztmelt_i), 190._wp) 
    691                zerrit(ji)      =  MAX(zerrit(ji),ABS(t_i_b(ji,layer) - ztitemp(ji,layer))) 
     679            t_su_1d(ji) =  MAX(  MIN( t_su_1d(ji) , ztfs(ji) ) , 190._wp  ) 
     680            zerrit(ji) =  ABS( t_su_1d(ji) - ztsubit(ji) )      
     681         END DO 
     682 
     683         DO jk  =  1, nlay_s 
     684            DO ji = kideb , kiut 
     685               t_s_1d(ji,jk) = MAX(  MIN( t_s_1d(ji,jk), rtt ), 190._wp  ) 
     686               zerrit(ji)      = MAX(zerrit(ji),ABS(t_s_1d(ji,jk) - ztstemp(ji,jk))) 
     687            END DO 
     688         END DO 
     689 
     690         DO jk  =  1, nlay_i 
     691            DO ji = kideb , kiut 
     692               ztmelt_i        = -tmut * s_i_1d(ji,jk) + rtt  
     693               t_i_1d(ji,jk) =  MAX(MIN(t_i_1d(ji,jk),ztmelt_i), 190._wp) 
     694               zerrit(ji)      =  MAX(zerrit(ji),ABS(t_i_1d(ji,jk) - ztitemp(ji,jk))) 
    692695            END DO 
    693696         END DO 
     
    714717      DO ji = kideb, kiut 
    715718         ! forced mode only : update of latent heat fluxes (sublimation) (always >=0, upward flux)  
    716          IF( .NOT. lk_cpl) qla_ice_1d (ji) = MAX( 0._wp, qla_ice_1d (ji) + dqla_ice_1d(ji) * ( t_su_b(ji) - ztsuold(ji) ) ) 
     719         IF( .NOT. lk_cpl) qla_ice_1d (ji) = MAX( 0._wp, qla_ice_1d (ji) + dqla_ice_1d(ji) * ( t_su_1d(ji) - ztsub(ji) ) ) 
    717720         !                                ! surface ice conduction flux 
    718          isnow(ji)       = NINT(  1._wp - MAX( 0._wp, SIGN( 1._wp, -ht_s_b(ji) ) )  ) 
    719          fc_su(ji)       =  -     REAL( isnow(ji) ) * zkappa_s(ji,0) * zg1s * (t_s_b(ji,1) - t_su_b(ji))   & 
    720             &               - REAL( 1 - isnow(ji) ) * zkappa_i(ji,0) * zg1  * (t_i_b(ji,1) - t_su_b(ji)) 
     721         isnow(ji)       = NINT(  1._wp - MAX( 0._wp, SIGN( 1._wp, -ht_s_1d(ji) ) )  ) 
     722         fc_su(ji)       =  -     REAL( isnow(ji) ) * zkappa_s(ji,0) * zg1s * (t_s_1d(ji,1) - t_su_1d(ji))   & 
     723            &               - REAL( 1 - isnow(ji) ) * zkappa_i(ji,0) * zg1  * (t_i_1d(ji,1) - t_su_1d(ji)) 
    721724         !                                ! bottom ice conduction flux 
    722          fc_bo_i(ji)     =  - zkappa_i(ji,nlay_i) * ( zg1*(t_bo_b(ji) - t_i_b(ji,nlay_i)) ) 
     725         fc_bo_i(ji)     =  - zkappa_i(ji,nlay_i) * ( zg1*(t_bo_1d(ji) - t_i_1d(ji,nlay_i)) ) 
    723726      END DO 
    724727 
     
    727730      !----------------------------------------- 
    728731      DO ji = kideb, kiut 
    729          IF( t_su_b(ji) < rtt ) THEN  ! case T_su < 0degC 
    730             hfx_dif_1d(ji) = hfx_dif_1d(ji) + ( qns_ice_1d(ji) + qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_b(ji) 
     732         IF( t_su_1d(ji) < rtt ) THEN  ! case T_su < 0degC 
     733            hfx_dif_1d(ji) = hfx_dif_1d(ji)  +   & 
     734               &            ( qns_ice_1d(ji) + qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_1d(ji) 
    731735         ELSE                         ! case T_su = 0degC 
    732             hfx_dif_1d(ji) = hfx_dif_1d(ji) + ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_b(ji) 
     736            hfx_dif_1d(ji) = hfx_dif_1d(ji) +    & 
     737               &             ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_1d(ji) 
    733738         ENDIF 
    734739      END DO 
     
    737742      CALL lim_thd_enmelt( kideb, kiut ) 
    738743 
    739       ! --- diag error on heat diffusion - PART 2 --- ! 
     744      ! --- diag conservation imbalance on heat diffusion - PART 2 --- ! 
    740745      DO ji = kideb, kiut 
    741          zdq(ji)        = - zq_ini(ji) + ( SUM( q_i_b(ji,1:nlay_i) ) * ht_i_b(ji) / REAL( nlay_i ) +  & 
    742             &                              SUM( q_s_b(ji,1:nlay_s) ) * ht_s_b(ji) / REAL( nlay_s ) ) 
    743          zhfx_err    = ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) + zdq(ji) * r1_rdtice )  
    744          hfx_err_1d(ji) = hfx_err_1d(ji) + zhfx_err * a_i_b(ji) 
    745          ! --- correction of qns_ice and surface conduction flux --- ! 
    746          qns_ice_1d(ji) = qns_ice_1d(ji) - zhfx_err  
    747          fc_su     (ji) = fc_su     (ji) - zhfx_err  
    748          ! --- Heat flux at the ice surface in W.m-2 --- ! 
     746         zdq(ji)        = - zq_ini(ji) + ( SUM( q_i_1d(ji,1:nlay_i) ) * ht_i_1d(ji) / REAL( nlay_i ) +  & 
     747            &                              SUM( q_s_1d(ji,1:nlay_s) ) * ht_s_1d(ji) / REAL( nlay_s ) ) 
     748         zhfx_err(ji)   = ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) + zdq(ji) * r1_rdtice )  
     749         hfx_err_1d(ji) = hfx_err_1d(ji) + zhfx_err(ji) * a_i_1d(ji) 
     750      END DO  
     751 
     752      ! diagnose external surface (forced case) or bottom (forced case) from heat conservation 
     753      IF( .NOT. lk_cpl ) THEN   ! --- forced case: qns_ice and fc_su are diagnosed 
     754         ! 
     755         DO ji = kideb, kiut 
     756            qns_ice_1d(ji) = qns_ice_1d(ji) - zhfx_err(ji) 
     757            fc_su     (ji) = fc_su(ji)      - zhfx_err(ji) 
     758         END DO 
     759         ! 
     760      ELSE                      ! --- coupled case: ocean turbulent heat flux is diagnosed 
     761         ! 
     762         DO ji = kideb, kiut 
     763            fhtur_1d  (ji) = fhtur_1d(ji)   - zhfx_err(ji) 
     764         END DO 
     765         ! 
     766      ENDIF 
     767 
     768      ! --- compute diagnostic net heat flux at the surface of the snow-ice system (W.m2) 
     769      DO ji = kideb, kiut 
    749770         ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 
    750          hfx_in (ii,ij) = hfx_in (ii,ij) + a_i_b(ji) * ( qsr_ice_1d(ji) + qns_ice_1d(ji) ) 
     771         hfx_in (ii,ij) = hfx_in (ii,ij) + a_i_1d(ji) * ( qsr_ice_1d(ji) + qns_ice_1d(ji) ) 
    751772      END DO 
    752773    
    753774      ! 
    754775      CALL wrk_dealloc( jpij, numeqmin, numeqmax, isnow ) 
    755       CALL wrk_dealloc( jpij, ztfs, ztsuold, ztsuoldit, zh_i, zh_s, zfsw ) 
     776      CALL wrk_dealloc( jpij, ztfs, ztsub, ztsubit, zh_i, zh_s, zfsw ) 
    756777      CALL wrk_dealloc( jpij, zf, dzf, zerrit, zdifcase, zftrice, zihic, zhsu ) 
    757       CALL wrk_dealloc( jpij, nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, ztiold, zeta_i, ztitemp, z_i, zspeche_i, kjstart = 0 ) 
    758       CALL wrk_dealloc( jpij, nlay_s+1,           zradtr_s, zradab_s, zkappa_s, ztsold, zeta_s, ztstemp, z_s, kjstart = 0 ) 
    759       CALL wrk_dealloc( jpij, jkmax+2, zindterm, zindtbis, zdiagbis ) 
    760       CALL wrk_dealloc( jpij, jkmax+2, 3, ztrid ) 
    761       CALL wrk_dealloc( jpij, zdq, zq_ini ) 
     778      CALL wrk_dealloc( jpij, nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i,   & 
     779         &              ztib, zeta_i, ztitemp, z_i, zspeche_i, kjstart = 0 ) 
     780      CALL wrk_dealloc( jpij, nlay_s+1,           zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart = 0 ) 
     781      CALL wrk_dealloc( jpij, nlay_i+3, zswiterm, zswitbis, zdiagbis ) 
     782      CALL wrk_dealloc( jpij, nlay_i+3, 3, ztrid ) 
     783      CALL wrk_dealloc( jpij, zdq, zq_ini, zhfx_err ) 
    762784 
    763785   END SUBROUTINE lim_thd_dif 
     
    774796      ! 
    775797      INTEGER  ::   ji, jk   ! dummy loop indices 
    776       REAL(wp) ::   ztmelts, zindb  ! local scalar  
     798      REAL(wp) ::   ztmelts  ! local scalar  
    777799      !!------------------------------------------------------------------- 
    778800      ! 
    779801      DO jk = 1, nlay_i             ! Sea ice energy of melting 
    780802         DO ji = kideb, kiut 
    781             ztmelts      = - tmut  * s_i_b(ji,jk) + rtt  
    782             zindb        = MAX( 0._wp , SIGN( 1._wp , -(t_i_b(ji,jk) - rtt) - epsi10 ) ) 
    783             q_i_b(ji,jk) = rhoic * ( cpic * ( ztmelts - t_i_b(ji,jk) )                                             & 
    784                &                   + lfus * ( 1.0 - zindb * ( ztmelts-rtt ) / MIN( t_i_b(ji,jk)-rtt, -epsi10 ) )   & 
     803            ztmelts      = - tmut  * s_i_1d(ji,jk) + rtt  
     804            rswitch      = MAX( 0._wp , SIGN( 1._wp , -(t_i_1d(ji,jk) - rtt) - epsi10 ) ) 
     805            q_i_1d(ji,jk) = rhoic * ( cpic * ( ztmelts - t_i_1d(ji,jk) )                                             & 
     806               &                   + lfus * ( 1.0 - rswitch * ( ztmelts-rtt ) / MIN( t_i_1d(ji,jk)-rtt, -epsi10 ) )   & 
    785807               &                   - rcp  *                 ( ztmelts-rtt )  )  
    786808         END DO 
     
    788810      DO jk = 1, nlay_s             ! Snow energy of melting 
    789811         DO ji = kideb, kiut 
    790             q_s_b(ji,jk) = rhosn * ( cpic * ( rtt - t_s_b(ji,jk) ) + lfus ) 
     812            q_s_1d(ji,jk) = rhosn * ( cpic * ( rtt - t_s_1d(ji,jk) ) + lfus ) 
    791813         END DO 
    792814      END DO 
Note: See TracChangeset for help on using the changeset viewer.