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 13463 for NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/ICE/iceitd.F90 – NEMO

Ignore:
Timestamp:
2020-09-14T17:40:34+02:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2195:update to trunk 13461

Location:
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8 
         9# SETTE 
         10^/utils/CI/sette@13382        sette 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/ICE/iceitd.F90

    r10994 r13463  
    4848   REAL(wp), DIMENSION(0:100) ::   rn_catbnd    ! ice categories bounds 
    4949   ! 
     50   !! * Substitutions 
     51#  include "do_loop_substitute.h90" 
    5052   !!---------------------------------------------------------------------- 
    5153   !! NEMO/ICE 4.0 , NEMO Consortium (2018) 
     
    8890 
    8991      IF( ln_icediachk )   CALL ice_cons_hsm(0, 'iceitd_rem', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) 
     92      IF( ln_icediachk )   CALL ice_cons2D  (0, 'iceitd_rem',  diag_v,  diag_s,  diag_t,  diag_fv,  diag_fs,  diag_ft) 
    9093 
    9194      !----------------------------------------------------------------------------------------------- 
     
    9598      ! 
    9699      npti = 0   ;   nptidx(:) = 0 
    97       DO jj = 1, jpj 
    98          DO ji = 1, jpi 
    99             IF ( at_i(ji,jj) > epsi10 ) THEN 
    100                npti = npti + 1 
    101                nptidx( npti ) = (jj - 1) * jpi + ji 
    102             ENDIF 
    103          END DO 
    104       END DO 
     100      DO_2D( 1, 1, 1, 1 ) 
     101         IF ( at_i(ji,jj) > epsi10 ) THEN 
     102            npti = npti + 1 
     103            nptidx( npti ) = (jj - 1) * jpi + ji 
     104         ENDIF 
     105      END_2D 
    105106       
    106107      !----------------------------------------------------------------------------------------------- 
     
    147148               !    Note: hn(t+1) must not be too close to either HR or HL otherwise a division by nearly 0 is possible  
    148149               !          in itd_glinear in the case (HR-HL) = 3(Hice - HL) or = 3(HR - Hice) 
     150# if defined key_single 
     151               IF( a_i_2d(ji,jl  ) > epsi10 .AND. h_i_2d(ji,jl  ) > ( zhbnew(ji,jl) - epsi06 ) )   nptidx(ji) = 0 
     152               IF( a_i_2d(ji,jl+1) > epsi10 .AND. h_i_2d(ji,jl+1) < ( zhbnew(ji,jl) + epsi06 ) )   nptidx(ji) = 0 
     153# else 
    149154               IF( a_i_2d(ji,jl  ) > epsi10 .AND. h_i_2d(ji,jl  ) > ( zhbnew(ji,jl) - epsi10 ) )   nptidx(ji) = 0 
    150155               IF( a_i_2d(ji,jl+1) > epsi10 .AND. h_i_2d(ji,jl+1) < ( zhbnew(ji,jl) + epsi10 ) )   nptidx(ji) = 0 
     156# endif 
    151157               ! 
    152158               ! 2) Hn-1 < Hn* < Hn+1   
     
    169175            !    h1(t) must not be too close to either HR or HL otherwise a division by nearly 0 is possible  
    170176            !    in itd_glinear in the case (HR-HL) = 3(Hice - HL) or = 3(HR - Hice) 
     177# if defined key_single 
     178            IF( h_ib_2d(ji,1) < ( hi_max(0) + epsi06 ) )   nptidx(ji) = 0 
     179            IF( h_ib_2d(ji,1) > ( hi_max(1) - epsi06 ) )   nptidx(ji) = 0 
     180# else 
    171181            IF( h_ib_2d(ji,1) < ( hi_max(0) + epsi10 ) )   nptidx(ji) = 0 
    172182            IF( h_ib_2d(ji,1) > ( hi_max(1) - epsi10 ) )   nptidx(ji) = 0 
     183# endif 
    173184         END DO 
    174185         ! 
     
    210221               CALL itd_glinear( zhb0(1:npti)  , zhb1(1:npti)  , h_ib_1d(1:npti)  , a_i_1d(1:npti)  ,  &   ! in 
    211222                  &              g0  (1:npti,1), g1  (1:npti,1), hL     (1:npti,1), hR    (1:npti,1)   )   ! out 
    212                   ! 
     223               ! 
    213224               ! Area lost due to melting of thin ice 
    214225               DO ji = 1, npti 
     
    217228                     ! 
    218229                     zdh0 =  h_i_1d(ji) - h_ib_1d(ji)                 
    219                      IF( zdh0 < 0.0 ) THEN      !remove area from category 1 
     230                     IF( zdh0 < 0.0 ) THEN      ! remove area from category 1 
    220231                        zdh0 = MIN( -zdh0, hi_max(1) ) 
    221232                        !Integrate g(1) from 0 to dh0 to estimate area melted 
     
    225236                           zx1    = zetamax 
    226237                           zx2    = 0.5 * zetamax * zetamax  
    227                            zda0   = g1(ji,1) * zx2 + g0(ji,1) * zx1                        ! ice area removed 
     238                           zda0   = g1(ji,1) * zx2 + g0(ji,1) * zx1                ! ice area removed 
    228239                           zdamax = a_i_1d(ji) * (1.0 - h_i_1d(ji) / h_ib_1d(ji) ) ! Constrain new thickness <= h_i                 
    229                            zda0   = MIN( zda0, zdamax )                                                  ! ice area lost due to melting  
    230                            !     of thin ice (zdamax > 0) 
     240                           zda0   = MIN( zda0, zdamax )                            ! ice area lost due to melting of thin ice (zdamax > 0) 
    231241                           ! Remove area, conserving volume 
    232242                           h_i_1d(ji) = h_i_1d(ji) * a_i_1d(ji) / ( a_i_1d(ji) - zda0 ) 
     
    316326      ! 
    317327      IF( ln_icediachk )   CALL ice_cons_hsm(1, 'iceitd_rem', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) 
     328      IF( ln_icediachk )   CALL ice_cons2D  (1, 'iceitd_rem',  diag_v,  diag_s,  diag_t,  diag_fv,  diag_fs,  diag_ft) 
    318329      ! 
    319330   END SUBROUTINE ice_itd_rem 
     
    347358      DO ji = 1, npti 
    348359         ! 
    349          IF( paice(ji) > epsi10  .AND. phice(ji) > 0._wp )  THEN 
     360         IF( paice(ji) > epsi10  .AND. phice(ji) > epsi10 )  THEN 
    350361            ! 
    351362            ! Initialize hL and hR 
     
    537548      ! 4) Update ice thickness and temperature 
    538549      !------------------------------------------------------------------------------- 
     550# if defined key_single 
     551      WHERE( a_i_2d(1:npti,:) >= epsi06 ) 
     552# else 
    539553      WHERE( a_i_2d(1:npti,:) >= epsi20 ) 
     554# endif 
    540555         h_i_2d (1:npti,:)  =  v_i_2d(1:npti,:) / a_i_2d(1:npti,:)  
    541556         t_su_2d(1:npti,:)  =  zaTsfn(1:npti,:) / a_i_2d(1:npti,:)  
     
    586601      ! 
    587602      IF( ln_icediachk )   CALL ice_cons_hsm(0, 'iceitd_reb', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) 
     603      IF( ln_icediachk )   CALL ice_cons2D  (0, 'iceitd_reb',  diag_v,  diag_s,  diag_t,  diag_fv,  diag_fs,  diag_ft) 
    588604      ! 
    589605      jdonor(:,:) = 0 
     
    595611         !                    !--------------------------------------- 
    596612         npti = 0   ;   nptidx(:) = 0 
    597          DO jj = 1, jpj 
    598             DO ji = 1, jpi 
    599                IF( a_i(ji,jj,jl) > 0._wp .AND. v_i(ji,jj,jl) > (a_i(ji,jj,jl) * hi_max(jl)) ) THEN 
    600                   npti = npti + 1 
    601                   nptidx( npti ) = (jj - 1) * jpi + ji                   
    602                ENDIF 
    603             END DO 
    604          END DO 
     613         DO_2D( 1, 1, 1, 1 ) 
     614            IF( a_i(ji,jj,jl) > 0._wp .AND. v_i(ji,jj,jl) > (a_i(ji,jj,jl) * hi_max(jl)) ) THEN 
     615               npti = npti + 1 
     616               nptidx( npti ) = (jj - 1) * jpi + ji                   
     617            ENDIF 
     618         END_2D 
    605619         ! 
    606620!!clem   CALL tab_2d_1d( npti, nptidx(1:npti), h_i_1d(1:npti), h_i(:,:,jl) ) 
     
    636650         !                    !----------------------------------------- 
    637651         npti = 0 ; nptidx(:) = 0 
    638          DO jj = 1, jpj 
    639             DO ji = 1, jpi 
    640                IF( a_i(ji,jj,jl+1) > 0._wp .AND. v_i(ji,jj,jl+1) <= (a_i(ji,jj,jl+1) * hi_max(jl)) ) THEN 
    641                   npti = npti + 1 
    642                   nptidx( npti ) = (jj - 1) * jpi + ji                   
    643                ENDIF 
    644             END DO 
    645          END DO 
     652         DO_2D( 1, 1, 1, 1 ) 
     653            IF( a_i(ji,jj,jl+1) > 0._wp .AND. v_i(ji,jj,jl+1) <= (a_i(ji,jj,jl+1) * hi_max(jl)) ) THEN 
     654               npti = npti + 1 
     655               nptidx( npti ) = (jj - 1) * jpi + ji                   
     656            ENDIF 
     657         END_2D 
    646658         ! 
    647659         CALL tab_2d_1d( npti, nptidx(1:npti), a_i_1d(1:npti), a_i(:,:,jl+1) ) ! jl+1 is ok 
     
    664676      ! 
    665677      IF( ln_icediachk )   CALL ice_cons_hsm(1, 'iceitd_reb', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) 
     678      IF( ln_icediachk )   CALL ice_cons2D  (1, 'iceitd_reb',  diag_v,  diag_s,  diag_t,  diag_fv,  diag_fs,  diag_ft) 
    666679      ! 
    667680   END SUBROUTINE ice_itd_reb 
     
    683696      !!------------------------------------------------------------------ 
    684697      ! 
    685       REWIND( numnam_ice_ref )      ! Namelist namitd in reference namelist : Parameters for ice 
    686698      READ  ( numnam_ice_ref, namitd, IOSTAT = ios, ERR = 901) 
    687 901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namitd in reference namelist', lwp ) 
    688       REWIND( numnam_ice_cfg )      ! Namelist namitd in configuration namelist : Parameters for ice 
     699901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namitd in reference namelist' ) 
    689700      READ  ( numnam_ice_cfg, namitd, IOSTAT = ios, ERR = 902 ) 
    690 902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namitd in configuration namelist', lwp ) 
     701902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namitd in configuration namelist' ) 
    691702      IF(lwm) WRITE( numoni, namitd ) 
    692703      ! 
Note: See TracChangeset for help on using the changeset viewer.