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 5167 for trunk – NEMO

Changeset 5167 for trunk


Ignore:
Timestamp:
2015-03-24T18:35:00+01:00 (10 years ago)
Author:
clem
Message:

LIM3 bug fix. see ticket #1492 (forthcoming update) which also solve ticket #1497

Location:
trunk/NEMOGCM/NEMO
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/ice.F90

    r5146 r5167  
    394394   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_trp_smv  !: transport of salt content 
    395395   ! 
    396    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_heat_dhc !: snw/ice heat content variation   [W/m2]  
     396   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_heat     !: snw/ice heat content variation   [W/m2]  
     397   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_smvi     !: ice salt content variation   []  
     398   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_vice     !: ice volume variation   [m/s]  
     399   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_vsnw     !: snw volume variation   [m/s]  
    397400   ! 
    398401   !!---------------------------------------------------------------------- 
     
    455458      ALLOCATE( t_s(jpi,jpj,nlay_s,jpl) , e_s(jpi,jpj,nlay_s,jpl) , STAT=ierr(ii) ) 
    456459      ii = ii + 1 
    457       ALLOCATE( t_i(jpi,jpj,nlay_i+1,jpl) , e_i(jpi,jpj,nlay_i+1,jpl) , s_i(jpi,jpj,nlay_i+1,jpl) , STAT=ierr(ii) ) 
     460      ALLOCATE( t_i(jpi,jpj,nlay_i,jpl) , e_i(jpi,jpj,nlay_i,jpl) , s_i(jpi,jpj,nlay_i,jpl) , STAT=ierr(ii) ) 
    458461 
    459462      ! * Moments for advection 
     
    471474         &      STAT=ierr(ii) ) 
    472475      ii = ii + 1 
    473       ALLOCATE( sxe (jpi,jpj,nlay_i+1,jpl) , sye (jpi,jpj,nlay_i+1,jpl) , sxxe(jpi,jpj,nlay_i+1,jpl) ,     & 
    474          &      syye(jpi,jpj,nlay_i+1,jpl) , sxye(jpi,jpj,nlay_i+1,jpl)                           , STAT=ierr(ii) ) 
     476      ALLOCATE( sxe (jpi,jpj,nlay_i,jpl) , sye (jpi,jpj,nlay_i,jpl) , sxxe(jpi,jpj,nlay_i,jpl) ,     & 
     477         &      syye(jpi,jpj,nlay_i,jpl) , sxye(jpi,jpj,nlay_i,jpl)                            , STAT=ierr(ii) ) 
    475478 
    476479      ! * Old values of global variables 
    477480      ii = ii + 1 
    478481      ALLOCATE( v_s_b  (jpi,jpj,jpl) , v_i_b  (jpi,jpj,jpl) , e_s_b(jpi,jpj,nlay_s,jpl) ,     & 
    479          &      a_i_b  (jpi,jpj,jpl) , smv_i_b(jpi,jpj,jpl) , e_i_b(jpi,jpj,nlay_i+1 ,jpl) ,  & 
    480          &      oa_i_b (jpi,jpj,jpl) , u_ice_b(jpi,jpj)     , v_ice_b(jpi,jpj)             , STAT=ierr(ii) ) 
     482         &      a_i_b  (jpi,jpj,jpl) , smv_i_b(jpi,jpj,jpl) , e_i_b(jpi,jpj,nlay_i,jpl) ,     & 
     483         &      oa_i_b (jpi,jpj,jpl) , u_ice_b(jpi,jpj)     , v_ice_b(jpi,jpj)          , STAT=ierr(ii) ) 
    481484       
    482485      ! * Ice thickness distribution variables 
     
    486489      ! * Ice diagnostics 
    487490      ii = ii + 1 
    488       ALLOCATE( diag_trp_vi(jpi,jpj), diag_trp_vs (jpi,jpj), diag_trp_ei  (jpi,jpj),   &  
    489          &      diag_trp_es(jpi,jpj), diag_trp_smv(jpi,jpj), diag_heat_dhc(jpi,jpj),  STAT=ierr(ii) ) 
     491      ALLOCATE( diag_trp_vi(jpi,jpj), diag_trp_vs (jpi,jpj), diag_trp_ei(jpi,jpj),   &  
     492         &      diag_trp_es(jpi,jpj), diag_trp_smv(jpi,jpj), diag_heat  (jpi,jpj),   & 
     493         &      diag_smvi  (jpi,jpj), diag_vice   (jpi,jpj), diag_vsnw  (jpi,jpj), STAT=ierr(ii) ) 
    490494 
    491495      ice_alloc = MAXVAL( ierr(:) ) 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limcons.F90

    r5123 r5167  
    2222   USE lib_mpp        ! MPP library 
    2323   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
     24   USE sbc_oce , ONLY : sfx  ! Surface boundary condition: ocean fields 
    2425 
    2526   IMPLICIT NONE 
     
    3031   PUBLIC   lim_cons_check 
    3132   PUBLIC   lim_cons_hsm 
     33   PUBLIC   lim_cons_final 
    3234 
    3335   !!---------------------------------------------------------------------- 
     
    167169      REAL(wp)                        :: zvi,   zsmv,   zei,   zfs,   zfw,   zft 
    168170      REAL(wp)                        :: zvmin, zamin, zamax  
    169       REAL(wp)                        :: zconv 
    170  
    171       zconv = 1.e-9 
     171      REAL(wp)                        :: zvtrp, zetrp 
     172      REAL(wp), PARAMETER             :: zconv = 1.e-9 
    172173 
    173174      IF( icount == 0 ) THEN 
     
    187188         zvi_b  = glob_sum( SUM( v_i(:,:,:)*rhoic + v_s(:,:,:)*rhosn, dim=3 ) * e12t(:,:) * tmask(:,:,1) ) 
    188189 
    189          zsmv_b = glob_sum( SUM( smv_i(:,:,:), dim=3 ) * e12t(:,:) * tmask(:,:,1) ) 
     190         zsmv_b = glob_sum( SUM( smv_i(:,:,:), dim=3 ) * e12t(:,:) * tmask(:,:,1) * rhoic ) 
    190191 
    191192         zei_b  = glob_sum( ( SUM( SUM( e_i(:,:,1:nlay_i,:), dim=4 ), dim=3 ) +  & 
     
    210211            &                    * e12t(:,:) * tmask(:,:,1) ) - zvi_b ) * r1_rdtice - zfw  
    211212 
    212          zsmv = ( glob_sum( SUM( smv_i(:,:,:), dim=3 ) * e12t(:,:) * tmask(:,:,1) ) - zsmv_b ) * r1_rdtice + ( zfs * r1_rhoic ) 
     213         zsmv = ( glob_sum( SUM( smv_i(:,:,:), dim=3 ) * e12t(:,:) * tmask(:,:,1) * rhoic ) - zsmv_b ) * r1_rdtice + zfs 
    213214 
    214215         zei  =   glob_sum( ( SUM( SUM( e_i(:,:,1:nlay_i,:), dim=4 ), dim=3 ) +  & 
     
    216217            &                ) * e12t(:,:) * tmask(:,:,1) * zconv ) * r1_rdtice - zei_b * r1_rdtice + zft 
    217218 
     219         zvtrp = glob_sum( ( diag_trp_vi * rhoic + diag_trp_vs * rhosn ) * e12t(:,:) * tmask(:,:,1) )  
     220         zetrp = glob_sum( ( diag_trp_ei + diag_trp_es ) * e12t(:,:) * tmask(:,:,1) * zconv )  
    218221         zvmin = glob_min( v_i ) 
    219222         zamax = glob_max( SUM( a_i, dim=3 ) ) 
    220223         zamin = glob_min( a_i ) 
     224 
    221225        
    222226         IF(lwp) THEN 
    223             IF ( ABS( zvi    ) >  1.e-4 ) WRITE(numout,*) 'violation volume [kg/day]     (',cd_routine,') = ',(zvi * rday) 
    224             IF ( ABS( zsmv   ) >  1.e-4 ) WRITE(numout,*) 'violation saline [psu*m3/day] (',cd_routine,') = ',(zsmv * rday) 
    225             IF ( ABS( zei    ) >  1.e-4 ) WRITE(numout,*) 'violation enthalpy [GW]       (',cd_routine,') = ',(zei) 
    226             IF ( zvmin <  -epsi10       ) WRITE(numout,*) 'violation v_i<0  [m]          (',cd_routine,') = ',(zvmin) 
     227            IF ( ABS( zvi  * rday ) >  0.5 * 1.e9 ) WRITE(numout,*) 'violation volume [kg/day]     (',cd_routine,') = ',(zvi * rday) 
     228            IF ( ABS( zsmv * rday ) >  5.  * 1.e9 ) WRITE(numout,*) 'violation saline [psu*kg/day] (',cd_routine,') = ',(zsmv * rday) 
     229            IF ( ABS( zei         ) >  2.  * 1.e9 ) WRITE(numout,*) 'violation enthalpy [GW]       (',cd_routine,') = ',(zei) 
     230            IF ( zvmin <  -epsi10          ) WRITE(numout,*) 'violation v_i<0  [m]          (',cd_routine,') = ',(zvmin) 
    227231            IF( cd_routine /= 'limtrp' .AND. cd_routine /= 'limitd_me' .AND. zamax > rn_amax+epsi10 ) THEN 
    228                                           WRITE(numout,*) 'violation a_i>amax            (',cd_routine,') = ',zamax 
     232                                             WRITE(numout,*) 'violation a_i>amax            (',cd_routine,') = ',zamax 
    229233            ENDIF 
    230             IF ( zamin <  -epsi10       ) WRITE(numout,*) 'violation a_i<0               (',cd_routine,') = ',zamin 
     234            IF ( zamin <  -epsi10          ) WRITE(numout,*) 'violation a_i<0               (',cd_routine,') = ',zamin 
     235            IF( cd_routine == 'limtrp' .AND. ABS( zvtrp * rday ) > 0.5*1.e9 ) THEN 
     236                                             WRITE(numout,*) 'violation vtrp [kg/day]        (',cd_routine,') = ',(zvtrp * rday) 
     237                                             WRITE(numout,*) 'violation etrp [GW]            (',cd_routine,') = ',(zetrp ) 
     238            ENDIF 
    231239         ENDIF 
    232240 
     
    234242 
    235243   END SUBROUTINE lim_cons_hsm 
     244 
     245   SUBROUTINE lim_cons_final( cd_routine ) 
     246      CHARACTER(len=*), INTENT(in)    :: cd_routine  ! name of the routine 
     247      REAL(wp)                        :: zhfx, zsfx, zvfx 
     248      REAL(wp), PARAMETER             :: zconv = 1.e-9 
     249 
     250      zhfx  = glob_sum( ( hfx_in - hfx_out - diag_heat - diag_trp_ei - diag_trp_es - hfx_sub ) * e12t(:,:) * tmask(:,:,1) * zconv )  
     251      zsfx  = glob_sum( ( sfx + diag_smvi ) * e12t(:,:) * tmask(:,:,1) ) * rday 
     252      zvfx  = glob_sum( ( wfx_ice + wfx_snw + wfx_spr + wfx_sub + diag_vice + diag_vsnw ) * e12t(:,:) * tmask(:,:,1) ) * rday  
     253 
     254      ! if error > 1 mm / 100 years over the Arctic Basin 
     255      IF( ABS( zvfx ) > 0.5 * 1.e9    ) WRITE(numout,*) 'violation vfx [kg/day]       (',cd_routine,') = ',(zvfx) 
     256      ! if error > 1 mm / 100 years over the Arctic Basin (ice with latent heat = 3e6 J/kg)  
     257      IF( ABS( zhfx ) > 2.  * 1.e9   ) WRITE(numout,*) 'violation hfx [GW]           (',cd_routine,') = ',(zhfx) 
     258      ! if error > 1 mm / 100 years over the Arctic Basin (ice of salinity = 10 pss) 
     259      IF( ABS( zsfx ) > 5.  * 1.e9   ) WRITE(numout,*) 'violation sfx [psu*kg/day]   (',cd_routine,') = ',(zsfx) 
     260 
     261   END SUBROUTINE lim_cons_final 
    236262 
    237263#else 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limctl.F90

    r5125 r5167  
    419419               WRITE(numout,*) ' hfx_in       : ', hfx_in(ji,jj) 
    420420               WRITE(numout,*) ' hfx_out      : ', hfx_out(ji,jj) 
    421                WRITE(numout,*) ' dhc          : ', diag_heat_dhc(ji,jj)               
     421               WRITE(numout,*) ' dhc          : ', diag_heat(ji,jj)               
    422422               WRITE(numout,*) 
    423423               WRITE(numout,*) ' hfx_dyn      : ', hfx_dyn(ji,jj) 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limdiahsb.F90

    r5123 r5167  
    115115      zbg_ihc      = glob_sum( et_i(:,:) * e12t(:,:) * 1.e-20 ) ! ice heat content  [1.e20 J] 
    116116      zbg_shc      = glob_sum( et_s(:,:) * e12t(:,:) * 1.e-20 ) ! snow heat content [1.e20 J] 
    117       zbg_hfx_dhc  = glob_sum( diag_heat_dhc(:,:) * e12t(:,:) * tmask(:,:,1) ) ! [in W] 
     117      zbg_hfx_dhc  = glob_sum( diag_heat(:,:) * e12t(:,:) * tmask(:,:,1) ) ! [in W] 
    118118      zbg_hfx_spr  = glob_sum( hfx_spr(:,:) * e12t(:,:) * tmask(:,:,1) ) ! [in W] 
    119119 
     
    245245         WRITE(numout,*) '~~~~~~~~~~~~' 
    246246      ENDIF 
    247  
    248       ! ---------------------------------- ! 
    249       ! 2 - initial conservation variables ! 
    250       ! ---------------------------------- ! 
    251       !frc_vol = 0._wp                                          ! volume       trend due to forcing 
    252       !frc_sal = 0._wp                                          ! salt content   -    -   -    -          
    253       !bg_grme = 0._wp                                          ! ice growth + melt volume trend 
    254247      ! 
    255248      CALL lim_diahsb_rst( nstart, 'READ' )  !* read or initialize all required files 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90

    r5134 r5167  
    154154      IF( ln_limdiahsb ) CALL lim_cons_hsm(0, 'limitd_me', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 
    155155 
     156      CALL lim_var_glo2eqv            ! equivalent variables, requested for rafting 
    156157      !-----------------------------------------------------------------------------! 
    157158      ! 1) Thickness categories boundaries, ice / o.w. concentrations, init_ons 
     
    235236               ! Reduce the closing rate if more than 100% of the open water  
    236237               ! would be removed.  Reduce the opening rate proportionately. 
    237                IF ( ato_i(ji,jj) > epsi10 .AND. athorn(ji,jj,0) > 0.0 ) THEN 
    238                   za = athorn(ji,jj,0) * closing_gross(ji,jj) * rdt_ice 
    239                   IF ( za > ato_i(ji,jj)) THEN 
    240                      zfac = ato_i(ji,jj) / za 
    241                      closing_gross(ji,jj) = closing_gross(ji,jj) * zfac 
    242                      opning(ji,jj) = opning(ji,jj) * zfac 
    243                   ENDIF 
     238               za   = athorn(ji,jj,0) * closing_gross(ji,jj) * rdt_ice 
     239               IF( za > epsi20 ) THEN 
     240                  zfac = MIN( 1._wp, ato_i(ji,jj) / za ) 
     241                  closing_gross(ji,jj) = closing_gross(ji,jj) * zfac 
     242                  opning       (ji,jj) = opning       (ji,jj) * zfac 
    244243               ENDIF 
    245244 
     
    251250         ! Reduce the closing rate if more than 100% of any ice category  
    252251         ! would be removed.  Reduce the opening rate proportionately. 
    253  
    254252         DO jl = 1, jpl 
    255253            DO jj = 1, jpj 
    256254               DO ji = 1, jpi 
    257                   IF ( a_i(ji,jj,jl) > epsi10 .AND. athorn(ji,jj,jl) > 0._wp )THEN 
    258                      za = athorn(ji,jj,jl) * closing_gross(ji,jj) * rdt_ice 
    259                      IF ( za  >  a_i(ji,jj,jl) ) THEN 
    260                         zfac = a_i(ji,jj,jl) / za 
    261                         closing_gross(ji,jj) = closing_gross(ji,jj) * zfac 
    262                         opning       (ji,jj) = opning       (ji,jj) * zfac 
    263                      ENDIF 
     255                  za = athorn(ji,jj,jl) * closing_gross(ji,jj) * rdt_ice 
     256                  IF( za  >  epsi20 ) THEN 
     257                     zfac = MIN( 1._wp, a_i(ji,jj,jl) / za ) 
     258                     closing_gross(ji,jj) = closing_gross(ji,jj) * zfac 
     259                     opning       (ji,jj) = opning       (ji,jj) * zfac 
    264260                  ENDIF 
    265261               END DO 
     
    369365 
    370366      ! updates 
    371       CALL lim_var_glo2eqv 
    372       CALL lim_var_zapsmall 
    373367      CALL lim_var_agg( 1 )  
    374368 
     
    377371      !-----------------------------------------------------------------------------! 
    378372      IF(ln_ctl) THEN  
     373         CALL lim_var_glo2eqv 
     374 
    379375         CALL prt_ctl_info(' ') 
    380376         CALL prt_ctl_info(' - Cell values : ') 
     
    531527         DO jj = 2, jpjm1 
    532528            DO ji = 2, jpim1 
    533                IF ( ( asum(ji,jj) - ato_i(ji,jj) ) > epsi10) THEN ! ice is present 
     529               IF ( ( asum(ji,jj) - ato_i(ji,jj) ) > 0._wp) THEN  
    534530                  zworka(ji,jj) = ( 4.0 * strength(ji,jj)              & 
    535531                     &                  + strength(ji-1,jj) * tmask(ji-1,jj,1) + strength(ji+1,jj) * tmask(ji+1,jj,1) &   
     
    566562         DO jj = 1, jpj - 1 
    567563            DO ji = 1, jpi - 1 
    568                IF ( ( asum(ji,jj) - ato_i(ji,jj) ) > epsi10) THEN       ! ice is present 
     564               IF ( ( asum(ji,jj) - ato_i(ji,jj) ) > 0._wp) THEN  
    569565                  numts_rm = 1 ! number of time steps for the running mean 
    570566                  IF ( strp1(ji,jj) > 0.0 ) numts_rm = numts_rm + 1 
     
    637633 
    638634      Gsum(:,:,-1) = 0._wp 
    639  
    640       DO jj = 1, jpj 
    641          DO ji = 1, jpi 
    642             IF( ato_i(ji,jj) > epsi10 ) THEN   ;   Gsum(ji,jj,0) = ato_i(ji,jj) 
    643             ELSE                               ;   Gsum(ji,jj,0) = 0._wp 
    644             ENDIF 
    645          END DO 
    646       END DO 
     635      Gsum(:,:,0 ) = ato_i(:,:) 
    647636 
    648637      ! for each value of h, you have to add ice concentration then 
    649638      DO jl = 1, jpl 
    650          DO jj = 1, jpj  
    651             DO ji = 1, jpi 
    652                IF( a_i(ji,jj,jl) > epsi10 ) THEN   ;   Gsum(ji,jj,jl) = Gsum(ji,jj,jl-1) + a_i(ji,jj,jl) 
    653                ELSE                                ;   Gsum(ji,jj,jl) = Gsum(ji,jj,jl-1) 
    654                ENDIF 
    655             END DO 
    656          END DO 
     639         Gsum(:,:,jl) = Gsum(:,:,jl-1) + a_i(:,:,jl) 
    657640      END DO 
    658641 
     
    828811      LOGICAL, PARAMETER ::   l_conservation_check = .true.  ! if true, check conservation (useful for debugging) 
    829812      ! 
    830       LOGICAL ::   neg_ato_i      ! flag for ato_i(i,j) < -puny 
    831       LOGICAL ::   large_afrac    ! flag for afrac > 1 
    832       LOGICAL ::   large_afrft    ! flag for afrac > 1 
    833813      INTEGER ::   ji, jj, jl, jl1, jl2, jk   ! dummy loop indices 
    834814      INTEGER ::   ij                ! horizontal index, combines i and j loops 
     
    898878      ! 1) Compute change in open water area due to closing and opening. 
    899879      !------------------------------------------------------------------------------- 
    900  
    901       neg_ato_i = .false. 
    902  
    903880      DO jj = 1, jpj 
    904881         DO ji = 1, jpi 
    905882            ato_i(ji,jj) = ato_i(ji,jj) - athorn(ji,jj,0) * closing_gross(ji,jj) * rdt_ice        & 
    906883               &                        + opning(ji,jj)                          * rdt_ice 
    907             IF( ato_i(ji,jj) < -epsi10 ) THEN 
    908                neg_ato_i = .TRUE. 
    909             ELSEIF( ato_i(ji,jj) < 0._wp ) THEN    ! roundoff error 
     884            IF    ( ato_i(ji,jj) < -epsi10 ) THEN    ! there is a bug 
     885               IF(lwp)   WRITE(numout,*) 'Ridging error: ato_i < 0 -- ato_i : ',ato_i(ji,jj) 
     886            ELSEIF( ato_i(ji,jj) < 0._wp   ) THEN    ! roundoff error 
    910887               ato_i(ji,jj) = 0._wp 
    911888            ENDIF 
    912889         END DO 
    913890      END DO 
    914  
    915       ! if negative open water area alert it 
    916       IF( neg_ato_i .AND. lwp ) THEN       ! there is a bug 
    917          DO jj = 1, jpj  
    918             DO ji = 1, jpi 
    919                IF( ato_i(ji,jj) < -epsi10 ) THEN  
    920                   WRITE(numout,*) ''   
    921                   WRITE(numout,*) 'Ridging error: ato_i < 0' 
    922                   WRITE(numout,*) 'ato_i : ', ato_i(ji,jj) 
    923                ENDIF 
    924             END DO 
    925          END DO 
    926       ENDIF 
    927891 
    928892      !----------------------------------------------------------------- 
    929893      ! 2) Save initial state variables 
    930894      !----------------------------------------------------------------- 
    931  
    932       DO jl = 1, jpl 
    933          aicen_init(:,:,jl) = a_i(:,:,jl) 
    934          vicen_init(:,:,jl) = v_i(:,:,jl) 
    935          vsnwn_init(:,:,jl) = v_s(:,:,jl) 
    936          ! 
    937          smv_i_init(:,:,jl) = smv_i(:,:,jl) 
    938          oa_i_init (:,:,jl) = oa_i (:,:,jl) 
    939       END DO 
    940  
    941       esnwn_init(:,:,:) = e_s(:,:,1,:) 
    942  
    943       DO jl = 1, jpl   
    944          DO jk = 1, nlay_i 
    945             eicen_init(:,:,jk,jl) = e_i(:,:,jk,jl) 
    946          END DO 
    947       END DO 
     895      aicen_init(:,:,:)   = a_i  (:,:,:) 
     896      vicen_init(:,:,:)   = v_i  (:,:,:) 
     897      vsnwn_init(:,:,:)   = v_s  (:,:,:) 
     898      smv_i_init(:,:,:)   = smv_i(:,:,:) 
     899      oa_i_init (:,:,:)   = oa_i (:,:,:) 
     900      esnwn_init(:,:,:)   = e_s  (:,:,1,:) 
     901      eicen_init(:,:,:,:) = e_i  (:,:,:,:) 
    948902 
    949903      ! 
     
    972926         END DO 
    973927 
    974          large_afrac = .false. 
    975          large_afrft = .false. 
    976  
    977928         DO ij = 1, icells 
    978929            ji = indxi(ij) 
     
    1000951            afrft(ji,jj) = arft1(ji,jj) / aicen_init(ji,jj,jl1) !rafting 
    1001952 
    1002             IF (afrac(ji,jj) > kamax + epsi10) THEN  !riging 
    1003                large_afrac = .true. 
    1004             ELSEIF (afrac(ji,jj) > kamax) THEN  ! roundoff error 
     953            IF( afrac(ji,jj) > kamax + epsi10 ) THEN  ! there is a bug 
     954               IF(lwp)   WRITE(numout,*) ' ardg > a_i -- ardg, aicen_init : ', ardg1(ji,jj), aicen_init(ji,jj,jl1) 
     955            ELSEIF( afrac(ji,jj) > kamax ) THEN       ! roundoff error 
    1005956               afrac(ji,jj) = kamax 
    1006957            ENDIF 
    1007             IF (afrft(ji,jj) > kamax + epsi10) THEN !rafting 
    1008                large_afrft = .true. 
    1009             ELSEIF (afrft(ji,jj) > kamax) THEN  ! roundoff error 
     958 
     959            IF( afrft(ji,jj) > kamax + epsi10 ) THEN ! there is a bug 
     960               IF(lwp)   WRITE(numout,*) ' arft > a_i -- arft, aicen_init : ', arft1(ji,jj), aicen_init(ji,jj,jl1)  
     961            ELSEIF( afrft(ji,jj) > kamax) THEN       ! roundoff error 
    1010962               afrft(ji,jj) = kamax 
    1011963            ENDIF 
     
    1022974            esrdg(ji,jj) = esnwn_init(ji,jj,jl1) * afrac(ji,jj) 
    1023975            srdg1(ji,jj) = smv_i_init(ji,jj,jl1) * afrac(ji,jj) 
    1024             srdg2(ji,jj) = smv_i_init(ji,jj,jl1) * afrac(ji,jj) !! MV HC 2014 this line seems useless 
    1025976 
    1026977            ! rafting volumes, heat contents ... 
     
    10501001             
    10511002            sfx_dyn(ji,jj) = sfx_dyn(ji,jj) - smsw(ji,jj) * rhoic * r1_rdtice 
    1052             wfx_dyn(ji,jj) = wfx_dyn(ji,jj) - vsw (ji,jj) * rhoic * r1_rdtice   ! gurvan: increase in ice volume du to seawater frozen in voids              
     1003            wfx_dyn(ji,jj) = wfx_dyn(ji,jj) - vsw (ji,jj) * rhoic * r1_rdtice   ! increase in ice volume du to seawater frozen in voids              
    10531004 
    10541005            !------------------------------------             
     
    11341085         ENDIF 
    11351086 
    1136          IF( large_afrac .AND. lwp ) THEN   ! there is a bug 
    1137             DO ij = 1, icells 
    1138                ji = indxi(ij) 
    1139                jj = indxj(ij) 
    1140                IF( afrac(ji,jj) > kamax + epsi10 ) THEN  
    1141                   WRITE(numout,*) '' 
    1142                   WRITE(numout,*) ' ardg > a_i' 
    1143                   WRITE(numout,*) ' ardg, aicen_init : ', ardg1(ji,jj), aicen_init(ji,jj,jl1) 
    1144                ENDIF 
    1145             END DO 
    1146          ENDIF 
    1147          IF( large_afrft .AND. lwp ) THEN  ! there is a bug 
    1148             DO ij = 1, icells 
    1149                ji = indxi(ij) 
    1150                jj = indxj(ij) 
    1151                IF( afrft(ji,jj) > kamax + epsi10 ) THEN  
    1152                   WRITE(numout,*) '' 
    1153                   WRITE(numout,*) ' arft > a_i' 
    1154                   WRITE(numout,*) ' arft, aicen_init : ', arft1(ji,jj), aicen_init(ji,jj,jl1) 
    1155                ENDIF 
    1156             END DO 
    1157          ENDIF 
    1158  
    11591087         !------------------------------------------------------------------------------- 
    11601088         ! 4) Add area, volume, and energy of new ridge to each category jl2 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90

    r5146 r5167  
    4242   USE domvvl           ! Variable volume 
    4343   USE limctl 
     44   USE limcons 
    4445 
    4546   IMPLICIT NONE 
     
    227228      ENDIF 
    228229 
    229       IF( ln_icectl )   CALL lim_prt( kt, iiceprt, jiceprt, 3, ' - Final state lim_sbc - ' )   ! control print 
     230      ! conservation test 
     231      IF( ln_limdiahsb ) CALL lim_cons_final( 'limsbc' ) 
     232 
     233      ! control prints 
     234      IF( ln_icectl )   CALL lim_prt( kt, iiceprt, jiceprt, 3, ' - Final state lim_sbc - ' ) 
    230235 
    231236      IF(ln_ctl) THEN 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90

    r5146 r5167  
    9494      REAL(wp), POINTER, DIMENSION(:,:) ::  zqsr, zqns 
    9595      !!------------------------------------------------------------------- 
    96       CALL wrk_alloc( jpi, jpj, zqsr, zqns ) 
     96      CALL wrk_alloc( jpi,jpj, zqsr, zqns ) 
    9797 
    9898      IF( nn_timing == 1 )  CALL timing_start('limthd') 
     
    101101      IF( ln_limdiahsb ) CALL lim_cons_hsm(0, 'limthd', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 
    102102 
     103      CALL lim_var_glo2eqv 
    103104      !------------------------------------------------------------------------! 
    104105      ! 1) Initialization of some variables                                    ! 
     
    209210            ! Net heat flux on top of ice-ocean [W.m-2] 
    210211            ! ----------------------------------------- 
    211             !     First  step here      : heat flux at the ocean surface + precip 
    212             !     Second step below     : heat flux at the ice   surface (after limthd_dif)  
     212            !     heat flux at the ocean surface + precip 
     213            !   + heat flux at the ice   surface  
    213214            hfx_in(ji,jj) = hfx_in(ji,jj)                                                                                         &  
    214215               ! heat flux above the ocean 
     
    216217               ! latent heat of precip (note that precip is included in qns but not in qns_ice) 
    217218               &    +   ( 1._wp - pfrld(ji,jj) ) * sprecip(ji,jj) * ( cpic * ( MIN( tatm_ice(ji,jj), rt0_snow ) - rt0 ) - lfus )  & 
    218                &    +   ( 1._wp - pfrld(ji,jj) ) * ( tprecip(ji,jj) - sprecip(ji,jj) ) * rcp * ( tatm_ice(ji,jj) - rt0 ) 
     219               &    +   ( 1._wp - pfrld(ji,jj) ) * ( tprecip(ji,jj) - sprecip(ji,jj) ) * rcp * ( tatm_ice(ji,jj) - rt0 )          & 
     220               ! heat flux above the ice 
     221               &    +   SUM(    a_i_b(ji,jj,:)   * ( qns_ice(ji,jj,:) + qsr_ice(ji,jj,:) ) ) 
    219222 
    220223            ! ----------------------------------------------------------------------------- 
     
    226229            hfx_out(ji,jj) = hfx_out(ji,jj)                                                                                       &  
    227230               ! Non solar heat flux received by the ocean 
    228                &    +        pfrld(ji,jj) * qns(ji,jj)                                                                            & 
     231               &    +        pfrld(ji,jj) * zqns(ji,jj)                                                                            & 
    229232               ! latent heat of precip (note that precip is included in qns but not in qns_ice) 
    230233               &    +      ( pfrld(ji,jj)**rn_betas - pfrld(ji,jj) ) * sprecip(ji,jj)       & 
     
    311314            ! --- lateral melting if monocat --- ! 
    312315            !------------------------------------! 
    313             IF ( ( ( nn_monocat == 1 ) .OR. ( nn_monocat == 4 ) ) .AND. ( jpl == 1 ) ) THEN 
     316            IF ( ( nn_monocat == 1 .OR. nn_monocat == 4 ) .AND. jpl == 1 ) THEN 
    314317               CALL lim_thd_lam( 1, nbpb ) 
    315318            END IF 
     
    324327         ENDIF 
    325328         ! 
    326       END DO 
     329      END DO !jl 
    327330 
    328331      !------------------------------------------------------------------------------! 
     
    358361      ! Change thickness to volume 
    359362      !---------------------------------- 
    360       CALL lim_var_eqv2glo 
     363      v_i(:,:,:)   = ht_i(:,:,:) * a_i(:,:,:) 
     364      v_s(:,:,:)   = ht_s(:,:,:) * a_i(:,:,:) 
     365      smv_i(:,:,:) = sm_i(:,:,:) * v_i(:,:,:) 
    361366 
    362367      CALL lim_var_zapsmall 
     
    399404      ! 
    400405      ! 
    401       CALL wrk_dealloc( jpi, jpj, zqsr, zqns ) 
    402  
    403406      IF( ln_limdiahsb ) CALL lim_cons_hsm(1, 'limthd', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 
     407 
     408      CALL wrk_dealloc( jpi,jpj, zqsr, zqns ) 
     409 
    404410      !------------------------------------------------------------------------------| 
    405411      !  6) Transport of ice between thickness categories.                           | 
    406412      !------------------------------------------------------------------------------| 
     413      ! Given thermodynamic growth rates, transport ice between thickness categories. 
    407414      IF( ln_limdiahsb ) CALL lim_cons_hsm(0, 'limitd_th_rem', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 
    408415 
    409       ! Given thermodynamic growth rates, transport ice between thickness categories. 
    410       IF( jpl > 1 )   CALL lim_itd_th_rem( 1, jpl, kt ) 
    411       ! 
    412       CALL lim_var_glo2eqv    ! only for info 
    413       CALL lim_var_agg(1) 
     416      IF( jpl > 1 )      CALL lim_itd_th_rem( 1, jpl, kt ) 
    414417 
    415418      IF( ln_limdiahsb ) CALL lim_cons_hsm(1, 'limitd_th_rem', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 
     419 
    416420      !------------------------------------------------------------------------------| 
    417421      !  7) Add frazil ice growing in leads. 
    418422      !------------------------------------------------------------------------------| 
    419423      IF( ln_limdiahsb ) CALL lim_cons_hsm(0, 'limthd_lac', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 
     424 
    420425      CALL lim_thd_lac 
    421       CALL lim_var_glo2eqv    ! only for info 
    422426       
    423       ! conservation test 
    424427      IF( ln_limdiahsb ) CALL lim_cons_hsm(1, 'limthd_lac', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 
    425428 
    426       IF(ln_ctl) THEN   ! Control print 
     429      ! Control print 
     430      IF(ln_ctl) THEN 
     431         CALL lim_var_glo2eqv 
     432 
    427433         CALL prt_ctl_info(' ') 
    428434         CALL prt_ctl_info(' - Cell values : ') 
     
    503509      REAL(wp)            ::   zhi_bef            ! ice thickness before thermo 
    504510      REAL(wp)            ::   zdh_mel, zda_mel   ! net melting 
    505       REAL(wp)            ::   zv                 ! ice volume  
     511      REAL(wp)            ::   zvi, zvs           ! ice/snow volumes  
    506512 
    507513      DO ji = kideb, kiut 
    508514         zdh_mel = MIN( 0._wp, dh_i_surf(ji) + dh_i_bott(ji) + dh_snowice(ji) ) 
    509          IF( zdh_mel < 0._wp )  THEN 
    510             zv         = a_i_1d(ji) * ht_i_1d(ji) 
     515         IF( zdh_mel < 0._wp .AND. a_i_1d(ji) > 0._wp )  THEN 
     516            zvi          = a_i_1d(ji) * ht_i_1d(ji) 
     517            zvs          = a_i_1d(ji) * ht_s_1d(ji) 
    511518            ! lateral melting = concentration change 
    512519            zhi_bef     = ht_i_1d(ji) - zdh_mel 
    513             zda_mel     =  a_i_1d(ji) * zdh_mel / ( 2._wp * MAX( zhi_bef, epsi10 ) ) 
    514             a_i_1d(ji)  = MAX( 0._wp, a_i_1d(ji) + zda_mel )  
    515             ! adjust thickness 
    516             rswitch     = MAX( 0._wp , SIGN( 1._wp , a_i_1d(ji) - epsi20 ) ) 
    517             ht_i_1d(ji) = rswitch * zv / MAX( a_i_1d(ji), epsi20 ) 
     520            rswitch     = MAX( 0._wp , SIGN( 1._wp , zhi_bef - epsi20 ) ) 
     521            zda_mel     = rswitch * a_i_1d(ji) * zdh_mel / ( 2._wp * MAX( zhi_bef, epsi20 ) ) 
     522            a_i_1d(ji)  = MAX( epsi20, a_i_1d(ji) + zda_mel )  
     523             ! adjust thickness 
     524            ht_i_1d(ji) = zvi / a_i_1d(ji)             
     525            ht_s_1d(ji) = zvs / a_i_1d(ji)             
    518526            ! retrieve total concentration 
    519527            at_i_1d(ji) = a_i_1d(ji) 
     
    676684      INTEGER  ::   ios                 ! Local integer output status for namelist read 
    677685      NAMELIST/namicethd/ rn_hnewice, ln_frazil, rn_maxfrazb, rn_vfrazb, rn_Cfrazb,                       & 
    678          &                rn_himin, parsub, rn_betas, rn_kappa_i, nn_conv_dif, rn_terr_dif, nn_ice_thcon, & 
     686         &                rn_himin, rn_betas, rn_kappa_i, nn_conv_dif, rn_terr_dif, nn_ice_thcon, & 
    679687         &                nn_monocat, ln_it_qnsice 
    680688      !!------------------------------------------------------------------- 
     
    700708      ENDIF 
    701709 
    702       IF( lk_cpl .AND. parsub /= 0.0 )   CALL ctl_stop( 'In coupled mode, use parsub = 0. or send dqla' ) 
    703710      ! 
    704711      IF(lwp) THEN                          ! control print 
     
    712719         WRITE(numout,*)'      minimum ice thickness                                   rn_himin     = ', rn_himin  
    713720         WRITE(numout,*)'      numerical carac. of the scheme for diffusion in ice ' 
    714          WRITE(numout,*)'      switch for snow sublimation  (=1) or not (=0)           parsub       = ', parsub   
    715721         WRITE(numout,*)'      coefficient for ice-lead partition of snowfall          rn_betas     = ', rn_betas 
    716722         WRITE(numout,*)'      extinction radiation parameter in sea ice               rn_kappa_i   = ', rn_kappa_i 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90

    r5134 r5167  
    8686      REAL(wp) ::   zsstK        ! SST in Kelvin 
    8787 
    88       REAL(wp), POINTER, DIMENSION(:) ::   zh_s        ! snow layer thickness 
    8988      REAL(wp), POINTER, DIMENSION(:) ::   zqprec      ! energy of fallen snow                       (J.m-3) 
    9089      REAL(wp), POINTER, DIMENSION(:) ::   zq_su       ! heat for surface ablation                   (J.m-2) 
     
    118117      END SELECT 
    119118 
    120       CALL wrk_alloc( jpij, zh_s, zqprec, zq_su, zq_bo, zf_tt, zq_rema ) 
     119      CALL wrk_alloc( jpij, zqprec, zq_su, zq_bo, zf_tt, zq_rema ) 
    121120      CALL wrk_alloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i, zqh_s, zq_s ) 
    122121      CALL wrk_alloc( jpij, nlay_i+1, zdeltah, zh_i ) 
     
    129128      zq_rema(:) = 0._wp 
    130129 
    131       zh_s     (:) = 0._wp        
    132130      zdh_s_pre(:) = 0._wp 
    133131      zdh_s_mel(:) = 0._wp 
     
    140138      icount    (:)   = 0 
    141139 
     140      ! Initialize enthalpy at nlay_i+1 
     141      DO ji = kideb, kiut 
     142         q_i_1d(ji,nlay_i+1) = 0._wp 
     143      END DO 
     144 
    142145      ! initialize layer thicknesses and enthalpies 
    143146      h_i_old (:,0:nlay_i+1) = 0._wp 
     
    155158      ! 
    156159      DO ji = kideb, kiut 
    157          rswitch       = 1._wp - MAX(  0._wp , SIGN( 1._wp , - ht_s_1d(ji) ) ) 
    158          ztmelts       = rswitch * rt0 + ( 1._wp - rswitch ) * rt0 
    159  
    160160         zfdum      = qns_ice_1d(ji) + ( 1._wp - i0(ji) ) * qsr_ice_1d(ji) - fc_su(ji)  
    161161         zf_tt(ji)  = fc_bo_i(ji) + fhtur_1d(ji) + fhld_1d(ji)  
    162162 
    163          zq_su (ji) = MAX( 0._wp, zfdum     * rdt_ice ) * MAX( 0._wp , SIGN( 1._wp, t_su_1d(ji) - ztmelts ) ) 
     163         zq_su (ji) = MAX( 0._wp, zfdum     * rdt_ice ) * MAX( 0._wp , SIGN( 1._wp, t_su_1d(ji) - rt0 ) ) 
    164164         zq_bo (ji) = MAX( 0._wp, zf_tt(ji) * rdt_ice ) 
    165165      END DO 
     
    187187      !------------------------------------------------------------! 
    188188      ! 
    189       DO ji = kideb, kiut      
    190          zh_s(ji) = ht_s_1d(ji) * r1_nlay_s 
    191       END DO 
    192       ! 
    193189      DO jk = 1, nlay_s 
    194190         DO ji = kideb, kiut 
    195             zqh_s(ji) =  zqh_s(ji) + q_s_1d(ji,jk) * zh_s(ji) 
     191            zqh_s(ji) =  zqh_s(ji) + q_s_1d(ji,jk) * ht_s_1d(ji) * r1_nlay_s 
    196192         END DO 
    197193      END DO 
     
    222218      ! Martin Vancoppenolle, December 2006 
    223219 
     220      zdeltah(:,:) = 0._wp 
    224221      DO ji = kideb, kiut 
    225222         !----------- 
     
    236233         ! mass flux, <0 
    237234         wfx_spr_1d(ji) = wfx_spr_1d(ji) - rhosn * a_i_1d(ji) * zdh_s_pre(ji) * r1_rdtice 
    238          ! update thickness 
    239          ht_s_1d    (ji) = MAX( 0._wp , ht_s_1d(ji) + zdh_s_pre(ji) ) 
    240235 
    241236         !--------------------- 
     
    243238         !--------------------- 
    244239         ! thickness change 
    245          IF( zdh_s_pre(ji) > 0._wp ) THEN 
    246240         rswitch        = MAX( 0._wp , SIGN( 1._wp , zqprec(ji) - epsi20 ) ) 
    247          zdh_s_mel (ji) = - rswitch * zq_su(ji) / MAX( zqprec(ji) , epsi20 ) 
    248          zdh_s_mel (ji) = MAX( - zdh_s_pre(ji), zdh_s_mel(ji) ) ! bound melting  
     241         zdeltah (ji,1) = - rswitch * zq_su(ji) / MAX( zqprec(ji) , epsi20 ) 
     242         zdeltah (ji,1) = MAX( - zdh_s_pre(ji), zdeltah(ji,1) ) ! bound melting  
    249243         ! heat used to melt snow (W.m-2, >0) 
    250          hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdh_s_mel(ji) * a_i_1d(ji) * zqprec(ji) * r1_rdtice 
     244         hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,1) * a_i_1d(ji) * zqprec(ji) * r1_rdtice 
    251245         ! snow melting only = water into the ocean (then without snow precip), >0 
    252          wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_1d(ji) * zdh_s_mel(ji) * r1_rdtice 
    253           
    254          ! updates available heat + thickness 
    255          zq_su (ji) = MAX( 0._wp , zq_su (ji) + zdh_s_mel(ji) * zqprec(ji) )       
    256          ht_s_1d(ji) = MAX( 0._wp , ht_s_1d(ji) + zdh_s_mel(ji) ) 
    257          zh_s  (ji) = ht_s_1d(ji) * r1_nlay_s 
    258  
    259          ENDIF 
    260       END DO 
    261  
    262       ! If heat still available, then melt more snow 
    263       zdeltah(:,:) = 0._wp ! important 
     246         wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,1) * r1_rdtice     
     247         ! updates available heat + precipitations after melting 
     248         zq_su     (ji) = MAX( 0._wp , zq_su (ji) + zdeltah(ji,1) * zqprec(ji) )       
     249         zdh_s_pre (ji) = zdh_s_pre(ji) + zdeltah(ji,1) 
     250 
     251         ! update thickness 
     252         ht_s_1d(ji) = MAX( 0._wp , ht_s_1d(ji) + zdh_s_pre(ji) ) 
     253      END DO 
     254 
     255      ! If heat still available (zq_su > 0), then melt more snow 
     256      zdeltah(:,:) = 0._wp 
    264257      DO jk = 1, nlay_s 
    265258         DO ji = kideb, kiut 
     
    268261            rswitch          = rswitch * ( MAX( 0._wp, SIGN( 1._wp, q_s_1d(ji,jk) - epsi20 ) ) )  
    269262            zdeltah  (ji,jk) = - rswitch * zq_su(ji) / MAX( q_s_1d(ji,jk), epsi20 ) 
    270             zdeltah  (ji,jk) = MAX( zdeltah(ji,jk) , - zh_s(ji) ) ! bound melting 
     263            zdeltah  (ji,jk) = MAX( zdeltah(ji,jk) , - ht_s_1d(ji) ) ! bound melting 
    271264            zdh_s_mel(ji)    = zdh_s_mel(ji) + zdeltah(ji,jk)     
    272265            ! heat used to melt snow(W.m-2, >0) 
     
    274267            ! snow melting only = water into the ocean (then without snow precip) 
    275268            wfx_snw_1d(ji)   = wfx_snw_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 
    276  
    277269            ! updates available heat + thickness 
    278270            zq_su (ji)  = MAX( 0._wp , zq_su (ji) + zdeltah(ji,jk) * q_s_1d(ji,jk) ) 
    279271            ht_s_1d(ji) = MAX( 0._wp , ht_s_1d(ji) + zdeltah(ji,jk) ) 
    280  
    281272         END DO 
    282273      END DO 
     
    286277      !---------------------- 
    287278      ! qla_ice is always >=0 (upwards), heat goes to the atmosphere, therefore snow sublimates 
    288       ! clem comment: not counted in mass exchange in limsbc since this is an exchange with atm. (not ocean) 
     279      ! clem comment: not counted in mass/heat exchange in limsbc since this is an exchange with atm. (not ocean) 
    289280      ! clem comment: ice should also sublimate 
     281      zdeltah(:,:) = 0._wp 
    290282      IF( lk_cpl ) THEN 
    291283         ! coupled mode: sublimation already included in emp_ice (to do in limsbc_ice) 
     
    294286         ! forced  mode: snow thickness change due to sublimation 
    295287         DO ji = kideb, kiut 
    296             zdh_s_sub(ji)  =  MAX( - ht_s_1d(ji) , - parsub * qla_ice_1d(ji) / ( rhosn * lsub ) * rdt_ice ) 
     288            zdh_s_sub(ji)  =  MAX( - ht_s_1d(ji) , - qla_ice_1d(ji) / ( rhosn * lsub ) * rdt_ice ) 
    297289            ! Heat flux by sublimation [W.m-2], < 0 
    298290            !      sublimate first snow that had fallen, then pre-existing snow 
    299             zcoeff         =      ( MAX( zdh_s_sub(ji), - MAX( 0._wp, zdh_s_pre(ji) + zdh_s_mel(ji) ) )   * zqprec(ji) +   & 
    300                &  ( zdh_s_sub(ji) - MAX( zdh_s_sub(ji), - MAX( 0._wp, zdh_s_pre(ji) + zdh_s_mel(ji) ) ) ) * q_s_1d(ji,1) )  & 
    301                &  * a_i_1d(ji) * r1_rdtice 
    302             hfx_sub_1d(ji) = hfx_sub_1d(ji) + zcoeff 
     291            zdeltah(ji,1)  = MAX( zdh_s_sub(ji), - zdh_s_pre(ji) ) 
     292            hfx_sub_1d(ji) = hfx_sub_1d(ji) + ( zdeltah(ji,1) * zqprec(ji) + ( zdh_s_sub(ji) - zdeltah(ji,1) ) * q_s_1d(ji,1)  & 
     293               &                              ) * a_i_1d(ji) * r1_rdtice 
    303294            ! Mass flux by sublimation 
    304295            wfx_sub_1d(ji) =  wfx_sub_1d(ji) - rhosn * a_i_1d(ji) * zdh_s_sub(ji) * r1_rdtice 
    305296            ! new snow thickness 
    306             ht_s_1d(ji)     =  MAX( 0._wp , ht_s_1d(ji) + zdh_s_sub(ji) ) 
     297            ht_s_1d(ji)    =  MAX( 0._wp , ht_s_1d(ji) + zdh_s_sub(ji) ) 
     298            ! update precipitations after sublimation and correct sublimation 
     299            zdh_s_pre(ji) = zdh_s_pre(ji) + zdeltah(ji,1) 
     300            zdh_s_sub(ji) = zdh_s_sub(ji) - zdeltah(ji,1) 
    307301         END DO 
    308302      ENDIF 
     
    310304      ! --- Update snow diags --- ! 
    311305      DO ji = kideb, kiut 
    312          dh_s_tot(ji)   = zdh_s_mel(ji) + zdh_s_pre(ji) + zdh_s_sub(ji) 
    313          zh_s(ji)       = ht_s_1d(ji) * r1_nlay_s 
    314       END DO ! ji 
     306         dh_s_tot(ji) = zdh_s_mel(ji) + zdh_s_pre(ji) + zdh_s_sub(ji) 
     307      END DO 
    315308 
    316309      !------------------------------------------- 
     
    323316            rswitch       = MAX(  0._wp , SIGN( 1._wp, ht_s_1d(ji) - epsi20 )  ) 
    324317            q_s_1d(ji,jk) = rswitch / MAX( ht_s_1d(ji), epsi20 ) *                          & 
    325               &            ( (   MAX( 0._wp, dh_s_tot(ji) )               ) * zqprec(ji) +  & 
    326               &              ( - MAX( 0._wp, dh_s_tot(ji) ) + ht_s_1d(ji) ) * rhosn * ( cpic * ( rt0 - t_s_1d(ji,jk) ) + lfus ) ) 
     318              &            ( (   zdh_s_pre(ji)             ) * zqprec(ji) +  & 
     319              &              (   ht_s_1d(ji) - zdh_s_pre(ji) ) * rhosn * ( cpic * ( rt0 - t_s_1d(ji,jk) ) + lfus ) ) 
    327320            zq_s(ji)     =  zq_s(ji) + q_s_1d(ji,jk) 
    328321         END DO 
     
    334327      zdeltah(:,:) = 0._wp ! important 
    335328      DO jk = 1, nlay_i 
    336          DO ji = kideb, kiut  
    337             zEi            = - q_i_1d(ji,jk) * r1_rhoic             ! Specific enthalpy of layer k [J/kg, <0] 
    338  
    339             ztmelts        = - tmut * s_i_1d(ji,jk) + rt0           ! Melting point of layer k [K] 
     329         DO ji = kideb, kiut 
     330            zEi            = - q_i_1d(ji,jk) * r1_rhoic            ! Specific enthalpy of layer k [J/kg, <0] 
     331 
     332            ztmelts        = - tmut * s_i_1d(ji,jk) + rt0          ! Melting point of layer k [K] 
    340333 
    341334            zEw            =    rcp * ( ztmelts - rt0 )            ! Specific enthalpy of resulting meltwater [J/kg, <0] 
     
    343336            zdE            =    zEi - zEw                          ! Specific enthalpy difference < 0 
    344337 
    345             zfmdt          = - zq_su(ji) / zdE                     ! Mass flux to the ocean [kg/m2, >0] 
     338            IF( zdE < 0._wp ) THEN                                  
     339               zfmdt       = - zq_su(ji) / zdE                     ! Mass flux to the ocean [kg/m2, >0] 
     340            ELSE 
     341               zfmdt       = rhoic * zh_i(ji,jk)                   !!! internal melting 
     342               zdE         = 0._wp                                 !   All the layer melts if t_i(jk) = Tmelt (i.e. zdE = 0) 
     343            END IF 
    346344 
    347345            zdeltah(ji,jk) = - zfmdt * r1_rhoic                    ! Melt of layer jk [m, <0] 
     
    358356 
    359357            ! Contribution to salt flux (clem: using sm_i_1d and not s_i_1d(jk) is ok) 
    360             sfx_sum_1d(ji)   = sfx_sum_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 
     358            sfx_sum_1d(ji) = sfx_sum_1d(ji) - rhoic * a_i_1d(ji) * zdeltah(ji,jk) * sm_i_1d(ji) * r1_rdtice 
    361359 
    362360            ! Contribution to heat flux [W.m-2], < 0 
     
    405403      ! -> need for an iterative procedure, which converges quickly 
    406404 
    407       IF ( nn_icesal == 2 ) THEN 
    408          num_iter_max = 5 
    409       ELSE 
    410          num_iter_max = 1 
    411       ENDIF 
    412  
    413       ! Just to be sure that enthalpy at nlay_i+1 is null 
    414       DO ji = kideb, kiut 
    415          q_i_1d(ji,nlay_i+1) = 0._wp 
    416       END DO 
     405      num_iter_max = 1 
     406      IF( nn_icesal == 2 ) num_iter_max = 5 
    417407 
    418408      ! Iterative procedure 
     
    483473             
    484474            ! Contribution to salt flux, <0 
    485             sfx_bog_1d(ji) = sfx_bog_1d(ji) + s_i_new(ji) * a_i_1d(ji) * zfmdt * r1_rdtice 
     475            sfx_bog_1d(ji) = sfx_bog_1d(ji) - rhoic * a_i_1d(ji) * dh_i_bott(ji) * s_i_new(ji) * r1_rdtice 
    486476 
    487477            ! Contribution to mass flux, <0 
     
    500490      DO jk = nlay_i, 1, -1 
    501491         DO ji = kideb, kiut 
    502             IF(  zf_tt(ji)  >=  0._wp  .AND. jk > icount(ji) ) THEN   ! do not calculate where layer has already disappeared by surface melting  
     492            IF(  zf_tt(ji)  >  0._wp  .AND. jk > icount(ji) ) THEN   ! do not calculate where layer has already disappeared by surface melting  
    503493 
    504494               ztmelts = - tmut * s_i_1d(ji,jk) + rt0  ! Melting point of layer jk (K) 
     
    524514 
    525515                  ! Contribution to salt flux (clem: using sm_i_1d and not s_i_1d(jk) is ok) 
    526                   sfx_res_1d(ji) = sfx_res_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 
     516                  sfx_res_1d(ji) = sfx_res_1d(ji) - rhoic * a_i_1d(ji) * zdeltah(ji,jk) * sm_i_1d(ji) * r1_rdtice 
    527517                                     
    528518                  ! Contribution to mass flux 
     
    559549 
    560550                  ! Contribution to salt flux (clem: using sm_i_1d and not s_i_1d(jk) is ok) 
    561                   sfx_bom_1d(ji) = sfx_bom_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 
     551                  sfx_bom_1d(ji) = sfx_bom_1d(ji) - rhoic *  a_i_1d(ji) * zdeltah(ji,jk) * sm_i_1d(ji) * r1_rdtice 
    562552                   
    563553                  ! Total heat flux used in this process [W.m-2], >0   
     
    595585         zdeltah  (ji,1) = - rswitch * zq_rema(ji) / MAX( q_s_1d(ji,1), epsi20 ) 
    596586         zdeltah  (ji,1) = MIN( 0._wp , MAX( zdeltah(ji,1) , - ht_s_1d(ji) ) ) ! bound melting 
    597          zdh_s_mel(ji)   = zdh_s_mel(ji) + zdeltah(ji,1)     
    598587         dh_s_tot (ji)   = dh_s_tot(ji)  + zdeltah(ji,1) 
    599588         ht_s_1d   (ji)  = ht_s_1d(ji)   + zdeltah(ji,1) 
     
    622611         dh_snowice(ji) = MAX(  0._wp , ( rhosn * ht_s_1d(ji) + (rhoic-rau0) * ht_i_1d(ji) ) / ( rhosn+rau0-rhoic )  ) 
    623612 
    624          ht_i_1d(ji)     = ht_i_1d(ji) + dh_snowice(ji) 
    625          ht_s_1d(ji)     = ht_s_1d(ji) - dh_snowice(ji) 
     613         ht_i_1d(ji)    = ht_i_1d(ji) + dh_snowice(ji) 
     614         ht_s_1d(ji)    = ht_s_1d(ji) - dh_snowice(ji) 
    626615 
    627616         ! Salinity of snow ice 
     
    669658      ! Update temperature, energy 
    670659      !------------------------------------------- 
    671       !clem bug: we should take snow into account here 
    672660      DO ji = kideb, kiut 
    673661         rswitch     =  1.0 - MAX( 0._wp , SIGN( 1._wp , - ht_i_1d(ji) ) )  
     
    688676      WHERE( ht_i_1d == 0._wp ) a_i_1d = 0._wp 
    689677       
    690       CALL wrk_dealloc( jpij, zh_s, zqprec, zq_su, zq_bo, zf_tt, zq_rema ) 
     678      CALL wrk_dealloc( jpij, zqprec, zq_su, zq_bo, zf_tt, zq_rema ) 
    691679      CALL wrk_dealloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i, zqh_s, zq_s ) 
    692680      CALL wrk_dealloc( jpij, nlay_i+1, zdeltah, zh_i ) 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90

    r5146 r5167  
    170170      CALL wrk_alloc( jpij, isnow, ztsub, ztsubit, zh_i, zh_s, zfsw ) 
    171171      CALL wrk_alloc( jpij, zf, dzf, zqns_ice_b, zerrit, zdifcase, zftrice, zihic, zghe ) 
    172       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) 
    173       CALL wrk_alloc( jpij, nlay_s+1,           zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart=0) 
    174       CALL wrk_alloc( jpij, nlay_i+3, zindterm, zindtbis, zdiagbis  ) 
    175       CALL wrk_alloc( jpij, nlay_i+3, 3, ztrid ) 
     172      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 ) 
     173      CALL wrk_alloc( jpij,nlay_s+1,           zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart=0 ) 
     174      CALL wrk_alloc( jpij,nlay_i+3, zindterm, zindtbis, zdiagbis  ) 
     175      CALL wrk_alloc( jpij,nlay_i+3,3, ztrid ) 
    176176 
    177177      CALL wrk_alloc( jpij, zdq, zq_ini, zhfx_err ) 
     
    772772         ENDIF 
    773773         hfx_err_1d(ji) = hfx_err_1d(ji) + zhfx_err(ji) * a_i_1d(ji) 
     774 
     775         ! total heat that is sent to the ocean (i.e. not used in the heat diffusion equation) 
     776         hfx_err_dif_1d(ji) = hfx_err_dif_1d(ji) + zhfx_err(ji) * a_i_1d(ji) 
    774777      END DO  
    775  
    776       hfx_err_dif_1d(:) = hfx_err_dif_1d(:) - zhfx_err(:) * a_i_1d(:) 
    777778 
    778779      !----------------------------------------- 
     
    787788               &             ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_1d(ji) 
    788789         ENDIF 
    789       END DO 
    790  
    791       ! --- compute diagnostic net heat flux at the surface of the snow-ice system (W.m-2) 
    792       DO ji = kideb, kiut 
    793          ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 
    794          hfx_in (ii,ij) = hfx_in (ii,ij) + a_i_1d(ji) * ( qsr_ice_1d(ji) + qns_ice_1d(ji) ) 
    795       END DO 
    796     
     790         ! correction on the diagnosed heat flux due to non-convergence of the algorithm used to solve heat equation 
     791         hfx_dif_1d(ji) = hfx_dif_1d(ji) - zhfx_err(ji) * a_i_1d(ji) 
     792      END DO    
    797793      ! 
    798794      CALL wrk_dealloc( jpij, numeqmin, numeqmax ) 
    799795      CALL wrk_dealloc( jpij, isnow, ztsub, ztsubit, zh_i, zh_s, zfsw ) 
    800796      CALL wrk_dealloc( jpij, zf, dzf, zerrit, zdifcase, zftrice, zihic, zghe ) 
    801       CALL wrk_dealloc( jpij, nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i,   & 
    802          &              ztib, zeta_i, ztitemp, z_i, zspeche_i, kjstart = 0 ) 
    803       CALL wrk_dealloc( jpij, nlay_s+1,           zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart = 0 ) 
    804       CALL wrk_dealloc( jpij, nlay_i+3, zindterm, zindtbis, zdiagbis ) 
    805       CALL wrk_dealloc( jpij, nlay_i+3, 3, ztrid ) 
     797      CALL wrk_dealloc( jpij,nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, ztib, zeta_i, ztitemp, z_i, zspeche_i, kjstart = 0 ) 
     798      CALL wrk_dealloc( jpij,nlay_s+1,           zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart = 0 ) 
     799      CALL wrk_dealloc( jpij,nlay_i+3, zindterm, zindtbis, zdiagbis ) 
     800      CALL wrk_dealloc( jpij,nlay_i+3,3, ztrid ) 
    806801      CALL wrk_dealloc( jpij, zdq, zq_ini, zhfx_err ) 
    807802 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90

    r5134 r5167  
    3131   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
    3232   USE limthd_ent 
     33   USE limvar 
    3334 
    3435   IMPLICIT NONE 
     
    122123      CALL wrk_alloc( jpi,jpj, zvrel ) 
    123124 
     125      CALL lim_var_agg(1) 
     126      CALL lim_var_glo2eqv 
    124127      !------------------------------------------------------------------------------| 
    125128      ! 2) Convert units for ice internal energy 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90

    r5138 r5167  
    112112 
    113113         !--- Thickness correction init. ------------------------------- 
    114          CALL lim_var_glo2eqv 
    115114         zatold(:,:) = SUM( a_i(:,:,:), dim=3 ) 
     115         DO jl = 1, jpl 
     116            DO jj = 1, jpj 
     117               DO ji = 1, jpi 
     118                  rswitch          = MAX( 0._wp , SIGN( 1._wp, a_i(ji,jj,jl) - epsi20 ) ) 
     119                  ht_i  (ji,jj,jl) = v_i (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi20 ) * rswitch 
     120                  ht_s  (ji,jj,jl) = v_s (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi20 ) * rswitch 
     121               END DO 
     122            END DO 
     123         END DO 
    116124         !--------------------------------------------------------------------- 
    117          ! Record max of the surrounding ice thicknesses for correction in limupdate 
     125         ! Record max of the surrounding ice thicknesses for correction 
    118126         ! in case advection creates ice too thick. 
    119127         !--------------------------------------------------------------------- 
     
    147155               CALL ctl_warn( 'lim_trp: ncfl= ', TRIM(cltmp), 'advective ice time-step using a split in sub-time-step ') 
    148156            ELSE 
    149                WRITE(numout,*) 'lim_trp : CFL criterion for ice advection is always smaller than 1/2 ' 
     157            !  WRITE(numout,*) 'lim_trp : CFL criterion for ice advection is always smaller than 1/2 ' 
    150158            ENDIF 
    151159         ENDIF 
     
    228236                  CALL lim_adv_x( zusnit, u_ice, 0._wp, zsm, z0smi (:,:,jl), sxsal(:,:,jl),   & 
    229237                     &                                       sxxsal(:,:,jl), sysal(:,:,jl), syysal(:,:,jl), sxysal(:,:,jl)  ) 
    230  
    231238                  CALL lim_adv_y( zusnit, v_ice, 1._wp, zsm, z0oi  (:,:,jl), sxage(:,:,jl),   &   !--- ice age      --- 
    232239                     &                                       sxxage(:,:,jl), syage(:,:,jl), syyage(:,:,jl), sxyage(:,:,jl)  ) 
     
    345352!!gm & cr  
    346353 
     354         ! --- diags --- 
     355         DO jj = 1, jpj 
     356            DO ji = 1, jpi 
     357               diag_trp_ei(ji,jj) = ( SUM( e_i(ji,jj,1:nlay_i,:) ) - zeiold(ji,jj) ) * r1_rdtice 
     358               diag_trp_es(ji,jj) = ( SUM( e_s(ji,jj,1:nlay_s,:) ) - zesold(ji,jj) ) * r1_rdtice 
     359 
     360               diag_trp_vi (ji,jj) = SUM(   v_i(ji,jj,:) -  zviold(ji,jj,:) ) * r1_rdtice 
     361               diag_trp_vs (ji,jj) = SUM(   v_s(ji,jj,:) -  zvsold(ji,jj,:) ) * r1_rdtice 
     362               diag_trp_smv(ji,jj) = SUM( smv_i(ji,jj,:) - zsmvold(ji,jj,:) ) * r1_rdtice 
     363            END DO 
     364         END DO 
     365 
    347366         ! zap small areas 
    348367         CALL lim_var_zapsmall 
    349368 
    350369         !--- Thickness correction in case too high -------------------------------------------------------- 
    351          CALL lim_var_glo2eqv 
    352370         DO jl = 1, jpl 
    353371            DO jj = 1, jpj 
     
    356374                  IF ( v_i(ji,jj,jl) > 0._wp ) THEN 
    357375 
     376                     rswitch          = MAX( 0._wp , SIGN( 1._wp, a_i(ji,jj,jl) - epsi20 ) ) 
     377                     ht_i  (ji,jj,jl) = v_i (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi20 ) * rswitch 
     378                     ht_s  (ji,jj,jl) = v_s (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi20 ) * rswitch 
     379                      
    358380                     zvi  = v_i  (ji,jj,jl) 
    359381                     zvs  = v_s  (ji,jj,jl) 
     
    365387 
    366388                     IF ( ( zdv >  0.0 .AND. (ht_i(ji,jj,jl)+ht_s(ji,jj,jl)) > zhimax(ji,jj,jl) .AND. zatold(ji,jj) < 0.80 ) .OR. & 
    367                         & ( zdv <= 0.0 .AND. (ht_i(ji,jj,jl)+ht_s(ji,jj,jl)) > zhimax(ji,jj,jl) ) ) THEN                                           
     389                        & ( zdv <= 0.0 .AND. (ht_i(ji,jj,jl)+ht_s(ji,jj,jl)) > zhimax(ji,jj,jl) ) ) THEN 
    368390 
    369391                        rswitch        = MAX( 0._wp, SIGN( 1._wp, zhimax(ji,jj,jl) - epsi20 ) ) 
     
    405427         ENDIF 
    406428 
    407          ! --- diags --- 
    408          DO jj = 1, jpj 
    409             DO ji = 1, jpi 
    410                diag_trp_ei(ji,jj) = ( SUM( e_i(ji,jj,1:nlay_i,:) ) - zeiold(ji,jj) ) * r1_rdtice 
    411                diag_trp_es(ji,jj) = ( SUM( e_s(ji,jj,1:nlay_s,:) ) - zesold(ji,jj) ) * r1_rdtice 
    412  
    413                diag_trp_vi (ji,jj) = SUM(   v_i(ji,jj,:) -  zviold(ji,jj,:) ) * r1_rdtice 
    414                diag_trp_vs (ji,jj) = SUM(   v_s(ji,jj,:) -  zvsold(ji,jj,:) ) * r1_rdtice 
    415                diag_trp_smv(ji,jj) = SUM( smv_i(ji,jj,:) - zsmvold(ji,jj,:) ) * r1_rdtice 
    416             END DO 
    417          END DO 
    418  
    419429         ! --- agglomerate variables ----------------- 
    420430         vt_i (:,:) = 0._wp 
     
    443453 
    444454      ENDIF 
    445  
    446       CALL lim_var_glo2eqv            ! equivalent variables, requested for rafting 
    447455 
    448456      ! ------------------------------------------------- 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limupdate1.F90

    r5134 r5167  
    6969      IF( ln_limdiahsb ) CALL lim_cons_hsm(0, 'limupdate1', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 
    7070 
    71       CALL lim_var_glo2eqv 
    7271      !---------------------------------------------------- 
    7372      ! ice concentration should not exceed amax  
     
    8887      END DO 
    8988     
    90       !---------------------------------------------------- 
    91       ! Rebin categories with thickness out of bounds 
    92       !---------------------------------------------------- 
    93       IF ( jpl > 1 ) CALL lim_itd_th_reb(1, jpl) 
    94  
    95       !----------------- 
    96       ! zap small values 
    97       !----------------- 
    98       CALL lim_var_zapsmall 
    99  
    10089      !--------------------- 
    10190      ! Ice salinity bounds 
     
    10695               DO ji = 1, jpi 
    10796                  zsal            = smv_i(ji,jj,jl) 
    108                   smv_i(ji,jj,jl) = sm_i(ji,jj,jl) * v_i(ji,jj,jl) 
    10997                  ! salinity stays in bounds 
    11098                  rswitch         = 1._wp - MAX( 0._wp, SIGN( 1._wp, - v_i(ji,jj,jl) ) ) 
     
    117105      ENDIF 
    118106 
     107      !---------------------------------------------------- 
     108      ! Rebin categories with thickness out of bounds 
     109      !---------------------------------------------------- 
     110      IF ( jpl > 1 ) CALL lim_itd_th_reb(1, jpl) 
     111 
     112      !----------------- 
     113      ! zap small values 
     114      !----------------- 
     115      CALL lim_var_zapsmall 
     116 
     117      ! ------------------------------------------------- 
     118      ! Diagnostics 
     119      ! ------------------------------------------------- 
     120      DO jl  = 1, jpl 
     121         afx_dyn(:,:) = afx_dyn(:,:) + ( a_i(:,:,jl) - a_i_b(:,:,jl) ) * r1_rdtice 
     122      END DO 
     123 
     124      DO jj = 1, jpj 
     125         DO ji = 1, jpi             
     126            ! heat content variation (W.m-2) 
     127            diag_heat(ji,jj) = - ( SUM( e_i(ji,jj,1:nlay_i,:) - e_i_b(ji,jj,1:nlay_i,:) ) +  &  
     128               &                   SUM( e_s(ji,jj,1:nlay_s,:) - e_s_b(ji,jj,1:nlay_s,:) )    & 
     129               &                 ) * r1_rdtice 
     130            ! salt, volume 
     131            diag_smvi(ji,jj) = SUM( smv_i(ji,jj,:) - smv_i_b(ji,jj,:) ) * rhoic * r1_rdtice 
     132            diag_vice(ji,jj) = SUM( v_i  (ji,jj,:) - v_i_b  (ji,jj,:) ) * rhoic * r1_rdtice 
     133            diag_vsnw(ji,jj) = SUM( v_s  (ji,jj,:) - v_s_b  (ji,jj,:) ) * rhosn * r1_rdtice 
     134         END DO 
     135      END DO 
     136 
    119137      ! conservation test 
    120138      IF( ln_limdiahsb ) CALL lim_cons_hsm(1, 'limupdate1', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 
    121  
    122       ! ------------------------------------------------- 
    123       ! Diagnostics 
    124       ! ------------------------------------------------- 
    125       DO jl  = 1, jpl 
    126          afx_dyn(:,:) = afx_dyn(:,:) + ( a_i(:,:,jl) - a_i_b(:,:,jl) ) * r1_rdtice 
    127       END DO 
    128  
    129       ! heat content variation (W.m-2) 
    130       DO jj = 1, jpj 
    131          DO ji = 1, jpi             
    132             diag_heat_dhc(ji,jj) = - ( SUM( e_i(ji,jj,1:nlay_i,:) - e_i_b(ji,jj,1:nlay_i,:) ) +  &  
    133                &                       SUM( e_s(ji,jj,1:nlay_s,:) - e_s_b(ji,jj,1:nlay_s,:) )    & 
    134                &                     ) * r1_rdtice    
    135          END DO 
    136       END DO 
    137139 
    138140      ! ------------------------------------------------- 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limupdate2.F90

    r5134 r5167  
    7272      ! Constrain the thickness of the smallest category above himin 
    7373      !---------------------------------------------------------------------- 
    74       CALL lim_var_glo2eqv 
    7574      DO jj = 1, jpj  
    7675         DO ji = 1, jpi 
     76            rswitch = MAX( 0._wp , SIGN( 1._wp, a_i(ji,jj,1) - epsi20 ) )   !0 if no ice and 1 if yes 
     77            ht_i(ji,jj,1) = v_i (ji,jj,1) / MAX( a_i(ji,jj,1) , epsi20 ) * rswitch 
    7778            IF( v_i(ji,jj,1) > 0._wp .AND. ht_i(ji,jj,1) < rn_himin ) THEN 
    7879               a_i (ji,jj,1) = a_i(ji,jj,1) * ht_i(ji,jj,1) / rn_himin 
     
    9899         END DO 
    99100      END DO 
    100  
    101       !---------------------------------------------------- 
    102       ! Rebin categories with thickness out of bounds 
    103       !---------------------------------------------------- 
    104       IF ( jpl > 1 ) CALL lim_itd_th_reb( 1, jpl ) 
    105  
    106       !----------------- 
    107       ! zap small values 
    108       !----------------- 
    109       CALL lim_var_zapsmall 
    110101 
    111102      !--------------------- 
     
    117108               DO ji = 1, jpi 
    118109                  zsal            = smv_i(ji,jj,jl) 
    119                   smv_i(ji,jj,jl) = sm_i(ji,jj,jl) * v_i(ji,jj,jl) 
    120110                  ! salinity stays in bounds 
    121111                  rswitch         = 1._wp - MAX( 0._wp, SIGN( 1._wp, - v_i(ji,jj,jl) ) ) 
     
    127117         END DO 
    128118      ENDIF 
     119 
     120      !---------------------------------------------------- 
     121      ! Rebin categories with thickness out of bounds 
     122      !---------------------------------------------------- 
     123      IF ( jpl > 1 ) CALL lim_itd_th_reb( 1, jpl ) 
     124 
     125      !----------------- 
     126      ! zap small values 
     127      !----------------- 
     128      CALL lim_var_zapsmall 
    129129 
    130130      !------------------------------------------------------------------------------ 
     
    150150      v_ice(:,:) = v_ice(:,:) * vmask(:,:,1) 
    151151  
    152       ! for outputs 
    153       CALL lim_var_glo2eqv            ! equivalent variables (outputs) 
    154       CALL lim_var_agg(2)             ! aggregate ice thickness categories 
    155  
    156       ! conservation test 
    157       IF( ln_limdiahsb ) CALL lim_cons_hsm(0, 'limupdate2', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 
    158  
    159152      ! ------------------------------------------------- 
    160153      ! Diagnostics 
     
    165158      afx_tot = afx_thd + afx_dyn 
    166159 
    167       ! heat content variation (W.m-2) 
    168160      DO jj = 1, jpj 
    169161         DO ji = 1, jpi             
    170             diag_heat_dhc(ji,jj) = diag_heat_dhc(ji,jj) -  & 
    171                &                   ( SUM( e_i(ji,jj,1:nlay_i,:) - e_i_b(ji,jj,1:nlay_i,:) ) +  &  
    172                &                     SUM( e_s(ji,jj,1:nlay_s,:) - e_s_b(ji,jj,1:nlay_s,:) )    & 
    173                &                   ) * r1_rdtice    
    174          END DO 
    175       END DO 
     162            ! heat content variation (W.m-2) 
     163            diag_heat(ji,jj) = diag_heat(ji,jj) -  & 
     164               &               ( SUM( e_i(ji,jj,1:nlay_i,:) - e_i_b(ji,jj,1:nlay_i,:) ) +  &  
     165               &                 SUM( e_s(ji,jj,1:nlay_s,:) - e_s_b(ji,jj,1:nlay_s,:) )    & 
     166               &               ) * r1_rdtice    
     167            ! salt, volume 
     168            diag_smvi(ji,jj) = diag_smvi(ji,jj) + SUM( smv_i(ji,jj,:) - smv_i_b(ji,jj,:) ) * rhoic * r1_rdtice 
     169            diag_vice(ji,jj) = diag_vice(ji,jj) + SUM( v_i  (ji,jj,:) - v_i_b  (ji,jj,:) ) * rhoic * r1_rdtice 
     170            diag_vsnw(ji,jj) = diag_vsnw(ji,jj) + SUM( v_s  (ji,jj,:) - v_s_b  (ji,jj,:) ) * rhosn * r1_rdtice 
     171         END DO 
     172      END DO 
     173 
     174      ! conservation test 
     175      IF( ln_limdiahsb ) CALL lim_cons_hsm(1, 'limupdate2', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 
     176 
     177      ! for outputs 
     178      CALL lim_var_glo2eqv 
     179      CALL lim_var_agg(2) 
    176180 
    177181      ! ------------------------------------------------- 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90

    r5134 r5167  
    124124               DO ji = 1, jpi 
    125125                  et_s(ji,jj)  = et_s(ji,jj)  + e_s(ji,jj,1,jl)                                           ! snow heat content 
    126                   rswitch = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi10 ) )  
    127                   smt_i(ji,jj) = smt_i(ji,jj) + smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , epsi10 ) * rswitch   ! ice salinity 
    128                   rswitch = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi10 ) )  
    129                   ot_i(ji,jj)  = ot_i(ji,jj)  + oa_i(ji,jj,jl)  / MAX( at_i(ji,jj) , epsi10 ) * rswitch   ! ice age 
     126                  rswitch = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi20 ) )  
     127                  smt_i(ji,jj) = smt_i(ji,jj) + smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , epsi20 ) * rswitch   ! ice salinity 
     128                  rswitch = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi20 ) )  
     129                  ot_i(ji,jj)  = ot_i(ji,jj)  + oa_i(ji,jj,jl)  / MAX( at_i(ji,jj) , epsi20 ) * rswitch   ! ice age 
    130130               END DO 
    131131            END DO 
     
    161161         DO jj = 1, jpj 
    162162            DO ji = 1, jpi 
    163                rswitch = MAX( 0._wp , SIGN( 1._wp, a_i(ji,jj,jl) - epsi10 ) )   !0 if no ice and 1 if yes 
    164                ht_i(ji,jj,jl) = v_i (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi10 ) * rswitch 
    165                ht_s(ji,jj,jl) = v_s (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi10 ) * rswitch 
    166                o_i(ji,jj,jl)  = oa_i(ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi10 ) * rswitch 
     163               rswitch = MAX( 0._wp , SIGN( 1._wp, a_i(ji,jj,jl) - epsi20 ) )   !0 if no ice and 1 if yes 
     164               ht_i(ji,jj,jl) = v_i (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi20 ) * rswitch 
     165               ht_s(ji,jj,jl) = v_s (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi20 ) * rswitch 
     166               o_i(ji,jj,jl)  = oa_i(ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi20 ) * rswitch 
    167167            END DO 
    168168         END DO 
     
    173173            DO jj = 1, jpj 
    174174               DO ji = 1, jpi 
    175                   rswitch = MAX( 0._wp , SIGN( 1._wp, v_i(ji,jj,jl) - epsi10 ) )   !0 if no ice and 1 if yes 
    176                   sm_i(ji,jj,jl) = smv_i(ji,jj,jl) / MAX( v_i(ji,jj,jl) , epsi10 ) * rswitch 
     175                  rswitch = MAX( 0._wp , SIGN( 1._wp, v_i(ji,jj,jl) - epsi20 ) )   !0 if no ice and 1 if yes 
     176                  sm_i(ji,jj,jl) = smv_i(ji,jj,jl) / MAX( v_i(ji,jj,jl) , epsi20 ) * rswitch 
    177177               END DO 
    178178            END DO 
     
    228228      ! Mean temperature 
    229229      !------------------- 
     230      vt_i (:,:) = 0._wp 
     231      DO jl = 1, jpl 
     232         vt_i(:,:) = vt_i(:,:) + v_i(:,:,jl) 
     233      END DO 
     234 
    230235      tm_i(:,:) = 0._wp 
    231236      DO jl = 1, jpl 
     
    233238            DO jj = 1, jpj 
    234239               DO ji = 1, jpi 
    235                   rswitch = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi10 ) ) 
    236                   tm_i(ji,jj) = tm_i(ji,jj) + rswitch * t_i(ji,jj,jk,jl) * v_i(ji,jj,jl)   & 
    237                      &                      / (  REAL(nlay_i,wp) * MAX( vt_i(ji,jj) , epsi10 )  ) 
     240                  rswitch = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi20 ) ) 
     241                  tm_i(ji,jj) = tm_i(ji,jj) + ( 1._wp - rswitch ) * rt0 +  & 
     242                     &                        rswitch * t_i(ji,jj,jk,jl) * v_i(ji,jj,jl)   & 
     243                     &                        / (  REAL(nlay_i,wp) * MAX( vt_i(ji,jj) , epsi20 )  ) 
    238244               END DO 
    239245            END DO 
     
    305311            DO jj = 1, jpj 
    306312               DO ji = 1, jpi 
    307                   z_slope_s(ji,jj,jl) = 2._wp * sm_i(ji,jj,jl) / MAX( epsi10 , ht_i(ji,jj,jl) ) 
     313                  rswitch = MAX( 0._wp , SIGN( 1._wp , ht_i(ji,jj,jl) - epsi20 ) ) 
     314                  z_slope_s(ji,jj,jl) = rswitch * 2._wp * sm_i(ji,jj,jl) / MAX( epsi20 , ht_i(ji,jj,jl) ) 
    308315               END DO 
    309316            END DO 
     
    379386 
    380387      ! Mean sea ice temperature 
     388      vt_i (:,:) = 0._wp 
     389      DO jl = 1, jpl 
     390         vt_i(:,:) = vt_i(:,:) + v_i(:,:,jl) 
     391      END DO 
     392 
    381393      tm_i(:,:) = 0._wp 
    382394      DO jl = 1, jpl 
     
    384396            DO jj = 1, jpj 
    385397               DO ji = 1, jpi 
    386                   rswitch = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi10 ) ) 
     398                  rswitch = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi06 ) ) 
    387399                  tm_i(ji,jj) = tm_i(ji,jj) + rswitch * t_i(ji,jj,jk,jl) * v_i(ji,jj,jl)   & 
    388                      &                      * r1_nlay_i / MAX( vt_i(ji,jj) , epsi10 ) 
     400                     &                      * r1_nlay_i / MAX( vt_i(ji,jj) , epsi06 ) 
    389401               END DO 
    390402            END DO 
     
    409421      !!------------------------------------------------------------------ 
    410422      ! 
     423      vt_i (:,:) = 0._wp 
     424      DO jl = 1, jpl 
     425         vt_i(:,:) = vt_i(:,:) + v_i(:,:,jl) 
     426      END DO 
     427 
    411428      bv_i(:,:) = 0._wp 
    412429      DO jl = 1, jpl 
     
    417434                  zbvi  = - rswitch * tmut * s_i(ji,jj,jk,jl) / MIN( t_i(ji,jj,jk,jl) - rt0, - epsi10 )   & 
    418435                     &                   * v_i(ji,jj,jl) * r1_nlay_i 
    419                   rswitch = (  1._wp - MAX( 0._wp , SIGN( 1._wp , - vt_i(ji,jj) + epsi10 ) )  ) 
    420                   bv_i(ji,jj) = bv_i(ji,jj) + rswitch * zbvi  / MAX( vt_i(ji,jj) , epsi10 ) 
     436                  rswitch = (  1._wp - MAX( 0._wp , SIGN( 1._wp , - vt_i(ji,jj) + epsi20 ) )  ) 
     437                  bv_i(ji,jj) = bv_i(ji,jj) + rswitch * zbvi  / MAX( vt_i(ji,jj) , epsi20 ) 
    421438               END DO 
    422439            END DO 
     
    460477         ! 
    461478         DO ji = kideb, kiut          ! Slope of the linear profile zs_zero 
    462             z_slope_s(ji) = 2._wp * sm_i_1d(ji) / MAX( epsi10 , ht_i_1d(ji) ) 
     479            rswitch = MAX( 0._wp , SIGN( 1._wp , ht_i_1d(ji) - epsi20 ) ) 
     480            z_slope_s(ji) = rswitch * 2._wp * sm_i_1d(ji) / MAX( epsi20 , ht_i_1d(ji) ) 
    463481         END DO 
    464482 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90

    r5123 r5167  
    232232      CALL iom_put ('hfxopw'     , hfx_opw(:,:)         )   !   
    233233      CALL iom_put ('hfxtur'     , fhtur(:,:) * at_i(:,:) ) ! turbulent heat flux at ice base  
    234       CALL iom_put ('hfxdhc'     , diag_heat_dhc(:,:)   )   ! Heat content variation in snow and ice  
     234      CALL iom_put ('hfxdhc'     , diag_heat(:,:)       )   ! Heat content variation in snow and ice  
    235235      CALL iom_put ('hfxspr'     , hfx_spr(:,:)         )   ! Heat content of snow precip  
    236236       
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/thd_ice.F90

    r5146 r5167  
    2020   !                               !!! ** ice-thermo namelist (namicethd) ** 
    2121   REAL(wp), PUBLIC ::   rn_himin    !: minimum ice thickness 
    22    REAL(wp), PUBLIC ::   parsub      !: switch for snow sublimation or not 
    2322   REAL(wp), PUBLIC ::   rn_maxfrazb !: maximum portion of frazil ice collecting at the ice bottom 
    2423   REAL(wp), PUBLIC ::   rn_vfrazb   !: threshold drift speed for collection of bottom frazil ice 
     
    140139      !!---------------------------------------------------------------------! 
    141140 
    142       ALLOCATE( npb      (jpij) , nplm        (jpij) , npac     (jpij),   & 
    143          !                                                                  ! 
    144          &      qlead_1d (jpij) , ftr_ice_1d  (jpij) ,     & 
    145          &      qsr_ice_1d (jpij) ,     & 
    146          &      fr1_i0_1d(jpij) , fr2_i0_1d(jpij) , qns_ice_1d(jpij) ,     & 
     141      ALLOCATE( npb      (jpij) , nplm      (jpij) , npac       (jpij) ,   & 
     142         &      qlead_1d (jpij) , ftr_ice_1d(jpij) , qsr_ice_1d (jpij) ,   & 
     143         &      fr1_i0_1d(jpij) , fr2_i0_1d (jpij) , qns_ice_1d(jpij)  ,   & 
    147144         &      t_bo_1d   (jpij) ,                                         & 
    148145         &      hfx_sum_1d(jpij) , hfx_bom_1d(jpij) ,hfx_bog_1d(jpij) ,    &  
     
    152149         &      hfx_res_1d(jpij) , hfx_err_rem_1d(jpij) , hfx_err_dif_1d(jpij) , STAT=ierr(1) ) 
    153150      ! 
    154       ALLOCATE( sprecip_1d (jpij) , frld_1d    (jpij) , at_i_1d     (jpij) ,     & 
    155          &      fhtur_1d   (jpij) , wfx_snw_1d (jpij) , wfx_spr_1d (jpij) ,     & 
    156          &      fhld_1d    (jpij) , wfx_sub_1d (jpij) , wfx_bog_1d(jpij) , wfx_bom_1d(jpij) , & 
    157          &      wfx_sum_1d(jpij)  , wfx_sni_1d (jpij) , wfx_opw_1d (jpij) ,  wfx_res_1d (jpij) ,  & 
    158          &      dqns_ice_1d(jpij) , qla_ice_1d (jpij) , dqla_ice_1d(jpij) ,     & 
    159          &      tatm_ice_1d(jpij) ,      &    
    160          &      i0         (jpij) ,     &   
    161          &      sfx_bri_1d (jpij) , sfx_bog_1d (jpij) , sfx_bom_1d (jpij) ,sfx_sum_1d (jpij) ,   & 
    162          &      sfx_sni_1d (jpij) , sfx_opw_1d (jpij) , sfx_res_1d (jpij) , & 
    163          &      dsm_i_fl_1d(jpij) , dsm_i_gd_1d(jpij) , dsm_i_se_1d(jpij) ,     &      
     151      ALLOCATE( sprecip_1d (jpij) , frld_1d    (jpij) , at_i_1d    (jpij) ,                     & 
     152         &      fhtur_1d   (jpij) , wfx_snw_1d (jpij) , wfx_spr_1d (jpij) ,                     & 
     153         &      fhld_1d    (jpij) , wfx_sub_1d (jpij) , wfx_bog_1d (jpij) , wfx_bom_1d(jpij) ,  & 
     154         &      wfx_sum_1d(jpij)  , wfx_sni_1d (jpij) , wfx_opw_1d (jpij) , wfx_res_1d(jpij) ,  & 
     155         &      dqns_ice_1d(jpij) , qla_ice_1d (jpij) , dqla_ice_1d(jpij) ,                     & 
     156         &      tatm_ice_1d(jpij) , i0         (jpij) ,                                         &   
     157         &      sfx_bri_1d (jpij) , sfx_bog_1d (jpij) , sfx_bom_1d (jpij) , sfx_sum_1d (jpij),  & 
     158         &      sfx_sni_1d (jpij) , sfx_opw_1d (jpij) , sfx_res_1d (jpij) ,                     & 
     159         &      dsm_i_fl_1d(jpij) , dsm_i_gd_1d(jpij) , dsm_i_se_1d(jpij) ,                     &      
    164160         &      dsm_i_si_1d(jpij) , hicol_1d    (jpij)                     , STAT=ierr(2) ) 
    165161      ! 
    166       ALLOCATE( t_su_1d    (jpij) , a_i_1d    (jpij) , ht_i_1d   (jpij) ,    &    
    167          &      ht_s_1d    (jpij) , fc_su    (jpij) , fc_bo_i  (jpij) ,    &     
     162      ALLOCATE( t_su_1d   (jpij) , a_i_1d   (jpij) , ht_i_1d  (jpij) ,    &    
     163         &      ht_s_1d   (jpij) , fc_su    (jpij) , fc_bo_i  (jpij) ,    &     
    168164         &      dh_s_tot  (jpij) , dh_i_surf(jpij) , dh_i_bott(jpij) ,    &     
    169          &      dh_snowice(jpij) ,  & 
    170          &      sm_i_1d   (jpij) , s_i_new  (jpij) ,    & 
    171          &      t_s_1d(jpij,nlay_s),                                       & 
    172          &      t_i_1d(jpij,nlay_i+1), s_i_1d(jpij,nlay_i+1)                ,     &             
    173          &      q_i_1d(jpij,nlay_i+1), q_s_1d(jpij,nlay_i+1)                ,     & 
     165         &      dh_snowice(jpij) , sm_i_1d  (jpij) , s_i_new  (jpij) ,    & 
     166         &      t_s_1d(jpij,nlay_s) , t_i_1d(jpij,nlay_i) , s_i_1d(jpij,nlay_i) ,  &             
     167         &      q_i_1d(jpij,nlay_i+1) , q_s_1d(jpij,nlay_s) ,                        & 
    174168         &      qh_i_old(jpij,0:nlay_i+1), h_i_old(jpij,0:nlay_i+1) , STAT=ierr(3)) 
    175169      ! 
  • trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdyice_lim.F90

    r5143 r5167  
    2828   USE ice             ! LIM_3 ice variables 
    2929   USE dom_ice         ! sea-ice domain 
     30   USE limvar 
    3031#endif  
    3132   USE par_oce         ! ocean parameters 
     
    6162      INTEGER               :: ib_bdy ! Loop index 
    6263 
     64#if defined key_lim3 
     65      CALL lim_var_glo2eqv 
     66#endif 
     67 
    6368      DO ib_bdy=1, nb_bdy 
    6469 
     
    7378 
    7479      END DO 
     80 
     81#if defined key_lim3 
     82      CALL lim_var_zapsmall 
     83      CALL lim_var_agg(1) 
     84#endif 
    7585 
    7686   END SUBROUTINE bdy_ice_lim 
  • trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90

    r5146 r5167  
    184184         numit = numit + nn_fsbc                     ! Ice model time step 
    185185         !                                                    
    186          CALL sbc_lim_update                ! Store previous ice values 
     186         CALL sbc_lim_bef                   ! Store previous ice values 
    187187 
    188188         CALL sbc_lim_diag0                 ! set diag of mass, heat and salt fluxes to 0 
     
    202202 
    203203#if defined key_bdy 
    204             CALL lim_var_glo2eqv 
    205204            CALL bdy_ice_lim( kt )         ! bdy ice thermo  
    206             CALL lim_var_zapsmall 
    207             CALL lim_var_agg(1) 
    208205            IF( ln_icectl )   CALL lim_prt( kt, iiceprt, jiceprt, 1, ' - ice thermo bdy - ' ) 
    209206#endif 
     
    212209         ENDIF 
    213210          
    214          CALL sbc_lim_update                ! Store previous ice values 
     211         CALL sbc_lim_bef                  ! Store previous ice values 
    215212  
    216213         ! ---------------------------------------------- 
    217214         ! ice thermodynamics 
    218215         ! ---------------------------------------------- 
    219          CALL lim_var_glo2eqv 
    220216         CALL lim_var_agg(1) 
    221217          
     
    248244         ! 
    249245         IF( lrst_ice )   CALL lim_rst_write( kt )  ! Ice restart file  
    250          CALL lim_var_glo2eqv                       ! ??? 
    251          ! 
    252          IF( ln_icectl )   CALL lim_ctl( kt )        ! alerts in case of model crash 
     246         ! 
     247         IF( ln_icectl )  CALL lim_ctl( kt )        ! alerts in case of model crash 
    253248         ! 
    254249         CALL wrk_dealloc( jpi,jpj,jpl, zalb_os, zalb_cs, zalb_ice ) 
     
    389384      r1_nlay_s = 1._wp / REAL( nlay_s, wp ) 
    390385      ! 
     386#if defined key_bdy 
     387      IF( lwp .AND. ln_limdiahsb )  CALL ctl_warn('online conservation check activated but it does not work with BDY') 
     388#endif 
     389      ! 
    391390   END SUBROUTINE ice_run 
    392391 
     
    555554   END SUBROUTINE ice_lim_flx 
    556555 
    557    SUBROUTINE sbc_lim_update 
    558       !!---------------------------------------------------------------------- 
    559       !!                  ***  ROUTINE sbc_lim_update  *** 
     556   SUBROUTINE sbc_lim_bef 
     557      !!---------------------------------------------------------------------- 
     558      !!                  ***  ROUTINE sbc_lim_bef  *** 
    560559      !! 
    561560      !! ** purpose :  store ice variables at "before" time step  
     
    571570      v_ice_b(:,:)     = v_ice(:,:) 
    572571       
    573    END SUBROUTINE sbc_lim_update 
     572   END SUBROUTINE sbc_lim_bef 
    574573 
    575574   SUBROUTINE sbc_lim_diag0 
     
    602601      hfx_spr(:,:) = 0._wp   ;   hfx_dif(:,:) = 0._wp  
    603602      hfx_err(:,:) = 0._wp   ;   hfx_err_rem(:,:) = 0._wp 
    604       hfx_err_dif(:,:) = 0._wp 
     603      hfx_err_dif(:,:) = 0._wp   ; 
    605604 
    606605      afx_tot(:,:) = 0._wp   ; 
    607606      afx_dyn(:,:) = 0._wp   ;   afx_thd(:,:) = 0._wp 
    608607 
    609       diag_heat_dhc(:,:) = 0._wp ; 
     608      diag_heat(:,:) = 0._wp ;   diag_smvi(:,:) = 0._wp ; 
     609      diag_vice(:,:) = 0._wp ;   diag_vsnw(:,:) = 0._wp ; 
    610610       
    611611   END SUBROUTINE sbc_lim_diag0 
     
    636636 
    637637      fice_ice_ave (:,:) = 0.0_wp 
    638       WHERE ( at_i (:,:) .GT. 0.0_wp ) fice_ice_ave (:,:) = fice_cell_ave ( ptab (:,:,:)) / at_i (:,:) 
     638      WHERE ( at_i (:,:) > 0.0_wp ) fice_ice_ave (:,:) = fice_cell_ave ( ptab (:,:,:)) / at_i (:,:) 
    639639 
    640640   END FUNCTION fice_ice_ave 
Note: See TracChangeset for help on using the changeset viewer.