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 4649 for branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90 – NEMO

Ignore:
Timestamp:
2014-05-27T11:28:12+02:00 (10 years ago)
Author:
clem
Message:

finalizing LIM3 heat budget conservation + multiple minor bugs corrections

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90

    r4634 r4649  
    3030   USE wrk_nemo       ! work arrays 
    3131   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
     32   USE limthd_ent 
    3233 
    3334   IMPLICIT NONE 
     
    8586      REAL(wp) ::   zEw          ! seawater specific enthalpy (J/kg) 
    8687      REAL(wp) ::   zfmdt        ! mass flux x time step (kg/m2, >0 towards ocean) 
    87         
    88       INTEGER , POINTER, DIMENSION(:) ::   zcatac      ! indexes of categories where new ice grows 
     88      
     89      REAL(wp) ::   zv_newfra 
     90   
     91      INTEGER , POINTER, DIMENSION(:) ::   jcat      ! indexes of categories where new ice grows 
    8992      REAL(wp), POINTER, DIMENSION(:) ::   zswinew     ! switch for new ice or not 
    9093 
     
    97100      REAL(wp), POINTER, DIMENSION(:) ::   zdv_res     ! residual volume in case of excessive heat budget 
    98101      REAL(wp), POINTER, DIMENSION(:) ::   zda_res     ! residual area in case of excessive heat budget 
    99       REAL(wp), POINTER, DIMENSION(:) ::   zat_i_ac    ! total ice fraction     
     102      REAL(wp), POINTER, DIMENSION(:) ::   zat_i_1d    ! total ice fraction     
    100103      REAL(wp), POINTER, DIMENSION(:) ::   zat_i_lev   ! total ice fraction for level ice only (type 1)    
    101104      REAL(wp), POINTER, DIMENSION(:) ::   zv_frazb   ! accretion of frazil ice at the ice bottom 
    102       REAL(wp), POINTER, DIMENSION(:) ::   zvrel_ac    ! relative ice / frazil velocity (1D vector) 
     105      REAL(wp), POINTER, DIMENSION(:) ::   zvrel_1d    ! relative ice / frazil velocity (1D vector) 
    103106 
    104107      REAL(wp), POINTER, DIMENSION(:,:) ::   zv_old      ! old volume of ice in category jl 
    105108      REAL(wp), POINTER, DIMENSION(:,:) ::   za_old      ! old area of ice in category jl 
    106       REAL(wp), POINTER, DIMENSION(:,:) ::   za_i_ac     ! 1-D version of a_i 
    107       REAL(wp), POINTER, DIMENSION(:,:) ::   zv_i_ac     ! 1-D version of v_i 
    108       REAL(wp), POINTER, DIMENSION(:,:) ::   zoa_i_ac    ! 1-D version of oa_i 
    109       REAL(wp), POINTER, DIMENSION(:,:) ::   zsmv_i_ac   ! 1-D version of smv_i 
    110  
    111       REAL(wp), POINTER, DIMENSION(:,:,:) ::   ze_i_ac   !: 1-D version of e_i 
    112  
    113       REAL(wp), POINTER, DIMENSION(:,:,:) ::   zqm0      ! old layer-system heat content 
    114       REAL(wp), POINTER, DIMENSION(:,:,:) ::   zthick0   ! old ice thickness 
    115  
    116       REAL(wp), POINTER, DIMENSION(:,:) ::   vt_i_init, vt_i_final   ! ice volume summed over categories 
    117       REAL(wp), POINTER, DIMENSION(:,:) ::   vt_s_init, vt_s_final   !  snow volume summed over categories 
    118       REAL(wp), POINTER, DIMENSION(:,:) ::   et_i_init, et_i_final   !  ice energy summed over categories 
    119       REAL(wp), POINTER, DIMENSION(:,:) ::   et_s_init               !  snow energy summed over categories 
     109      REAL(wp), POINTER, DIMENSION(:,:) ::   za_i_1d     ! 1-D version of a_i 
     110      REAL(wp), POINTER, DIMENSION(:,:) ::   zv_i_1d     ! 1-D version of v_i 
     111      REAL(wp), POINTER, DIMENSION(:,:) ::   zoa_i_1d    ! 1-D version of oa_i 
     112      REAL(wp), POINTER, DIMENSION(:,:) ::   zsmv_i_1d   ! 1-D version of smv_i 
     113 
     114      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ze_i_1d   !: 1-D version of e_i 
     115 
    120116      REAL(wp), POINTER, DIMENSION(:,:) ::   zvrel                   ! relative ice / frazil velocity 
    121117      !!-----------------------------------------------------------------------! 
    122118 
    123       CALL wrk_alloc( jpij, zcatac )   ! integer 
     119      CALL wrk_alloc( jpij, jcat )   ! integer 
    124120      CALL wrk_alloc( jpij, zswinew, zv_newice, za_newice, zh_newice, ze_newice, zs_newice, zo_newice ) 
    125       CALL wrk_alloc( jpij, zdv_res, zda_res, zat_i_ac, zat_i_lev, zv_frazb, zvrel_ac ) 
    126       CALL wrk_alloc( jpij,jpl, zv_old, za_old, za_i_ac, zv_i_ac, zoa_i_ac, zsmv_i_ac ) 
    127       CALL wrk_alloc( jpij,jkmax,jpl, ze_i_ac ) 
    128       CALL wrk_alloc( jpij,jkmax+1,jpl, zqm0, zthick0 ) 
    129       CALL wrk_alloc( jpi,jpj, vt_i_init, vt_i_final, vt_s_init, vt_s_final, et_i_init, et_i_final, et_s_init, zvrel ) 
    130  
    131       et_i_init(:,:) = 0._wp 
    132       et_s_init(:,:) = 0._wp 
    133       vt_i_init(:,:) = 0._wp 
    134       vt_s_init(:,:) = 0._wp 
    135  
    136       !------------------------------------------------------------------------------! 
    137       ! 1) Conservation check and changes in each ice category 
    138       !------------------------------------------------------------------------------! 
    139       IF( con_i ) THEN 
    140          CALL lim_column_sum        ( jpl, v_i          , vt_i_init) 
    141          CALL lim_column_sum        ( jpl, v_s          , vt_s_init) 
    142          CALL lim_column_sum_energy ( jpl, nlay_i , e_i , et_i_init) 
    143          CALL lim_column_sum        ( jpl, e_s(:,:,1,:) , et_s_init) 
    144       ENDIF 
     121      CALL wrk_alloc( jpij, zdv_res, zda_res, zat_i_1d, zat_i_lev, zv_frazb, zvrel_1d ) 
     122      CALL wrk_alloc( jpij,jpl, zv_old, za_old, za_i_1d, zv_i_1d, zoa_i_1d, zsmv_i_1d ) 
     123      CALL wrk_alloc( jpij,jkmax,jpl, ze_i_1d ) 
     124      CALL wrk_alloc( jpi,jpj, zvrel ) 
    145125 
    146126      !------------------------------------------------------------------------------| 
     
    204184                     &          +   vtau_ice(ji  ,jj  ) * tmv(ji  ,jj  ) ) * 0.5_wp 
    205185                  ! Square root of wind stress 
    206                   ztenagm       =  SQRT( SQRT( ztaux * ztaux + ztauy * ztauy ) ) 
     186                  ztenagm       =  SQRT( SQRT( ztaux**2 + ztauy**2 ) ) 
    207187 
    208188                  !--------------------- 
    209189                  ! Frazil ice velocity 
    210190                  !--------------------- 
    211                   zvfrx         = zgamafr * zsqcd * ztaux / MAX(ztenagm,epsi10) 
    212                   zvfry         = zgamafr * zsqcd * ztauy / MAX(ztenagm,epsi10) 
     191                  zindb = MAX( 0._wp, SIGN( 1._wp , ztenagm - epsi10 ) ) 
     192                  zvfrx = zindb * zgamafr * zsqcd * ztaux / MAX( ztenagm, epsi10 ) 
     193                  zvfry = zindb * zgamafr * zsqcd * ztauy / MAX( ztenagm, epsi10 ) 
    213194 
    214195                  !------------------- 
     
    305286      IF ( nbpac > 0 ) THEN 
    306287 
    307          CALL tab_2d_1d( nbpac, zat_i_ac  (1:nbpac)     , at_i         , jpi, jpj, npac(1:nbpac) ) 
     288         CALL tab_2d_1d( nbpac, zat_i_1d  (1:nbpac)     , at_i         , jpi, jpj, npac(1:nbpac) ) 
    308289         DO jl = 1, jpl 
    309             CALL tab_2d_1d( nbpac, za_i_ac  (1:nbpac,jl), a_i  (:,:,jl), jpi, jpj, npac(1:nbpac) ) 
    310             CALL tab_2d_1d( nbpac, zv_i_ac  (1:nbpac,jl), v_i  (:,:,jl), jpi, jpj, npac(1:nbpac) ) 
    311             CALL tab_2d_1d( nbpac, zoa_i_ac (1:nbpac,jl), oa_i (:,:,jl), jpi, jpj, npac(1:nbpac) ) 
    312             CALL tab_2d_1d( nbpac, zsmv_i_ac(1:nbpac,jl), smv_i(:,:,jl), jpi, jpj, npac(1:nbpac) ) 
     290            CALL tab_2d_1d( nbpac, za_i_1d  (1:nbpac,jl), a_i  (:,:,jl), jpi, jpj, npac(1:nbpac) ) 
     291            CALL tab_2d_1d( nbpac, zv_i_1d  (1:nbpac,jl), v_i  (:,:,jl), jpi, jpj, npac(1:nbpac) ) 
     292            CALL tab_2d_1d( nbpac, zoa_i_1d (1:nbpac,jl), oa_i (:,:,jl), jpi, jpj, npac(1:nbpac) ) 
     293            CALL tab_2d_1d( nbpac, zsmv_i_1d(1:nbpac,jl), smv_i(:,:,jl), jpi, jpj, npac(1:nbpac) ) 
    313294            DO jk = 1, nlay_i 
    314                CALL tab_2d_1d( nbpac, ze_i_ac(1:nbpac,jk,jl), e_i(:,:,jk,jl) , jpi, jpj, npac(1:nbpac) ) 
     295               CALL tab_2d_1d( nbpac, ze_i_1d(1:nbpac,jk,jl), e_i(:,:,jk,jl) , jpi, jpj, npac(1:nbpac) ) 
    315296            END DO ! jk 
    316297         END DO ! jl 
     
    322303         CALL tab_2d_1d( nbpac, wfx_opw_1d(1:nbpac)     , wfx_opw, jpi, jpj, npac(1:nbpac) ) 
    323304         CALL tab_2d_1d( nbpac, hicol_b   (1:nbpac)     , hicol  , jpi, jpj, npac(1:nbpac) ) 
    324          CALL tab_2d_1d( nbpac, zvrel_ac  (1:nbpac)     , zvrel  , jpi, jpj, npac(1:nbpac) ) 
     305         CALL tab_2d_1d( nbpac, zvrel_1d  (1:nbpac)     , zvrel  , jpi, jpj, npac(1:nbpac) ) 
    325306 
    326307         CALL tab_2d_1d( nbpac, hfx_thd_1d(1:nbpac)     , hfx_thd, jpi, jpj, npac(1:nbpac) ) 
    327          CALL tab_2d_1d( nbpac, hfx_tot_1d(1:nbpac)     , hfx_tot, jpi, jpj, npac(1:nbpac) ) 
     308         CALL tab_2d_1d( nbpac, hfx_opw_1d(1:nbpac)     , hfx_opw, jpi, jpj, npac(1:nbpac) ) 
    328309 
    329310         !------------------------------------------------------------------------------! 
     
    334315         ! Keep old ice areas and volume in memory 
    335316         !----------------------------------------- 
    336          zv_old(:,:) = zv_i_ac(:,:)  
    337          za_old(:,:) = za_i_ac(:,:) 
     317         zv_old(:,:) = zv_i_1d(:,:)  
     318         za_old(:,:) = za_i_1d(:,:) 
    338319 
    339320         !---------------------- 
     
    343324            zh_newice(ji) = hiccrit(1) 
    344325         END DO 
    345          IF( fraz_swi == 1.0 )   zh_newice(:) = hicol_b(:) 
     326         IF( fraz_swi == 1.0 ) zh_newice(:) = hicol_b(:) 
    346327 
    347328         !---------------------- 
     
    370351            ztmelts       = - tmut * zs_newice(ji) + rtt                  ! Melting point (K) 
    371352            ze_newice(ji) =   rhoic * (  cpic * ( ztmelts - t_bo_b(ji) )                             & 
    372                &                       + lfus * ( 1.0 - ( ztmelts - rtt ) / ( t_bo_b(ji) - rtt ) )   & 
     353               &                       + lfus * ( 1.0 - ( ztmelts - rtt ) / MIN( t_bo_b(ji) - rtt, -epsi10 ) )   & 
    373354               &                       - rcp  *         ( ztmelts - rtt )  ) 
    374             ! MV HC 2014 comment I dont see why this line below is here... ? 
    375             ! This implies that ze_newice gets to rhoic*Lfus if it was negative, but this should never happen 
    376             ze_newice(ji) =   MAX( ze_newice(ji) , 0._wp )    & 
    377                &          +   MAX(  0.0 , SIGN( 1.0 , - ze_newice(ji) )  ) * rhoic * lfus 
    378355         END DO ! ji 
    379356         !---------------- 
     
    405382            hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * zEw * r1_rdtice 
    406383            ! Total heat flux used in this process [W.m-2]   
    407             hfx_tot_1d(ji) = hfx_tot_1d(ji) - zfmdt * zdE * r1_rdtice 
     384            hfx_opw_1d(ji) = hfx_opw_1d(ji) - zfmdt * zdE * r1_rdtice 
    408385            ! mass flux 
    409             wfx_opw_1d(ji) = wfx_opw_1d(ji) + zv_newice(ji) * rhoic * r1_rdtice 
     386            wfx_opw_1d(ji) = wfx_opw_1d(ji) - zv_newice(ji) * rhoic * r1_rdtice 
    410387            ! salt flux 
    411388            sfx_opw_1d(ji) = sfx_opw_1d(ji) - zv_newice(ji) * rhoic * zs_newice(ji) * r1_rdtice 
    412389 
    413390            ! A fraction zfrazb of frazil ice is accreted at the ice bottom 
    414             zfrazb        = ( TANH ( Cfrazb * ( zvrel_ac(ji) - vfrazb ) ) + 1.0 ) * 0.5 * maxfrazb 
     391            zinda         = 1._wp - MAX( 0._wp, SIGN( 1._wp , - zat_i_1d(ji) ) ) 
     392            zfrazb        = zinda * ( TANH ( Cfrazb * ( zvrel_1d(ji) - vfrazb ) ) + 1.0 ) * 0.5 * maxfrazb 
    415393            zv_frazb(ji)  =         zfrazb   * zv_newice(ji) 
    416394            zv_newice(ji) = ( 1.0 - zfrazb ) * zv_newice(ji) 
    417395         END DO 
    418396 
    419          !------------------------------------ 
    420          ! Diags for energy conservation test 
    421          !------------------------------------ 
    422          DO ji = 1, nbpac 
    423             ii = MOD( npac(ji) - 1 , jpi ) + 1 
    424             ij =    ( npac(ji) - 1 ) / jpi + 1 
    425             ! 
    426             zde = ze_newice(ji) / unit_fac * area(ii,ij) * zv_newice(ji) 
    427             !zde = ze_newice(ji) * area(ii,ij) * zv_newice(ji) 
    428             ! 
    429             ! clem: change that? 
    430             vt_i_init(ii,ij) = vt_i_init(ii,ij) + zv_newice(ji)             ! volume 
    431             et_i_init(ii,ij) = et_i_init(ii,ij) + zde                       ! Energy 
    432  
    433          END DO 
    434397 
    435398         !----------------- 
     
    438401         DO ji = 1, nbpac 
    439402            za_newice(ji) = zv_newice(ji) / zh_newice(ji) 
    440          END DO !ji 
     403         END DO 
    441404 
    442405         !------------------------------------------------------------------------------! 
     
    450413         ! we keep the excessive volume in memory and attribute it later to bottom accretion 
    451414         DO ji = 1, nbpac 
    452             IF ( za_newice(ji) >  ( amax - zat_i_ac(ji) ) ) THEN 
    453                zda_res(ji)   = za_newice(ji) - ( amax - zat_i_ac(ji) ) 
     415            IF ( za_newice(ji) >  ( amax - zat_i_1d(ji) ) ) THEN 
     416               zda_res(ji)   = za_newice(ji) - ( amax - zat_i_1d(ji) ) 
    454417               zdv_res(ji)   = zda_res  (ji) * zh_newice(ji)  
    455418               za_newice(ji) = za_newice(ji) - zda_res  (ji) 
     
    464427         ! Laterally redistribute new ice volume and area 
    465428         !------------------------------------------------ 
    466          zat_i_ac(:) = 0._wp 
     429         zat_i_1d(:) = 0._wp 
    467430         DO jl = 1, jpl 
    468431            DO ji = 1, nbpac 
    469                IF(  hi_max   (jl-1)  <   zh_newice(ji)   .AND.   & 
    470                   & zh_newice(ji)    <=  hi_max   (jl)         ) THEN 
    471                   za_i_ac (ji,jl) = za_i_ac (ji,jl) + za_newice(ji) 
    472                   zv_i_ac (ji,jl) = zv_i_ac (ji,jl) + zv_newice(ji) 
    473                   zcatac  (ji)    = jl 
     432               IF( zh_newice(ji) > hi_max(jl-1) .AND. zh_newice(ji) <= hi_max(jl) ) THEN 
     433                  za_i_1d (ji,jl) = za_i_1d (ji,jl) + za_newice(ji) 
     434                  zv_i_1d (ji,jl) = zv_i_1d (ji,jl) + zv_newice(ji) 
     435                  jcat  (ji)    = jl 
    474436               ENDIF 
    475                zat_i_ac(ji)    = zat_i_ac(ji)    + za_i_ac  (ji,jl) 
     437               zat_i_1d(ji) = zat_i_1d(ji) + za_i_1d  (ji,jl) 
    476438            END DO 
    477439         END DO 
     
    481443         !---------------------------------- 
    482444         DO ji = 1, nbpac 
    483             jl = zcatac(ji)                                                           ! categroy in which new ice is put 
    484             zswinew  (ji) = MAX( 0._wp , SIGN( 1._wp , - za_old(ji,jl) + epsi10 ) )   ! 0 if old ice 
     445            jl = jcat(ji)                                                  ! categroy in which new ice is put 
     446            zswinew  (ji) = MAX( 0._wp , SIGN( 1._wp , - za_old(ji,jl) ) )   ! 0 if old ice 
    485447         END DO 
    486448 
    487449         DO jk = 1, nlay_i 
    488450            DO ji = 1, nbpac 
    489                jl = zcatac(ji) 
    490                ze_i_ac(ji,jk,jl) = zswinew(ji)   *   ze_newice(ji)                & 
    491                   &      + ( 1.0 - zswinew(ji) ) * ( ze_newice(ji) * zv_newice(ji) + ze_i_ac(ji,jk,jl) * zv_old(ji,jl) ) / zv_i_ac(ji,jl) 
     451               jl = jcat(ji) 
     452               zinda = MAX( 0._wp, SIGN( 1._wp , zv_i_1d(ji,jl) - epsi20 ) ) 
     453               ze_i_1d(ji,jk,jl) = zswinew(ji)   *   ze_newice(ji) +                                                      & 
     454                  &        ( 1.0 - zswinew(ji) ) * ( ze_newice(ji) * zv_newice(ji) + ze_i_1d(ji,jk,jl) * zv_old(ji,jl) )  & 
     455                  &        * zinda / MAX( zv_i_1d(ji,jl), epsi20 ) 
    492456            END DO 
    493457         END DO 
     
    496460         ! Add excessive volume of new ice at the bottom 
    497461         !----------------------------------------------- 
    498          jm = 1 
    499  
    500          ! ---  Redistributing energy on the new grid (energy is equally distributed in every layer) --- ! 
    501 !         DO jl = ice_cat_bounds(jm,1), ice_cat_bounds(jm,2) 
    502 !            DO jk = 1, nlay_i 
    503 !               DO ji = 1, nbpac 
    504 !                  ze_i_ac(ji,jk,jl) = ( ze_i_ac(ji,jk,jl) * zv_i_ac(ji,jl) + ze_newice(ji) * ( zdv_res(ji) + zv_frazb(ji) ) ) / & 
    505 !                     &                ( zv_i_ac(ji,jl) + ( zdv_res(ji) + zv_frazb(ji) ) )  
    506 !               END DO 
    507 !            END DO 
    508 !         END DO 
    509  
    510          ! --- Redistributing energy on the new grid (energy is sent to the bottom) PART 1 --- ! 
    511          DO jl = ice_cat_bounds(jm,1), ice_cat_bounds(jm,2) 
     462         DO jl = 1, jpl 
     463            h_i_old (1:nbpac,0:nlay_i+1) = 0._wp 
     464            qh_i_old(1:nbpac,0:nlay_i+1) = 0._wp 
     465 
    512466            DO jk = 1, nlay_i 
    513467               DO ji = 1, nbpac 
    514                   zthick0(ji,jk,jl) =  zv_i_ac(ji,jl) / REAL( nlay_i ) 
    515                   zqm0   (ji,jk,jl) =  ze_i_ac(ji,jk,jl) * zthick0(ji,jk,jl) 
     468                  h_i_old (ji,jk) = zv_i_1d(ji,jl) / REAL( nlay_i ) 
     469                  qh_i_old(ji,jk) = ze_i_1d(ji,jk,jl) * h_i_old(ji,jk) 
    516470               END DO 
    517471            END DO 
    518          END DO 
    519          DO jl = ice_cat_bounds(jm,1), ice_cat_bounds(jm,2) 
     472 
    520473            DO ji = 1, nbpac 
    521                zinda = MAX( 0._wp, SIGN( 1._wp , zat_i_ac(ji) - epsi10 ) ) 
    522                zthick0(ji,nlay_i+1,jl) =  zinda * ( zdv_res(ji) + zv_frazb(ji) ) * za_i_ac(ji,jl) / MAX( zat_i_ac(ji) , epsi10 ) 
    523                zqm0   (ji,nlay_i+1,jl) =  ze_newice(ji) * zthick0(ji,nlay_i+1,jl) 
    524             END DO ! ji 
    525          END DO ! jl 
    526  
    527          ze_i_ac(:,:,:) = 0._wp 
    528          DO jl = ice_cat_bounds(jm,1), ice_cat_bounds(jm,2) 
    529             DO jk = 1, nlay_i 
    530                DO layer = 1, nlay_i + 1 
    531                   DO ji = 1, nbpac 
    532                       zindb   =  1._wp -  MAX( 0._wp , SIGN( 1._wp , - zthick0(ji,layer,jl) + epsi10 ) )  
    533                       zweight = zindb * MAX( 0._wp,                                                                                              & 
    534                          &      MIN( zv_i_ac(ji,jl) * REAL( layer     ), ( zv_i_ac(ji,jl) +  zthick0(ji,nlay_i+1,jl) ) * REAL( jk     ) )     & 
    535                          &    - MAX( zv_i_ac(ji,jl) * REAL( layer - 1 ), ( zv_i_ac(ji,jl) +  zthick0(ji,nlay_i+1,jl) ) * REAL( jk - 1 ) ) )   & 
    536                          &  / ( REAL( nlay_i ) * MAX( zthick0(ji,layer,jl), epsi10 ) ) 
    537                       ze_i_ac(ji,jk,jl) = ze_i_ac(ji,jk,jl) + zweight * zqm0(ji,layer,jl)   
    538                   END DO  
    539                END DO  
    540             END DO  
    541          END DO 
    542  
    543          ! --- new volumes and layer thickness --- 
    544          DO jl = ice_cat_bounds(jm,1), ice_cat_bounds(jm,2) 
    545             DO ji = 1, nbpac 
    546                zinda = MAX( 0._wp, SIGN( 1._wp , zat_i_ac(ji) - epsi10 ) ) 
    547                zv_i_ac(ji,jl) = zv_i_ac(ji,jl) + zinda * ( zdv_res(ji) + zv_frazb(ji) ) * za_i_ac(ji,jl) / MAX( zat_i_ac(ji) , epsi10 ) 
    548             END DO 
    549          END DO 
    550  
    551          ! --- Redistributing energy on the new grid (energy is sent to the bottom) PART 2 --- ! 
    552          DO jl = ice_cat_bounds(jm,1), ice_cat_bounds(jm,2) 
    553             DO jk = 1, nlay_i 
    554                DO ji = 1, nbpac 
    555                   zindb =  1._wp -  MAX( 0._wp , SIGN( 1._wp , - zv_i_ac(ji,jl) + epsi10 ) )  
    556                   ze_i_ac(ji,jk,jl) = zindb * ze_i_ac(ji,jk,jl) / MAX( zv_i_ac(ji,jl), epsi10 ) * REAL( nlay_i ) 
    557                END DO 
    558             END DO 
    559          END DO 
    560  
     474               zinda          = MAX( 0._wp, SIGN( 1._wp , zat_i_1d(ji) - epsi20 ) ) 
     475               zv_newfra      = zinda * ( zdv_res(ji) + zv_frazb(ji) ) * za_i_1d(ji,jl) / MAX( zat_i_1d(ji) , epsi20 ) 
     476               za_i_1d(ji,jl) = zinda * za_i_1d(ji,jl)                
     477 
     478               h_i_old (ji,nlay_i+1) = zv_newfra 
     479               qh_i_old(ji,nlay_i+1) = ze_newice(ji) * zv_newfra 
     480 
     481               zv_i_1d(ji,jl) = zv_i_1d(ji,jl) + zv_newfra 
     482            ENDDO 
     483 
     484            ! --- Ice enthalpy remapping --- ! 
     485            CALL lim_thd_ent( 1, nbpac, jl, ze_i_1d(1:nbpac,:,jl) )  
     486 
     487         ENDDO 
    561488 
    562489         !------------ 
     
    565492         DO jl = 1, jpl 
    566493            DO ji = 1, nbpac 
    567                zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , - za_i_ac(ji,jl) + epsi10 ) )  ! 0 if no ice and 1 if yes 
    568                zoa_i_ac(ji,jl)  = za_old(ji,jl) * zoa_i_ac(ji,jl) / MAX( za_i_ac(ji,jl) , epsi10 ) * zindb    
     494               zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , - za_i_1d(ji,jl) + epsi20 ) )  ! 0 if no ice and 1 if yes 
     495               zoa_i_1d(ji,jl)  = za_old(ji,jl) * zoa_i_1d(ji,jl) / MAX( za_i_1d(ji,jl) , epsi20 ) * zindb    
    569496            END DO  
    570497         END DO    
     
    576503            DO jl = 1, jpl 
    577504               DO ji = 1, nbpac 
    578                   zdv   = zv_i_ac(ji,jl) - zv_old(ji,jl) 
    579                   zsmv_i_ac(ji,jl) = zsmv_i_ac(ji,jl) + zdv * zs_newice(ji) 
     505                  zdv   = zv_i_1d(ji,jl) - zv_old(ji,jl) 
     506                  zsmv_i_1d(ji,jl) = zsmv_i_1d(ji,jl) + zdv * zs_newice(ji) 
    580507               END DO 
    581508            END DO    
     
    586513         !------------------------------------------------------------------------------! 
    587514         DO jl = 1, jpl 
    588             CALL tab_1d_2d( nbpac, a_i (:,:,jl), npac(1:nbpac), za_i_ac (1:nbpac,jl), jpi, jpj ) 
    589             CALL tab_1d_2d( nbpac, v_i (:,:,jl), npac(1:nbpac), zv_i_ac (1:nbpac,jl), jpi, jpj ) 
    590             CALL tab_1d_2d( nbpac, oa_i(:,:,jl), npac(1:nbpac), zoa_i_ac(1:nbpac,jl), jpi, jpj ) 
    591             CALL tab_1d_2d( nbpac, smv_i (:,:,jl), npac(1:nbpac), zsmv_i_ac(1:nbpac,jl) , jpi, jpj ) 
     515            CALL tab_1d_2d( nbpac, a_i (:,:,jl), npac(1:nbpac), za_i_1d (1:nbpac,jl), jpi, jpj ) 
     516            CALL tab_1d_2d( nbpac, v_i (:,:,jl), npac(1:nbpac), zv_i_1d (1:nbpac,jl), jpi, jpj ) 
     517            CALL tab_1d_2d( nbpac, oa_i(:,:,jl), npac(1:nbpac), zoa_i_1d(1:nbpac,jl), jpi, jpj ) 
     518            CALL tab_1d_2d( nbpac, smv_i (:,:,jl), npac(1:nbpac), zsmv_i_1d(1:nbpac,jl) , jpi, jpj ) 
    592519            DO jk = 1, nlay_i 
    593                CALL tab_1d_2d( nbpac, e_i(:,:,jk,jl), npac(1:nbpac), ze_i_ac(1:nbpac,jk,jl), jpi, jpj ) 
     520               CALL tab_1d_2d( nbpac, e_i(:,:,jk,jl), npac(1:nbpac), ze_i_1d(1:nbpac,jk,jl), jpi, jpj ) 
    594521            END DO 
    595522         END DO 
     
    599526 
    600527         CALL tab_1d_2d( nbpac, hfx_thd, npac(1:nbpac), hfx_thd_1d(1:nbpac), jpi, jpj ) 
    601          CALL tab_1d_2d( nbpac, hfx_tot, npac(1:nbpac), hfx_tot_1d(1:nbpac), jpi, jpj ) 
     528         CALL tab_1d_2d( nbpac, hfx_opw, npac(1:nbpac), hfx_opw_1d(1:nbpac), jpi, jpj ) 
    602529         ! 
    603530      ENDIF ! nbpac > 0 
     
    612539                  ! heat content in Joules 
    613540                  e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * area(ji,jj) * v_i(ji,jj,jl) / ( REAL( nlay_i ) * unit_fac )  
    614                   !e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * area(ji,jj) * v_i(ji,jj,jl) / ( REAL( nlay_i ) )  
    615541               END DO 
    616542            END DO 
     
    618544      END DO 
    619545 
    620       !------------------------------------------------------------------------------| 
    621       ! 10) Conservation check and changes in each ice category 
    622       !------------------------------------------------------------------------------| 
    623       IF( con_i ) THEN  
    624          CALL lim_column_sum (jpl,   v_i, vt_i_final) 
    625          fieldid = 'v_i, limthd_lac' 
    626          CALL lim_cons_check (vt_i_init, vt_i_final, 1.0e-6, fieldid)  
    627          ! 
    628          CALL lim_column_sum_energy(jpl, nlay_i, e_i, et_i_final) 
    629          fieldid = 'e_i, limthd_lac' 
    630          CALL lim_cons_check (et_i_final, et_i_final, 1.0e-3, fieldid)  
    631          ! 
    632          CALL lim_column_sum (jpl,   v_s, vt_s_final) 
    633          fieldid = 'v_s, limthd_lac' 
    634          CALL lim_cons_check (vt_s_init, vt_s_final, 1.0e-6, fieldid)  
    635          ! 
    636          !     CALL lim_column_sum (jpl,   e_s(:,:,1,:) , et_s_init) 
    637          !     fieldid = 'e_s, limthd_lac' 
    638          !     CALL lim_cons_check (et_s_init, et_s_final, 1.0e-3, fieldid)  
    639          IF( ln_nicep ) THEN 
    640             DO ji = mi0(jiindx), mi1(jiindx) 
    641                DO jj = mj0(jjindx), mj1(jjindx) 
    642                   WRITE(numout,*) ' vt_i_init : ', vt_i_init (ji,jj) 
    643                   WRITE(numout,*) ' vt_i_final: ', vt_i_final(ji,jj) 
    644                   WRITE(numout,*) ' et_i_init : ', et_i_init (ji,jj) 
    645                   WRITE(numout,*) ' et_i_final: ', et_i_final(ji,jj) 
    646                END DO 
    647             END DO 
    648          ENDIF 
    649          ! 
    650       ENDIF 
    651546      ! 
    652       CALL wrk_dealloc( jpij, zcatac )   ! integer 
     547      CALL wrk_dealloc( jpij, jcat )   ! integer 
    653548      CALL wrk_dealloc( jpij, zswinew, zv_newice, za_newice, zh_newice, ze_newice, zs_newice, zo_newice ) 
    654       CALL wrk_dealloc( jpij, zdv_res, zda_res, zat_i_ac, zat_i_lev, zv_frazb, zvrel_ac ) 
    655       CALL wrk_dealloc( jpij,jpl, zv_old, za_old, za_i_ac, zv_i_ac, zoa_i_ac, zsmv_i_ac ) 
    656       CALL wrk_dealloc( jpij,jkmax,jpl, ze_i_ac ) 
    657       CALL wrk_dealloc( jpij,jkmax+1,jpl, zqm0, zthick0 ) 
    658       CALL wrk_dealloc( jpi,jpj, vt_i_init, vt_i_final, vt_s_init, vt_s_final, et_i_init, et_i_final, et_s_init, zvrel ) 
     549      CALL wrk_dealloc( jpij, zdv_res, zda_res, zat_i_1d, zat_i_lev, zv_frazb, zvrel_1d ) 
     550      CALL wrk_dealloc( jpij,jpl, zv_old, za_old, za_i_1d, zv_i_1d, zoa_i_1d, zsmv_i_1d ) 
     551      CALL wrk_dealloc( jpij,jkmax,jpl, ze_i_1d ) 
     552      CALL wrk_dealloc( jpi,jpj, zvrel ) 
    659553      ! 
    660554   END SUBROUTINE lim_thd_lac 
Note: See TracChangeset for help on using the changeset viewer.